From 2faa1510c68e8c5fca70d1dccb6aa8510396842b Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 3 Dec 2009 17:47:04 -0500
Subject: [PATCH 001/160] [#2518] Move codecs widget in from general panel to
 account configuration panel

---
 .../src/config/accountconfigdialog.c          |  7 ++-
 sflphone-client-gnome/src/config/audioconf.c  | 51 ++++++++-----------
 sflphone-client-gnome/src/config/audioconf.h  |  3 +-
 .../src/config/preferencesdialog.c            |  2 +-
 4 files changed, 30 insertions(+), 33 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 84e2150b94..4fedeb37f1 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -1011,7 +1011,7 @@ show_account_window (account_t * a)
 {
 
 	GtkWidget * notebook;
-	GtkWidget * tab; 
+	GtkWidget *tab, *codecs_tab; 
 	gint response;
 	account_t *currentAccount;
 
@@ -1046,6 +1046,11 @@ show_account_window (account_t * a)
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Basic")));
 	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
 
+	/* Codecs */
+	codecs_tab = create_codecs_configuration ();
+	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), codecs_tab, gtk_label_new(_("Codecs")));
+	gtk_notebook_page_num (GTK_NOTEBOOK (notebook), codecs_tab);
+
 	/* Advanced */
 	advanced_tab = create_advanced_tab(&currentAccount);
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advanced_tab, gtk_label_new(_("Advanced")));
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index 308131207f..e01eb4a5f6 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -773,11 +773,8 @@ static void record_path_changed( GtkFileChooser *chooser , GtkLabel *label UNUSE
     DEBUG("record_path_changed");
 
     gchar* path;
-    // path = gtk_file_chooser_get_uri( GTK_FILE_CHOOSER( chooser ));
-    // DEBUG("path1 %s", path);
     path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( chooser ));
     DEBUG("path2 %s", path);
-    // path = g_strndup (path + 6, strlen(path) - 6);
     dbus_set_record_path( path );
 }
 
@@ -785,8 +782,6 @@ GtkWidget* create_audio_configuration()
 {
     // Main widget
     GtkWidget *ret;
-    // Main frames
-    GtkWidget *codecs_conf;
     // Sub boxes
     GtkWidget *box;
     GtkWidget *frame;
@@ -818,41 +813,16 @@ GtkWidget* create_audio_configuration()
     // Box for the ALSA configuration
     gnome_main_section_new (_("ALSA settings"), &alsa_conf);
     gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
-    // gtk_widget_hide( GTK_CONTAINER(alsa_conf) );
     gtk_widget_show( alsa_conf );
     if( SHOW_ALSA_CONF )
     {
         // Box for the ALSA configuration
-        // alsa_conf = gtk_frame_new(_("ALSA configuration"));
-        // gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
         printf("ALSA Created \n");
         alsabox = alsa_box();
         gtk_container_add( GTK_CONTAINER(alsa_conf) , alsabox );
         gtk_widget_hide( alsa_conf );
     }
     
-
-    // Box for the codecs
-    gnome_main_section_new (_("Codecs"), &codecs_conf);
-    gtk_box_pack_start(GTK_BOX(ret), codecs_conf, FALSE, FALSE, 0);
-    gtk_widget_set_size_request(GTK_WIDGET(codecs_conf), -1, 200);
-    gtk_widget_show( codecs_conf );
-    box = codecs_box();
-    gtk_container_add( GTK_CONTAINER(codecs_conf) , box );
-
-    // Box for noise reduction
-    // removed until the functions are implemented
-    
-    /*
-    noise_conf = gtk_frame_new(_("Audio Processing"));
-    gnome_main_section_new (_("Noise reduction"), &noise_conf);
-    gtk_box_pack_start(GTK_BOX(ret), noise_conf, FALSE, FALSE, 0);
-    gtk_widget_show( noise_conf );
-    box = noise_box();
-    gtk_container_add( GTK_CONTAINER(noise_conf) , box );
-    gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE);
-    */
-
     // Recorded file saving path
     GtkWidget *label;
     GtkWidget *folderChooser;
@@ -912,3 +882,24 @@ GtkWidget* create_audio_configuration()
 
     return ret;
 }
+
+GtkWidget* create_codecs_configuration() {
+
+    // Main widget
+    GtkWidget *ret, *codecs, *box, *frame;
+
+    ret = gtk_vbox_new(FALSE, 10);
+    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+    // Box for the codecs
+    gnome_main_section_new (_("Codecs"), &codecs);
+    gtk_box_pack_start (GTK_BOX(ret), codecs, FALSE, FALSE, 0);
+    gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
+    gtk_widget_show (codecs);
+    box = codecs_box ();
+    gtk_container_add (GTK_CONTAINER (codecs) , box);
+
+    gtk_widget_show_all(ret);
+
+    return ret;
+}
diff --git a/sflphone-client-gnome/src/config/audioconf.h b/sflphone-client-gnome/src/config/audioconf.h
index 26e28aa771..05a264ae61 100644
--- a/sflphone-client-gnome/src/config/audioconf.h
+++ b/sflphone-client-gnome/src/config/audioconf.h
@@ -22,7 +22,8 @@
 
 #include <actions.h>
 
-GtkWidget* create_audio_configuration();
+GtkWidget* create_audio_configuration (void);
+GtkWidget* create_codecs_configuration (void);
 
 GtkWidget* api_box();
 GtkWidget* alsa_box();
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index 93c1982f7d..0be77de11e 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -566,7 +566,7 @@ show_preferences_dialog ()
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Address Book")));
 	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
 
-	// HookS 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);
-- 
GitLab


From 9f59b15a0463b99f914a8578e1b4c2a7d2d21e61 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Fri, 4 Dec 2009 10:53:40 -0500
Subject: [PATCH 002/160] [#2518] Move getCodecDetail in CodecDescriptor

---
 .../src/audio/codecs/codecDescriptor.cpp      | 29 +++++++
 .../src/audio/codecs/codecDescriptor.h        |  8 ++
 .../src/dbus/configurationmanager.cpp         |  9 +-
 sflphone-common/src/managerimpl.cpp           | 82 +++++++------------
 sflphone-common/src/managerimpl.h             |  8 --
 sflphone-common/src/sip/sipvoiplink.h         |  2 +-
 6 files changed, 73 insertions(+), 65 deletions(-)

diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.cpp b/sflphone-common/src/audio/codecs/codecDescriptor.cpp
index 87a3c8c3d3..7dfe1238a3 100644
--- a/sflphone-common/src/audio/codecs/codecDescriptor.cpp
+++ b/sflphone-common/src/audio/codecs/codecDescriptor.cpp
@@ -397,6 +397,35 @@ CodecDescriptor::isCodecLoaded (int payload)
     return false;
 }
 
+std::vector <std::string> CodecDescriptor::getCodecSpecifications (const int32_t& payload) {
+
+	_warn ("Gathering codec specifications for payload %i", payload);
+
+	std::vector<std::string> v;
+    std::stringstream ss;
+
+	// Add the name of the codec
+    v.push_back (getCodecName ( (AudioCodecType) payload));
+
+	// Add the sample rate
+    ss << getSampleRate ( (AudioCodecType) payload);
+    v.push_back ( (ss.str()).data());
+    ss.str ("");
+
+	// Add the bit rate
+    ss << getBitRate ( (AudioCodecType) payload);
+    v.push_back ( (ss.str()).data());
+    ss.str ("");
+
+	// Add the bandwidth information
+    ss << getBandwidthPerCall ( (AudioCodecType) payload);
+    v.push_back ( (ss.str()).data());
+    ss.str ("");
+
+	return v;
+
+}
+
 
 
 
diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.h b/sflphone-common/src/audio/codecs/codecDescriptor.h
index 9ca8773a4c..44cab586c5 100644
--- a/sflphone-common/src/audio/codecs/codecDescriptor.h
+++ b/sflphone-common/src/audio/codecs/codecDescriptor.h
@@ -199,6 +199,14 @@ class CodecDescriptor {
      */
     AudioCodec* instantiateCodec(AudioCodecType payload);
 
+	/**
+	 * For a given codec, return its specification
+	 *
+	 * @param payload	The RTP payload of the codec
+	 * @return std::vector <std::string>	A vector containing codec's name, sample rate, bandwidth and bit rate
+	 */
+	std::vector <std::string> getCodecSpecifications (const int32_t& payload);
+
   private:
 
     /**
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index e381e6d13d..a443e5c8a9 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -409,11 +409,10 @@ ConfigurationManager::getSupportedTlsMethod (void)
     return method;
 }
 
-std::vector< std::string >
-ConfigurationManager::getCodecDetails (const int32_t& payload)
-{
-    _debug ("ConfigurationManager::getCodecDetails received");
-    return Manager::instance().getCodecDetails (payload);
+std::vector<std::string> ConfigurationManager::getCodecDetails (const int32_t& payload) {
+
+    _warn ("ConfigurationManager::getCodecDetails received");
+    return Manager::instance().getCodecDescriptorMap().getCodecSpecifications (payload);
 }
 
 std::vector< std::string >
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 7e960cb76d..dc8caaa61b 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2376,11 +2376,14 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
 void
 ManagerImpl::initAudioCodec (void)
 {
-    _debugInit ("Active Codecs List");
-    // init list of all supported codecs
-    _codecDescriptorMap.init();
-    // if the user never set the codec list, use the default configuration
+    _warn ("Init audio codecs");
+
+    /* Init list of all supported codecs by the application. 
+	 * This is a global list. Every account will inherit it.
+     */
+	_codecDescriptorMap.init();
 
+    // if the user never set the codec list, use the default configuration
     if (getConfigString (AUDIO, "ActiveCodecs") == "") {
         _codecDescriptorMap.setDefaultOrder();
     }
@@ -2392,28 +2395,30 @@ ManagerImpl::initAudioCodec (void)
     }
 }
 
+/*
+ * TODO Set the active codecs list per account
+ */
+void ManagerImpl::setActiveCodecList (const std::vector<  std::string >& list) {
 
-void
-ManagerImpl::setActiveCodecList (const std::vector<  std::string >& list)
-{
-    _debug ("Set active codecs list");
+    _warn ("Set active codecs list");
     _codecDescriptorMap.saveActiveCodecs (list);
     // setConfig
     std::string s = serialize (list);
-    _debug ("Setting codec with payload number %s to the active list", s.c_str());
+    _warn ("Setting codec with payload number %s to the active list", s.c_str());
     setConfig ("Audio", "ActiveCodecs", s);
 }
 
-std::vector<std::string>
-ManagerImpl::retrieveActiveCodecs()
-{
+/*
+ * TODO Retrieve the active codec list per account
+ */
+std::vector<std::string> ManagerImpl::retrieveActiveCodecs() {
+
+	// This property is now set per account basis
     std::string s = getConfigString (AUDIO, "ActiveCodecs");
     return unserialize (s);
 }
 
-std::vector<std::string>
-ManagerImpl::unserialize (std::string s)
-{
+std::vector<std::string> ManagerImpl::unserialize (std::string s) {
 
     std::vector<std::string> list;
     std::string  temp;
@@ -2428,9 +2433,8 @@ ManagerImpl::unserialize (std::string s)
     return list;
 }
 
-std::string
-ManagerImpl::serialize (std::vector<std::string> v)
-{
+std::string ManagerImpl::serialize (std::vector<std::string> v) {
+
     unsigned int i;
     std::string res;
 
@@ -2442,10 +2446,9 @@ ManagerImpl::serialize (std::vector<std::string> v)
 }
 
 
-std::vector <std::string>
-ManagerImpl::getActiveCodecList (void)
-{
-    _debug ("ManagerImpl::getActiveCodecList");
+std::vector <std::string> ManagerImpl::getActiveCodecList (void) {
+
+    _warn ("ManagerImpl::getActiveCodecList");
     std::vector< std::string > v;
     CodecOrder active = _codecDescriptorMap.getActiveCodecs();
     unsigned int i=0;
@@ -2455,7 +2458,7 @@ ManagerImpl::getActiveCodecList (void)
         std::stringstream ss;
         ss << active[i];
         v.push_back ( (ss.str()).data());
-        _debug ("Codec with payload number %s is active", ss.str().data());
+        _warn ("Codec with payload number %s is active", ss.str().data());
         i++;
     }
 
@@ -2465,12 +2468,12 @@ ManagerImpl::getActiveCodecList (void)
 
 /**
  * Send the list of codecs to the client through DBus.
+ * TODO Add the account ID as parameter
  */
-std::vector< std::string >
-ManagerImpl::getCodecList (void)
-{
+std::vector< std::string > ManagerImpl::getCodecList (void) {
+
     std::vector<std::string> list;
-    //CodecMap codecs = _codecDescriptorMap.getCodecMap();
+
     CodecsMap codecs = _codecDescriptorMap.getCodecsMap();
     CodecOrder order = _codecDescriptorMap.getActiveCodecs();
     CodecsMap::iterator iter = codecs.begin();
@@ -2489,30 +2492,7 @@ ManagerImpl::getCodecList (void)
     return list;
 }
 
-std::vector<std::string>
-ManagerImpl::getCodecDetails (const int32_t& payload)
-{
-
-    std::vector<std::string> v;
-    std::stringstream ss;
-
-    v.push_back (_codecDescriptorMap.getCodecName ( (AudioCodecType) payload));
-    ss << _codecDescriptorMap.getSampleRate ( (AudioCodecType) payload);
-    v.push_back ( (ss.str()).data());
-    ss.str ("");
-    ss << _codecDescriptorMap.getBitRate ( (AudioCodecType) payload);
-    v.push_back ( (ss.str()).data());
-    ss.str ("");
-    ss << _codecDescriptorMap.getBandwidthPerCall ( (AudioCodecType) payload);
-    v.push_back ( (ss.str()).data());
-    ss.str ("");
-
-    return v;
-}
-
-std::string
-ManagerImpl::getCurrentCodecName (const CallID& id)
-{
+std::string ManagerImpl::getCurrentCodecName (const CallID& id) {
 
     AccountID accountid = getAccountFromCall (id);
     VoIPLink* link = getAccountLink (accountid);
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index f173539d25..f243e874ee 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -501,14 +501,6 @@ class ManagerImpl {
      */
     std::vector< ::std::string > getCodecList( void );
 
-    /**
-     * Get the info about one codec
-     * Name / Clock rate / bitrate / bandwidth
-     * @param payload The payload of the codec
-     * @return std::vector<::DBus::string> The information
-     */
-    std::vector< ::std::string > getCodecDetails( const int32_t& payload);
-
     /**
      * Get current codec name
      * @param call id
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 69d79d8b7c..56e4ef7d9d 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -43,7 +43,7 @@ class SIPCall;
 #define RANDOM_SIP_PORT   rand() % 64000 + 1024
 
 // To set the verbosity. From 0 (min) to 6 (max)
-#define PJ_LOG_LEVEL 6
+#define PJ_LOG_LEVEL 0
 
 /**
  * @file sipvoiplink.h
-- 
GitLab


From 6c249c0f0426d02f337a4475c126c6241ed3f856 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Fri, 4 Dec 2009 11:04:26 -0500
Subject: [PATCH 003/160] [#2553] returns the audio plugins direcly from
 configurationmanager.cpp

---
 .../src/dbus/configurationmanager.cpp         | 27 ++++++++++------
 sflphone-common/src/managerimpl.cpp           | 31 -------------------
 sflphone-common/src/managerimpl.h             | 12 -------
 3 files changed, 17 insertions(+), 53 deletions(-)

diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index a443e5c8a9..5731be8ab4 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -430,18 +430,25 @@ ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list
 }
 
 // Audio devices related methods
-std::vector< std::string >
-ConfigurationManager::getInputAudioPluginList()
-{
-    _debug ("ConfigurationManager::getInputAudioPluginList received");
-    return Manager::instance().getInputAudioPluginList();
+std::vector<std::string> ConfigurationManager::getInputAudioPluginList() {
+
+	std::vector<std::string> v;
+
+    v.push_back ("default");
+    v.push_back ("surround40");
+    v.push_back ("plug:hw");
+
+    return v;
 }
 
-std::vector< std::string >
-ConfigurationManager::getOutputAudioPluginList()
-{
-    _debug ("ConfigurationManager::getOutputAudioPluginList received");
-    return Manager::instance().getOutputAudioPluginList();
+std::vector<std::string> ConfigurationManager::getOutputAudioPluginList() {
+
+    std::vector<std::string> v;
+
+    v.push_back (PCM_DEFAULT);
+    v.push_back (PCM_DMIX);
+
+    return v;
 }
 
 void
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index dc8caaa61b..d58d570076 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2507,37 +2507,6 @@ std::string ManagerImpl::getCurrentCodecName (const CallID& id) {
         return link->getCurrentCodecName();
 }
 
-/**
- * Get list of supported input audio plugin
- */
-std::vector<std::string>
-ManagerImpl::getInputAudioPluginList (void)
-{
-    std::vector<std::string> v;
-    _debug ("Get input audio plugin list");
-
-    v.push_back ("default");
-    v.push_back ("surround40");
-    v.push_back ("plug:hw");
-
-    return v;
-}
-
-/**
- * Get list of supported output audio plugin
- */
-std::vector<std::string>
-ManagerImpl::getOutputAudioPluginList (void)
-{
-    std::vector<std::string> v;
-    _debug ("Get output audio plugin list");
-
-    v.push_back (PCM_DEFAULT);
-    v.push_back (PCM_DMIX);
-
-    return v;
-}
-
 /**
  * Set input audio plugin
  */
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index f243e874ee..a60270e628 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -508,18 +508,6 @@ class ManagerImpl {
      */
     std::string getCurrentCodecName(const CallID& id);
 
-    /**
-     * Get a list of supported input audio plugin
-     * @return std::vector<std::string> List of names
-     */
-    std::vector< std::string> getInputAudioPluginList(void);
-
-    /**
-     * Get a list of supported output audio plugin
-     * @return std::vector<std::string> List of names
-     */
-    std::vector< std::string> getOutputAudioPluginList(void);
-
     /**
      * Set input audio plugin
      * @param audioPlugin The audio plugin
-- 
GitLab


From 6c87e4c4f60fe1b099a93decceafc4b33c828e68 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Fri, 4 Dec 2009 12:23:17 -0500
Subject: [PATCH 004/160] [#2548] Fix compilation error when _error log level

---
 sflphone-common/src/logger.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/src/logger.h b/sflphone-common/src/logger.h
index b8a3b77b4c..ec199b21d5 100644
--- a/sflphone-common/src/logger.h
+++ b/sflphone-common/src/logger.h
@@ -30,7 +30,7 @@ namespace Logger
 	void setDebugMode(bool);
 };
 
-#define _error(...)	Logger::log(LOG_ERROR, __VA_ARGS__)
+#define _error(...)	Logger::log(LOG_ERR, __VA_ARGS__)
 #define _warn(...)	Logger::log(LOG_WARNING, __VA_ARGS__)
 #define _info(...)	Logger::log(LOG_INFO, __VA_ARGS__)
 #define _debug(...)	Logger::log(LOG_DEBUG, __VA_ARGS__)
-- 
GitLab


From 3110a96039faa3cb2f9233652a6296601855ea2b Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Mon, 7 Dec 2009 10:41:56 -0500
Subject: [PATCH 005/160] [#2518] Almost there ...

---
 sflphone-client-gnome/src/accountlist.c       | 416 +++++++++---------
 sflphone-client-gnome/src/accountlist.h       |   2 +
 sflphone-client-gnome/src/actions.c           | 132 +++---
 sflphone-client-gnome/src/actions.h           |   4 +-
 sflphone-client-gnome/src/codeclist.c         | 187 ++++----
 sflphone-client-gnome/src/codeclist.h         |  35 +-
 .../src/config/accountconfigdialog.c          |   2 +-
 sflphone-client-gnome/src/config/audioconf.c  |  87 ++--
 sflphone-client-gnome/src/config/audioconf.h  |   2 +-
 .../dbus/configurationmanager-introspec.xml   |   1 +
 sflphone-client-gnome/src/dbus/dbus.c         |   7 +-
 sflphone-client-gnome/src/dbus/dbus.h         |   2 +-
 sflphone-common/src/account.cpp               |  49 ++-
 sflphone-common/src/account.h                 |  15 +
 .../src/audio/codecs/codecDescriptor.cpp      | 102 ++---
 .../src/audio/codecs/codecDescriptor.h        |  86 +---
 .../dbus/configurationmanager-introspec.xml   |   1 +
 .../src/dbus/configurationmanager.cpp         |  58 ++-
 .../src/dbus/configurationmanager.h           |   2 +-
 sflphone-common/src/global.h                  |  29 ++
 sflphone-common/src/iax/iaxcall.cpp           | 228 +++++-----
 sflphone-common/src/iax/iaxcall.h             |   2 +-
 sflphone-common/src/iax/iaxvoiplink.cpp       |  10 +-
 sflphone-common/src/managerimpl.cpp           |  69 +--
 sflphone-common/src/managerimpl.h             |   6 -
 sflphone-common/src/sip/sdp.cpp               |  96 ++--
 sflphone-common/src/sip/sdp.h                 |   8 +-
 sflphone-common/src/sip/sipvoiplink.cpp       |  17 +-
 28 files changed, 817 insertions(+), 838 deletions(-)

diff --git a/sflphone-client-gnome/src/accountlist.c b/sflphone-client-gnome/src/accountlist.c
index 6a7e9d7a16..3f5dbe4c05 100644
--- a/sflphone-client-gnome/src/accountlist.c
+++ b/sflphone-client-gnome/src/accountlist.c
@@ -25,87 +25,84 @@
 GQueue * accountQueue;
 
 /* GCompareFunc to compare a accountID (gchar* and a account_t) */
-gint
-is_accountID_struct ( gconstpointer a, gconstpointer b)
-{
-  account_t * c = (account_t*)a;
-  if(strcmp(c->accountID, (gchar*) b) == 0)
-  {
-    return 0;
-  }
-  else
-  {
-    return 1;
-  }
+gint is_accountID_struct ( gconstpointer a, gconstpointer b) {
+
+	account_t * c = (account_t*)a;
+	if(strcmp(c->accountID, (gchar*) b) == 0)
+	{
+		return 0;
+	}
+	else
+	{
+		return 1;
+	}
 }
 
 /* GCompareFunc to get current call (gchar* and a account_t) */
-gint
-get_state_struct ( gconstpointer a, gconstpointer b)
-{
-  account_t * c = (account_t*)a;
-  if( c->state == *((account_state_t*)b))
-  {
-    return 0;
-  }
-  else
-  {
-    return 1;
-  }
+gint get_state_struct ( gconstpointer a, gconstpointer b) {
+
+	account_t * c = (account_t*)a;
+	if( c->state == *((account_state_t*)b))
+	{
+		return 0;
+	}
+	else
+	{
+		return 1;
+	}
 }
 
-void
-account_list_init ()
-{
-  accountQueue = g_queue_new ();
+void account_list_init () {
+
+	accountQueue = g_queue_new ();
 }
 
-void
+	void
 account_list_clean ()
 {
-  g_queue_free (accountQueue);
+	g_queue_free (accountQueue);
 }
 
-void
+	void
 account_list_add (account_t * c)
 {
-  g_queue_push_tail (accountQueue, (gpointer *) c);
+	g_queue_push_tail (accountQueue, (gpointer *) c);
 }
 
-void
+	void
 account_list_add_at_nth (account_t * c, guint pos)
 {
-  g_queue_push_nth (accountQueue, (gpointer *) c, pos);
+	g_queue_push_nth (accountQueue, (gpointer *) c, pos);
 }
 
 
-void
+	void
 account_list_remove (const gchar * accountID)
 {
-  GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
-  if (c)
-  {
-    g_queue_remove(accountQueue, c->data);
-  }
+	GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
+	if (c)
+	{
+		g_queue_remove(accountQueue, c->data);
+	}
 }
 
 
-account_t *
+	account_t *
 account_list_get_by_state (account_state_t state )
 {
-  GList * c = g_queue_find_custom (accountQueue, &state, get_state_struct);
-  if (c)
-  {
-    return (account_t *)c->data;
-  }
-  else
-  {
-    return NULL;
-  }
+	GList * c = g_queue_find_custom (accountQueue, &state, get_state_struct);
+	if (c)
+	{
+		return (account_t *)c->data;
+	}
+	else
+	{
+		return NULL;
+	}
 
 }
 
-account_t *
+	account_t *
 account_list_get_by_id(gchar * accountID)
 {
 	GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
@@ -119,103 +116,101 @@ account_list_get_by_id(gchar * accountID)
 	}
 }
 
-guint
-account_list_get_size ( )
-{
-  return g_queue_get_length (accountQueue);
+guint account_list_get_size (void) {
+	
+	return g_queue_get_length (accountQueue);
 }
 
-account_t *
-account_list_get_nth ( guint n )
-{
-  return g_queue_peek_nth (accountQueue, n);
+account_t * account_list_get_nth (guint n) {
+
+	return g_queue_peek_nth (accountQueue, n);
 }
 
-account_t*
+	account_t*
 account_list_get_current( )
 {
-    account_t *current;
-    
-    // No account registered
-    if (account_list_get_registered_accounts () == 0)
-        return NULL;
-
-    // if we are here, it means that we have at least one registered account in the list
-    // So we get the first one
-    current = account_list_get_by_state (ACCOUNT_STATE_REGISTERED);
-    if (!current)
-        return NULL;
-
-    return current;
+	account_t *current;
+
+	// No account registered
+	if (account_list_get_registered_accounts () == 0)
+		return NULL;
+
+	// if we are here, it means that we have at least one registered account in the list
+	// So we get the first one
+	current = account_list_get_by_state (ACCOUNT_STATE_REGISTERED);
+	if (!current)
+		return NULL;
+
+	return current;
 }
 
 void account_list_set_current (account_t *current)
 {
-    gpointer acc;
-    guint pos;
-
-    // 2 steps:
-    // 1 - retrieve the index of the current account in the Queue
-    // 2 - then set it as first
-    pos = account_list_get_position (current);
-    if (pos > 0)
-    {
+	gpointer acc;
+	guint pos;
+
+	// 2 steps:
+	// 1 - retrieve the index of the current account in the Queue
+	// 2 - then set it as first
+	pos = account_list_get_position (current);
+	if (pos > 0)
+	{
 		acc = g_queue_pop_nth(accountQueue, pos);
 		g_queue_push_nth(accountQueue, acc, 0);
-    }
+	}
 }
 
 
 const gchar * account_state_name(account_state_t s)
 {
-  gchar * state;
-  switch(s)
-  {
-  case ACCOUNT_STATE_REGISTERED:
-    state = _("Registered");
-    break;
-  case ACCOUNT_STATE_UNREGISTERED:
-    state = _("Not Registered");
-    break;
-  case ACCOUNT_STATE_TRYING:
-    state = _("Trying...");
-    break;
-  case ACCOUNT_STATE_ERROR:
-    state = _("Error");
-    break;
-  case ACCOUNT_STATE_ERROR_AUTH:
-    state = _("Authentication Failed");
-    break;
-  case ACCOUNT_STATE_ERROR_NETWORK:
-    state = _("Network unreachable");
-    break;
-  case ACCOUNT_STATE_ERROR_HOST:
-    state = _("Host unreachable");
-    break;
-  case ACCOUNT_STATE_ERROR_CONF_STUN:
-    state = _("Stun configuration error");
-    break;
-  case ACCOUNT_STATE_ERROR_EXIST_STUN:
-    state = _("Stun server invalid");
-    break;
-  default:
-    state = _("Invalid");
-    break;
-  }
-  return state;
+	gchar * state;
+	switch(s)
+	{
+		case ACCOUNT_STATE_REGISTERED:
+			state = _("Registered");
+			break;
+		case ACCOUNT_STATE_UNREGISTERED:
+			state = _("Not Registered");
+			break;
+		case ACCOUNT_STATE_TRYING:
+			state = _("Trying...");
+			break;
+		case ACCOUNT_STATE_ERROR:
+			state = _("Error");
+			break;
+		case ACCOUNT_STATE_ERROR_AUTH:
+			state = _("Authentication Failed");
+			break;
+		case ACCOUNT_STATE_ERROR_NETWORK:
+			state = _("Network unreachable");
+			break;
+		case ACCOUNT_STATE_ERROR_HOST:
+			state = _("Host unreachable");
+			break;
+		case ACCOUNT_STATE_ERROR_CONF_STUN:
+			state = _("Stun configuration error");
+			break;
+		case ACCOUNT_STATE_ERROR_EXIST_STUN:
+			state = _("Stun server invalid");
+			break;
+		default:
+			state = _("Invalid");
+			break;
+	}
+	return state;
 }
 
-void
+	void
 account_list_clear ( )
 {
-  g_queue_free (accountQueue);
-  accountQueue = g_queue_new ();
+	g_queue_free (accountQueue);
+	accountQueue = g_queue_new ();
 }
 
-void
+	void
 account_list_move_up(guint index)
 {
-    DEBUG ("index  = %i\n", index);
+	DEBUG ("index  = %i\n", index);
 
 	if(index != 0)
 	{
@@ -224,7 +219,7 @@ account_list_move_up(guint index)
 	}
 }
 
-void
+	void
 account_list_move_down(guint index)
 {
 	if(index != accountQueue->length)
@@ -234,135 +229,135 @@ account_list_move_down(guint index)
 	}
 }
 
-guint
+	guint
 account_list_get_registered_accounts( void )
 {
-  guint res = 0;
-  unsigned int i;
-  for(i=0;i<account_list_get_size();i++)
-  {
-    if( account_list_get_nth( i ) -> state == ( ACCOUNT_STATE_REGISTERED ))
-      res ++;
-  }
-  DEBUG(" %d registered accounts" , res );
-  return res;
+	guint res = 0;
+	unsigned int i;
+	for(i=0;i<account_list_get_size();i++)
+	{
+		if( account_list_get_nth( i ) -> state == ( ACCOUNT_STATE_REGISTERED ))
+			res ++;
+	}
+	DEBUG(" %d registered accounts" , res );
+	return res;
 }
 
 gchar* account_list_get_current_id( void ){
 
-    account_t *current;
+	account_t *current;
 
-    current = account_list_get_current ();
-    if (current)
-        return current->accountID;
-    else
-        return "";
+	current = account_list_get_current ();
+	if (current)
+		return current->accountID;
+	else
+		return "";
 }
 
 int account_list_get_sip_account_number( void ){
 
-    int n;
-    guint size, i;
-    account_t *current;
+	int n;
+	guint size, i;
+	account_t *current;
 
-    size = account_list_get_size();
-    n = 0;
-    for( i=0; i<size ;i++ ){
-        current = account_list_get_nth( i );
-        if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "SIP" ) == 0 )
-            n++;
-    }
+	size = account_list_get_size();
+	n = 0;
+	for( i=0; i<size ;i++ ){
+		current = account_list_get_nth( i );
+		if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "SIP" ) == 0 )
+			n++;
+	}
 
-    return n;
+	return n;
 }
 
 int account_list_get_iax_account_number( void ){
 
-    int n;
-    guint size, i;
-    account_t *current;
+	int n;
+	guint size, i;
+	account_t *current;
 
-    size = account_list_get_size();
-    n = 0;
-    for( i=0; i<size ;i++ ){
-        current = account_list_get_nth( i );
-        if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "IAX" ) == 0 )
-            n++;
-    }
+	size = account_list_get_size();
+	n = 0;
+	for( i=0; i<size ;i++ ){
+		current = account_list_get_nth( i );
+		if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "IAX" ) == 0 )
+			n++;
+	}
 
-    return n;
+	return n;
 }
 
 gchar * account_list_get_ordered_list (void) {
 
-    gchar *order="";
-    guint i;
-
-    for( i=0; i < account_list_get_size(); i++ )
-    {
-        account_t * account = NULL;
-        account = account_list_get_nth(i);    
-        if (account != NULL) {
-            order = g_strconcat (order, account->accountID, "/", NULL);
-        }
-    }
-    return order;
+	gchar *order="";
+	guint i;
+
+	for( i=0; i < account_list_get_size(); i++ )
+	{
+		account_t * account = NULL;
+		account = account_list_get_nth(i);    
+		if (account != NULL) {
+			order = g_strconcat (order, account->accountID, "/", NULL);
+		}
+	}
+	return order;
 }
 
 
 guint account_list_get_position (account_t *account) 
 {
-    guint size, i;
-    account_t *tmp;
-
-    size = account_list_get_size ();
-    for (i=0; i<size; i++)
-    {
-        tmp = account_list_get_nth (i);
-        if (g_strcasecmp (tmp->accountID, account->accountID) == 0)
-        {
-            return i;
-        }
-    }
-    // Not found
-    return -1;
+	guint size, i;
+	account_t *tmp;
+
+	size = account_list_get_size ();
+	for (i=0; i<size; i++)
+	{
+		tmp = account_list_get_nth (i);
+		if (g_strcasecmp (tmp->accountID, account->accountID) == 0)
+		{
+			return i;
+		}
+	}
+	// Not found
+	return -1;
 }
 
 gboolean current_account_has_mailbox (void)
 {
 
-    account_t *current;
+	account_t *current;
 
-    // Check if the current account has a voicemail number configured
+	// Check if the current account has a voicemail number configured
+
+	current = account_list_get_current ();
+	if (current)
+	{
+		if (g_strcasecmp (g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX), "") != 0)
+			return TRUE;
+	}
 
-    current = account_list_get_current ();
-    if (current)
-    {
-        if (g_strcasecmp (g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX), "") != 0)
-            return TRUE;
-    }
-    
-    return FALSE;
+	return FALSE;
 }
 
 void current_account_set_message_number (guint nb)
 {
-    account_t *current;
-    
+	account_t *current;
+
 	current = account_list_get_current ();
-    if (current)
-    {
+	if (current)
+	{
 		current->_messages_number = nb;
 	}
 }
 
 guint current_account_get_message_number (void)
 {
-    account_t *current;
-    
+	account_t *current;
+
 	current = account_list_get_current ();
-    if (current)
-    {
+	if (current)
+	{
 		return current->_messages_number;
 	}
 	else
@@ -371,12 +366,13 @@ guint current_account_get_message_number (void)
 
 gboolean current_account_has_new_message (void)
 {
-    account_t *current;
-    
+	account_t *current;
+
 	current = account_list_get_current ();
-    if (current)
-    {
+	if (current)
+	{
 		return (current->_messages_number > 0);
 	}
 	return FALSE;
 }
+
diff --git a/sflphone-client-gnome/src/accountlist.h b/sflphone-client-gnome/src/accountlist.h
index 9823a9a387..1d7cff710a 100644
--- a/sflphone-client-gnome/src/accountlist.h
+++ b/sflphone-client-gnome/src/accountlist.h
@@ -71,6 +71,8 @@ typedef struct  {
   	GHashTable * properties;
   	GPtrArray * credential_information;
 
+	/* The codec list */
+	GQueue *codecs;
   	guint _messages_number;
 } account_t;
 
diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index 28db999a2d..d8e543b5bc 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -172,9 +172,7 @@ static hashtable_free(gpointer key, gpointer value, gpointer user_data)
 }
 
 /** Internal to actions: Fill account list */
-    void
-sflphone_fill_account_list(gboolean toolbarInitialized)
-{
+void sflphone_fill_account_list (void) {
 
     gchar** array;
     gchar** accountID;
@@ -183,7 +181,7 @@ sflphone_fill_account_list(gboolean toolbarInitialized)
 
 	count = current_account_get_message_number ();
 
-    account_list_clear ( );
+    account_list_clear ();
 
     array = (gchar **)dbus_account_list();
     if(array)
@@ -193,6 +191,7 @@ sflphone_fill_account_list(gboolean toolbarInitialized)
             account_t * a = g_new0(account_t,1);
             a->accountID = g_strdup(*accountID);
             a->credential_information = NULL;
+			// TODO Clean codec list QUEUE
             account_list_add(a);
         }
         g_strfreev (array);
@@ -211,7 +210,6 @@ sflphone_fill_account_list(gboolean toolbarInitialized)
          */
 
         /* Fill the actual array of credentials */
-
         int number_of_credential = dbus_get_number_of_credential(a->accountID);
         if(number_of_credential) {
             a->credential_information = g_ptr_array_new();
@@ -280,8 +278,8 @@ sflphone_fill_account_list(gboolean toolbarInitialized)
 	current_account_set_message_number (count);
 }
 
-gboolean sflphone_init()
-{
+gboolean sflphone_init() {
+
     if(!dbus_connect ()){
 
         main_window_error_message(_("Unable to connect to the SFLphone server.\nMake sure the daemon is running."));
@@ -299,11 +297,11 @@ gboolean sflphone_init()
         history = calltab_init(TRUE, HISTORY);
 
         account_list_init ();
-        codec_list_init();
-		conferencelist_init();
+        system_codec_list_init ();
+		conferencelist_init ();
 
         // Fetch the configured accounts
-        sflphone_fill_account_list(FALSE);
+        sflphone_fill_account_list ();
 
         // Fetch the ip2ip profile 
         sflphone_fill_ip2ip_profile();
@@ -1052,60 +1050,86 @@ sflphone_rec_call()
     // DEBUG("sflphone_get_current_codec_name: %s",codname);
 }
 
-/* Internal to action - get the codec list */
-    void
-sflphone_fill_codec_list()
-{
-    codec_list_clear();
+void sflphone_fill_codec_list () {
 
+	guint account_list_size;
+	guint i;
+	account_t *current = NULL;
     gchar** codecs = NULL;
-    codecs = (gchar**)dbus_codec_list();
-    gchar** order = (gchar**)dbus_get_active_codec_list();
+
+	// Clear the list of codecs supported by the application.
+	// This is a global list inherited by all accounts
+    system_codec_list_clear ();
+    codecs = (gchar**) dbus_codec_list ();
+    
+	// If no codecs are available, problem ... Application has to quit
+	if (codecs != NULL)
+    {
+		account_list_size = account_list_get_size ();
+
+		for (i=0; i<account_list_size; i++)
+		{
+			current = account_list_get_nth (i);
+			if (current) {
+				sflphone_fill_codec_list_per_account (current, codecs);
+			}
+		}
+	}
+	/*
+	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, gchar **system_wide_codecs) {
+
+	gchar **order;
     gchar** details;
     gchar** pl;
+	gchar *accountID;
+	GQueue *codeclist;
 
-    if (codecs != NULL)
-    {
-        for(pl=order; *order; order++)
-        {
-            codec_t * c = g_new0(codec_t, 1);
-            c->_payload = atoi(*order);
-            details = (gchar **)dbus_codec_details(c->_payload);
+    order = (gchar**) dbus_get_active_codec_list (account->accountID);
+    codeclist = account->codecs;
 
-            //DEBUG("Codec details: %s / %s / %s / %s",details[0],details[1],details[2],details[3]);
+	// First clean the list
+	codec_list_clear (&codeclist);	
 
-            c->name = details[0];
-            c->is_active = TRUE;
-            c->sample_rate = atoi(details[1]);
-            c->_bitrate = atof(details[2]);
-            c->_bandwidth = atof(details[3]);
-            codec_list_add(c);
-        }
+	for (pl=order; *order; order++)
+    {
+		codec_t * c = g_new0 (codec_t, 1);
+        c->_payload = atoi (*order);
+        details = (gchar **) dbus_codec_details (c->_payload);
+
+        c->name = details[0];
+        c->is_active = TRUE;
+        c->sample_rate = atoi (details[1]);
+        c->_bitrate = atof (details[2]);
+        c->_bandwidth = atof (details[3]);
+        codec_list_add (c, &codeclist);
+	g_print ("sflphone_fill_codec_list_per_account\n");
+    }
 
-        for(pl=codecs; *codecs; codecs++)
+	for (pl=system_wide_codecs; *system_wide_codecs; system_wide_codecs++)
 	{
-	    details = (gchar **)dbus_codec_details(atoi(*codecs));
-            if(codec_list_get_by_payload((gconstpointer)(size_t)atoi(*codecs))!=NULL){
-                // does nothing - the codec is already in the list, so is active.
-            }
-            else{
-                codec_t* c = g_new0(codec_t, 1);
-                c->_payload = atoi(*codecs);
-                c->name = details[0];
-                c->is_active = FALSE;
-                c->sample_rate = atoi(details[1]);
-                c->_bitrate = atof(details[2]);
-                c->_bandwidth = atof(details[3]);
-                codec_list_add(c);
-            }
+		details = (gchar **) dbus_codec_details (atoi (*system_wide_codecs));
+		if (codec_list_get_by_payload ((gconstpointer)(size_t) atoi (*system_wide_codecs))!=NULL){
+			// does nothing - the codec is already in the list, so is active.
+        }
+        else{
+			codec_t* c = g_new0 (codec_t, 1);
+            c->_payload = atoi (*system_wide_codecs);
+            c->name = details[0];
+            c->is_active = FALSE;
+            c->sample_rate = atoi (details[1]);
+            c->_bitrate = atof (details[2]);
+            c->_bandwidth = atof (details[3]);
+            codec_list_add (c, &codeclist);
         }
-    }
-    if( codec_list_get_size() == 0) {
-
-        gchar* markup = g_markup_printf_escaped(_("<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> )") , CODECS_DIR , g_get_home_dir());
-        main_window_error_message( markup );
-        dbus_unregister(getpid());
-        exit(0);
     }
 }
 
diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h
index 41e3ab2ef2..17c276b492 100644
--- a/sflphone-client-gnome/src/actions.h
+++ b/sflphone-client-gnome/src/actions.h
@@ -177,7 +177,9 @@ void sflphone_set_current_account();
 /**
  * Initialialize the codecs data structure
  */
-void sflphone_fill_codec_list();
+void sflphone_fill_codec_list ();
+
+void sflphone_fill_codec_list_per_account (account_t *, gchar**);
 
 void sflphone_add_participant();
 
diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index c36e40aefe..6eddc5f075 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -24,53 +24,62 @@
 
 #include "dbus.h"
 
-GQueue * codecQueue = NULL;
+GQueue * codecsAvailable = NULL;
 
-gint
+	gint
 is_name_codecstruct (gconstpointer a, gconstpointer b)
 {
-  codec_t * c = (codec_t *)a;
-  if(strcmp(c->name, (const gchar *)b)==0)
-    return 0;
-  else
-    return 1;
+	codec_t * c = (codec_t *)a;
+	if(strcmp(c->name, (const gchar *)b)==0)
+		return 0;
+	else
+		return 1;
 }
 
-gint
+	gint
 is_payload_codecstruct (gconstpointer a, gconstpointer b)
 {
-  codec_t * c = (codec_t *)a;
-  if(c->_payload == GPOINTER_TO_INT(b))
-    return 0;
-  else
-    return 1;
+	codec_t * c = (codec_t *)a;
+	if(c->_payload == GPOINTER_TO_INT(b))
+		return 0;
+	else
+		return 1;
 }
 
-void
-codec_list_init()
-{
-  codecQueue = g_queue_new();
+void codec_list_init (GQueue **queue) {
+
+	// Create the queue object that will contain the audio codecs
+	*queue = g_queue_new();
 }
 
-void
-codec_list_clear ()
-{
-  g_queue_free (codecQueue);
-  codecQueue = g_queue_new();
+void system_codec_list_init (void) {
+
+	// Create the queue object that will contain the audio codecs
+	codecsAvailable = g_queue_new();
 }
 
-void
-codec_list_add(codec_t * c)
-{
-  g_queue_push_tail (codecQueue, (gpointer *) c);
+void codec_list_clear (GQueue **queue) {
+
+	g_queue_free (*queue);
+	*queue = g_queue_new();
 }
 
+void system_codec_list_clear (void) {
+
+	g_queue_free (codecsAvailable);
+	codecsAvailable = g_queue_new();
+}
 
+void codec_list_add(codec_t * c, GQueue **queue) {
+
+	// Add a codec to a specific list
+	g_queue_push_tail (*queue, (gpointer *) c);
+}
 
-void 
+	void 
 codec_set_active(codec_t * c)
 {
-	
+
 	if(c)
 	{
 		DEBUG("%s set active", c->name);
@@ -78,105 +87,81 @@ codec_set_active(codec_t * c)
 	}
 }
 
-void
+	void
 codec_set_inactive(codec_t * c)
 {
-  
-  if(c)
-    c->is_active = FALSE;
+
+	if(c)
+		c->is_active = FALSE;
 }
 
-guint
-codec_list_get_size()
-{
-  return g_queue_get_length(codecQueue);
+guint codec_list_get_size () {
+
+	// The system wide codec list and the one per account have exactly the same size
+	// The only difference may be the order and the enabled codecs
+	return g_queue_get_length (codecsAvailable);
 }
 
-codec_t*
+	codec_t*
 codec_list_get_by_name( const gchar* name)
 {
-  GList * c = g_queue_find_custom(codecQueue, name, is_name_codecstruct);
-  if(c)
-    return (codec_t *)c->data;
-  else
-    return NULL;
+	GList * c = g_queue_find_custom (codecsAvailable, name, is_name_codecstruct);
+	if(c)
+		return (codec_t *)c->data;
+	else
+		return NULL;
 }
 
-codec_t*
+	codec_t*
 codec_list_get_by_payload(gconstpointer payload)
 {
-  GList * c = g_queue_find_custom(codecQueue, payload, is_payload_codecstruct);
-  if(c)
-    return (codec_t *)c->data;
-  else
-    return NULL;
+	GList * c = g_queue_find_custom(codecsAvailable, payload, is_payload_codecstruct);
+	if(c)
+		return (codec_t *)c->data;
+	else
+		return NULL;
 }
 
-codec_t*
-codec_list_get_nth(guint index)
-{
-  return g_queue_peek_nth(codecQueue, index);
+codec_t* codec_list_get_nth (guint index, GQueue *q) {
+	return g_queue_peek_nth (q, index);
 }
 
-void
-codec_set_prefered_order(guint index)
-{
-  codec_t * prefered = codec_list_get_nth(index);
-  g_queue_pop_nth(codecQueue, index);
-  g_queue_push_head(codecQueue, prefered);
+void codec_set_prefered_order (guint index, GQueue *q) {
+
+	codec_t * prefered = codec_list_get_nth (index, q);
+	g_queue_pop_nth (q, index);
+	g_queue_push_head (q, prefered);
 }
 
-/**
- *
- */
-void
-codec_list_move_codec_up(guint index)
-{
-        DEBUG("Codec list Size: %i \n",codec_list_get_size());
-	if(index != 0)
+void codec_list_move_codec_up (guint index, GQueue *q) {
+
+	DEBUG("Codec list Size: %i \n", codec_list_get_size());
+
+	if (index != 0)
 	{
-		gpointer codec = g_queue_pop_nth(codecQueue, index);
-		g_queue_push_nth(codecQueue, codec, index-1);
+		gpointer codec = g_queue_pop_nth (q, index);
+		g_queue_push_nth (q, codec, index-1);
 	}
-
-	// DEBUG
-	unsigned int i;
-	DEBUG("Codec list");
-	for(i=0; i < codecQueue->length; i++)
-		DEBUG("%s", codec_list_get_nth(i)->name);
 }
 
-/**
- *
- */
-void
-codec_list_move_codec_down(guint index)
-{
-        DEBUG("Codec list Size: %i \n",codec_list_get_size());
-	if(index != codecQueue->length)
+void codec_list_move_codec_down (guint index, GQueue *q) {
+
+	DEBUG("Codec list Size: %i \n",codec_list_get_size());
+
+	if (index != q->length)
 	{
-		gpointer codec = g_queue_pop_nth(codecQueue, index);
-		g_queue_push_nth(codecQueue, codec, index+1);
+		gpointer codec = g_queue_pop_nth (q, index);
+		g_queue_push_nth (q, codec, index+1);
 	}
-
-	// PRINT
-	unsigned int i;
-	DEBUG("Codec list");
-	for(i=0; i < codecQueue->length; i++)
-		DEBUG("%s", codec_list_get_nth(i)->name);
 }
 
-/**
- *
- */
-void
-codec_list_update_to_daemon()
-{
+void codec_list_update_to_daemon (account_t *acc) {
+
 	// String listing of all codecs payloads
 	const gchar** codecList;
 
 	// Length of the codec list
-	int length = codecQueue->length;
+	int length = codecsAvailable->length;
 
 	// Initiate double array char list for one string
 	codecList = (void*)malloc(sizeof(void*));
@@ -186,7 +171,7 @@ codec_list_update_to_daemon()
 	DEBUG("List of active codecs :");
 	for(i = 0; i < length; i++)
 	{
-		codec_t* currentCodec = codec_list_get_nth(i);
+		codec_t* currentCodec = codec_list_get_nth (i, acc->codecs);
 		// Assert not null
 		if(currentCodec)
 		{
@@ -213,7 +198,7 @@ codec_list_update_to_daemon()
 	*(codecList+c) = NULL;
 
 	// call dbus function with array of strings
-	dbus_set_active_codec_list(codecList);
+	dbus_set_active_codec_list (codecList);
 
 	// Delete memory
 	for(i = 0; i < c; i++) {
@@ -221,3 +206,7 @@ codec_list_update_to_daemon()
 	}
 	free(codecList);
 }
+
+GQueue* get_system_codec_list (void) {
+	return  codecsAvailable;
+}
diff --git a/sflphone-client-gnome/src/codeclist.h b/sflphone-client-gnome/src/codeclist.h
index 3b75296b42..662e3ebf7a 100644
--- a/sflphone-client-gnome/src/codeclist.h
+++ b/sflphone-client-gnome/src/codeclist.h
@@ -21,6 +21,7 @@
 #define __CODECLIST_H__
 
 #include <gtk/gtk.h>
+#include <accountlist.h>
 /** @file codeclist.h
   * @brief A list to hold codecs.
   */
@@ -47,26 +48,36 @@ typedef struct {
   */
 
 /** 
- * This function initialize the codec list. 
+ * This function initialize a specific codec list. 
  */
-void codec_list_init();
+void codec_list_init (GQueue **q);
 
 /** 
- * This function empty and free the codec list. 
+ * This function initialize the system wide codec list. 
  */
-void codec_list_clear();
+void system_codec_list_init (void);
+
+/** 
+ * This function empty and free a specific codec list. 
+ */
+void codec_list_clear (GQueue **q);
+
+/** 
+ * This function empty and free the system wide codec list. 
+ */
+void system_codec_list_clear (void);
 
 /** 
  * This function append an codec to list. 
  * @param c The codec you want to add 
  */
-void codec_list_add(codec_t * c);
+void codec_list_add (codec_t * c, GQueue **q);
 
 /**
  * Set a codec active. An active codec will be used for codec negociation
  * @param name The string description of the codec
  */
-void codec_set_active(codec_t * c);
+void codec_set_active (codec_t * c);
 
 /**
  * Set a codec inactive. An active codec won't be used for codec negociation
@@ -92,31 +103,33 @@ codec_t * codec_list_get_by_name(const gchar * name);
  * @param index The position of the codec you want
  * @return codec_t* A codec or NULL 
  */
-codec_t* codec_list_get_nth(guint index);
+codec_t* codec_list_get_nth (guint index, GQueue *q);
 
 /**
  * Set the prefered codec first in the codec list
  * @param index The position in the list of the prefered codec
  */ 
-void codec_set_prefered_order(guint index);
+void codec_set_prefered_order (guint index, GQueue *q);
 
 /** 
  * Move the codec from an unit up in the codec_list
  * @param index The current index in the list
  */
-void codec_list_move_codec_up(guint index);
+void codec_list_move_codec_up (guint index, GQueue *q);
 
 /** 
  * Move the codec from an unit down in the codec_list
  * @param index The current index in the list
  */
-void codec_list_move_codec_down(guint index);
+void codec_list_move_codec_down (guint index, GQueue *q);
 
 /**
  * Notify modifications on codecs to the server
  */
-void codec_list_update_to_daemon();
+void codec_list_update_to_daemon (account_t *acc);
 
 codec_t* codec_list_get_by_payload(gconstpointer payload);
 
+GQueue* get_system_codec_list (void);
+
 #endif
diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 4fedeb37f1..3876a60f91 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -1047,7 +1047,7 @@ show_account_window (account_t * a)
 	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
 
 	/* Codecs */
-	codecs_tab = create_codecs_configuration ();
+	codecs_tab = create_codecs_configuration (&currentAccount);
 	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), codecs_tab, gtk_label_new(_("Codecs")));
 	gtk_notebook_page_num (GTK_NOTEBOOK (notebook), codecs_tab);
 
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index e01eb4a5f6..912eb80d72 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -49,26 +49,33 @@ enum {
 /**
  * Fills the tree list with supported codecs
  */
-    void
-preferences_dialog_fill_codec_list()
-{
+void preferences_dialog_fill_codec_list (account_t **a) {
+
     GtkListStore *codecStore;
     GtkTreeIter iter;
+	GQueue *current;
 
     // Get model of view and clear it
-    codecStore = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(codecTreeView)));
-    gtk_list_store_clear(codecStore);
+    codecStore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView)));
+    gtk_list_store_clear (codecStore);
+	if (a) {
+		current = (*a)->codecs;
+	}
+	else {
+		// Failover
+		current = get_system_codec_list ();
+	}
 
     // Insert codecs
     unsigned int i;
-    for(i = 0; i < codec_list_get_size(); i++)
+    for(i = 0; i < codec_list_get_size (); i++)
     {
-        codec_t *c = codec_list_get_nth(i);
-        DEBUG("%s", c->name);
-        if(c)
+        codec_t *c = codec_list_get_nth (i, current);
+        DEBUG ("%s", c->name);
+        if (c)
         {
-            gtk_list_store_append(codecStore, &iter);
-            gtk_list_store_set(codecStore, &iter,
+            gtk_list_store_append (codecStore, &iter);
+            gtk_list_store_set (codecStore, &iter,
                     COLUMN_CODEC_ACTIVE,	c->is_active,									// Active
                     COLUMN_CODEC_NAME,		c->name,										// Name
                     COLUMN_CODEC_FREQUENCY,	g_strdup_printf("%d kHz", c->sample_rate/1000),	// Frequency (kHz)
@@ -369,7 +376,7 @@ select_codec(GtkTreeSelection *selection, GtkTreeModel *model)
  * and in configuration files
  */
     static void
-codec_active_toggled(GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data )
+codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data )
 {
     GtkTreeIter iter;
     GtkTreePath *treePath;
@@ -378,12 +385,16 @@ codec_active_toggled(GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoint
     char* name;
     char* srate;
     codec_t* codec;
+	account_t *acc;
 
     // Get path of clicked codec active toggle box
     treePath = gtk_tree_path_new_from_string(path);
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(data));
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView));
     gtk_tree_model_get_iter(model, &iter, treePath);
 
+	// Retrieve userdata
+	acc = (account_t*) data;
+
     // Get active value and name at iteration
     gtk_tree_model_get(model, &iter,
             COLUMN_CODEC_ACTIVE, &active,
@@ -420,16 +431,15 @@ codec_active_toggled(GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoint
         codec_set_inactive(codec);
 
     // Perpetuate changes to the deamon
-    codec_list_update_to_daemon();
+    codec_list_update_to_daemon (acc);
 }
 
 /**
  * Move codec in list depending on direction and selected codec and
  * update changes in the daemon list and the configuration files
  */
-    static void
-codec_move(gboolean moveUp, gpointer data)
-{
+static void codec_move (gboolean moveUp, gpointer data) {
+
     GtkTreeIter iter;
     GtkTreeIter *iter2;
     GtkTreeView *treeView;
@@ -437,11 +447,14 @@ codec_move(gboolean moveUp, gpointer data)
     GtkTreeSelection *selection;
     GtkTreePath *treePath;
     gchar *path;
+	account_t *acc;
 
     // Get view, model and selection of codec store
-    treeView = GTK_TREE_VIEW(data);
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView));
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeView));
+    model = gtk_tree_view_get_model(GTK_TREE_VIEW(codecTreeView));
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
+
+	// Retrieve the user data
+	acc = (account_t*) data;
 
     // Find selected iteration and create a copy
     gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter);
@@ -474,32 +487,30 @@ codec_move(gboolean moveUp, gpointer data)
 
     // Perpetuate changes in codec queue
     if(moveUp)
-        codec_list_move_codec_up(indice);
+        codec_list_move_codec_up (indice, acc->codecs);
     else
-        codec_list_move_codec_down(indice);
+        codec_list_move_codec_down (indice, acc->codecs);
 
     // Perpetuate changes to the deamon
-    codec_list_update_to_daemon();
+    codec_list_update_to_daemon (acc);
 }
 
 /**
  * Called from move up codec button signal
  */
-    static void
-codec_move_up(GtkButton *button UNUSED, gpointer data)
-{
+static void codec_move_up (GtkButton *button UNUSED, gpointer data) {
+
     // Change tree view ordering and get indice changed
-    codec_move(TRUE, data);
+    codec_move (TRUE, data);
 }
 
 /**
  * Called from move down codec button signal
  */
-    static void
-codec_move_down(GtkButton *button UNUSED, gpointer data)
-{
+static void codec_move_down(GtkButton *button UNUSED, gpointer data) {
+	
     // Change tree view ordering and get indice changed
-    codec_move(FALSE, data);
+    codec_move (FALSE, data);
 }
 
     int
@@ -528,7 +539,7 @@ get_ringtone_choice( void )
 }
 
 
-GtkWidget* codecs_box()
+GtkWidget* codecs_box (account_t **a)
 {
     GtkWidget *ret;
     GtkWidget *scrolledWindow;
@@ -553,7 +564,7 @@ GtkWidget* codecs_box()
             G_TYPE_STRING,		// Frequency
             G_TYPE_STRING,		// Bit rate
             G_TYPE_STRING		// Bandwith
-            );
+			);
 
     // Create codec tree view with list store
     codecTreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(codecStore));
@@ -603,14 +614,14 @@ GtkWidget* codecs_box()
     codecMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
     gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
     gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveUpButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(codecMoveUpButton), "clicked", G_CALLBACK(codec_move_up), codecTreeView);
+    g_signal_connect(G_OBJECT(codecMoveUpButton), "clicked", G_CALLBACK(codec_move_up), a);
 
     codecMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
     gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
     gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveDownButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(codecMoveDownButton), "clicked", G_CALLBACK(codec_move_down), codecTreeView);
+    g_signal_connect(G_OBJECT(codecMoveDownButton), "clicked", G_CALLBACK(codec_move_down), a);
 
-    preferences_dialog_fill_codec_list();
+    preferences_dialog_fill_codec_list (a);
 
     return ret;
 }
@@ -883,7 +894,7 @@ GtkWidget* create_audio_configuration()
     return ret;
 }
 
-GtkWidget* create_codecs_configuration() {
+GtkWidget* create_codecs_configuration (account_t **a) {
 
     // Main widget
     GtkWidget *ret, *codecs, *box, *frame;
@@ -896,7 +907,7 @@ GtkWidget* create_codecs_configuration() {
     gtk_box_pack_start (GTK_BOX(ret), codecs, FALSE, FALSE, 0);
     gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
     gtk_widget_show (codecs);
-    box = codecs_box ();
+    box = codecs_box (a);
     gtk_container_add (GTK_CONTAINER (codecs) , box);
 
     gtk_widget_show_all(ret);
diff --git a/sflphone-client-gnome/src/config/audioconf.h b/sflphone-client-gnome/src/config/audioconf.h
index 05a264ae61..18a1232ff2 100644
--- a/sflphone-client-gnome/src/config/audioconf.h
+++ b/sflphone-client-gnome/src/config/audioconf.h
@@ -23,7 +23,7 @@
 #include <actions.h>
 
 GtkWidget* create_audio_configuration (void);
-GtkWidget* create_codecs_configuration (void);
+GtkWidget* create_codecs_configuration (account_t **a);
 
 GtkWidget* api_box();
 GtkWidget* alsa_box();
diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index 4a1e2c286f..4099621f92 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -149,6 +149,7 @@
  
     <method name="getActiveCodecList">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="s" name="accountID" direction="in"/>
       <arg type="as" name="list" direction="out"/>
     </method>
 
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 3a5798348a..c0f63a44dc 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -1252,16 +1252,13 @@ gchar* dbus_get_current_codec_name (const callable_obj_t * c)
     return codecName;
 }
 
-
-
-    gchar**
-dbus_get_active_codec_list()
-{
+gchar** dbus_get_active_codec_list (gchar *accountID) {
 
     gchar ** array;
     GError *error = NULL;
     org_sflphone_SFLphone_ConfigurationManager_get_active_codec_list (
             configurationManagerProxy,
+			accountID,
             &array,
             &error);
 
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index bb6d57a3b6..0c297f3400 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -227,7 +227,7 @@ gchar** dbus_default_codec_list();
  * ConfigurationManager - Get the list of the codecs used for media negociation
  * @return gchar** The list of codecs
  */
-gchar** dbus_get_active_codec_list( void );
+gchar** dbus_get_active_codec_list (gchar *accountID);
 
 /**
  * ConfigurationManager - Set the list of codecs used for media negociation
diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp
index e916ac6875..3db5040d92 100644
--- a/sflphone-common/src/account.cpp
+++ b/sflphone-common/src/account.cpp
@@ -27,6 +27,7 @@ Account::Account (const AccountID& accountID, std::string type) :
         , _link (NULL)
         , _enabled (false)
         , _type (type)
+		, _codecOrder ()
 {
     setRegistrationState (Unregistered);
 }
@@ -35,8 +36,8 @@ Account::~Account()
 {
 }
 
-void Account::loadConfig()
-{
+void Account::loadConfig() {
+
     std::string p;
 
     p =  Manager::instance().getConfigString (_accountID , CONFIG_ACCOUNT_TYPE);
@@ -44,16 +45,17 @@ void Account::loadConfig()
     _enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false;
 #else
 
-    if (p.c_str() == "IAX")
+    if (p == "IAX")
         _enabled = false;
     else
         _enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false;
 
 #endif
+
+	loadAudioCodecs ();
 }
 
-void Account::setRegistrationState (RegistrationState state)
-{
+void Account::setRegistrationState (RegistrationState state) {
 
     if (state != _registrationState) {
         _debug ("Account::setRegistrationState");
@@ -63,3 +65,40 @@ void Account::setRegistrationState (RegistrationState state)
         Manager::instance().connectionStatusNotification();
     }
 }
+
+void Account::loadAudioCodecs (void) {
+
+	// if the user never set the codec list, use the default configuration for this account
+    if (Manager::instance ().getConfigString (AUDIO, "ActiveCodecs") == "") {
+		_warn ("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();
+		setActiveCodecs (active_list);
+    }
+}
+
+void Account::setActiveCodecs (const std::vector <std::string> &list) {
+
+    _codecOrder.clear();
+    // list contains the ordered payload of active codecs picked by the user for this account
+    // we used the CodecOrder vector to save the order.
+    int i=0;
+    int payload;
+    size_t size = list.size();
+
+		_warn ("set the custom order %i", list.size ());
+	_warn ("Setting active codec list");
+
+    while ( (unsigned int) i < size) {
+        payload = std::atoi (list[i].data());
+			_warn ("Adding codec with RTP payload=%i", payload);
+        //if (Manager::instance ().getCodecDescriptorMap ().isCodecLoaded (payload)) {
+            _codecOrder.push_back ( (AudioCodecType) payload);
+        //}
+        i++;
+    }
+}
diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index 3d6c36b8b2..00234ae909 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -207,6 +207,14 @@ class Account{
 
         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);
 
     private:
         // copy constructor
@@ -215,6 +223,8 @@ class Account{
         // assignment operator
         Account& operator=(const Account& rh);
 
+		void loadAudioCodecs (void);
+
     protected:
         /**
          * Account ID are assign in constructor and shall not changed
@@ -271,6 +281,11 @@ class Account{
          */
         std::pair<int, std::string> _registrationStateDetailed;
 
+		/**
+		 * Vector containing the order of the codecs
+		 */
+		CodecOrder _codecOrder;
+
 };
 
 #endif
diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.cpp b/sflphone-common/src/audio/codecs/codecDescriptor.cpp
index 7dfe1238a3..29355764f1 100644
--- a/sflphone-common/src/audio/codecs/codecDescriptor.cpp
+++ b/sflphone-common/src/audio/codecs/codecDescriptor.cpp
@@ -25,7 +25,7 @@
 
 #include "codecDescriptor.h"
 
-CodecDescriptor::CodecDescriptor() : _CodecsMap(), _codecOrder(), _Cache(), _nbCodecs(), _CodecInMemory()
+CodecDescriptor::CodecDescriptor() : _CodecsMap(), _defaultCodecOrder(), _Cache(), _nbCodecs(), _CodecInMemory()
 {
 }
 
@@ -62,14 +62,13 @@ CodecDescriptor::init()
     }
 }
 
-void
-CodecDescriptor::setDefaultOrder()
-{
-    _codecOrder.clear();
+void CodecDescriptor::setDefaultOrder() {
+
+    _defaultCodecOrder.clear();
     CodecsMap::iterator iter = _CodecsMap.begin();
 
     while (iter != _CodecsMap.end()) {
-        _codecOrder.push_back (iter->first);
+        _defaultCodecOrder.push_back (iter->first);
         iter->second->setState (true);
         iter ++ ;
     }
@@ -103,32 +102,8 @@ CodecDescriptor::getCodec (AudioCodecType payload)
     return NULL;
 }
 
-bool
-CodecDescriptor::isActive (AudioCodecType payload)
-{
-    int i;
-
-    for (i=0 ; (unsigned int) i < _codecOrder.size() ; i++) {
-        if (_codecOrder[i] == payload)
-            return true;
-    }
+double CodecDescriptor::getBitRate (AudioCodecType payload) {
 
-    return false;
-}
-
-void
-CodecDescriptor::removeCodec (AudioCodecType payload UNUSED)
-{
-}
-
-void
-CodecDescriptor::addCodec (AudioCodecType payload UNUSED)
-{
-}
-
-double
-CodecDescriptor::getBitRate (AudioCodecType payload)
-{
     CodecsMap::iterator iter = _CodecsMap.find (payload);
 
     if (iter!=_CodecsMap.end())
@@ -137,9 +112,8 @@ CodecDescriptor::getBitRate (AudioCodecType payload)
         return 0.0;
 }
 
-double
-CodecDescriptor::getBandwidthPerCall (AudioCodecType payload)
-{
+double CodecDescriptor::getBandwidthPerCall (AudioCodecType payload) {
+
     CodecsMap::iterator iter = _CodecsMap.find (payload);
 
     if (iter!=_CodecsMap.end())
@@ -148,9 +122,8 @@ CodecDescriptor::getBandwidthPerCall (AudioCodecType payload)
         return 0.0;
 }
 
-int
-CodecDescriptor::getSampleRate (AudioCodecType payload)
-{
+int CodecDescriptor::getSampleRate (AudioCodecType payload) {
+
     CodecsMap::iterator iter = _CodecsMap.find (payload);
 
     if (iter!=_CodecsMap.end())
@@ -159,21 +132,9 @@ CodecDescriptor::getSampleRate (AudioCodecType payload)
         return 0;
 }
 
-int
-CodecDescriptor::getChannel (AudioCodecType payload)
-{
-    CodecsMap::iterator iter = _CodecsMap.find (payload);
+void CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list) {
 
-    if (iter!=_CodecsMap.end())
-        return (iter->second->getChannel());
-    else
-        return 0;
-}
-
-void
-CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list)
-{
-    _codecOrder.clear();
+    _defaultCodecOrder.clear();
     // list contains the ordered payload of active codecs picked by the user
     // we used the CodecOrder vector to save the order.
     int i=0;
@@ -184,7 +145,7 @@ CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list)
         payload = std::atoi (list[i].data());
 
         if (isCodecLoaded (payload)) {
-            _codecOrder.push_back ( (AudioCodecType) payload);
+            _defaultCodecOrder.push_back ( (AudioCodecType) payload);
             _CodecsMap.find ( (AudioCodecType) payload)->second->setState (true);
         }
 
@@ -192,9 +153,8 @@ CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list)
     }
 }
 
-std::vector<AudioCodec*>
-CodecDescriptor::scanCodecDirectory (void)
-{
+std::vector<AudioCodec*> CodecDescriptor::scanCodecDirectory (void) {
+
     std::vector<AudioCodec*> codecs;
     std::string tmp;
     int i;
@@ -218,7 +178,6 @@ CodecDescriptor::scanCodecDirectory (void)
                 tmp =  dirStruct -> d_name ;
                 if (tmp == CURRENT_DIR || tmp == PARENT_DIR) {} else {
                     if (seemsValid (tmp) && !alreadyInCache (tmp)) {
-                        //_debug("Codec : %s", tmp.c_str());
                         _Cache.push_back (tmp);
                         audioCodec = loadCodec (dirStr.append (tmp));
                         codecs.push_back (audioCodec);
@@ -234,10 +193,8 @@ CodecDescriptor::scanCodecDirectory (void)
     return codecs;
 }
 
-AudioCodec*
-CodecDescriptor::loadCodec (std::string path)
-{
-    //_debug("Load path %s", path.c_str());
+AudioCodec* CodecDescriptor::loadCodec (std::string path) {
+
     CodecHandlePointer p;
     using std::cerr;
     void * codecHandle = dlopen (path.c_str() , RTLD_LAZY);
@@ -262,10 +219,8 @@ CodecDescriptor::loadCodec (std::string path)
 }
 
 
-void
-CodecDescriptor::unloadCodec (CodecHandlePointer p)
-{
-    // _debug("Unload codec %s", p.first->getCodecName().c_str());
+void CodecDescriptor::unloadCodec (CodecHandlePointer p) {
+
     using std::cerr;
     destroy_t* destroyCodec = (destroy_t*) dlsym (p.second , "destroy");
 
@@ -277,9 +232,7 @@ CodecDescriptor::unloadCodec (CodecHandlePointer p)
     dlclose (p.second);
 }
 
-AudioCodec*
-CodecDescriptor::instantiateCodec (AudioCodecType payload)
-{
+AudioCodec* CodecDescriptor::instantiateCodec (AudioCodecType payload) {
 
     using std::cerr;
 
@@ -304,9 +257,8 @@ CodecDescriptor::instantiateCodec (AudioCodecType payload)
     return NULL;
 }
 
-AudioCodec*
-CodecDescriptor::getFirstCodecAvailable (void)
-{
+AudioCodec* CodecDescriptor::getFirstCodecAvailable (void) {
+
     CodecsMap::iterator iter = _CodecsMap.begin();
 
     if (iter != _CodecsMap.end())
@@ -315,9 +267,8 @@ CodecDescriptor::getFirstCodecAvailable (void)
         return NULL;
 }
 
-bool
-CodecDescriptor::seemsValid (std::string lib)
-{
+bool CodecDescriptor::seemsValid (std::string lib) {
+
     // The name of the shared library seems valid  <==> it looks like libcodec_xxx.so
     // We check this
     std::string begin = SFL_CODEC_VALID_PREFIX;
@@ -382,9 +333,8 @@ CodecDescriptor::alreadyInCache (std::string lib)
     return false;
 }
 
-bool
-CodecDescriptor::isCodecLoaded (int payload)
-{
+bool CodecDescriptor::isCodecLoaded (int payload) {
+
     CodecsMap::iterator iter = _CodecsMap.begin();
 
     while (iter != _CodecsMap.end()) {
diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.h b/sflphone-common/src/audio/codecs/codecDescriptor.h
index 44cab586c5..437d39d0bc 100644
--- a/sflphone-common/src/audio/codecs/codecDescriptor.h
+++ b/sflphone-common/src/audio/codecs/codecDescriptor.h
@@ -30,39 +30,12 @@
 #include "user_cfg.h"
 #include "audio/codecs/audiocodec.h"
 
-/** Enumeration that contains known audio payloads */
-typedef enum {
-  // http://www.iana.org/assignments/rtp-parameters
-  // http://www.gnu.org/software/ccrtp/doc/refman/html/formats_8h.html#a0
-  // 0 PCMU A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_ULAW = 0, 
-  // 3 GSM  A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_GSM = 3,
-  // 8 PCMA A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_ALAW = 8,
-  // 9 G722 A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_G722 = 9,
-  // http://www.ietf.org/rfc/rfc3952.txt
-  // 97 iLBC/8000
-  PAYLOAD_CODEC_ILBC_20 = 97,
-  PAYLOAD_CODEC_ILBC_30 = 98,
-  // http://www.speex.org/drafts/draft-herlein-speex-rtp-profile-00.txt
-  //  97 speex/8000
-  // http://support.xten.com/viewtopic.php?p=8684&sid=3367a83d01fdcad16c7459a79859b08e
-  // 100 speex/16000
-  PAYLOAD_CODEC_SPEEX_8000 = 110,
-  PAYLOAD_CODEC_SPEEX_16000 = 111,
-  PAYLOAD_CODEC_SPEEX_32000 = 112
-} AudioCodecType;
-
-/** A codec is identified by its payload. A payload is associated with a name. */ 
-typedef std::map<AudioCodecType, std::string> CodecMap;
-/** The struct to reflect the order the user wants to use the codecs */
-typedef std::vector<AudioCodecType> CodecOrder;
 /** Enable us to keep the handle pointer on the codec dynamicaly loaded so that we could destroy when we dont need it anymore */
 typedef std::pair<AudioCodec* , void*> CodecHandlePointer;
 /** Maps a pointer on an audiocodec object to a payload */
 typedef std::map<AudioCodecType , AudioCodec*> CodecsMap;
+/** A codec is identified by its payload. A payload is associated with a name. */ 
+typedef std::map<AudioCodecType, std::string> CodecMap;
 
 /*
  * @file codecdescriptor.h
@@ -91,7 +64,7 @@ class CodecDescriptor {
      * Accessor to data structures
      * @return CodecOrder& The list that reflects the user's choice
      */
-    CodecOrder& getActiveCodecs() { return _codecOrder; }
+    // CodecOrder& getActiveCodecs() { return _codecOrder; }
 
     /**
      * Get codec name by its payload
@@ -114,30 +87,11 @@ class CodecDescriptor {
     void init();
 
     /**
-     * Set the default codecs order
+     * Set the default codecs order. 
+	 * This order will be apply to each account by default
      */   
     void setDefaultOrder();
 
-    /**
-     * Check in the map codec if the specified codec is supported 
-     * @param payload unique identifier of a codec (RFC)
-     * @return bool True if the codec specified is supported
-     *		  false otherwise
-     */
-    bool isActive(AudioCodecType payload);
-
-    /**
-     * Remove the codec with payload payload from the list
-     * @param payload the codec to erase
-     */ 
-    void removeCodec(AudioCodecType payload);
-
-    /**
-     * Add a codec in the list.
-     * @param payload the codec to add
-     */
-    void addCodec(AudioCodecType payload);
-
     /**
      * Get the bit rate of the specified codec.
      * @param payload The payload of the codec
@@ -154,7 +108,6 @@ class CodecDescriptor {
      */
     double getBandwidthPerCall(AudioCodecType payload);
 
-
     /**
      * Get the clock rate of the specified codec
      * @param payload The payload of the codec
@@ -162,14 +115,7 @@ class CodecDescriptor {
      */
     int getSampleRate(AudioCodecType payload);
 
-    /**
-     * Get the number of channels
-     * @param payload The payload of the codec
-     * @return int  Number of channels
-     */
-    int getChannel(AudioCodecType payload);
-
-    /**
+	/**
      * Set the order of codecs by their payload
      * @param list The ordered list sent by DBus
      */
@@ -207,6 +153,14 @@ class CodecDescriptor {
 	 */
 	std::vector <std::string> getCodecSpecifications (const int32_t& payload);
 
+	/**
+     *  Check if the audiocodec object has been successfully created
+     *  @param payload  The payload of the codec
+     *  @return bool  True if the audiocodec has been created
+     *		false otherwise
+     */
+    bool isCodecLoaded( int payload );
+
   private:
 
     /**
@@ -246,23 +200,15 @@ class CodecDescriptor {
      */
     bool alreadyInCache( std::string );
 
-    /**
-     *  Check if the audiocodec object has been successfully created
-     *  @param payload  The payload of the codec
-     *  @return bool  True if the audiocodec has been created
-     *		false otherwise
-     */
-    bool isCodecLoaded( int payload );
-
     /**
      * Map the payload of a codec and the object associated ( AudioCodec * )
      */
     CodecsMap _CodecsMap;
 
     /**
-     * Vector containing the order of the codecs
+     * Vector containing a default order for the codecs
      */
-    CodecOrder _codecOrder;
+    CodecOrder _defaultCodecOrder;
 
     /**
      * Vector containing the complete name of the codec shared library scanned
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 4a1e2c286f..4099621f92 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -149,6 +149,7 @@
  
     <method name="getActiveCodecList">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="s" name="accountID" direction="in"/>
       <arg type="as" name="list" direction="out"/>
     </method>
 
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 5731be8ab4..1e04db251e 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -388,12 +388,29 @@ ConfigurationManager::getRingtoneList()
 }
 
 
+/**
+ * Send the list of all codecs loaded to the client through DBus.
+ * Can stay global, as only the active codecs will set per account
+ */
+std::vector<std::string> ConfigurationManager::getCodecList (void) {
 
-std::vector< std::string  >
-ConfigurationManager::getCodecList (void)
-{
-    _debug ("ConfigurationManager::getCodecList received");
-    return Manager::instance().getCodecList();
+    std::vector<std::string> list;
+
+    CodecsMap codecs = Manager::instance ().getCodecDescriptorMap ().getCodecsMap();
+    CodecsMap::iterator iter = codecs.begin();
+
+    while (iter!=codecs.end()) {
+        std::stringstream ss;
+
+        if (iter->second != NULL) {
+            ss << iter->first;
+            list.push_back ( (ss.str()).data());
+        }
+
+        iter++;
+    }
+
+    return list;
 }
 
 std::vector<std::string>
@@ -411,15 +428,34 @@ ConfigurationManager::getSupportedTlsMethod (void)
 
 std::vector<std::string> ConfigurationManager::getCodecDetails (const int32_t& payload) {
 
-    _warn ("ConfigurationManager::getCodecDetails received");
     return Manager::instance().getCodecDescriptorMap().getCodecSpecifications (payload);
 }
 
-std::vector< std::string >
-ConfigurationManager::getActiveCodecList()
-{
-    _debug ("ConfigurationManager::getActiveCodecList received");
-    return Manager::instance().getActiveCodecList();
+std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::string& accountID) {
+
+    _warn ("Send active codec list for account %s", accountID.c_str ());
+
+    std::vector< std::string > v;
+	Account *acc;
+	CodecOrder active;
+    unsigned int i=0;
+	size_t size;
+
+	acc = Manager::instance ().getAccount (accountID);
+	if (acc != NULL) {
+		_warn ("Et un compte, un !");
+		active = acc->getActiveCodecs ();
+		size = active.size();
+		while (i<size) {
+			_warn ("Et un codec, un !");
+			std::stringstream ss;
+			ss << active[i];
+			v.push_back ( (ss.str()).data());
+			i++;
+		}
+	}
+
+    return v;
 }
 
 void
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index 98a7441c62..7d1f2764d6 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -58,7 +58,7 @@ public:
     std::vector< std::string > getCodecList(void);
     std::vector< std::string > getSupportedTlsMethod(void);
     std::vector< std::string > getCodecDetails( const int32_t& payload );
-    std::vector< std::string > getActiveCodecList(  );
+    std::vector< std::string > getActiveCodecList (const std::string& accountID);
     void setActiveCodecList( const std::vector< std::string >& list );
 
     std::vector< std::string > getInputAudioPluginList();
diff --git a/sflphone-common/src/global.h b/sflphone-common/src/global.h
index 474d08b0f3..fc0123228d 100644
--- a/sflphone-common/src/global.h
+++ b/sflphone-common/src/global.h
@@ -131,5 +131,34 @@ static const SOUND_FORMAT INT32 = 0x8;
 #define HOOK_DEFAULT_SIP_FIELD      "X-sflphone-url"
 #define HOOK_DEFAULT_URL_COMMAND    "x-www-browser"
 
+/** Enumeration that contains known audio payloads */
+typedef enum {
+  // http://www.iana.org/assignments/rtp-parameters
+  // http://www.gnu.org/software/ccrtp/doc/refman/html/formats_8h.html#a0
+  // 0 PCMU A 8000 1 [RFC3551]
+  PAYLOAD_CODEC_ULAW = 0, 
+  // 3 GSM  A 8000 1 [RFC3551]
+  PAYLOAD_CODEC_GSM = 3,
+  // 8 PCMA A 8000 1 [RFC3551]
+  PAYLOAD_CODEC_ALAW = 8,
+  // 9 G722 A 8000 1 [RFC3551]
+  PAYLOAD_CODEC_G722 = 9,
+  // http://www.ietf.org/rfc/rfc3952.txt
+  // 97 iLBC/8000
+  PAYLOAD_CODEC_ILBC_20 = 97,
+  PAYLOAD_CODEC_ILBC_30 = 98,
+  // http://www.speex.org/drafts/draft-herlein-speex-rtp-profile-00.txt
+  //  97 speex/8000
+  // http://support.xten.com/viewtopic.php?p=8684&sid=3367a83d01fdcad16c7459a79859b08e
+  // 100 speex/16000
+  PAYLOAD_CODEC_SPEEX_8000 = 110,
+  PAYLOAD_CODEC_SPEEX_16000 = 111,
+  PAYLOAD_CODEC_SPEEX_32000 = 112
+} AudioCodecType;
+
+/** The struct to reflect the order the user wants to use the codecs */
+typedef std::vector<AudioCodecType> CodecOrder;
+
+
 
 #endif	// __GLOBAL_H__
diff --git a/sflphone-common/src/iax/iaxcall.cpp b/sflphone-common/src/iax/iaxcall.cpp
index d276abee64..73486d8e31 100644
--- a/sflphone-common/src/iax/iaxcall.cpp
+++ b/sflphone-common/src/iax/iaxcall.cpp
@@ -27,157 +27,165 @@ IAXCall::IAXCall (const CallID& id, Call::CallType type) : Call (id, type), _ses
 
 IAXCall::~IAXCall()
 {
-    _session = NULL; // just to be sure to don't have unknown pointer, do not delete it!
+	_session = NULL; // just to be sure to don't have unknown pointer, do not delete it!
 }
 
-void
+	void
 IAXCall::setFormat (int format)
 {
-    _format = format;
-
-    _info ("IAX set supported format: ");
-
-    switch (format) {
-
-        case AST_FORMAT_ULAW:
-            _info("PCMU");
-            setAudioCodec (PAYLOAD_CODEC_ULAW);
-            break;
-
-        case AST_FORMAT_GSM:
-            _info ("GSM");
-            setAudioCodec (PAYLOAD_CODEC_GSM);
-            break;
-
-        case AST_FORMAT_ALAW:
-            _info ("ALAW");
-            setAudioCodec (PAYLOAD_CODEC_ALAW);
-            break;
-
-        case AST_FORMAT_ILBC:
-            _info ("ILBC");
-            setAudioCodec (PAYLOAD_CODEC_ILBC_20);
-            break;
-
-        case AST_FORMAT_SPEEX:
-            _info ("SPEEX");
-            setAudioCodec (PAYLOAD_CODEC_SPEEX_8000);
-            break;
-
-        default:
-            _info ("Error audio codec type %i not supported!", format);
-            setAudioCodec ( (AudioCodecType) -1);
-            break;
-    }
+	_format = format;
+
+	_info ("IAX set supported format: ");
+
+	switch (format) {
+
+		case AST_FORMAT_ULAW:
+			_info("PCMU");
+			setAudioCodec (PAYLOAD_CODEC_ULAW);
+			break;
+
+		case AST_FORMAT_GSM:
+			_info ("GSM");
+			setAudioCodec (PAYLOAD_CODEC_GSM);
+			break;
+
+		case AST_FORMAT_ALAW:
+			_info ("ALAW");
+			setAudioCodec (PAYLOAD_CODEC_ALAW);
+			break;
+
+		case AST_FORMAT_ILBC:
+			_info ("ILBC");
+			setAudioCodec (PAYLOAD_CODEC_ILBC_20);
+			break;
+
+		case AST_FORMAT_SPEEX:
+			_info ("SPEEX");
+			setAudioCodec (PAYLOAD_CODEC_SPEEX_8000);
+			break;
+
+		default:
+			_info ("Error audio codec type %i not supported!", format);
+			setAudioCodec ( (AudioCodecType) -1);
+			break;
+	}
 }
 
 
-int
+	int
 IAXCall::getSupportedFormat()
 {
-    CodecOrder map;
-    int format = 0;
-    unsigned int iter;
+	CodecOrder map;
+	int format = 0;
+	unsigned int iter;
 
-    _info ("IAX get supported format: ");
+	_info ("IAX get supported format: ");
 
-    map = getCodecMap().getActiveCodecs();
+	map = getCodecMap().getActiveCodecs();
 
-    for (iter=0 ; iter < map.size() ; iter++) {
-        switch (map[iter]) {
+	for (iter=0 ; iter < map.size() ; iter++) {
+		switch (map[iter]) {
 
-            case PAYLOAD_CODEC_ULAW:
-                _info ("PCMU ");
-                format |= AST_FORMAT_ULAW;
-                break;
+			case PAYLOAD_CODEC_ULAW:
+				_info ("PCMU ");
+				format |= AST_FORMAT_ULAW;
+				break;
 
-            case PAYLOAD_CODEC_GSM:
-                _info ("GSM ");
-                format |= AST_FORMAT_GSM;
-                break;
+			case PAYLOAD_CODEC_GSM:
+				_info ("GSM ");
+				format |= AST_FORMAT_GSM;
+				break;
 
-            case PAYLOAD_CODEC_ALAW:
-                _info ("PCMA ");
-                format |= AST_FORMAT_ALAW;
-                break;
+			case PAYLOAD_CODEC_ALAW:
+				_info ("PCMA ");
+				format |= AST_FORMAT_ALAW;
+				break;
 
-            case PAYLOAD_CODEC_ILBC_20:
-                _info ("ILBC ");
-                format |= AST_FORMAT_ILBC;
-                break;
+			case PAYLOAD_CODEC_ILBC_20:
+				_info ("ILBC ");
+				format |= AST_FORMAT_ILBC;
+				break;
 
-            case PAYLOAD_CODEC_SPEEX_8000:
-                _info ("SPEEX ");
-                format |= AST_FORMAT_SPEEX;
-                break;
+			case PAYLOAD_CODEC_SPEEX_8000:
+				_info ("SPEEX ");
+				format |= AST_FORMAT_SPEEX;
+				break;
 
-            default:
-                break;
-        }
-    }
+			default:
+				break;
+		}
+	}
 
-    return format;
+	return format;
 
 }
 
-int
-IAXCall::getFirstMatchingFormat (int needles)
-{
-    CodecOrder map = getCodecMap().getActiveCodecs();
-    int format = 0;
-    unsigned int iter;
+int IAXCall::getFirstMatchingFormat (int needles, account_id) {
+
+	Account *account;
+	CodecOrder map;
+	int format = 0;
+	unsigned int iter;
+
+	_debug ("IAX get first matching codec: ");
 
-    _debug ("IAX get first matching codec: ");
+	account = Manager::instance().getAccount (account_id);
+	if (account != NULL) {
+		map = account->getActiveCodecs();
+	}
+	else {
+		_error ("No IAx account could be found");
+	}
 
-    for (iter=0 ; iter < map.size() ; iter++) {
-        switch (map[iter]) {
+	for (iter=0 ; iter < map.size() ; iter++) {
+		switch (map[iter]) {
 
-            case PAYLOAD_CODEC_ULAW:
-                _debug ("PCMU");
-                format = AST_FORMAT_ULAW;
-                break;
+			case PAYLOAD_CODEC_ULAW:
+				_debug ("PCMU");
+				format = AST_FORMAT_ULAW;
+				break;
 
-            case PAYLOAD_CODEC_GSM:
-                _debug ("GSM");
-                format = AST_FORMAT_GSM;
-                break;
+			case PAYLOAD_CODEC_GSM:
+				_debug ("GSM");
+				format = AST_FORMAT_GSM;
+				break;
 
-            case PAYLOAD_CODEC_ALAW:
-                _debug ("PCMA");
-                format = AST_FORMAT_ALAW;
-                break;
+			case PAYLOAD_CODEC_ALAW:
+				_debug ("PCMA");
+				format = AST_FORMAT_ALAW;
+				break;
 
-            case PAYLOAD_CODEC_ILBC_20:
-                _debug ("ILBC");
-                format = AST_FORMAT_ILBC;
-                break;
+			case PAYLOAD_CODEC_ILBC_20:
+				_debug ("ILBC");
+				format = AST_FORMAT_ILBC;
+				break;
 
-            case PAYLOAD_CODEC_SPEEX_8000:
-                _debug ("SPEEX");
-                format = AST_FORMAT_SPEEX;
-                break;
+			case PAYLOAD_CODEC_SPEEX_8000:
+				_debug ("SPEEX");
+				format = AST_FORMAT_SPEEX;
+				break;
 
-            default:
-                break;
-        }
+			default:
+				break;
+		}
 
-        // Return the first that matches
-        if (format & needles)
-            return format;
+		// Return the first that matches
+		if (format & needles)
+			return format;
 
-    }
+	}
 
-    return 0;
+	return 0;
 }
 
 CodecDescriptor& IAXCall::getCodecMap()
 {
-    return _codecMap;
+	return _codecMap;
 }
 
 AudioCodecType IAXCall::getAudioCodec()
 {
-    return _audioCodec;
+	return _audioCodec;
 }
 
 
diff --git a/sflphone-common/src/iax/iaxcall.h b/sflphone-common/src/iax/iaxcall.h
index 6d8b3f6027..8cb424ba25 100644
--- a/sflphone-common/src/iax/iaxcall.h
+++ b/sflphone-common/src/iax/iaxcall.h
@@ -90,7 +90,7 @@ public:
      * @param needles  The format(s) (bitwise) you are looking for to match
      * @return int  The matching format, thus 0 if none matches
      */
-    int getFirstMatchingFormat(int needles);
+    int getFirstMatchingFormat(int needles, AccountID account_id);
 
     // AUDIO
     /** 
diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp
index 3aedd89b8d..1953f6b976 100644
--- a/sflphone-common/src/iax/iaxvoiplink.cpp
+++ b/sflphone-common/src/iax/iaxvoiplink.cpp
@@ -712,8 +712,8 @@ IAXVoIPLink::iaxOutgoingInvite (IAXCall* call)
 
     wait = 0;
     /** @todo Make preference dynamic, and configurable */
-    audio_format_preferred =  call->getFirstMatchingFormat (call->getSupportedFormat());
-    audio_format_capability = call->getSupportedFormat();
+    audio_format_preferred =  call->getFirstMatchingFormat (call->getSupportedFormat (account->getActiveCodecs ()));
+    audio_format_capability = call->getSupportedFormat (account->getActiveCodecs ());
 
     _debug ("IAX New call: %s", strNum.c_str());
     iax_call (newsession, username.c_str(), username.c_str(), strNum.c_str(), lang, wait, audio_format_preferred, audio_format_capability);
@@ -1109,9 +1109,9 @@ IAXVoIPLink::iaxHandlePrecallEvent (iax_event* event)
                  * l'établissement du codec de transmission */
 
                 // Remote lists its capabilities
-                int format = call->getFirstMatchingFormat (event->ies.capability);
+                int format = call->getFirstMatchingFormat (event->ies.capability, getAccountID ());
                 // Remote asks for preferred codec voiceformat
-                int pref_format = call->getFirstMatchingFormat (event->ies.format);
+                int pref_format = call->getFirstMatchingFormat (event->ies.format, getAccountID ());
 
                 // Priority to remote's suggestion. In case it's a forwarding, no transcoding
                 // will be needed from the server, thus less latency.
@@ -1144,7 +1144,6 @@ IAXVoIPLink::iaxHandlePrecallEvent (iax_event* event)
             id = call->getCallId();
             _debug ("IAXVoIPLink::hungup::iaxHandlePrecallEvent");
             Manager::instance().peerHungupCall (id);
-            // terminateOneCall(id);
             removeCall (id);
             break;
 
@@ -1153,7 +1152,6 @@ IAXVoIPLink::iaxHandlePrecallEvent (iax_event* event)
             break;
 
         case IAX_IE_MSGCOUNT:
-            //_debug("messssssssssssssssssssssssssssssssssssssssssssssssages");
             break;
 
         default:
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index d58d570076..8038bb9553 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2383,6 +2383,8 @@ ManagerImpl::initAudioCodec (void)
      */
 	_codecDescriptorMap.init();
 
+	// The accounts are not yet loaded. Move this logic in loadAccount ()
+	/*
     // if the user never set the codec list, use the default configuration
     if (getConfigString (AUDIO, "ActiveCodecs") == "") {
         _codecDescriptorMap.setDefaultOrder();
@@ -2392,7 +2394,7 @@ ManagerImpl::initAudioCodec (void)
     else {
         std::vector<std::string> active_list = retrieveActiveCodecs();
         setActiveCodecList (active_list);
-    }
+    }*/
 }
 
 /*
@@ -2401,10 +2403,13 @@ ManagerImpl::initAudioCodec (void)
 void ManagerImpl::setActiveCodecList (const std::vector<  std::string >& list) {
 
     _warn ("Set active codecs list");
+	// TODO Save the codec list per account
     _codecDescriptorMap.saveActiveCodecs (list);
+
     // setConfig
     std::string s = serialize (list);
     _warn ("Setting codec with payload number %s to the active list", s.c_str());
+	// Set the config per account
     setConfig ("Audio", "ActiveCodecs", s);
 }
 
@@ -2415,6 +2420,7 @@ std::vector<std::string> ManagerImpl::retrieveActiveCodecs() {
 
 	// This property is now set per account basis
     std::string s = getConfigString (AUDIO, "ActiveCodecs");
+	_warn ("ManagerImpl::retrieveActiveCodecs: %s", s.c_str ());
     return unserialize (s);
 }
 
@@ -2445,53 +2451,6 @@ std::string ManagerImpl::serialize (std::vector<std::string> v) {
     return res;
 }
 
-
-std::vector <std::string> ManagerImpl::getActiveCodecList (void) {
-
-    _warn ("ManagerImpl::getActiveCodecList");
-    std::vector< std::string > v;
-    CodecOrder active = _codecDescriptorMap.getActiveCodecs();
-    unsigned int i=0;
-    size_t size = active.size();
-
-    while (i<size) {
-        std::stringstream ss;
-        ss << active[i];
-        v.push_back ( (ss.str()).data());
-        _warn ("Codec with payload number %s is active", ss.str().data());
-        i++;
-    }
-
-    return v;
-}
-
-
-/**
- * Send the list of codecs to the client through DBus.
- * TODO Add the account ID as parameter
- */
-std::vector< std::string > ManagerImpl::getCodecList (void) {
-
-    std::vector<std::string> list;
-
-    CodecsMap codecs = _codecDescriptorMap.getCodecsMap();
-    CodecOrder order = _codecDescriptorMap.getActiveCodecs();
-    CodecsMap::iterator iter = codecs.begin();
-
-    while (iter!=codecs.end()) {
-        std::stringstream ss;
-
-        if (iter->second != NULL) {
-            ss << iter->first;
-            list.push_back ( (ss.str()).data());
-        }
-
-        iter++;
-    }
-
-    return list;
-}
-
 std::string ManagerImpl::getCurrentCodecName (const CallID& id) {
 
     AccountID accountid = getAccountFromCall (id);
@@ -4151,7 +4110,7 @@ ManagerImpl::loadAccountMap()
         }
 
         else {
-            _debug ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str());
+            _error ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str());
         }
 
         if (tmpAccount != NULL) {
@@ -4163,18 +4122,6 @@ ManagerImpl::loadAccountMap()
         iter++;
     }
 
-    /*
-    if (_directIpAccount == NULL) {
-        _debug ("Failed to create direct ip calls \"account\"");
-    } else {
-        // Force the options to be loaded
-        // No registration in the sense of
-        // the REGISTER method is performed.
-        _debug ("Succeed to create direct ip calls \"account\"");
-        _directIpAccount->registerVoIPLink();
-    _accountMap[IP2IP_PROFILE] = _directIpAccount;
-    }
-    */
     _debug ("nbAccount loaded %i", nbAccount);
 
     return nbAccount;
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index a60270e628..9068c47478 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -495,12 +495,6 @@ class ManagerImpl {
      */
     void deleteAllCredential(const AccountID& accountID);
     
-    /**
-     * Get the list of codecs we supports, not ordered
-     * @return The list of the codecs
-     */
-    std::vector< ::std::string > getCodecList( void );
-
     /**
      * Get current codec name
      * @param call id
diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index c9cf1b6e97..34d5974438 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -46,25 +46,9 @@ Sdp::Sdp (pj_pool_t *pool)
     _pool = pool;
 }
 
-Sdp::~Sdp()
-{
-
-    //unsigned int k;
-
-    /*
-    for( k=0; k<_session_media.size(); k++ ){
-        delete _session_media[k];
-        _session_media[k] = 0;
-    }*/
-
-    //for( k=0; k<_local_media_cap.size(); k++ ){
-    //  delete _local_media_cap[k];
-    //_local_media_cap[k] = 0;
-    //}
-}
+Sdp::~Sdp() { }
 
-void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
-{
+void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) {
 
     pjmedia_sdp_media* med;
     pjmedia_sdp_rtpmap rtpmap;
@@ -127,19 +111,20 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
             throw;
         }
     } else {
-        _debug ("No hash specified");
+        _warn ("No hash specified");
     }
 
     *p_med = med;
 }
 
-int Sdp::create_local_offer ()
-{
+int Sdp::create_local_offer (CodecOrder selectedCodecs) {
+
     pj_status_t status;
 
     _debug ("Create local offer");
+
     // Build local media capabilities
-    set_local_media_capabilities ();
+    set_local_media_capabilities (selectedCodecs);
 
     // Reference: RFC 4566 [5]
 
@@ -153,11 +138,8 @@ int Sdp::create_local_offer ()
     sdp_add_session_name();
     sdp_add_connection_info();
     sdp_add_timing();
-    //sdp_addAttributes( _pool );
     sdp_add_media_description();
 
-    //toString ();
-
     // Validate the sdp session
     status = pjmedia_sdp_validate (this->_local_offer);
 
@@ -167,17 +149,17 @@ int Sdp::create_local_offer ()
     return PJ_SUCCESS;
 }
 
-int Sdp::create_initial_offer()
-{
+int Sdp::create_initial_offer (CodecOrder selectedCodecs) {
+
     pj_status_t status;
     pjmedia_sdp_neg_state state;
 
     _debug ("Create initial offer");
     // Build the SDP session descriptor
-    status = create_local_offer();
+    status = create_local_offer (selectedCodecs);
 
     if (status != PJ_SUCCESS) {
-        _debug ("    Error: Failled to create initial offer");
+        _warn ("    Error: Failed to create initial offer");
         return status;
     }
 
@@ -185,7 +167,7 @@ int Sdp::create_initial_offer()
     status = pjmedia_sdp_neg_create_w_local_offer (_pool, get_local_sdp_session(), &_negociator);
 
     if (status != PJ_SUCCESS) {
-        _debug ("    Error: Failled to create an initial SDP negociator");
+        _error ("    Error: Failed to create an initial SDP negociator");
         return status;
     }
 
@@ -198,8 +180,8 @@ int Sdp::create_initial_offer()
     return PJ_SUCCESS;
 }
 
-int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote)
-{
+int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder selectedCodecs) {
+
     // Create the SDP negociator instance by calling
     // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional )
 
@@ -211,7 +193,7 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote)
     // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional )
 
     // Build the local offer to respond
-    status = create_local_offer();
+    status = create_local_offer (selectedCodecs);
 
     if (status != PJ_SUCCESS) {
         return status;
@@ -228,8 +210,8 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote)
     return PJ_SUCCESS;
 }
 
-pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
-{
+pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata) {
+
     static const pj_str_t str_application = { (char*) "application", 11 };
     static const pj_str_t str_sdp = { (char*) "sdp", 3 };
     pj_status_t status;
@@ -241,17 +223,17 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
         message = rdata->msg_info.msg;
 
         if (message == NULL) {
-            _debug ("No message");
+            _error ("No message");
             return PJMEDIA_SDP_EINSDP;
         }
 
         if (message->body == NULL) {
-            _debug ("Empty message body");
+            _error ("Empty message body");
             return PJMEDIA_SDP_EINSDP;
         }
 
         if (pj_stricmp (&message->body->content_type.type, &str_application) || pj_stricmp (&message->body->content_type.subtype, &str_sdp)) {
-            _debug ("Incoming Message does not contain SDP");
+            _error ("Incoming Message does not contain SDP");
             return PJMEDIA_SDP_EINSDP;
         }
 
@@ -291,13 +273,13 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
     return status;
 }
 
-void Sdp::sdp_add_protocol (void)
-{
+void Sdp::sdp_add_protocol (void) {
+
     this->_local_offer->origin.version = 0;
 }
 
-void Sdp::sdp_add_origin (void)
-{
+void Sdp::sdp_add_origin (void) {
+
     pj_time_val tv;
     pj_gettimeofday (&tv);
 
@@ -312,22 +294,22 @@ void Sdp::sdp_add_origin (void)
     this->_local_offer->origin.addr = pj_str ( (char*) _ip_addr.c_str());
 }
 
-void Sdp::sdp_add_session_name (void)
-{
+void Sdp::sdp_add_session_name (void) {
+
     this->_local_offer->name = STR_SDP_NAME;
 }
 
 
-void Sdp::sdp_add_connection_info (void)
-{
+void Sdp::sdp_add_connection_info (void) {
+
     this->_local_offer->conn->net_type = _local_offer->origin.net_type;
     this->_local_offer->conn->addr_type = _local_offer->origin.addr_type;
     this->_local_offer->conn->addr = _local_offer->origin.addr;
 }
 
 
-void Sdp::sdp_add_timing (void)
-{
+void Sdp::sdp_add_timing (void) {
+
     // RFC 3264: An offer/answer model session description protocol
     // As the session is created and destroyed through an external signaling mean (SIP), the line
     // should have a value of "0 0".
@@ -335,8 +317,8 @@ void Sdp::sdp_add_timing (void)
     this->_local_offer->time.start = this->_local_offer->time.stop = 0;
 }
 
-void Sdp::sdp_add_attributes()
-{
+void Sdp::sdp_add_attributes() {
+
     pjmedia_sdp_attr *a;
     this->_local_offer->attr_count = 1;
     a =  PJ_POOL_ZALLOC_T (_pool, pjmedia_sdp_attr);
@@ -524,10 +506,8 @@ void Sdp::toString (void)
     _debug ("LOCAL SDP: \n%s", sdp.str().c_str());
 }
 
-void Sdp::set_local_media_capabilities ()
-{
+void Sdp::set_local_media_capabilities (CodecOrder selectedCodecs) {
 
-    CodecOrder selected_codecs;
     unsigned int i;
     sdpMedia *audio;
     CodecsMap codecs_list;
@@ -543,16 +523,18 @@ void Sdp::set_local_media_capabilities ()
     audio->set_port (get_local_extern_audio_port());
 
     /* We retrieve the codecs selected by the user */
-    selected_codecs = Manager::instance().getCodecDescriptorMap().getActiveCodecs();
     codecs_list = Manager::instance().getCodecDescriptorMap().getCodecsMap();
 
-    for (i=0; i<selected_codecs.size(); i++) {
-        iter=codecs_list.find (selected_codecs[i]);
+    for (i=0; i<selectedCodecs.size(); i++) {
+        iter=codecs_list.find (selectedCodecs[i]);
 
         if (iter!=codecs_list.end()) {
             audio->add_codec (iter->second);
         }
-    }
+		else {
+			_warn ("Couldn't find audio codec");
+		}
+	}
 
     _local_media_cap.push_back (audio);
 }
diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h
index 9500fa3185..46d7ee8c95 100644
--- a/sflphone-common/src/sip/sdp.h
+++ b/sflphone-common/src/sip/sdp.h
@@ -84,7 +84,7 @@ class Sdp {
         /*
          * Build the local SDP offer
          */
-        int create_local_offer( );
+        int create_local_offer (CodecOrder selectedCodecs);
 
         /*
          * Build the sdp media section
@@ -106,7 +106,7 @@ class Sdp {
          * On building an invite outside a dialog, build the local offer and create the
          * SDP negociator instance with it.
          */
-        int create_initial_offer( );
+        int create_initial_offer (CodecOrder selectedCodecs);
 
          /*
          * On receiving an invite outside a dialog, build the local offer and create the
@@ -114,7 +114,7 @@ class Sdp {
          *
          * @param remote    The remote offer
          */
-        int receiving_initial_offer( pjmedia_sdp_session* remote );
+        int receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder selectedCodecs);
         
         /*
          * On receiving a message, check if it contains SDP and negotiate. Should be used for
@@ -251,7 +251,7 @@ class Sdp {
         Sdp(const Sdp&); //No Copy Constructor
         Sdp& operator=(const Sdp&); //No Assignment Operator
 
-        void set_local_media_capabilities ();
+        void set_local_media_capabilities (CodecOrder selectedCodecs);
 
         /*
          *  Mandatory field: Origin ("o=")
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 69a6223d88..0bfe9b5b8d 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -42,8 +42,7 @@
 #include <arpa/nameser.h>
 #include <resolv.h>
 #include <istream>
-
-#define CAN_REINVITE        1
+//#define CAN_REINVITE        1
 
 static char * invitationStateMap[] = {
     (char*) "PJSIP_INV_STATE_NULL",
@@ -698,16 +697,15 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
             _debug ("Creating new rtp session in newOutgoingCall");
             call->getAudioRtp()->initAudioRtpSession (call);
         } catch (...) {
-            _debug ("Failed to create rtp thread from newOutGoingCall");
+            _error ("Failed to create rtp thread from newOutGoingCall");
         }
 
         call->initRecFileName();
 
         _debug ("Try to make a call to: %s with call ID: %s", toUrl.data(), id.data());
         // Building the local SDP offer
-        // localAddr = getLocalAddressAssociatedToAccount (account->getAccountID());
         call->getLocalSDP()->set_ip_address (addrSdp);
-        status = call->getLocalSDP()->create_initial_offer();
+        status = call->getLocalSDP()->create_initial_offer (account->getActiveCodecs ());
 
         if (status != PJ_SUCCESS) {
             delete call;
@@ -953,7 +951,8 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction)
 
     // Reinvite only if connected
     // Build the local SDP offer
-    status = call->getLocalSDP()->create_initial_offer();
+	// TODO Restore Re-Invite
+    // status = call->getLocalSDP()->create_initial_offer();
 
     if (status != PJ_SUCCESS)
         return 1;   // !PJ_SUCCESS
@@ -1490,7 +1489,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         _debug ("toUri in new_ip_to_ip call %s", toUri.c_str());
         // Building the local SDP offer
         call->getLocalSDP()->set_ip_address (addrSdp);
-        call->getLocalSDP()->create_initial_offer();
+        call->getLocalSDP()->create_initial_offer (account->getActiveCodecs ());
 
         try {
             call->getAudioRtp()->initAudioRtpSession (call);
@@ -3191,7 +3190,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     get_remote_sdp_from_offer (rdata, &r_sdp);
 
-    status = call->getLocalSDP()->receiving_initial_offer (r_sdp);
+    status = call->getLocalSDP()->receiving_initial_offer (r_sdp, account->getActiveCodecs ());
 
     if (status!=PJ_SUCCESS) {
         delete call;
@@ -3689,7 +3688,7 @@ void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
 
     link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId));
 
-    call->getLocalSDP()->receiving_initial_offer ( (pjmedia_sdp_session*) offer);
+    // call->getLocalSDP()->receiving_initial_offer ( (pjmedia_sdp_session*) offer, account->getActiveCodecs ());
 
     status=pjsip_inv_set_sdp_answer (call->getInvSession(), call->getLocalSDP()->get_local_sdp_session());
 
-- 
GitLab


From b8f7752447230bceea7979ec93c82f6ce0c9396f Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Tue, 8 Dec 2009 10:02:06 -0500
Subject: [PATCH 006/160] [#2518] Cleaner implementation on the client side,
 not finished yet

---
 sflphone-client-gnome/doc/Makefile.am        |   2 +-
 sflphone-client-gnome/src/actions.c          |  14 +-
 sflphone-client-gnome/src/codeclist.c        | 134 ++++++++++++++-----
 sflphone-client-gnome/src/codeclist.h        |  36 ++++-
 sflphone-client-gnome/src/config/audioconf.c |  15 ++-
 5 files changed, 152 insertions(+), 49 deletions(-)

diff --git a/sflphone-client-gnome/doc/Makefile.am b/sflphone-client-gnome/doc/Makefile.am
index 2993072194..f258a20f31 100644
--- a/sflphone-client-gnome/doc/Makefile.am
+++ b/sflphone-client-gnome/doc/Makefile.am
@@ -28,4 +28,4 @@ DOC_FIGURES =	figures/addressbook-button.png \
 				figures/conference.png	 			\
 				figures/conference_detached.png			\
 				figures/conference_attached.png
-DOC_LINGUAS = fr de es it zh_TW zh_HK zh_CN ko pl pt_BR pt ru
+DOC_LINGUAS = fr es
diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index d8e543b5bc..b3982aa8a7 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -219,7 +219,7 @@ void sflphone_fill_account_list (void) {
         
         int credential_index;
         for(credential_index = 0; credential_index < number_of_credential; credential_index++) {
-            GHashTable * credential_information = dbus_get_credential(a->accountID, credential_index);
+            GHashTable * credential_information = dbus_get_credential (a->accountID, credential_index);
             g_ptr_array_add(a->credential_information, credential_information);
         }
 
@@ -272,6 +272,9 @@ void sflphone_fill_account_list (void) {
         }
         g_free(a->protocol_state_description);
         a->protocol_state_description = g_hash_table_lookup(details, REGISTRATION_STATE_DESCRIPTION);
+
+		// Attach a codec list to each account
+		account_create_codec_list (&a);
     }
 
 	// Set the current account message number
@@ -297,7 +300,7 @@ gboolean sflphone_init() {
         history = calltab_init(TRUE, HISTORY);
 
         account_list_init ();
-        system_codec_list_init ();
+        codec_capabilities_load ();
 		conferencelist_init ();
 
         // Fetch the configured accounts
@@ -307,7 +310,7 @@ gboolean sflphone_init() {
         sflphone_fill_ip2ip_profile();
         
         // Fetch the audio codecs
-        sflphone_fill_codec_list();
+        // sflphone_fill_codec_list();
 
 		// Fetch the conference list
 		// sflphone_fill_conference_list();
@@ -1059,7 +1062,7 @@ void sflphone_fill_codec_list () {
 
 	// Clear the list of codecs supported by the application.
 	// This is a global list inherited by all accounts
-    system_codec_list_clear ();
+    // system_codec_list_clear ();
     codecs = (gchar**) dbus_codec_list ();
     
 	// If no codecs are available, problem ... Application has to quit
@@ -1111,7 +1114,7 @@ void sflphone_fill_codec_list_per_account (account_t *account, gchar **system_wi
         c->_bitrate = atof (details[2]);
         c->_bandwidth = atof (details[3]);
         codec_list_add (c, &codeclist);
-	g_print ("sflphone_fill_codec_list_per_account\n");
+		g_print ("Adding codec %s\n", c->name);
     }
 
 	for (pl=system_wide_codecs; *system_wide_codecs; system_wide_codecs++)
@@ -1131,6 +1134,7 @@ void sflphone_fill_codec_list_per_account (account_t *account, gchar **system_wi
             codec_list_add (c, &codeclist);
         }
     }
+	account->codecs = codeclist; 
 }
 
 void sflphone_fill_call_list (void)
diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index 6eddc5f075..72b49128a1 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -24,7 +24,7 @@
 
 #include "dbus.h"
 
-GQueue * codecsAvailable = NULL;
+GQueue * codecsCapabilities = NULL;
 
 	gint
 is_name_codecstruct (gconstpointer a, gconstpointer b)
@@ -52,23 +52,95 @@ void codec_list_init (GQueue **queue) {
 	*queue = g_queue_new();
 }
 
-void system_codec_list_init (void) {
+void codec_capabilities_load (void) {
 
-	// Create the queue object that will contain the audio codecs
-	codecsAvailable = g_queue_new();
+	gchar **codecs = NULL, **pl = NULL;
+
+	// Create the queue object that will contain the global list of audio codecs
+	g_queue_free (codecsCapabilities);
+	codecsCapabilities = g_queue_new();
+
+	// This is a global list inherited by all accounts
+    codecs = (gchar**) dbus_codec_list ();
+    
+	// Add the codecs in the list
+	for (pl=codecs; *codecs; codecs++) {
+
+		codec_t *c;
+		codec_create_new (atoi (*codecs), TRUE, &c);
+		g_queue_push_tail (codecsCapabilities, (gpointer*) c);
+    }
+
+	// If we didn't load any codecs, problem ...
+	if (g_queue_get_length (codecsCapabilities) == 0) {
+
+		// Error message
+		ERROR ("No audio codecs found");
+        dbus_unregister(getpid());
+        exit(0);
+    }
+}
+
+void account_create_codec_list (account_t **acc) {
+
+	gchar **order = NULL;
+	GQueue *_codecs;
+
+	_codecs = (*acc)->codecs;
+	if (_codecs != NULL)
+		g_queue_free (_codecs);
+
+	_codecs = g_queue_new ();
+	_codecs = g_queue_copy (codecsCapabilities);
+
+	(*acc)->codecs = _codecs;
+	// order = (gchar**) dbus_get_active_codec_list (acc->accountID);
+}
+
+void codec_create_new (gint payload, gboolean active, codec_t **c) {
+
+	codec_t *codec;
+	gchar **specs;
+
+	codec = g_new0 (codec_t, 1);
+	codec->_payload = payload;
+    specs = (gchar **) dbus_codec_details (payload);
+	codec->name = specs[0];
+	codec->sample_rate = atoi (specs[1]);
+	codec->_bitrate = atoi (specs[2]);
+	codec->_bandwidth = atoi (specs[3]);
+	codec->is_active = active;
+
+	*c = codec;
+}
+
+void codec_create_new_with_specs (gint payload, gchar **specs, gboolean active, codec_t **c) {
+
+	codec_t *codec;
+
+	codec = g_new0 (codec_t, 1);
+	codec->_payload = payload;
+	codec->name = specs[0];
+	codec->sample_rate = atoi (specs[1]);
+	codec->_bitrate = atoi (specs[2]);
+	codec->_bandwidth = atoi (specs[3]);
+	codec->is_active = active;
+
+	*c = codec;
 }
 
+
 void codec_list_clear (GQueue **queue) {
 
 	g_queue_free (*queue);
 	*queue = g_queue_new();
 }
 
-void system_codec_list_clear (void) {
+/*void codec_list_clear (void) {
 
-	g_queue_free (codecsAvailable);
-	codecsAvailable = g_queue_new();
-}
+	g_queue_free (codecsCapabilities);
+	codecsCapabilities = g_queue_new();
+}*/
 
 void codec_list_add(codec_t * c, GQueue **queue) {
 
@@ -76,9 +148,7 @@ void codec_list_add(codec_t * c, GQueue **queue) {
 	g_queue_push_tail (*queue, (gpointer *) c);
 }
 
-	void 
-codec_set_active(codec_t * c)
-{
+void codec_set_active (codec_t * c) {
 
 	if(c)
 	{
@@ -87,9 +157,7 @@ codec_set_active(codec_t * c)
 	}
 }
 
-	void
-codec_set_inactive(codec_t * c)
-{
+void codec_set_inactive (codec_t * c) {
 
 	if(c)
 		c->is_active = FALSE;
@@ -99,23 +167,21 @@ guint codec_list_get_size () {
 
 	// The system wide codec list and the one per account have exactly the same size
 	// The only difference may be the order and the enabled codecs
-	return g_queue_get_length (codecsAvailable);
+	return g_queue_get_length (codecsCapabilities);
 }
 
-	codec_t*
-codec_list_get_by_name( const gchar* name)
-{
-	GList * c = g_queue_find_custom (codecsAvailable, name, is_name_codecstruct);
+codec_t* codec_list_get_by_name (const gchar* name) {
+
+	GList * c = g_queue_find_custom (codecsCapabilities, name, is_name_codecstruct);
 	if(c)
 		return (codec_t *)c->data;
 	else
 		return NULL;
 }
 
-	codec_t*
-codec_list_get_by_payload(gconstpointer payload)
-{
-	GList * c = g_queue_find_custom(codecsAvailable, payload, is_payload_codecstruct);
+codec_t* codec_list_get_by_payload (gconstpointer payload) {
+
+	GList * c = g_queue_find_custom(codecsCapabilities, payload, is_payload_codecstruct);
 	if(c)
 		return (codec_t *)c->data;
 	else
@@ -133,35 +199,36 @@ void codec_set_prefered_order (guint index, GQueue *q) {
 	g_queue_push_head (q, prefered);
 }
 
-void codec_list_move_codec_up (guint index, GQueue *q) {
+void codec_list_move_codec_up (guint index) {
 
-	DEBUG("Codec list Size: %i \n", codec_list_get_size());
+	DEBUG("Codec list Size: %i \n", codec_list_get_size ());
 
 	if (index != 0)
 	{
-		gpointer codec = g_queue_pop_nth (q, index);
-		g_queue_push_nth (q, codec, index-1);
+		gpointer codec = g_queue_pop_nth (codecsCapabilities, index);
+		g_queue_push_nth (codecsCapabilities, codec, index-1);
 	}
 }
 
-void codec_list_move_codec_down (guint index, GQueue *q) {
+void codec_list_move_codec_down (guint index) {
 
 	DEBUG("Codec list Size: %i \n",codec_list_get_size());
 
-	if (index != q->length)
+	if (index != codecsCapabilities->length)
 	{
-		gpointer codec = g_queue_pop_nth (q, index);
-		g_queue_push_nth (q, codec, index+1);
+		gpointer codec = g_queue_pop_nth (codecsCapabilities, index);
+		g_queue_push_nth (codecsCapabilities, codec, index+1);
 	}
 }
 
 void codec_list_update_to_daemon (account_t *acc) {
 
+	/*
 	// String listing of all codecs payloads
 	const gchar** codecList;
 
 	// Length of the codec list
-	int length = codecsAvailable->length;
+	int length = codecsCapabilities->length;
 
 	// Initiate double array char list for one string
 	codecList = (void*)malloc(sizeof(void*));
@@ -205,8 +272,9 @@ void codec_list_update_to_daemon (account_t *acc) {
 		free((gchar*)*(codecList+i));
 	}
 	free(codecList);
+	*/
 }
 
 GQueue* get_system_codec_list (void) {
-	return  codecsAvailable;
+	return  codecsCapabilities;
 }
diff --git a/sflphone-client-gnome/src/codeclist.h b/sflphone-client-gnome/src/codeclist.h
index 662e3ebf7a..fc46baf79f 100644
--- a/sflphone-client-gnome/src/codeclist.h
+++ b/sflphone-client-gnome/src/codeclist.h
@@ -55,7 +55,7 @@ void codec_list_init (GQueue **q);
 /** 
  * This function initialize the system wide codec list. 
  */
-void system_codec_list_init (void);
+void codec_capabilities_load (void);
 
 /** 
  * This function empty and free a specific codec list. 
@@ -115,13 +115,13 @@ void codec_set_prefered_order (guint index, GQueue *q);
  * Move the codec from an unit up in the codec_list
  * @param index The current index in the list
  */
-void codec_list_move_codec_up (guint index, GQueue *q);
+void codec_list_move_codec_up (guint index);
 
 /** 
  * Move the codec from an unit down in the codec_list
  * @param index The current index in the list
  */
-void codec_list_move_codec_down (guint index, GQueue *q);
+void codec_list_move_codec_down (guint index);
 
 /**
  * Notify modifications on codecs to the server
@@ -132,4 +132,34 @@ codec_t* codec_list_get_by_payload(gconstpointer payload);
 
 GQueue* get_system_codec_list (void);
 
+/**
+ * Instanciate a new codecs with the given payload. 
+ * Fetches codec specification through D-Bus
+ *
+ * @param payload		The unique RTP payload
+ * @param active		Whether or not this codec should active (checked)
+ * @param c			A pointer to receive the new codec instance
+ */
+void codec_create_new (gint payload, gboolean active, codec_t **c);
+
+/*
+ * Instanciate a new codec with the given specification
+ *
+ * @param payload	The unique RTP payload
+ * @param specs		A list of codec specifications. Ordered: name, sample rate, bit rate, bandwith
+ * @param active	Whether or not this codec should active (checked)
+ * @param c			A pointer to receive the new codec instance
+ */
+void codec_create_new_with_specs (gint payload, gchar **specs, gboolean active, codec_t **c);
+
+/*
+ * Attach a codec list to a specific account
+ *
+ * @param acc		A pointer on the account to modify
+ */
+void account_create_codec_list (account_t **acc);
+
+
 #endif
+
+
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index 912eb80d72..831c83fe48 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -60,6 +60,7 @@ void preferences_dialog_fill_codec_list (account_t **a) {
     gtk_list_store_clear (codecStore);
 	if (a) {
 		current = (*a)->codecs;
+		g_print ("%s\n", (*a)->accountID);
 	}
 	else {
 		// Failover
@@ -71,9 +72,9 @@ void preferences_dialog_fill_codec_list (account_t **a) {
     for(i = 0; i < codec_list_get_size (); i++)
     {
         codec_t *c = codec_list_get_nth (i, current);
-        DEBUG ("%s", c->name);
         if (c)
         {
+			DEBUG ("%s", c->name);
             gtk_list_store_append (codecStore, &iter);
             gtk_list_store_set (codecStore, &iter,
                     COLUMN_CODEC_ACTIVE,	c->is_active,									// Active
@@ -425,10 +426,10 @@ codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoin
     gtk_tree_path_free(treePath);
 
     // Modify codec queue to represent change
-    if(active)
-        codec_set_active(codec);
+    if (active)
+        codec_set_active (codec);
     else
-        codec_set_inactive(codec);
+        codec_set_inactive (codec);
 
     // Perpetuate changes to the deamon
     codec_list_update_to_daemon (acc);
@@ -478,7 +479,7 @@ static void codec_move (gboolean moveUp, gpointer data) {
         gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
 
     // Scroll to new position
-    gtk_tree_view_scroll_to_cell(treeView, treePath, NULL, FALSE, 0, 0);
+    gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (codecTreeView), treePath, NULL, FALSE, 0, 0);
 
     // Free resources
     gtk_tree_path_free(treePath);
@@ -487,9 +488,9 @@ static void codec_move (gboolean moveUp, gpointer data) {
 
     // Perpetuate changes in codec queue
     if(moveUp)
-        codec_list_move_codec_up (indice, acc->codecs);
+        codec_list_move_codec_up (indice);
     else
-        codec_list_move_codec_down (indice, acc->codecs);
+        codec_list_move_codec_down (indice);
 
     // Perpetuate changes to the deamon
     codec_list_update_to_daemon (acc);
-- 
GitLab


From 324495cc2c43836242271c2855b26a46de1035a3 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 20 Jan 2010 12:28:33 -0500
Subject: [PATCH 007/160] [#2518] Each account has its own codec list now

---
 sflphone-client-gnome/src/actions.c           |   98 +-
 sflphone-client-gnome/src/actions.h           |    2 +-
 sflphone-client-gnome/src/codeclist.c         |   94 +-
 sflphone-client-gnome/src/codeclist.h         |    9 +-
 .../src/config/accountconfigdialog.c          |    4 +
 sflphone-client-gnome/src/config/audioconf.c  | 1335 +++++++++--------
 .../dbus/configurationmanager-introspec.xml   |    1 +
 sflphone-client-gnome/src/dbus/dbus.c         |    3 +-
 sflphone-client-gnome/src/dbus/dbus.h         |    2 +-
 sflphone-common/src/account.cpp               |   94 +-
 .../dbus/configurationmanager-introspec.xml   |    1 +
 .../src/dbus/configurationmanager.cpp         |   14 +-
 .../src/dbus/configurationmanager.h           |    2 +-
 sflphone-common/src/iax/iaxcall.cpp           |   16 +-
 sflphone-common/src/iax/iaxcall.h             |    4 +-
 sflphone-common/src/iax/iaxvoiplink.cpp       |    4 +-
 sflphone-common/src/managerimpl.cpp           |   16 -
 sflphone-common/src/managerimpl.h             |    6 -
 sflphone-common/src/sip/sipvoiplink.cpp       |    2 +-
 19 files changed, 886 insertions(+), 821 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index ea216ca988..471232a392 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -178,6 +178,7 @@ void sflphone_fill_account_list (void) {
     gchar** accountID;
     unsigned int i;
 	int count;
+	GQueue *codeclist;
 
 	count = current_account_get_message_number ();
 
@@ -274,11 +275,13 @@ void sflphone_fill_account_list (void) {
         a->protocol_state_description = g_hash_table_lookup(details, REGISTRATION_STATE_DESCRIPTION);
 
 		// Attach a codec list to each account
-		account_create_codec_list (&a);
+		// account_create_codec_list (&a);
     }
 
 	// Set the current account message number
 	current_account_set_message_number (count);
+
+	sflphone_fill_codec_list ();
 }
 
 gboolean sflphone_init() {
@@ -309,7 +312,7 @@ gboolean sflphone_init() {
         // Fetch the ip2ip profile 
         sflphone_fill_ip2ip_profile();
         
-        // Fetch the audio codecs
+        // Fetch the audio codecs at startup.
         // sflphone_fill_codec_list();
 
 		// Fetch the conference list
@@ -1062,24 +1065,16 @@ void sflphone_fill_codec_list () {
 	account_t *current = NULL;
     gchar** codecs = NULL;
 
-	// Clear the list of codecs supported by the application.
-	// This is a global list inherited by all accounts
-    // system_codec_list_clear ();
-    codecs = (gchar**) dbus_codec_list ();
-    
-	// If no codecs are available, problem ... Application has to quit
-	if (codecs != NULL)
-    {
-		account_list_size = account_list_get_size ();
-
-		for (i=0; i<account_list_size; i++)
-		{
-			current = account_list_get_nth (i);
-			if (current) {
-				sflphone_fill_codec_list_per_account (current, codecs);
-			}
+	account_list_size = account_list_get_size ();
+
+	for (i=0; i<account_list_size; i++)
+	{
+		current = account_list_get_nth (i);
+		if (current) {
+			sflphone_fill_codec_list_per_account (&current);
 		}
 	}
+
 	/*
 	if (codec_list_get_size() == 0) {
 
@@ -1090,53 +1085,55 @@ void sflphone_fill_codec_list () {
     }*/
 }
 
-void sflphone_fill_codec_list_per_account (account_t *account, gchar **system_wide_codecs) {
+void sflphone_fill_codec_list_per_account (account_t **account) {
 
 	gchar **order;
     gchar** details;
     gchar** pl;
 	gchar *accountID;
 	GQueue *codeclist;
+	gboolean active = FALSE;
 
-    order = (gchar**) dbus_get_active_codec_list (account->accountID);
-    codeclist = account->codecs;
+    order = (gchar**) dbus_get_active_codec_list ((*account)->accountID);
+    codeclist = (*account)->codecs;
 
 	// First clean the list
 	codec_list_clear (&codeclist);	
 
 	for (pl=order; *order; order++)
     {
-		codec_t * c = g_new0 (codec_t, 1);
-        c->_payload = atoi (*order);
-        details = (gchar **) dbus_codec_details (c->_payload);
-
-        c->name = details[0];
-        c->is_active = TRUE;
-        c->sample_rate = atoi (details[1]);
-        c->_bitrate = atof (details[2]);
-        c->_bandwidth = atof (details[3]);
-        codec_list_add (c, &codeclist);
-		g_print ("Adding codec %s\n", c->name);
+		codec_t * cpy;
+		// Each account will have a copy of the system-wide capabilities
+		codec_create_new_from_caps (codec_list_get_by_payload ((gconstpointer) atoi (*order), NULL), &cpy);
+		if (cpy) {
+			cpy->is_active = TRUE;
+			codec_list_add (cpy, &codeclist);
+		}
+		else
+			ERROR ("Couldn't find codec \n");
     }
 
-	for (pl=system_wide_codecs; *system_wide_codecs; system_wide_codecs++)
-	{
-		details = (gchar **) dbus_codec_details (atoi (*system_wide_codecs));
-		if (codec_list_get_by_payload ((gconstpointer)(size_t) atoi (*system_wide_codecs))!=NULL){
-			// does nothing - the codec is already in the list, so is active.
-        }
-        else{
-			codec_t* c = g_new0 (codec_t, 1);
-            c->_payload = atoi (*system_wide_codecs);
-            c->name = details[0];
-            c->is_active = FALSE;
-            c->sample_rate = atoi (details[1]);
-            c->_bitrate = atof (details[2]);
-            c->_bandwidth = atof (details[3]);
-            codec_list_add (c, &codeclist);
-        }
-    }
-	account->codecs = codeclist; 
+	// Test here if we just added some active codec.
+	active = (codeclist->length == 0) ? FALSE : FALSE;
+
+	guint caps_size = codec_list_get_size (), i=0;
+
+	for (i=0; i<caps_size; i++) {
+			
+		codec_t * current_cap = capabilities_get_nth (i);
+		// Check if this codec has already been enabled for this account
+		if (codec_list_get_by_payload ( (gconstpointer) current_cap->_payload, codeclist) == NULL) {
+			// codec_t *cpy;
+			// codec_create_new_from_caps (current_cap, &cpy);
+			current_cap->is_active = active;
+			codec_list_add (current_cap, &codeclist);
+		}
+		else {
+		}
+
+	}
+	
+	(*account)->codecs = codeclist; 
 }
 
 void sflphone_fill_call_list (void)
@@ -1203,7 +1200,6 @@ void sflphone_fill_conference_list(void)
 	    calltree_add_conference (current_calls, conf);
 	}
     }
-	
 }
 
 void sflphone_fill_history (void)
diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h
index 17c276b492..41466b7eac 100644
--- a/sflphone-client-gnome/src/actions.h
+++ b/sflphone-client-gnome/src/actions.h
@@ -179,7 +179,7 @@ void sflphone_set_current_account();
  */
 void sflphone_fill_codec_list ();
 
-void sflphone_fill_codec_list_per_account (account_t *, gchar**);
+void sflphone_fill_codec_list_per_account (account_t **);
 
 void sflphone_add_participant();
 
diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index 72b49128a1..6d038148fb 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -54,10 +54,13 @@ void codec_list_init (GQueue **queue) {
 
 void codec_capabilities_load (void) {
 
-	gchar **codecs = NULL, **pl = NULL;
+	gchar **codecs = NULL, **pl = NULL, **specs = NULL;
+	guint payload;
 
 	// Create the queue object that will contain the global list of audio codecs
-	g_queue_free (codecsCapabilities);
+	if (codecsCapabilities != NULL)	
+		g_queue_free (codecsCapabilities);
+
 	codecsCapabilities = g_queue_new();
 
 	// This is a global list inherited by all accounts
@@ -67,7 +70,9 @@ void codec_capabilities_load (void) {
 	for (pl=codecs; *codecs; codecs++) {
 
 		codec_t *c;
-		codec_create_new (atoi (*codecs), TRUE, &c);
+		payload = atoi (*codecs);
+		specs = (gchar **) dbus_codec_details (payload);
+		codec_create_new_with_specs (payload, specs, TRUE, &c);
 		g_queue_push_tail (codecsCapabilities, (gpointer*) c);
     }
 
@@ -91,12 +96,19 @@ void account_create_codec_list (account_t **acc) {
 		g_queue_free (_codecs);
 
 	_codecs = g_queue_new ();
-	_codecs = g_queue_copy (codecsCapabilities);
+	// _codecs = g_queue_copy (codecsCapabilities);
 
 	(*acc)->codecs = _codecs;
 	// order = (gchar**) dbus_get_active_codec_list (acc->accountID);
 }
 
+void account_set_codec_list (account_t **acc) {
+
+	// Reset the codec list
+	// account_create_codec_list (a);
+
+}
+
 void codec_create_new (gint payload, gboolean active, codec_t **c) {
 
 	codec_t *codec;
@@ -129,10 +141,27 @@ void codec_create_new_with_specs (gint payload, gchar **specs, gboolean active,
 	*c = codec;
 }
 
+void codec_create_new_from_caps (codec_t *original, codec_t **copy) {
+
+	codec_t *codec;
+
+	codec = g_new0 (codec_t, 1);
+	codec->_payload = original->_payload;
+	codec->name = original->name;
+	codec->sample_rate = original->sample_rate;
+	codec->_bitrate = original->_bitrate;
+	codec->_bandwidth = original->_bandwidth;
+	codec->is_active = original->is_active;
+
+	*copy = codec;
+}
+
 
 void codec_list_clear (GQueue **queue) {
 
-	g_queue_free (*queue);
+	if (*queue != NULL)
+		g_queue_free (*queue);
+
 	*queue = g_queue_new();
 }
 
@@ -179,9 +208,13 @@ codec_t* codec_list_get_by_name (const gchar* name) {
 		return NULL;
 }
 
-codec_t* codec_list_get_by_payload (gconstpointer payload) {
+codec_t* codec_list_get_by_payload (gconstpointer payload, GQueue *q) {
+
+	// If NULL is passed as argument, we look into the global capabilities
+	if (q == NULL)
+		q = codecsCapabilities;
 
-	GList * c = g_queue_find_custom(codecsCapabilities, payload, is_payload_codecstruct);
+	GList * c = g_queue_find_custom (q, payload, is_payload_codecstruct);
 	if(c)
 		return (codec_t *)c->data;
 	else
@@ -192,6 +225,11 @@ codec_t* codec_list_get_nth (guint index, GQueue *q) {
 	return g_queue_peek_nth (q, index);
 }
 
+codec_t* capabilities_get_nth (guint index) {
+
+	return g_queue_peek_nth (codecsCapabilities, index);
+}
+
 void codec_set_prefered_order (guint index, GQueue *q) {
 
 	codec_t * prefered = codec_list_get_nth (index, q);
@@ -199,43 +237,55 @@ void codec_set_prefered_order (guint index, GQueue *q) {
 	g_queue_push_head (q, prefered);
 }
 
-void codec_list_move_codec_up (guint index) {
+void codec_list_move_codec_up (guint index, GQueue **q) {
 
 	DEBUG("Codec list Size: %i \n", codec_list_get_size ());
 
+	GQueue *tmp = *q;
+
 	if (index != 0)
 	{
-		gpointer codec = g_queue_pop_nth (codecsCapabilities, index);
-		g_queue_push_nth (codecsCapabilities, codec, index-1);
+		gpointer codec = g_queue_pop_nth (tmp, index);
+		g_queue_push_nth (tmp, codec, index-1);
 	}
+
+	*q = tmp;
+
 }
 
-void codec_list_move_codec_down (guint index) {
+void codec_list_move_codec_down (guint index, GQueue **q) {
 
 	DEBUG("Codec list Size: %i \n",codec_list_get_size());
 
-	if (index != codecsCapabilities->length)
+	GQueue *tmp = *q;
+
+	if (index != tmp->length)
 	{
-		gpointer codec = g_queue_pop_nth (codecsCapabilities, index);
-		g_queue_push_nth (codecsCapabilities, codec, index+1);
+		gpointer codec = g_queue_pop_nth (tmp, index);
+		g_queue_push_nth (tmp, codec, index+1);
 	}
+	
+	*q = tmp;
+
 }
 
 void codec_list_update_to_daemon (account_t *acc) {
 
-	/*
-	// String listing of all codecs payloads
+	// String listing codecs payloads
 	const gchar** codecList;
 
 	// Length of the codec list
-	int length = codecsCapabilities->length;
+	int length = acc->codecs->length;
 
 	// Initiate double array char list for one string
 	codecList = (void*)malloc(sizeof(void*));
 
 	// Get all codecs in queue
-	int i, c = 0;
-	DEBUG("List of active codecs :");
+	int c = 0;
+	unsigned int i = 0;
+
+	g_print ("List of active codecs :\n");
+	
 	for(i = 0; i < length; i++)
 	{
 		codec_t* currentCodec = codec_list_get_nth (i, acc->codecs);
@@ -245,6 +295,7 @@ void codec_list_update_to_daemon (account_t *acc) {
 			// Save only if active
 			if(currentCodec->is_active)
 			{
+		g_print ("Codec %s\n", currentCodec->name);
 				// Reallocate memory each time more than one active codec is found
 				if(c!=0)
 					codecList = (void*)realloc(codecList, (c+1)*sizeof(void*));
@@ -254,7 +305,7 @@ void codec_list_update_to_daemon (account_t *acc) {
 				// Put payload string in char array
 				sprintf(payload, "%d", currentCodec->_payload);
 				strcpy((char*)*(codecList+c), payload);
-				DEBUG(" %s", *(codecList+c));
+				g_print(" %s", *(codecList+c));
 				c++;
 			}
 		}
@@ -265,14 +316,13 @@ void codec_list_update_to_daemon (account_t *acc) {
 	*(codecList+c) = NULL;
 
 	// call dbus function with array of strings
-	dbus_set_active_codec_list (codecList);
+	dbus_set_active_codec_list (codecList, acc->accountID);
 
 	// Delete memory
 	for(i = 0; i < c; i++) {
 		free((gchar*)*(codecList+i));
 	}
 	free(codecList);
-	*/
 }
 
 GQueue* get_system_codec_list (void) {
diff --git a/sflphone-client-gnome/src/codeclist.h b/sflphone-client-gnome/src/codeclist.h
index fc46baf79f..165fd1029d 100644
--- a/sflphone-client-gnome/src/codeclist.h
+++ b/sflphone-client-gnome/src/codeclist.h
@@ -104,6 +104,7 @@ codec_t * codec_list_get_by_name(const gchar * name);
  * @return codec_t* A codec or NULL 
  */
 codec_t* codec_list_get_nth (guint index, GQueue *q);
+codec_t* capabilities_get_nth (guint index);
 
 /**
  * Set the prefered codec first in the codec list
@@ -115,20 +116,20 @@ void codec_set_prefered_order (guint index, GQueue *q);
  * Move the codec from an unit up in the codec_list
  * @param index The current index in the list
  */
-void codec_list_move_codec_up (guint index);
+void codec_list_move_codec_up (guint index, GQueue **q);
 
 /** 
  * Move the codec from an unit down in the codec_list
  * @param index The current index in the list
  */
-void codec_list_move_codec_down (guint index);
+void codec_list_move_codec_down (guint index, GQueue **q);
 
 /**
  * Notify modifications on codecs to the server
  */
 void codec_list_update_to_daemon (account_t *acc);
 
-codec_t* codec_list_get_by_payload(gconstpointer payload);
+codec_t* codec_list_get_by_payload (gconstpointer payload, GQueue *q);
 
 GQueue* get_system_codec_list (void);
 
@@ -152,6 +153,8 @@ void codec_create_new (gint payload, gboolean active, codec_t **c);
  */
 void codec_create_new_with_specs (gint payload, gchar **specs, gboolean active, codec_t **c);
 
+
+void codec_create_new_from_caps (codec_t *original, codec_t **copy);
 /*
  * Attach a codec list to a specific account
  *
diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index fbe634efa1..badb1556a6 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -1073,6 +1073,7 @@ show_account_window (account_t * a)
 		currentAccount = g_new0(account_t, 1);
 		currentAccount->properties = dbus_account_details(NULL);
 		currentAccount->accountID = "new";    
+		sflphone_fill_codec_list_per_account (&currentAccount);
 		DEBUG("Account is NULL. Will fetch default values\n");      
 	}
     
@@ -1242,6 +1243,9 @@ show_account_window (account_t * a)
 		}
 		
 
+		// Perpetuate changes to the deamon
+		codec_list_update_to_daemon (currentAccount);
+
 	} 
 	
 	gtk_widget_destroy (GTK_WIDGET(dialog));
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index 831c83fe48..0791346017 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -35,15 +35,15 @@ GtkWidget *pulse;
 GtkWidget *alsabox;
 GtkWidget *alsa_conf;
 GtkWidget *noise_conf;
-    
+
 // Codec properties ID
 enum {
-    COLUMN_CODEC_ACTIVE,
-    COLUMN_CODEC_NAME,
-    COLUMN_CODEC_FREQUENCY,
-    COLUMN_CODEC_BITRATE,
-    COLUMN_CODEC_BANDWIDTH,
-    CODEC_COLUMN_COUNT
+	COLUMN_CODEC_ACTIVE,
+	COLUMN_CODEC_NAME,
+	COLUMN_CODEC_FREQUENCY,
+	COLUMN_CODEC_BITRATE,
+	COLUMN_CODEC_BANDWIDTH,
+	CODEC_COLUMN_COUNT
 };
 
 /**
@@ -51,388 +51,392 @@ enum {
  */
 void preferences_dialog_fill_codec_list (account_t **a) {
 
-    GtkListStore *codecStore;
-    GtkTreeIter iter;
+	GtkListStore *codecStore;
+	GtkTreeIter iter;
 	GQueue *current;
 
-    // Get model of view and clear it
-    codecStore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView)));
-    gtk_list_store_clear (codecStore);
-	if (a) {
+	// Get model of view and clear it
+	codecStore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView)));
+	gtk_list_store_clear (codecStore);
+
+	if ((*a) != NULL) {
 		current = (*a)->codecs;
-		g_print ("%s\n", (*a)->accountID);
 	}
 	else {
 		// Failover
 		current = get_system_codec_list ();
 	}
 
-    // Insert codecs
-    unsigned int i;
-    for(i = 0; i < codec_list_get_size (); i++)
-    {
-        codec_t *c = codec_list_get_nth (i, current);
-        if (c)
-        {
+
+	// Insert codecs
+	unsigned int i;
+	for(i = 0; i < current->length; i++)
+	{
+		codec_t *c = codec_list_get_nth (i, current);
+		if (c)
+		{
 			DEBUG ("%s", c->name);
-            gtk_list_store_append (codecStore, &iter);
-            gtk_list_store_set (codecStore, &iter,
-                    COLUMN_CODEC_ACTIVE,	c->is_active,									// Active
-                    COLUMN_CODEC_NAME,		c->name,										// Name
-                    COLUMN_CODEC_FREQUENCY,	g_strdup_printf("%d kHz", c->sample_rate/1000),	// Frequency (kHz)
-                    COLUMN_CODEC_BITRATE,	g_strdup_printf("%.1f kbps", c->_bitrate),		// Bitrate (kbps)
-                    COLUMN_CODEC_BANDWIDTH,	g_strdup_printf("%.1f kbps", c->_bandwidth),	// Bandwidth (kpbs)
-                    -1);
-        }
-    }
+			gtk_list_store_append (codecStore, &iter);
+			gtk_list_store_set (codecStore, &iter,
+					COLUMN_CODEC_ACTIVE,	c->is_active,									// Active
+					COLUMN_CODEC_NAME,		c->name,										// Name
+					COLUMN_CODEC_FREQUENCY,	g_strdup_printf("%d kHz", c->sample_rate/1000),	// Frequency (kHz)
+					COLUMN_CODEC_BITRATE,	g_strdup_printf("%.1f kbps", c->_bitrate),		// Bitrate (kbps)
+					COLUMN_CODEC_BANDWIDTH,	g_strdup_printf("%.1f kbps", c->_bandwidth),	// Bandwidth (kpbs)
+					-1);
+		}
+	}
 }
 
 /**
  * Fill store with output audio plugins
  */
-    void
+	void
 preferences_dialog_fill_output_audio_plugin_list()
 {
-    GtkTreeIter iter;
-    gchar** list;
-    gchar* managerName;
-
-    gtk_list_store_clear(pluginlist);
-
-    // Call dbus to retreive list
-    list = dbus_get_output_audio_plugin_list();
-    // For each API name included in list
-    int c = 0;
-
-    if (list != NULL){
-        for(managerName = list[c]; managerName != NULL; managerName = list[c])
-        {
-            c++;
-            gtk_list_store_append(pluginlist, &iter);
-            gtk_list_store_set(pluginlist, &iter, 0 , managerName, -1);
-        }
-    }
-    list = NULL;
+	GtkTreeIter iter;
+	gchar** list;
+	gchar* managerName;
+
+	gtk_list_store_clear(pluginlist);
+
+	// Call dbus to retreive list
+	list = dbus_get_output_audio_plugin_list();
+	// For each API name included in list
+	int c = 0;
+
+	if (list != NULL){
+		for(managerName = list[c]; managerName != NULL; managerName = list[c])
+		{
+			c++;
+			gtk_list_store_append(pluginlist, &iter);
+			gtk_list_store_set(pluginlist, &iter, 0 , managerName, -1);
+		}
+	}
+	list = NULL;
 }
 
 /**
  * Fill output audio device store
  */
-    void
+	void
 preferences_dialog_fill_output_audio_device_list()
 {
 
-    GtkTreeIter iter;
-    gchar** list;
-    gchar** audioDevice;
-    int index;
-
-    gtk_list_store_clear(outputlist);
-
-    // Call dbus to retreive list
-    list = dbus_get_audio_output_device_list();
-
-    // For each device name included in list
-    int c = 0;
-    for(audioDevice = list; *list ; list++)
-    {
-        index = dbus_get_audio_device_index( *list );
-        gtk_list_store_append(outputlist, &iter);
-        gtk_list_store_set(outputlist, &iter, 0, *list, 1, index, -1);
-        c++;
-    }
+	GtkTreeIter iter;
+	gchar** list;
+	gchar** audioDevice;
+	int index;
+
+	gtk_list_store_clear(outputlist);
+
+	// Call dbus to retreive list
+	list = dbus_get_audio_output_device_list();
+
+	// For each device name included in list
+	int c = 0;
+	for(audioDevice = list; *list ; list++)
+	{
+		index = dbus_get_audio_device_index( *list );
+		gtk_list_store_append(outputlist, &iter);
+		gtk_list_store_set(outputlist, &iter, 0, *list, 1, index, -1);
+		c++;
+	}
 }
 
 /**
  * Select active output audio device
  */
-    void
+	void
 select_active_output_audio_device()
 {
-    if( SHOW_ALSA_CONF )
-    {
-
-        GtkTreeModel* model;
-        GtkTreeIter iter;
-        gchar** devices;
-        int currentDeviceIndex;
-        int deviceIndex;
-
-        // Select active output device on server
-        devices = dbus_get_current_audio_devices_index();
-        currentDeviceIndex = atoi(devices[0]);
-        DEBUG("audio device index for output = %d", currentDeviceIndex);
-        model = gtk_combo_box_get_model(GTK_COMBO_BOX(output));
-
-        // Find the currently set output device
-        gtk_tree_model_get_iter_first(model, &iter);
-        do {
-            gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
-            if(deviceIndex == currentDeviceIndex)
-            {
-                // Set current iteration the active one
-                gtk_combo_box_set_active_iter(GTK_COMBO_BOX(output), &iter);
-                return;
-            }
-        } while(gtk_tree_model_iter_next(model, &iter));
-
-        // No index was found, select first one
-        WARN("Warning : No active output device found");
-        gtk_combo_box_set_active(GTK_COMBO_BOX(output), 0);
-    }
+	if( SHOW_ALSA_CONF )
+	{
+
+		GtkTreeModel* model;
+		GtkTreeIter iter;
+		gchar** devices;
+		int currentDeviceIndex;
+		int deviceIndex;
+
+		// Select active output device on server
+		devices = dbus_get_current_audio_devices_index();
+		currentDeviceIndex = atoi(devices[0]);
+		DEBUG("audio device index for output = %d", currentDeviceIndex);
+		model = gtk_combo_box_get_model(GTK_COMBO_BOX(output));
+
+		// Find the currently set output device
+		gtk_tree_model_get_iter_first(model, &iter);
+		do {
+			gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
+			if(deviceIndex == currentDeviceIndex)
+			{
+				// Set current iteration the active one
+				gtk_combo_box_set_active_iter(GTK_COMBO_BOX(output), &iter);
+				return;
+			}
+		} while(gtk_tree_model_iter_next(model, &iter));
+
+		// No index was found, select first one
+		WARN("Warning : No active output device found");
+		gtk_combo_box_set_active(GTK_COMBO_BOX(output), 0);
+	}
 }
 
 /**
  * Fill input audio device store
  */
-    void
+	void
 preferences_dialog_fill_input_audio_device_list()
 {
 
-    GtkTreeIter iter;
-    gchar** list;
-    gchar** audioDevice;
-    int index ;
-    gtk_list_store_clear(inputlist);
-
-    // Call dbus to retreive list
-    list = dbus_get_audio_input_device_list();
-
-    // For each device name included in list
-    //int c = 0;
-    for(audioDevice = list; *list; list++)
-    {
-        index = dbus_get_audio_device_index( *list );
-        gtk_list_store_append(inputlist, &iter);
-        gtk_list_store_set(inputlist, &iter, 0, *list, 1, index, -1);
-        //c++;
-    }
+	GtkTreeIter iter;
+	gchar** list;
+	gchar** audioDevice;
+	int index ;
+	gtk_list_store_clear(inputlist);
+
+	// Call dbus to retreive list
+	list = dbus_get_audio_input_device_list();
+
+	// For each device name included in list
+	//int c = 0;
+	for(audioDevice = list; *list; list++)
+	{
+		index = dbus_get_audio_device_index( *list );
+		gtk_list_store_append(inputlist, &iter);
+		gtk_list_store_set(inputlist, &iter, 0, *list, 1, index, -1);
+		//c++;
+	}
 
 }
 
 /**
  * Select active input audio device
  */
-    void
+	void
 select_active_input_audio_device()
 {
-    if( SHOW_ALSA_CONF)
-    {
-
-        GtkTreeModel* model;
-        GtkTreeIter iter;
-        gchar** devices;
-        int currentDeviceIndex;
-        int deviceIndex;
-
-        // Select active input device on server
-        devices = dbus_get_current_audio_devices_index();
-        currentDeviceIndex = atoi(devices[1]);
-        model = gtk_combo_box_get_model(GTK_COMBO_BOX(input));
-
-        // Find the currently set input device
-        gtk_tree_model_get_iter_first(model, &iter);
-        do {
-            gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
-            if(deviceIndex == currentDeviceIndex)
-            {
-                // Set current iteration the active one
-                gtk_combo_box_set_active_iter(GTK_COMBO_BOX(input), &iter);
-                return;
-            }
-        } while(gtk_tree_model_iter_next(model, &iter));
-
-        // No index was found, select first one
-        WARN("Warning : No active input device found");
-        gtk_combo_box_set_active(GTK_COMBO_BOX(input), 0);
-    }
+	if( SHOW_ALSA_CONF)
+	{
+
+		GtkTreeModel* model;
+		GtkTreeIter iter;
+		gchar** devices;
+		int currentDeviceIndex;
+		int deviceIndex;
+
+		// Select active input device on server
+		devices = dbus_get_current_audio_devices_index();
+		currentDeviceIndex = atoi(devices[1]);
+		model = gtk_combo_box_get_model(GTK_COMBO_BOX(input));
+
+		// Find the currently set input device
+		gtk_tree_model_get_iter_first(model, &iter);
+		do {
+			gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
+			if(deviceIndex == currentDeviceIndex)
+			{
+				// Set current iteration the active one
+				gtk_combo_box_set_active_iter(GTK_COMBO_BOX(input), &iter);
+				return;
+			}
+		} while(gtk_tree_model_iter_next(model, &iter));
+
+		// No index was found, select first one
+		WARN("Warning : No active input device found");
+		gtk_combo_box_set_active(GTK_COMBO_BOX(input), 0);
+	}
 }
 
 /**
  * Select the output audio plugin by calling the server
  */
-    static void
+	static void
 select_output_audio_plugin(GtkComboBox* widget, gpointer data UNUSED)
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    int comboBoxIndex;
-    gchar* pluginName;
-
-    comboBoxIndex = gtk_combo_box_get_active(widget);
-
-    if(comboBoxIndex >= 0)
-    {
-        model = gtk_combo_box_get_model(widget);
-        gtk_combo_box_get_active_iter(widget, &iter);
-        gtk_tree_model_get(model, &iter, 0, &pluginName, -1);
-        dbus_set_output_audio_plugin(pluginName);
-        //update_combo_box( pluginName);
-    }
+	GtkTreeModel* model;
+	GtkTreeIter iter;
+	int comboBoxIndex;
+	gchar* pluginName;
+
+	comboBoxIndex = gtk_combo_box_get_active(widget);
+
+	if(comboBoxIndex >= 0)
+	{
+		model = gtk_combo_box_get_model(widget);
+		gtk_combo_box_get_active_iter(widget, &iter);
+		gtk_tree_model_get(model, &iter, 0, &pluginName, -1);
+		dbus_set_output_audio_plugin(pluginName);
+		//update_combo_box( pluginName);
+	}
 }
 
 /**
  * Select active output audio plugin
  */
-    void
+	void
 select_active_output_audio_plugin()
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    gchar* pluginname;
-    gchar* tmp;
-
-    // Select active output device on server
-    pluginname = dbus_get_current_audio_output_plugin();
-    tmp = pluginname;
-    model = gtk_combo_box_get_model(GTK_COMBO_BOX(plugin));
-
-    // Find the currently alsa plugin
-    gtk_tree_model_get_iter_first(model, &iter);
-    do {
-        gtk_tree_model_get(model, &iter, 0, &pluginname , -1);
-        if( g_strcasecmp( tmp , pluginname ) == 0 )
-        {
-            // Set current iteration the active one
-            gtk_combo_box_set_active_iter(GTK_COMBO_BOX(plugin), &iter);
-            //update_combo_box( plugin );
-            return;
-        }
-    } while(gtk_tree_model_iter_next(model, &iter));
-
-    // No index was found, select first one
-    WARN("Warning : No active output device found");
-    gtk_combo_box_set_active(GTK_COMBO_BOX(plugin), 0);
+	GtkTreeModel* model;
+	GtkTreeIter iter;
+	gchar* pluginname;
+	gchar* tmp;
+
+	// Select active output device on server
+	pluginname = dbus_get_current_audio_output_plugin();
+	tmp = pluginname;
+	model = gtk_combo_box_get_model(GTK_COMBO_BOX(plugin));
+
+	// Find the currently alsa plugin
+	gtk_tree_model_get_iter_first(model, &iter);
+	do {
+		gtk_tree_model_get(model, &iter, 0, &pluginname , -1);
+		if( g_strcasecmp( tmp , pluginname ) == 0 )
+		{
+			// Set current iteration the active one
+			gtk_combo_box_set_active_iter(GTK_COMBO_BOX(plugin), &iter);
+			//update_combo_box( plugin );
+			return;
+		}
+	} while(gtk_tree_model_iter_next(model, &iter));
+
+	// No index was found, select first one
+	WARN("Warning : No active output device found");
+	gtk_combo_box_set_active(GTK_COMBO_BOX(plugin), 0);
 }
 
 
 /**
  * Set the audio output device on the server with its index
  */
-    static void
+	static void
 select_audio_output_device(GtkComboBox* comboBox, gpointer data UNUSED)
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    int comboBoxIndex;
-    int deviceIndex;
+	GtkTreeModel* model;
+	GtkTreeIter iter;
+	int comboBoxIndex;
+	int deviceIndex;
 
-    comboBoxIndex = gtk_combo_box_get_active(comboBox);
+	comboBoxIndex = gtk_combo_box_get_active(comboBox);
 
-    if(comboBoxIndex >= 0)
-    {
-        model = gtk_combo_box_get_model(comboBox);
-        gtk_combo_box_get_active_iter(comboBox, &iter);
-        gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
+	if(comboBoxIndex >= 0)
+	{
+		model = gtk_combo_box_get_model(comboBox);
+		gtk_combo_box_get_active_iter(comboBox, &iter);
+		gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
 
-        dbus_set_audio_output_device(deviceIndex);
-    }
+		dbus_set_audio_output_device(deviceIndex);
+	}
 }
 
 /**
  * Set the audio input device on the server with its index
  */
-    static void
+	static void
 select_audio_input_device(GtkComboBox* comboBox, gpointer data UNUSED)
 {
-    GtkTreeModel* model;
-    GtkTreeIter iter;
-    int comboBoxIndex;
-    int deviceIndex;
+	GtkTreeModel* model;
+	GtkTreeIter iter;
+	int comboBoxIndex;
+	int deviceIndex;
 
-    comboBoxIndex = gtk_combo_box_get_active(comboBox);
+	comboBoxIndex = gtk_combo_box_get_active(comboBox);
 
-    if(comboBoxIndex >= 0)
-    {
-        model = gtk_combo_box_get_model(comboBox);
-        gtk_combo_box_get_active_iter(comboBox, &iter);
-        gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
+	if(comboBoxIndex >= 0)
+	{
+		model = gtk_combo_box_get_model(comboBox);
+		gtk_combo_box_get_active_iter(comboBox, &iter);
+		gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
 
-        dbus_set_audio_input_device(deviceIndex);
-    }
+		dbus_set_audio_input_device(deviceIndex);
+	}
 }
 
 /**
  * Toggle move buttons on if a codec is selected, off elsewise
  */
-    static void
+	static void
 select_codec(GtkTreeSelection *selection, GtkTreeModel *model)
 {
-    GtkTreeIter iter;
-
-    if(!gtk_tree_selection_get_selected(selection, &model, &iter))
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
-    }
-    else
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), TRUE);
-    }
+	GtkTreeIter iter;
+
+	if(!gtk_tree_selection_get_selected(selection, &model, &iter))
+	{
+		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
+	}
+	else
+	{
+		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), TRUE);
+		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), TRUE);
+	}
 }
 
 /**
  * Toggle active value of codec on click and update changes to the deamon
  * and in configuration files
  */
-    static void
+	static void
 codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data )
 {
-    GtkTreeIter iter;
-    GtkTreePath *treePath;
-    GtkTreeModel *model;
-    gboolean active;
-    char* name;
-    char* srate;
-    codec_t* codec;
+	GtkTreeIter iter;
+	GtkTreePath *treePath;
+	GtkTreeModel *model;
+	gboolean active;
+	char* name;
+	char* srate;
+	codec_t* codec;
 	account_t *acc;
 
-    // Get path of clicked codec active toggle box
-    treePath = gtk_tree_path_new_from_string(path);
-    model = gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView));
-    gtk_tree_model_get_iter(model, &iter, treePath);
+	// Get path of clicked codec active toggle box
+	treePath = gtk_tree_path_new_from_string(path);
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView));
+	gtk_tree_model_get_iter(model, &iter, treePath);
 
 	// Retrieve userdata
 	acc = (account_t*) data;
 
-    // Get active value and name at iteration
-    gtk_tree_model_get(model, &iter,
-            COLUMN_CODEC_ACTIVE, &active,
-            COLUMN_CODEC_NAME, &name,
-            COLUMN_CODEC_FREQUENCY, &srate,
-            -1);
-
-    // printf("%s, %s\n", name, srate);
-
-    // codec_list_get_by_name(name);
-    if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"8 kHz")==0))
-        codec = codec_list_get_by_payload((gconstpointer) 110);
-    else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"16 kHz")==0))
-        codec = codec_list_get_by_payload((gconstpointer) 111);
-    else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"32 kHz")==0))
-        codec = codec_list_get_by_payload((gconstpointer) 112);
-    else
-        codec = codec_list_get_by_name(name);
-
-    // Toggle active value
-    active = !active;
-
-    // Store value
-    gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-            COLUMN_CODEC_ACTIVE, active,
-            -1);
-
-    gtk_tree_path_free(treePath);
-
-    // Modify codec queue to represent change
-    if (active)
-        codec_set_active (codec);
-    else
-        codec_set_inactive (codec);
-
-    // Perpetuate changes to the deamon
-    codec_list_update_to_daemon (acc);
+	if (!acc)
+		ERROR ("Aie, no account selected");
+
+	// Get active value and name at iteration
+	gtk_tree_model_get(model, &iter,
+			COLUMN_CODEC_ACTIVE, &active,
+			COLUMN_CODEC_NAME, &name,
+			COLUMN_CODEC_FREQUENCY, &srate,
+			-1);
+
+	printf("%s, %s\n", name, srate);
+
+	// codec_list_get_by_name(name);
+	if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"8 kHz")==0))
+		codec = codec_list_get_by_payload((gconstpointer) 110, NULL);
+	else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"16 kHz")==0))
+		codec = codec_list_get_by_payload((gconstpointer) 111, NULL);
+	else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"32 kHz")==0))
+		codec = codec_list_get_by_payload((gconstpointer) 112, NULL);
+	else
+		codec = codec_list_get_by_name(name);
+
+	// Toggle active value
+	active = !active;
+
+	// Store value
+	gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+			COLUMN_CODEC_ACTIVE, active,
+			-1);
+
+	gtk_tree_path_free(treePath);
+
+	// Modify codec queue to represent change
+	if (active)
+		codec_set_active (codec);
+	else
+		codec_set_inactive (codec);
+
+	// Perpetuate changes to the deamon
+	// codec_list_update_to_daemon (acc);
 }
 
 /**
@@ -441,59 +445,60 @@ codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoin
  */
 static void codec_move (gboolean moveUp, gpointer data) {
 
-    GtkTreeIter iter;
-    GtkTreeIter *iter2;
-    GtkTreeView *treeView;
-    GtkTreeModel *model;
-    GtkTreeSelection *selection;
-    GtkTreePath *treePath;
-    gchar *path;
+	GtkTreeIter iter;
+	GtkTreeIter *iter2;
+	GtkTreeView *treeView;
+	GtkTreeModel *model;
+	GtkTreeSelection *selection;
+	GtkTreePath *treePath;
+	gchar *path;
 	account_t *acc;
+	GQueue *acc_q;
 
-    // Get view, model and selection of codec store
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(codecTreeView));
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
+	// Get view, model and selection of codec store
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(codecTreeView));
+	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
 
 	// Retrieve the user data
 	acc = (account_t*) data;
+	if (acc)
+		acc_q = acc->codecs;
+
+	// Find selected iteration and create a copy
+	gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter);
+	iter2 = gtk_tree_iter_copy(&iter);
+
+	// Find path of iteration
+	path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter);
+	treePath = gtk_tree_path_new_from_string(path);
+	gint *indices = gtk_tree_path_get_indices(treePath);
+	gint indice = indices[0];
+
+	// Depending on button direction get new path
+	if(moveUp)
+		gtk_tree_path_prev(treePath);
+	else
+		gtk_tree_path_next(treePath);
+	gtk_tree_model_get_iter(model, &iter, treePath);
+
+	// Swap iterations if valid
+	if(gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
+		gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
+
+	// Scroll to new position
+	gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (codecTreeView), treePath, NULL, FALSE, 0, 0);
+
+	// Free resources
+	gtk_tree_path_free(treePath);
+	gtk_tree_iter_free(iter2);
+	g_free(path);
+
+	// Perpetuate changes in codec queue
+	if(moveUp)
+		codec_list_move_codec_up (indice, &acc_q);
+	else
+		codec_list_move_codec_down (indice, &acc_q);
 
-    // Find selected iteration and create a copy
-    gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter);
-    iter2 = gtk_tree_iter_copy(&iter);
-
-    // Find path of iteration
-    path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter);
-    treePath = gtk_tree_path_new_from_string(path);
-    gint *indices = gtk_tree_path_get_indices(treePath);
-    gint indice = indices[0];
-
-    // Depending on button direction get new path
-    if(moveUp)
-        gtk_tree_path_prev(treePath);
-    else
-        gtk_tree_path_next(treePath);
-    gtk_tree_model_get_iter(model, &iter, treePath);
-
-    // Swap iterations if valid
-    if(gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
-        gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
-
-    // Scroll to new position
-    gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (codecTreeView), treePath, NULL, FALSE, 0, 0);
-
-    // Free resources
-    gtk_tree_path_free(treePath);
-    gtk_tree_iter_free(iter2);
-    g_free(path);
-
-    // Perpetuate changes in codec queue
-    if(moveUp)
-        codec_list_move_codec_up (indice);
-    else
-        codec_list_move_codec_down (indice);
-
-    // Perpetuate changes to the deamon
-    codec_list_update_to_daemon (acc);
 }
 
 /**
@@ -501,417 +506,417 @@ static void codec_move (gboolean moveUp, gpointer data) {
  */
 static void codec_move_up (GtkButton *button UNUSED, gpointer data) {
 
-    // Change tree view ordering and get indice changed
-    codec_move (TRUE, data);
+	// Change tree view ordering and get indice changed
+	codec_move (TRUE, data);
 }
 
 /**
  * Called from move down codec button signal
  */
 static void codec_move_down(GtkButton *button UNUSED, gpointer data) {
-	
-    // Change tree view ordering and get indice changed
-    codec_move (FALSE, data);
+
+	// Change tree view ordering and get indice changed
+	codec_move (FALSE, data);
 }
 
-    int
+	int
 is_ringtone_enabled( void )
 {
-    return dbus_is_ringtone_enabled();
+	return dbus_is_ringtone_enabled();
 }
 
-    void
+	void
 ringtone_enabled( void )
 {
-    dbus_ringtone_enabled();
+	dbus_ringtone_enabled();
 }
 
-    void
+	void
 ringtone_changed( GtkFileChooser *chooser , GtkLabel *label UNUSED)
 {
-    gchar* tone = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( chooser ));
-    dbus_set_ringtone_choice( tone );
+	gchar* tone = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( chooser ));
+	dbus_set_ringtone_choice( tone );
 }
 
-    gchar*
+	gchar*
 get_ringtone_choice( void )
 {
-    return dbus_get_ringtone_choice();
+	return dbus_get_ringtone_choice();
 }
 
 
 GtkWidget* codecs_box (account_t **a)
 {
-    GtkWidget *ret;
-    GtkWidget *scrolledWindow;
-    GtkWidget *buttonBox;
-
-    GtkListStore *codecStore;
-    GtkCellRenderer *renderer;
-    GtkTreeSelection *treeSelection;
-    GtkTreeViewColumn *treeViewColumn;
-
-    ret = gtk_hbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-
-    scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN);
-
-    gtk_box_pack_start(GTK_BOX(ret), scrolledWindow, TRUE, TRUE, 0);
-    codecStore = gtk_list_store_new(CODEC_COLUMN_COUNT,
-            G_TYPE_BOOLEAN,		// Active
-            G_TYPE_STRING,		// Name
-            G_TYPE_STRING,		// Frequency
-            G_TYPE_STRING,		// Bit rate
-            G_TYPE_STRING		// Bandwith
+	GtkWidget *ret;
+	GtkWidget *scrolledWindow;
+	GtkWidget *buttonBox;
+
+	GtkListStore *codecStore;
+	GtkCellRenderer *renderer;
+	GtkTreeSelection *treeSelection;
+	GtkTreeViewColumn *treeViewColumn;
+
+	ret = gtk_hbox_new(FALSE, 10);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+	scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN);
+
+	gtk_box_pack_start(GTK_BOX(ret), scrolledWindow, TRUE, TRUE, 0);
+	codecStore = gtk_list_store_new(CODEC_COLUMN_COUNT,
+			G_TYPE_BOOLEAN,		// Active
+			G_TYPE_STRING,		// Name
+			G_TYPE_STRING,		// Frequency
+			G_TYPE_STRING,		// Bit rate
+			G_TYPE_STRING		// Bandwith
 			);
 
-    // Create codec tree view with list store
-    codecTreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(codecStore));
+	// Create codec tree view with list store
+	codecTreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(codecStore));
 
-    // Get tree selection manager
-    treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
-    g_signal_connect(G_OBJECT(treeSelection), "changed",
-            G_CALLBACK (select_codec),
-            codecStore);
+	// Get tree selection manager
+	treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
+	g_signal_connect(G_OBJECT(treeSelection), "changed",
+			G_CALLBACK (select_codec),
+			codecStore);
 
-    // Active column
-    renderer = gtk_cell_renderer_toggle_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_CODEC_ACTIVE, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
+	// Active column
+	renderer = gtk_cell_renderer_toggle_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_CODEC_ACTIVE, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
 
-    // Toggle codec active property on clicked
-    g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(codec_active_toggled), (gpointer)codecTreeView);
+	// Toggle codec active property on clicked
+	g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK (codec_active_toggled), (gpointer) codecTreeView);
 
-    // Name column
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_CODEC_NAME, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
+	// Name column
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_CODEC_NAME, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
 
-    // Bit rate column
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Frequency"), renderer, "text", COLUMN_CODEC_FREQUENCY, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
+	// Bit rate column
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Frequency"), renderer, "text", COLUMN_CODEC_FREQUENCY, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
 
-    // Bandwith column
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Bitrate"), renderer, "text", COLUMN_CODEC_BITRATE, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
+	// Bandwith column
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Bitrate"), renderer, "text", COLUMN_CODEC_BITRATE, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
 
-    // Frequency column
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Bandwidth"), renderer, "text", COLUMN_CODEC_BANDWIDTH, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
+	// Frequency column
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Bandwidth"), renderer, "text", COLUMN_CODEC_BANDWIDTH, NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
 
-    g_object_unref(G_OBJECT(codecStore));
-    gtk_container_add(GTK_CONTAINER(scrolledWindow), codecTreeView);
+	g_object_unref(G_OBJECT(codecStore));
+	gtk_container_add(GTK_CONTAINER(scrolledWindow), codecTreeView);
 
-    // Create button box
-    buttonBox = gtk_vbox_new(FALSE, 0);
-    gtk_container_set_border_width(GTK_CONTAINER(buttonBox), 10);
-    gtk_box_pack_start(GTK_BOX(ret), buttonBox, FALSE, FALSE, 0);
+	// Create button box
+	buttonBox = gtk_vbox_new(FALSE, 0);
+	gtk_container_set_border_width(GTK_CONTAINER(buttonBox), 10);
+	gtk_box_pack_start(GTK_BOX(ret), buttonBox, FALSE, FALSE, 0);
 
-    codecMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
-    gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
-    gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveUpButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(codecMoveUpButton), "clicked", G_CALLBACK(codec_move_up), a);
+	codecMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
+	gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
+	gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveUpButton, FALSE, FALSE, 0);
+	g_signal_connect(G_OBJECT(codecMoveUpButton), "clicked", G_CALLBACK(codec_move_up), *a);
 
-    codecMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
-    gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
-    gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveDownButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(codecMoveDownButton), "clicked", G_CALLBACK(codec_move_down), a);
+	codecMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
+	gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
+	gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveDownButton, FALSE, FALSE, 0);
+	g_signal_connect(G_OBJECT(codecMoveDownButton), "clicked", G_CALLBACK(codec_move_down), *a);
 
-    preferences_dialog_fill_codec_list (a);
+	preferences_dialog_fill_codec_list (a);
 
-    return ret;
+	return ret;
 }
 
-    void
+	void
 select_audio_manager( void )
 {
 
-    DEBUG("audio manager selected\n");
+	DEBUG("audio manager selected\n");
 
-    if( !SHOW_ALSA_CONF && !gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ) )
-    {
-        dbus_set_audio_manager( ALSA );
-        DEBUG(" display alsa conf panel");
-        alsabox = alsa_box();
-        gtk_container_add( GTK_CONTAINER(alsa_conf ) , alsabox);
-        gtk_widget_show( alsa_conf );
-        gtk_widget_set_sensitive(GTK_WIDGET(alsa_conf), TRUE);
+	if( !SHOW_ALSA_CONF && !gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ) )
+	{
+		dbus_set_audio_manager( ALSA );
+		DEBUG(" display alsa conf panel");
+		alsabox = alsa_box();
+		gtk_container_add( GTK_CONTAINER(alsa_conf ) , alsabox);
+		gtk_widget_show( alsa_conf );
+		gtk_widget_set_sensitive(GTK_WIDGET(alsa_conf), TRUE);
 
 		gtk_action_set_sensitive (GTK_ACTION (volumeToggle), TRUE);
-    }
-    else if( SHOW_ALSA_CONF && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ))
-    {
-        dbus_set_audio_manager( PULSEAUDIO );
-        DEBUG(" remove alsa conf panel");
-        gtk_container_remove( GTK_CONTAINER(alsa_conf) , alsabox );
-        gtk_widget_hide( alsa_conf );
+	}
+	else if( SHOW_ALSA_CONF && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ))
+	{
+		dbus_set_audio_manager( PULSEAUDIO );
+		DEBUG(" remove alsa conf panel");
+		gtk_container_remove( GTK_CONTAINER(alsa_conf) , alsabox );
+		gtk_widget_hide( alsa_conf );
 		if (gtk_toggle_action_get_active ( GTK_TOGGLE_ACTION (volumeToggle)))
 		{
-			    main_window_volume_controls(FALSE);
-				dbus_set_volume_controls (FALSE);
-				gtk_toggle_action_set_active ( GTK_TOGGLE_ACTION (volumeToggle), FALSE);
+			main_window_volume_controls(FALSE);
+			dbus_set_volume_controls (FALSE);
+			gtk_toggle_action_set_active ( GTK_TOGGLE_ACTION (volumeToggle), FALSE);
 		}
 		gtk_action_set_sensitive (GTK_ACTION (volumeToggle), FALSE);
-    } else {
-        DEBUG("alsa conf panel...nothing");
-    }
+	} else {
+		DEBUG("alsa conf panel...nothing");
+	}
 
 }
 
 GtkWidget* alsa_box()
 {
-    GtkWidget *ret;
-    GtkWidget *table;
-    GtkWidget *item;
-    GtkCellRenderer *renderer;
-
-    ret = gtk_hbox_new(FALSE, 10);
-    gtk_widget_show( ret );
-
-    table = gtk_table_new(4, 3, FALSE);
-    gtk_table_set_col_spacing(GTK_TABLE(table), 0, 40);
-    gtk_box_pack_start( GTK_BOX(ret) , table , TRUE , TRUE , 1);
-    gtk_widget_show(table);
-
-    DEBUG("plugin");
-    item = gtk_label_new(_("ALSA plugin"));
-    gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), item, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show( item );
-    // Set choices of audio managers
-    pluginlist = gtk_list_store_new(1, G_TYPE_STRING);
-    preferences_dialog_fill_output_audio_plugin_list();
-    plugin = gtk_combo_box_new_with_model(GTK_TREE_MODEL(pluginlist));
-    select_active_output_audio_plugin();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(item), plugin);
-    g_signal_connect(G_OBJECT(plugin), "changed", G_CALLBACK(select_output_audio_plugin), plugin);
-
-    // Set rendering
-    renderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(plugin), renderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(plugin), renderer, "text", 0, NULL);
-    gtk_table_attach(GTK_TABLE(table), plugin, 2, 3, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(plugin);
-
-    // Device : Output device
-    // Create title label
-    DEBUG("output");
-    item = gtk_label_new(_("Output"));
-    gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), item, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(item);
-    // Set choices of output devices
-    outputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-    preferences_dialog_fill_output_audio_device_list();
-    output = gtk_combo_box_new_with_model(GTK_TREE_MODEL(outputlist));
-    select_active_output_audio_device();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(item), output);
-    g_signal_connect(G_OBJECT(output), "changed", G_CALLBACK(select_audio_output_device), output);
-
-    // Set rendering
-    renderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(output), renderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(output), renderer, "text", 0, NULL);
-    gtk_table_attach(GTK_TABLE(table), output, 2, 3, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(output);
-
-    // Device : Input device
-    // Create title label
-    DEBUG("input");
-    item = gtk_label_new(_("Input"));
-    gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), item, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(item);
-
-    // Set choices of output devices
-    inputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-    preferences_dialog_fill_input_audio_device_list();
-    input = gtk_combo_box_new_with_model(GTK_TREE_MODEL(inputlist));
-    select_active_input_audio_device();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(item), input);
-    g_signal_connect(G_OBJECT(input), "changed", G_CALLBACK(select_audio_input_device), input);
-
-    // Set rendering
-    renderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(input), renderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(input), renderer, "text", 0, NULL);
-    gtk_table_attach(GTK_TABLE(table), input, 2, 3, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-    gtk_widget_show(input);
-
-    gtk_widget_show_all(ret);
-
-    DEBUG("done");
-    return ret;
+	GtkWidget *ret;
+	GtkWidget *table;
+	GtkWidget *item;
+	GtkCellRenderer *renderer;
+
+	ret = gtk_hbox_new(FALSE, 10);
+	gtk_widget_show( ret );
+
+	table = gtk_table_new(4, 3, FALSE);
+	gtk_table_set_col_spacing(GTK_TABLE(table), 0, 40);
+	gtk_box_pack_start( GTK_BOX(ret) , table , TRUE , TRUE , 1);
+	gtk_widget_show(table);
+
+	DEBUG("plugin");
+	item = gtk_label_new(_("ALSA plugin"));
+	gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
+	gtk_table_attach(GTK_TABLE(table), item, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+	gtk_widget_show( item );
+	// Set choices of audio managers
+	pluginlist = gtk_list_store_new(1, G_TYPE_STRING);
+	preferences_dialog_fill_output_audio_plugin_list();
+	plugin = gtk_combo_box_new_with_model(GTK_TREE_MODEL(pluginlist));
+	select_active_output_audio_plugin();
+	gtk_label_set_mnemonic_widget(GTK_LABEL(item), plugin);
+	g_signal_connect(G_OBJECT(plugin), "changed", G_CALLBACK(select_output_audio_plugin), plugin);
+
+	// Set rendering
+	renderer = gtk_cell_renderer_text_new();
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(plugin), renderer, TRUE);
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(plugin), renderer, "text", 0, NULL);
+	gtk_table_attach(GTK_TABLE(table), plugin, 2, 3, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+	gtk_widget_show(plugin);
+
+	// Device : Output device
+	// Create title label
+	DEBUG("output");
+	item = gtk_label_new(_("Output"));
+	gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
+	gtk_table_attach(GTK_TABLE(table), item, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+	gtk_widget_show(item);
+	// Set choices of output devices
+	outputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+	preferences_dialog_fill_output_audio_device_list();
+	output = gtk_combo_box_new_with_model(GTK_TREE_MODEL(outputlist));
+	select_active_output_audio_device();
+	gtk_label_set_mnemonic_widget(GTK_LABEL(item), output);
+	g_signal_connect(G_OBJECT(output), "changed", G_CALLBACK(select_audio_output_device), output);
+
+	// Set rendering
+	renderer = gtk_cell_renderer_text_new();
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(output), renderer, TRUE);
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(output), renderer, "text", 0, NULL);
+	gtk_table_attach(GTK_TABLE(table), output, 2, 3, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+	gtk_widget_show(output);
+
+	// Device : Input device
+	// Create title label
+	DEBUG("input");
+	item = gtk_label_new(_("Input"));
+	gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
+	gtk_table_attach(GTK_TABLE(table), item, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+	gtk_widget_show(item);
+
+	// Set choices of output devices
+	inputlist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+	preferences_dialog_fill_input_audio_device_list();
+	input = gtk_combo_box_new_with_model(GTK_TREE_MODEL(inputlist));
+	select_active_input_audio_device();
+	gtk_label_set_mnemonic_widget(GTK_LABEL(item), input);
+	g_signal_connect(G_OBJECT(input), "changed", G_CALLBACK(select_audio_input_device), input);
+
+	// Set rendering
+	renderer = gtk_cell_renderer_text_new();
+	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(input), renderer, TRUE);
+	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(input), renderer, "text", 0, NULL);
+	gtk_table_attach(GTK_TABLE(table), input, 2, 3, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+	gtk_widget_show(input);
+
+	gtk_widget_show_all(ret);
+
+	DEBUG("done");
+	return ret;
 }
 
 GtkWidget* noise_box()
 {
-    GtkWidget *ret;
-    GtkWidget *enableVoiceActivity;
-    GtkWidget *enableNoiseReduction;
-
-    // check button to enable ringtones
-    ret = gtk_hbox_new( TRUE , 1);
-
-    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);
-
-
-    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 );
-    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);
-
-    return ret;
+	GtkWidget *ret;
+	GtkWidget *enableVoiceActivity;
+	GtkWidget *enableNoiseReduction;
+
+	// check button to enable ringtones
+	ret = gtk_hbox_new( TRUE , 1);
+
+	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);
+
+
+	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 );
+	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);
+
+	return ret;
 }
 
 static void record_path_changed( GtkFileChooser *chooser , GtkLabel *label UNUSED)
 {
-    DEBUG("record_path_changed");
+	DEBUG("record_path_changed");
 
-    gchar* path;
-    path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( chooser ));
-    DEBUG("path2 %s", path);
-    dbus_set_record_path( path );
+	gchar* path;
+	path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( chooser ));
+	DEBUG("path2 %s", path);
+	dbus_set_record_path( path );
 }
 
 GtkWidget* create_audio_configuration()
 {
-    // Main widget
-    GtkWidget *ret;
-    // Sub boxes
-    GtkWidget *box;
-    GtkWidget *frame;
-
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-
-    GtkWidget *alsa;
-    GtkWidget *table;
-
-    gnome_main_section_new_with_table (_("Sound Manager"), &frame, &table, 1, 2);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-    int audio_manager = dbus_get_audio_manager();
-    gboolean pulse_audio = FALSE;
-    if (audio_manager == PULSEAUDIO) {
-        pulse_audio = TRUE;
-    }
-    
-    pulse = gtk_radio_button_new_with_mnemonic( NULL , _("_Pulseaudio"));
-    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(pulse), pulse_audio);
-    gtk_table_attach ( GTK_TABLE( table ), pulse, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
- 
-    alsa = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(pulse),  _("_ALSA"));
-    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(alsa), !pulse_audio);
-    g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(select_audio_manager), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), alsa, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
- 
-    // Box for the ALSA configuration
-    gnome_main_section_new (_("ALSA settings"), &alsa_conf);
-    gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
-    gtk_widget_show( alsa_conf );
-    if( SHOW_ALSA_CONF )
-    {
-        // Box for the ALSA configuration
-        printf("ALSA Created \n");
-        alsabox = alsa_box();
-        gtk_container_add( GTK_CONTAINER(alsa_conf) , alsabox );
-        gtk_widget_hide( alsa_conf );
-    }
-    
-    // Recorded file saving path
-    GtkWidget *label;
-    GtkWidget *folderChooser;
-    gchar *dftPath;
-    
-    /* Get the path where to save audio files */
-    dftPath = dbus_get_record_path ();
-    DEBUG("load recording path %s\n", dftPath);
-    
-    gnome_main_section_new_with_table (_("Recordings"), &frame, &table, 1, 2);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-    // label
-    label = gtk_label_new(_("Destination folder"));
-    gtk_table_attach( GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-    // folder chooser button
-    folderChooser = gtk_file_chooser_button_new(_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER( folderChooser), dftPath);
-    g_signal_connect( G_OBJECT( folderChooser ) , "selection_changed" , G_CALLBACK( record_path_changed ) , NULL );
-    gtk_table_attach(GTK_TABLE(table), folderChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-    // Box for the ringtones
-    gnome_main_section_new_with_table (_("Ringtones"), &frame, &table, 1, 2);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); 
-
-    GtkWidget *enableTone;
-    GtkWidget *fileChooser;
-
-    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);
-    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());
-    g_signal_connect( G_OBJECT( fileChooser ) , "selection_changed" , G_CALLBACK( ringtone_changed ) , NULL );
-
-    GtkFileFilter *filter = gtk_file_filter_new();
-    gtk_file_filter_set_name( filter , _("Audio Files") );
-    gtk_file_filter_add_pattern(filter , "*.wav" );
-    gtk_file_filter_add_pattern(filter , "*.ul" );
-    gtk_file_filter_add_pattern(filter , "*.au" );
-    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);
-        
-    gtk_widget_show_all(ret);
-
-    if(!pulse_audio) {
-      gtk_widget_show(alsa_conf);
-    }
-    else{
-      gtk_widget_hide(alsa_conf);
-    }
-
-    return ret;
+	// Main widget
+	GtkWidget *ret;
+	// Sub boxes
+	GtkWidget *box;
+	GtkWidget *frame;
+
+	ret = gtk_vbox_new(FALSE, 10);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+	GtkWidget *alsa;
+	GtkWidget *table;
+
+	gnome_main_section_new_with_table (_("Sound Manager"), &frame, &table, 1, 2);
+	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
+
+	int audio_manager = dbus_get_audio_manager();
+	gboolean pulse_audio = FALSE;
+	if (audio_manager == PULSEAUDIO) {
+		pulse_audio = TRUE;
+	}
+
+	pulse = gtk_radio_button_new_with_mnemonic( NULL , _("_Pulseaudio"));
+	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(pulse), pulse_audio);
+	gtk_table_attach ( GTK_TABLE( table ), pulse, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+	alsa = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(pulse),  _("_ALSA"));
+	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(alsa), !pulse_audio);
+	g_signal_connect(G_OBJECT(alsa), "clicked", G_CALLBACK(select_audio_manager), NULL);
+	gtk_table_attach ( GTK_TABLE( table ), alsa, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+	// Box for the ALSA configuration
+	gnome_main_section_new (_("ALSA settings"), &alsa_conf);
+	gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
+	gtk_widget_show( alsa_conf );
+	if( SHOW_ALSA_CONF )
+	{
+		// Box for the ALSA configuration
+		printf("ALSA Created \n");
+		alsabox = alsa_box();
+		gtk_container_add( GTK_CONTAINER(alsa_conf) , alsabox );
+		gtk_widget_hide( alsa_conf );
+	}
+
+	// Recorded file saving path
+	GtkWidget *label;
+	GtkWidget *folderChooser;
+	gchar *dftPath;
+
+	/* Get the path where to save audio files */
+	dftPath = dbus_get_record_path ();
+	DEBUG("load recording path %s\n", dftPath);
+
+	gnome_main_section_new_with_table (_("Recordings"), &frame, &table, 1, 2);
+	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
+
+	// label
+	label = gtk_label_new(_("Destination folder"));
+	gtk_table_attach( GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+	// folder chooser button
+	folderChooser = gtk_file_chooser_button_new(_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+	gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER( folderChooser), dftPath);
+	g_signal_connect( G_OBJECT( folderChooser ) , "selection_changed" , G_CALLBACK( record_path_changed ) , NULL );
+	gtk_table_attach(GTK_TABLE(table), folderChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+	// Box for the ringtones
+	gnome_main_section_new_with_table (_("Ringtones"), &frame, &table, 1, 2);
+	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); 
+
+	GtkWidget *enableTone;
+	GtkWidget *fileChooser;
+
+	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);
+	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());
+	g_signal_connect( G_OBJECT( fileChooser ) , "selection_changed" , G_CALLBACK( ringtone_changed ) , NULL );
+
+	GtkFileFilter *filter = gtk_file_filter_new();
+	gtk_file_filter_set_name( filter , _("Audio Files") );
+	gtk_file_filter_add_pattern(filter , "*.wav" );
+	gtk_file_filter_add_pattern(filter , "*.ul" );
+	gtk_file_filter_add_pattern(filter , "*.au" );
+	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);
+
+	gtk_widget_show_all(ret);
+
+	if(!pulse_audio) {
+		gtk_widget_show(alsa_conf);
+	}
+	else{
+		gtk_widget_hide(alsa_conf);
+	}
+
+	return ret;
 }
 
 GtkWidget* create_codecs_configuration (account_t **a) {
 
-    // Main widget
-    GtkWidget *ret, *codecs, *box, *frame;
+	// Main widget
+	GtkWidget *ret, *codecs, *box, *frame;
 
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+	ret = gtk_vbox_new(FALSE, 10);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
 
-    // Box for the codecs
-    gnome_main_section_new (_("Codecs"), &codecs);
-    gtk_box_pack_start (GTK_BOX(ret), codecs, FALSE, FALSE, 0);
-    gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
-    gtk_widget_show (codecs);
-    box = codecs_box (a);
-    gtk_container_add (GTK_CONTAINER (codecs) , box);
+	// Box for the codecs
+	gnome_main_section_new (_("Codecs"), &codecs);
+	gtk_box_pack_start (GTK_BOX(ret), codecs, FALSE, FALSE, 0);
+	gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
+	gtk_widget_show (codecs);
+	box = codecs_box (a);
+	gtk_container_add (GTK_CONTAINER (codecs) , box);
 
-    gtk_widget_show_all(ret);
+	gtk_widget_show_all(ret);
 
-    return ret;
+	return ret;
 }
diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index a32f4b94ec..e7532d16cb 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -156,6 +156,7 @@
     <method name="setActiveCodecList">
       <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
       <arg type="as" name="list" direction="in"/>
+      <arg type="s" name="accountID" direction="in"/>
     </method>
 
 
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index bec4e18f04..433d151e04 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -1272,13 +1272,14 @@ gchar** dbus_get_active_codec_list (gchar *accountID) {
 }
 
     void
-dbus_set_active_codec_list(const gchar** list)
+dbus_set_active_codec_list(const gchar** list, const gchar *accountID)
 {
 
     GError *error = NULL;
     org_sflphone_SFLphone_ConfigurationManager_set_active_codec_list (
             configurationManagerProxy,
             list,
+			accountID,
             &error);
 
     if (error)
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index 9a0ee27a88..d4c7b8a2aa 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -233,7 +233,7 @@ gchar** dbus_get_active_codec_list (gchar *accountID);
  * ConfigurationManager - Set the list of codecs used for media negociation
  * @param list The list of codecs
  */
-void dbus_set_active_codec_list( const gchar** list );
+void dbus_set_active_codec_list (const gchar** list, const gchar*);
 
 /**
  * CallManager - return the codec name
diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp
index 3db5040d92..e54a278be7 100644
--- a/sflphone-common/src/account.cpp
+++ b/sflphone-common/src/account.cpp
@@ -23,13 +23,13 @@
 #include "manager.h"
 
 Account::Account (const AccountID& accountID, std::string type) :
-        _accountID (accountID)
-        , _link (NULL)
-        , _enabled (false)
-        , _type (type)
-		, _codecOrder ()
+	_accountID (accountID)
+	, _link (NULL)
+	, _enabled (false)
+	, _type (type)
+	, _codecOrder ()
 {
-    setRegistrationState (Unregistered);
+	setRegistrationState (Unregistered);
 }
 
 Account::~Account()
@@ -38,17 +38,17 @@ Account::~Account()
 
 void Account::loadConfig() {
 
-    std::string p;
+	std::string p;
 
-    p =  Manager::instance().getConfigString (_accountID , CONFIG_ACCOUNT_TYPE);
+	p =  Manager::instance().getConfigString (_accountID , CONFIG_ACCOUNT_TYPE);
 #ifdef USE_IAX
-    _enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false;
+	_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 (p == "IAX")
+		_enabled = false;
+	else
+		_enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false;
 
 #endif
 
@@ -57,48 +57,58 @@ void Account::loadConfig() {
 
 void Account::setRegistrationState (RegistrationState state) {
 
-    if (state != _registrationState) {
-        _debug ("Account::setRegistrationState");
-        _registrationState = state;
+	if (state != _registrationState) {
+		_debug ("Account::setRegistrationState");
+		_registrationState = state;
 
-        // Notify the client
-        Manager::instance().connectionStatusNotification();
-    }
+		// Notify the client
+		Manager::instance().connectionStatusNotification();
+	}
 }
 
 void Account::loadAudioCodecs (void) {
 
 	// if the user never set the codec list, use the default configuration for this account
-    if (Manager::instance ().getConfigString (AUDIO, "ActiveCodecs") == "") {
+	if (Manager::instance ().getConfigString (_accountID, "ActiveCodecs") == "") {
 		_warn ("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();
-		setActiveCodecs (active_list);
-    }
+	}
+
+	// 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));
+	}
 }
 
 void Account::setActiveCodecs (const std::vector <std::string> &list) {
 
-    _codecOrder.clear();
-    // list contains the ordered payload of active codecs picked by the user for this account
-    // we used the CodecOrder vector to save the order.
-    int i=0;
-    int payload;
-    size_t size = list.size();
+	_codecOrder.clear();
+	// list contains the ordered payload of active codecs picked by the user for this account
+	// we used the CodecOrder vector to save the order.
+	int i=0;
+	int payload;
+	size_t size = list.size();
 
-		_warn ("set the custom order %i", list.size ());
+	_warn ("set the custom order %i", list.size ());
 	_warn ("Setting active codec list");
 
-    while ( (unsigned int) i < size) {
-        payload = std::atoi (list[i].data());
-			_warn ("Adding codec with RTP payload=%i", payload);
-        //if (Manager::instance ().getCodecDescriptorMap ().isCodecLoaded (payload)) {
-            _codecOrder.push_back ( (AudioCodecType) payload);
-        //}
-        i++;
-    }
+	while ( (unsigned int) i < size) {
+		payload = std::atoi (list[i].data());
+		_warn ("Adding codec with RTP payload=%i", payload);
+		//if (Manager::instance ().getCodecDescriptorMap ().isCodecLoaded (payload)) {
+		_codecOrder.push_back ( (AudioCodecType) payload);
+		//}
+		i++;
+	}
+
+    // setConfig
+    std::string s = Manager::instance ().serialize (list);
+    _warn ("Setting codec with payload number %s to the active list", s.c_str());
+	// Set the config per account
+	Manager::instance().setConfig (_accountID, "ActiveCodecs", s);
+
+
 }
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index a32f4b94ec..e7532d16cb 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -156,6 +156,7 @@
     <method name="setActiveCodecList">
       <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
       <arg type="as" name="list" direction="in"/>
+      <arg type="s" name="accountID" direction="in"/>
     </method>
 
 
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 64571106c4..8a0c1c9905 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -458,11 +458,19 @@ std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::st
     return v;
 }
 
-void
-ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list)
+void ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID)
 {
     _debug ("ConfigurationManager::setActiveCodecList received");
-    Manager::instance().setActiveCodecList (list);
+
+	Account *acc;
+    unsigned int i=0;
+	size_t size;
+
+	// Save the codecs list per account
+	acc = Manager::instance ().getAccount (accountID);
+	if (acc != NULL) {
+		acc->setActiveCodecs (list);
+	}
 }
 
 // Audio devices related methods
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index 864522d66b..b4cfbc4dc4 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -59,7 +59,7 @@ public:
     std::vector< std::string > getSupportedTlsMethod(void);
     std::vector< std::string > getCodecDetails( const int32_t& payload );
     std::vector< std::string > getActiveCodecList (const std::string& accountID);
-    void setActiveCodecList( const std::vector< std::string >& list );
+    void setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID);
 
     std::vector< std::string > getInputAudioPluginList();
     std::vector< std::string > getOutputAudioPluginList();
diff --git a/sflphone-common/src/iax/iaxcall.cpp b/sflphone-common/src/iax/iaxcall.cpp
index 73486d8e31..be152908e6 100644
--- a/sflphone-common/src/iax/iaxcall.cpp
+++ b/sflphone-common/src/iax/iaxcall.cpp
@@ -19,6 +19,7 @@
  */
 
 #include "iaxcall.h"
+#include "manager.h"
 #include "global.h" // for _debug
 
 IAXCall::IAXCall (const CallID& id, Call::CallType type) : Call (id, type), _session (NULL)
@@ -73,15 +74,22 @@ IAXCall::setFormat (int format)
 
 
 	int
-IAXCall::getSupportedFormat()
+IAXCall::getSupportedFormat (std::string accountID)
 {
 	CodecOrder map;
 	int format = 0;
 	unsigned int iter;
+	Account *account;
 
 	_info ("IAX get supported format: ");
 
-	map = getCodecMap().getActiveCodecs();
+	account = Manager::instance().getAccount (accountID);
+	if (account != NULL) {
+		map = account->getActiveCodecs();
+	}
+	else {
+		_error ("No IAx account could be found");
+	}
 
 	for (iter=0 ; iter < map.size() ; iter++) {
 		switch (map[iter]) {
@@ -120,7 +128,7 @@ IAXCall::getSupportedFormat()
 
 }
 
-int IAXCall::getFirstMatchingFormat (int needles, account_id) {
+int IAXCall::getFirstMatchingFormat (int needles, std::string accountID) {
 
 	Account *account;
 	CodecOrder map;
@@ -129,7 +137,7 @@ int IAXCall::getFirstMatchingFormat (int needles, account_id) {
 
 	_debug ("IAX get first matching codec: ");
 
-	account = Manager::instance().getAccount (account_id);
+	account = Manager::instance().getAccount (accountID);
 	if (account != NULL) {
 		map = account->getActiveCodecs();
 	}
diff --git a/sflphone-common/src/iax/iaxcall.h b/sflphone-common/src/iax/iaxcall.h
index 8cb424ba25..12dc670428 100644
--- a/sflphone-common/src/iax/iaxcall.h
+++ b/sflphone-common/src/iax/iaxcall.h
@@ -75,7 +75,7 @@ public:
     /**
      * @return int  The bitwise list of supported formats
      */
-    int getSupportedFormat();
+    int getSupportedFormat (std::string accountID);
 
     /**
      * Return a format (int) with the first matching codec selected.
@@ -90,7 +90,7 @@ public:
      * @param needles  The format(s) (bitwise) you are looking for to match
      * @return int  The matching format, thus 0 if none matches
      */
-    int getFirstMatchingFormat(int needles, AccountID account_id);
+    int getFirstMatchingFormat(int needles, std::string accountID);
 
     // AUDIO
     /** 
diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp
index 1953f6b976..9139b07b3b 100644
--- a/sflphone-common/src/iax/iaxvoiplink.cpp
+++ b/sflphone-common/src/iax/iaxvoiplink.cpp
@@ -712,8 +712,8 @@ IAXVoIPLink::iaxOutgoingInvite (IAXCall* call)
 
     wait = 0;
     /** @todo Make preference dynamic, and configurable */
-    audio_format_preferred =  call->getFirstMatchingFormat (call->getSupportedFormat (account->getActiveCodecs ()));
-    audio_format_capability = call->getSupportedFormat (account->getActiveCodecs ());
+    audio_format_preferred =  call->getFirstMatchingFormat (call->getSupportedFormat (getAccountID ()), getAccountID ());
+    audio_format_capability = call->getSupportedFormat (getAccountID ());
 
     _debug ("IAX New call: %s", strNum.c_str());
     iax_call (newsession, username.c_str(), username.c_str(), strNum.c_str(), lang, wait, audio_format_preferred, audio_format_capability);
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 1c87bb03c2..0f404b23d2 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2404,22 +2404,6 @@ ManagerImpl::initAudioCodec (void)
     }*/
 }
 
-/*
- * TODO Set the active codecs list per account
- */
-void ManagerImpl::setActiveCodecList (const std::vector<  std::string >& list) {
-
-    _warn ("Set active codecs list");
-	// TODO Save the codec list per account
-    _codecDescriptorMap.saveActiveCodecs (list);
-
-    // setConfig
-    std::string s = serialize (list);
-    _warn ("Setting codec with payload number %s to the active list", s.c_str());
-	// Set the config per account
-    setConfig ("Audio", "ActiveCodecs", s);
-}
-
 /*
  * TODO Retrieve the active codec list per account
  */
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index a4a871d1e4..7aaa89a4a6 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -795,12 +795,6 @@ class ManagerImpl {
      */
     std::vector< ::std::string > getActiveCodecList( void );
 
-    /**
-     * Set the list of the active codecs
-     * @param list  The new list of active codecs
-     */
-    void setActiveCodecList( const std::vector< ::std::string >& list);
-
     /*
      * Notify the client that an error occured
      * @param errCode The error code. Could be: ALSA_CAPTURE_ERROR
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index ae7826fdf9..950975d5a0 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1579,7 +1579,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 
         // Building the local SDP offer
         call->getLocalSDP()->set_ip_address (addrSdp);
-        call->getLocalSDP()->create_initial_offer();
+        call->getLocalSDP()->create_initial_offer(account->getActiveCodecs ());
 
         // If no account already set, use the default one created at pjsip initialization
         if (account->getAccountTransport() == NULL) {
-- 
GitLab


From 8485cc8847a06b9218118c3d98726e40ae380cea Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 20 Jan 2010 13:08:00 -0500
Subject: [PATCH 008/160] [#1722] Update SFLphone to version 0.9.7

---
 sflphone-common/src/global.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/src/global.h b/sflphone-common/src/global.h
index 474d08b0f3..8639ca36d9 100644
--- a/sflphone-common/src/global.h
+++ b/sflphone-common/src/global.h
@@ -33,7 +33,7 @@
 #include <vector>
 #include "logger.h"
 
-#define SFLPHONED_VERSION "0.9.6"		/** Version number */
+#define SFLPHONED_VERSION "0.9.7"		/** Version number */
 
 #define HOMEDIR					(getenv ("HOME"))				/** Home directory */
 #define XDG_DATA_HOME			(getenv ("XDG_DATA_HOME"))
-- 
GitLab


From 138b0001738aa8d297bcc44fd8fb230b1eea8b3e Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 20 Jan 2010 13:15:49 -0500
Subject: [PATCH 009/160] [#1722] Acquire TLS transport for Ip to IP calls

---
 sflphone-common/src/sip/sipvoiplink.cpp | 37 +++++++++++++++++++------
 1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 8d597bc252..621630eabb 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1562,9 +1562,9 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 	    addrSdp = localAddress;
 	}
 
+	// Set local address for RTP media
         setCallAudioLocal (call, localAddress);
 
-        _debug ("toUri received in new_ip_to_ip call %s", to.c_str());
         std::string toUri = account->getToUri (to);
         call->setPeerNumber (toUri);
         _debug ("toUri in new_ip_to_ip call %s", toUri.c_str());
@@ -1582,7 +1582,28 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         call->getLocalSDP()->set_ip_address (addrSdp);
         call->getLocalSDP()->create_initial_offer();
 
-        // If no account already set, use the default one created at pjsip initialization
+	// Init TLS transport if enabled
+	if(account->isTlsEnabled()) {
+
+	    _debug("TLS enabled for ip-to-ip calls, acquire TLS transport from pjsip's manager");
+
+	    pj_sockaddr_in rem_addr;
+	    pj_str_t remote;
+
+	    int at = toUri.find("@");
+	    std::string remotestr = toUri.substr(at+1, toUri.size()-1);
+	    pj_cstr(&remote, remotestr.c_str());
+	    
+	    pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5060);
+
+	    pjsip_transport *tcp;
+	    pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
+	    				  NULL, &tcp);
+
+	    account->setAccountTransport(tcp); 
+	}
+
+        // If no transport already set, use the default one created at pjsip initialization
         if (account->getAccountTransport() == NULL) {
             _debug ("No transport for this account, using the default one");
             account->setAccountTransport (_localUDPTransport);
@@ -1604,11 +1625,8 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         int port = findLocalPortFromUri (toUri, account->getAccountTransport());
 
         std::stringstream ss;
-
         std::string portStr;
-
         ss << port;
-
         ss >> portStr;
 
         contactUri = account->getContactHeader (address, portStr);
@@ -1880,6 +1898,7 @@ bool SIPVoIPLink::pjsip_init()
     }
 
     if (directIpCallsTlsEnabled) {
+        _debug("*********************Tls IP to IP call enabled Create IT");
         errPjsip = createTlsTransportRetryOnFailure (IP2IP_PROFILE);
     }
 
@@ -2770,6 +2789,9 @@ pj_status_t SIPVoIPLink::createTlsTransport (AccountID id)
     if (status != PJ_SUCCESS) {
         _debug ("Error creating SIP TLS listener (%d)", status);
     }
+    else {
+
+    }
 
     return PJ_SUCCESS;
 }
@@ -2970,9 +2992,8 @@ void SIPVoIPLink::handle_reinvite (SIPCall *call)
         _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__);
     }
     */
-    _debug("******************************************");
-    _debug("*             handle_reinvite            *");
-    _debug("******************************************");
+    
+    _debug("Handle reINVITE");
 
     call->getAudioRtp()->updateDestinationIpAddress();
 }
-- 
GitLab


From 719195ff044564911344e88541b7bfd0cc4fbb27 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 20 Jan 2010 17:55:11 -0500
Subject: [PATCH 010/160] [#2518] Functionnal on the client side

---
 sflphone-client-gnome/src/callable_obj.c     |  2 +-
 sflphone-client-gnome/src/codeclist.c        | 22 +++++++++++++-------
 sflphone-client-gnome/src/codeclist.h        |  6 +++---
 sflphone-client-gnome/src/config/audioconf.c | 15 ++++++-------
 4 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/sflphone-client-gnome/src/callable_obj.c b/sflphone-client-gnome/src/callable_obj.c
index 240488b70f..b1b2cea6c5 100644
--- a/sflphone-client-gnome/src/callable_obj.c
+++ b/sflphone-client-gnome/src/callable_obj.c
@@ -89,7 +89,7 @@ gchar* call_get_audio_codec (callable_obj_t *obj)
 	if (obj)
 	{
 		audio_codec = dbus_get_current_codec_name (obj);	
-		codec = codec_list_get_by_name (audio_codec);
+		codec = codec_list_get_by_name (audio_codec, NULL);
 		if (codec){
 			samplerate = codec->sample_rate;
 			format = g_markup_printf_escaped ("%s/%i", audio_codec, samplerate);
diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index 6d038148fb..a74f6e41d9 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -177,19 +177,21 @@ void codec_list_add(codec_t * c, GQueue **queue) {
 	g_queue_push_tail (*queue, (gpointer *) c);
 }
 
-void codec_set_active (codec_t * c) {
+void codec_set_active (codec_t **c) {
 
 	if(c)
 	{
-		DEBUG("%s set active", c->name);
-		c->is_active = TRUE;
+		DEBUG("%s set active", (*c)->name);
+		(*c)->is_active = TRUE;
 	}
 }
 
-void codec_set_inactive (codec_t * c) {
+void codec_set_inactive (codec_t **c) {
 
-	if(c)
-		c->is_active = FALSE;
+	if(c){
+		DEBUG("%s set active", (*c)->name);
+		(*c)->is_active = FALSE;
+	}
 }
 
 guint codec_list_get_size () {
@@ -199,9 +201,13 @@ guint codec_list_get_size () {
 	return g_queue_get_length (codecsCapabilities);
 }
 
-codec_t* codec_list_get_by_name (const gchar* name) {
+codec_t* codec_list_get_by_name (gconstpointer name, GQueue *q) {
+
+	// If NULL is passed as argument, we look into the global capabilities
+	if (q == NULL)
+		q = codecsCapabilities;
 
-	GList * c = g_queue_find_custom (codecsCapabilities, name, is_name_codecstruct);
+	GList * c = g_queue_find_custom (q, name, is_name_codecstruct);
 	if(c)
 		return (codec_t *)c->data;
 	else
diff --git a/sflphone-client-gnome/src/codeclist.h b/sflphone-client-gnome/src/codeclist.h
index 165fd1029d..4a1a5f5dda 100644
--- a/sflphone-client-gnome/src/codeclist.h
+++ b/sflphone-client-gnome/src/codeclist.h
@@ -77,13 +77,13 @@ void codec_list_add (codec_t * c, GQueue **q);
  * Set a codec active. An active codec will be used for codec negociation
  * @param name The string description of the codec
  */
-void codec_set_active (codec_t * c);
+void codec_set_active (codec_t **c);
 
 /**
  * Set a codec inactive. An active codec won't be used for codec negociation
  * @param name The string description of the codec
  */
-void codec_set_inactive(codec_t * c);
+void codec_set_inactive(codec_t **c);
 
 /** 
  * Return the number of codecs in the list
@@ -96,7 +96,7 @@ guint codec_list_get_size();
  * @param name The string description of the codec
  * @return codec_t* A codec or NULL 
  */
-codec_t * codec_list_get_by_name(const gchar * name);
+codec_t * codec_list_get_by_name(gconstpointer name, GQueue *q);
 
 /** 
  * Return the codec at the nth position in the list
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index 0791346017..1225fbbd27 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -408,16 +408,17 @@ codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoin
 			-1);
 
 	printf("%s, %s\n", name, srate);
+	printf("%i\n", g_queue_get_length (acc->codecs));
 
 	// codec_list_get_by_name(name);
 	if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"8 kHz")==0))
-		codec = codec_list_get_by_payload((gconstpointer) 110, NULL);
+		codec = codec_list_get_by_payload((gconstpointer) 110, acc->codecs);
 	else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"16 kHz")==0))
-		codec = codec_list_get_by_payload((gconstpointer) 111, NULL);
+		codec = codec_list_get_by_payload((gconstpointer) 111, acc->codecs);
 	else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"32 kHz")==0))
-		codec = codec_list_get_by_payload((gconstpointer) 112, NULL);
+		codec = codec_list_get_by_payload((gconstpointer) 112, acc->codecs);
 	else
-		codec = codec_list_get_by_name(name);
+		codec = codec_list_get_by_name ((gconstpointer) name, acc->codecs);
 
 	// Toggle active value
 	active = !active;
@@ -431,9 +432,9 @@ codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpoin
 
 	// Modify codec queue to represent change
 	if (active)
-		codec_set_active (codec);
+		codec_set_active (&codec);
 	else
-		codec_set_inactive (codec);
+		codec_set_inactive (&codec);
 
 	// Perpetuate changes to the deamon
 	// codec_list_update_to_daemon (acc);
@@ -587,7 +588,7 @@ GtkWidget* codecs_box (account_t **a)
 	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
 
 	// Toggle codec active property on clicked
-	g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK (codec_active_toggled), (gpointer) codecTreeView);
+	g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK (codec_active_toggled), (gpointer) *a);
 
 	// Name column
 	renderer = gtk_cell_renderer_text_new();
-- 
GitLab


From 382ba81864369d45dcfd7be50c6b7f28b49a0384 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 21 Jan 2010 17:54:01 -0500
Subject: [PATCH 011/160] [#1722] Handle SIPS URI

---
 sflphone-client-gnome/src/actions.c     | 4 ++++
 sflphone-common/src/sip/sipvoiplink.cpp | 9 +++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index fe433aace6..cbd1bfb95f 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -80,6 +80,10 @@ static gboolean _is_direct_call(callable_obj_t * c) {
         return 1;
     }
 
+    if(g_str_has_prefix (c->_peer_number, "sips:")) {
+        return 1;
+    }
+
     return 0;
 }
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 621630eabb..20886ff2ce 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1591,10 +1591,11 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 	    pj_str_t remote;
 
 	    int at = toUri.find("@");
-	    std::string remotestr = toUri.substr(at+1, toUri.size()-1);
+	    int trns = toUri.find(";transport");
+	    std::string remotestr = toUri.substr(at+1, trns-at-1);
 	    pj_cstr(&remote, remotestr.c_str());
 	    
-	    pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5060);
+	    pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5061);
 
 	    pjsip_transport *tcp;
 	    pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
@@ -1664,6 +1665,10 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 
         init_transport_selector (account->getAccountTransport(), &tp);
 
+	if(!account->getAccountTransport()) {
+	    _debug("Error transport is NULL in ip to ip call");
+	}
+
 	// set_transport methods increment transport's ref_count
         status = pjsip_dlg_set_transport (dialog, tp);
 
-- 
GitLab


From 02331f9a68a51535c196b2f1f64896bf4dab0650 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 21 Jan 2010 18:06:03 -0500
Subject: [PATCH 012/160] [#1722] Tag media with "RTP/SAVP" if SRTP is used

---
 sflphone-common/src/sip/sdp.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index 45efccf15b..c4bd19dd2d 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -30,6 +30,7 @@ static const pj_str_t STR_IN = { (char*) "IN", 2 };
 static const pj_str_t STR_IP4 = { (char*) "IP4", 3};
 static const pj_str_t STR_IP6 = { (char*) "IP6", 3};
 static const pj_str_t STR_RTP_AVP = { (char*) "RTP/AVP", 7 };
+static const pj_str_t STR_RTP_SAVP = { (char*) "RTP/SAVP", 8 };
 static const pj_str_t STR_SDP_NAME = { (char*) "sflphone", 8 };
 static const pj_str_t STR_SENDRECV = { (char*) "sendrecv", 8 };
 static const pj_str_t STR_RTPMAP = { (char*) "rtpmap", 6 };
@@ -83,7 +84,16 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
                (media->get_media_type() == MIME_TYPE_AUDIO) ? &STR_AUDIO : &STR_VIDEO);
     med->desc.port_count = 1;
     med->desc.port = media->get_port();
-    pj_strdup (_pool, &med->desc.transport, &STR_RTP_AVP);
+
+    // in case of sdes, media are tagged as "RTP/SAVP", RTP/AVP elsewhere
+    if(_srtp_crypto.empty()) {
+      
+        pj_strdup (_pool, &med->desc.transport, &STR_RTP_AVP);
+    }
+    else {
+
+        pj_strdup (_pool, &med->desc.transport, &STR_RTP_SAVP);
+    }
 
     // Media format ( RTP payload )
     count = media->get_media_codec_list().size();
-- 
GitLab


From d4e8ac0bb733bb70ae942431a1081883f80633a7 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 22 Jan 2010 16:42:17 -0500
Subject: [PATCH 013/160] [#1722] add createDefaultSipUdpTransport method in
 sipvoiplink

---
 sflphone-common/src/sip/sipvoiplink.cpp | 122 +++++++++++-------------
 sflphone-common/src/sip/sipvoiplink.h   |  12 +++
 2 files changed, 70 insertions(+), 64 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 20886ff2ce..b80ecda8db 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1850,70 +1850,12 @@ bool SIPVoIPLink::pjsip_init()
         return false;
     }
 
-    // Retrieve Direct IP Calls settings.
-    // This corresponds to the accountID set to
-    // AccountNULL
-    SIPAccount * account = NULL;
+    // Initialize default UDP transport according to 
+    // IP to IP settings (most likely using port 5060)
+    createDefaultSipUdpTransport();
 
-    bool directIpCallsTlsEnabled = false;
-
-    // Use IP2IP_PROFILE to init default udp transport settings
-    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
-
-    // Create a UDP listener meant for all accounts for which TLS was not enabled
-    // Cannot acquireTransport since default UDP transport must be created regardless of TLS
-    errPjsip = createUDPServer(IP2IP_PROFILE);
-
-    if(account && (errPjsip == PJ_SUCCESS)) {
-
-        _debug("UserAgent: Initialized sip listener on port %d", account->getLocalPort ());
-        addTransportToMap(account->getTransportMapKey(), account->getAccountTransport());
-
-	// if account is not NULL, use IP2IP trasport as default one
-	_localUDPTransport = account->getAccountTransport();
- 
-    }
-    // If the above UDP server
-    // could not be created, then give it another try
-    // on a random sip port
-    else if (errPjsip != PJ_SUCCESS) {
-        _debug ("UserAgent: Could not initialize SIP listener on port %d", _regPort);
-        _regPort = RANDOM_SIP_PORT;
-
-        _debug ("UserAgent: Trying to initialize SIP listener on port %d", _regPort);
-	// If no AccountID specified, pointer to transport is stored in _localUDPTransport 
-        errPjsip = createUDPServer();
-
-        if (errPjsip != PJ_SUCCESS) {
-            _debug ("UserAgent: Fail to initialize SIP listener on port %d", _regPort);
-            return errPjsip;
-        }
-    }
-
-    acquireTransport(IP2IP_PROFILE);
-
-    /*
-    // Create a TLS listener meant for Direct IP calls
-    // if the user did enabled it.
-    if (account != NULL) {
- 
-        directIpCallsTlsEnabled = account->isTlsEnabled();
-        port = account->getLocalPort ();
-
-    }
-
-    if (directIpCallsTlsEnabled) {
-        _debug("*********************Tls IP to IP call enabled Create IT");
-        errPjsip = createTlsTransportRetryOnFailure (IP2IP_PROFILE);
-    }
-
-    if (errPjsip != PJ_SUCCESS) {
-        _debug ("pj_init(): could not start TLS transport for Direct Calls");
-    }
-    */
-
-    // TODO: For TLS, retry on random port, just we already do above
-    // for UDP transport.
+    // Call this method to create TLS listener 
+    // acquireTransport(IP2IP_PROFILE);
 
     // Initialize transaction layer
     status = pjsip_tsx_layer_init_module (_endpt);
@@ -2140,8 +2082,60 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) {
 }
 
 
-bool SIPVoIPLink::createSipTransport(AccountID id) {
+bool SIPVoIPLink::createDefaultSipUdpTransport()
+{
 
+    int errPjsip = 0;
+
+    // Retrieve Direct IP Calls settings.
+    SIPAccount * account = NULL;
+
+    // Use IP2IP_PROFILE to init default udp transport settings
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+
+    // Create a UDP listener meant for all accounts for which TLS was not enabled
+    // Cannot acquireTransport since default UDP transport must be created regardless of TLS
+    errPjsip = createUDPServer(IP2IP_PROFILE);
+
+    if(account && (errPjsip == PJ_SUCCESS)) {
+
+        _debug("UserAgent: Initialized sip listener on port %d", account->getLocalPort ());
+        addTransportToMap(account->getTransportMapKey(), account->getAccountTransport());
+
+	// if account is not NULL, use IP2IP trasport as default one
+	_localUDPTransport = account->getAccountTransport();
+ 
+    }
+    // If the above UDP server
+    // could not be created, then give it another try
+    // on a random sip port
+    else if (errPjsip != PJ_SUCCESS) {
+        _debug ("UserAgent: Could not initialize SIP listener on port %d", _regPort);
+        _regPort = RANDOM_SIP_PORT;
+
+        _debug ("UserAgent: Trying to initialize SIP listener on port %d", _regPort);
+	// If no AccountID specified, pointer to transport is stored in _localUDPTransport 
+        errPjsip = createUDPServer();
+
+        if (errPjsip != PJ_SUCCESS) {
+            _debug ("UserAgent: Fail to initialize SIP listener on port %d", _regPort);
+	    return false;
+        }
+    }
+
+    return true;
+
+}
+
+
+void SIPVoIPLink::createDefaultSipTlsListener()
+{
+    
+}
+
+
+bool SIPVoIPLink::createSipTransport(AccountID id)
+{
 
     SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id));
 
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 94b08bdc89..28a71cd100 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -394,6 +394,18 @@ class SIPVoIPLink : public VoIPLink
 	bool acquireTransport(const AccountID& accountID);
 
 
+	/**
+	 * Create the default UDP transport according ot Ip2Ip profile settings
+	 */
+	bool createDefaultSipUdpTransport();
+
+
+	/**
+	 * Create the default TLS litener on port 5061
+	 */
+	void createDefaultSipTlsListener();
+
+
 	/**
 	 * Create a new sip transport according to the trasport type specified in account settings
 	 */
-- 
GitLab


From dd4b26d1b7ad0e3ebe337e66db81050ca545ed72 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 25 Jan 2010 10:01:16 -0500
Subject: [PATCH 014/160] [#1722] Add createDefaultSipTlsListener method in
 sipVoipLink initialization

---
 sflphone-common/src/sip/sipvoiplink.cpp | 63 ++++++++++++++++++++++---
 1 file changed, 56 insertions(+), 7 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index b80ecda8db..ec4b52ae8d 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1855,7 +1855,7 @@ bool SIPVoIPLink::pjsip_init()
     createDefaultSipUdpTransport();
 
     // Call this method to create TLS listener 
-    // acquireTransport(IP2IP_PROFILE);
+    createDefaultSipTlsListener();
 
     // Initialize transaction layer
     status = pjsip_tsx_layer_init_module (_endpt);
@@ -2130,6 +2130,60 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
 void SIPVoIPLink::createDefaultSipTlsListener()
 {
+
+    pjsip_tpfactory *tls;
+    pj_sockaddr_in local_addr;
+    pjsip_host_port a_name;
+    pj_status_t status;
+    pj_status_t success;
+
+    /* Grab the tls settings, populated
+     * from configuration file.
+     */
+    SIPAccount * account = NULL;
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+
+    if (account == NULL) {
+        _debug ("Account is null while creating TLS default listener. Returning");
+        // return !PJ_SUCCESS;
+    }
+
+
+    // Init local address for this listener to be bound (ADDR_ANY on port 5061).
+    pj_sockaddr_in_init (&local_addr, 0, 0);
+    pj_uint16_t localTlsPort = 5061;
+    local_addr.sin_port = pj_htons (localTlsPort);
+     
+    pj_str_t pjAddress;
+    pj_cstr (&pjAddress, PJ_INADDR_ANY);
+    success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress);
+
+
+    // Init published address for this listener (Local IP address on port 5061)
+    std::string publishedAddress;
+    loadSIPLocalIP(&publishedAddress);
+
+    pj_bzero (&a_name, sizeof (pjsip_host_port));
+    pj_cstr (&a_name.host, publishedAddress.c_str());
+    a_name.port = 5061;
+
+    /* Get TLS settings. Expected to be filled */
+    pjsip_tls_setting * tls_setting = account->getTlsSetting();
+
+    
+    _debug ("TLS transport to be initialized with published address %.*s,"
+            " published port %d, local address %.*s, local port %d",
+            (int) a_name.host.slen, a_name.host.ptr,
+            (int) a_name.port, pjAddress.slen, pjAddress.ptr, (int) localTlsPort);
+    
+
+    status = pjsip_tls_transport_start (_endpt, tls_setting, &local_addr, &a_name, 1, &tls);
+
+    if (status != PJ_SUCCESS) {
+        _debug ("Error creating SIP TLS listener (%d)", status);
+    }
+
+    // return PJ_SUCCESS;
     
 }
 
@@ -2185,15 +2239,10 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 	        // TLS transport is ephemeral and is managed by PJSIP, should not be stored either.
 	        addTransportToMap(account->getTransportMapKey(), account->getAccountTransport());
 	    }
-
-
 	}
-
     }
 
-    return true;
-
-	    
+    return true;   
 }
    
 
-- 
GitLab


From 04da22f5313036141933349924dbdf8f0780ed9b Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 25 Jan 2010 11:15:11 -0500
Subject: [PATCH 015/160] [#1722] Add new createTlsTransport method

pjsip_tls_transport_start is used to create a new TLS listner which
must be on port 5061

pjsip_endpt_acquire_transport is used to create a new TCP connection
this function is called internally in pjsip when sending new account
registration

The new createTlsTransport method is used only for ip to ip calls
---
 sflphone-common/src/sip/sipvoiplink.cpp | 212 ++++--------------------
 sflphone-common/src/sip/sipvoiplink.h   |  59 ++++---
 2 files changed, 66 insertions(+), 205 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index ec4b52ae8d..a41d688263 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1587,21 +1587,11 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 
 	    _debug("TLS enabled for ip-to-ip calls, acquire TLS transport from pjsip's manager");
 
-	    pj_sockaddr_in rem_addr;
-	    pj_str_t remote;
-
 	    int at = toUri.find("@");
 	    int trns = toUri.find(";transport");
-	    std::string remotestr = toUri.substr(at+1, trns-at-1);
-	    pj_cstr(&remote, remotestr.c_str());
-	    
-	    pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5061);
-
-	    pjsip_transport *tcp;
-	    pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
-	    				  NULL, &tcp);
+	    std::string remoteaddr = toUri.substr(at+1, trns-at-1);
 
-	    account->setAccountTransport(tcp); 
+	    createTlsTransport(account->getAccountID(), remoteaddr);
 	}
 
         // If no transport already set, use the default one created at pjsip initialization
@@ -2022,23 +2012,18 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) {
         pjsip_transport_dec_ref(account->getAccountTransport());
     }
 
-    // Try to create a new transport
+    // Try to create a new transport in case the settings for this account
+    // are different than one defined for already created ones
+    // If TLS is enabled, TLS connection is automatically handled when sending account registration
+    // However, for any other sip transaction, we must create TLS connection 
     if(createSipTransport(accountID)) {
 
         return true;
     }
-    /*
-    else if(account->getAccountTransport()) {
-
-        // Transport could not be created, account account already have one set.
-        // Most likely this is the transport we tried to create.
-        _debug("Transport (%s) already set for this account, use it\n", account->getTransportMapKey().c_str());
-
-	return true;
-    } 
-    */
+    // A transport is already created on this port, use it
     else {
 
+        _debug("Could not create a new transport (%s)", account->getTransportMapKey().c_str());
         _debug("Searching transport (%s) in transport map", account->getTransportMapKey().c_str());
 
         // Could not create new transport, this transport may already exists
@@ -2095,7 +2080,7 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
     // Create a UDP listener meant for all accounts for which TLS was not enabled
     // Cannot acquireTransport since default UDP transport must be created regardless of TLS
-    errPjsip = createUDPServer(IP2IP_PROFILE);
+    errPjsip = createUdpTransport(IP2IP_PROFILE);
 
     if(account && (errPjsip == PJ_SUCCESS)) {
 
@@ -2115,7 +2100,7 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
         _debug ("UserAgent: Trying to initialize SIP listener on port %d", _regPort);
 	// If no AccountID specified, pointer to transport is stored in _localUDPTransport 
-        errPjsip = createUDPServer();
+        errPjsip = createUdpTransport();
 
         if (errPjsip != PJ_SUCCESS) {
             _debug ("UserAgent: Fail to initialize SIP listener on port %d", _regPort);
@@ -2198,17 +2183,12 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
     pj_status_t status;
 
-    // Launch a new TLS listener/transport
-    // if the user did choose it.
     if (account->isTlsEnabled()) {
 
-        _debug ("Create TLS transport");
-        status = createTlsTransportRetryOnFailure (id);
-
-        if (status != PJ_SUCCESS) {
-            _debug ("Failed to initialize TLS transport for account %s", id.c_str());
-	    return false;
-        }
+        // Nothing to do, TLS listener already created at pjsip's startup and TLS connection
+        // is automatically handled in pjsip when sending registration messages.
+	// status = createTlsTransport(id, );
+        return true;
     }
     else {
 
@@ -2226,7 +2206,7 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
         } else {
 
 	    _debug ("Create UDP transport");
-            status = createUDPServer (id);
+            status = createUdpTransport (id);
 
 	    if (status != PJ_SUCCESS) {
                 _debug ("Failed to initialize UDP transport for account %s", id.c_str());
@@ -2266,7 +2246,7 @@ bool SIPVoIPLink::addTransportToMap(std::string key, pjsip_transport* transport)
 }
 
 
-int SIPVoIPLink::createUDPServer (AccountID id)
+int SIPVoIPLink::createUdpTransport (AccountID id)
 {
 
     pj_status_t status;
@@ -2297,7 +2277,7 @@ int SIPVoIPLink::createUDPServer (AccountID id)
     // Set information to the local address and port
     if (account == NULL) {
 
-        _debug ("Account with id \"%s\" is null in createUDPServer.", id.c_str());
+        _debug ("Account with id \"%s\" is null in createUdpTransport.", id.c_str());
 
     } else {
 
@@ -2571,42 +2551,31 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     return port;
 }
 
-pj_status_t SIPVoIPLink::createTlsTransportRetryOnFailure (AccountID id)
-{
-    pj_status_t success;
 
-    // Create a TLS listener.
-    // Note that STUN cannot be used for
-    // TCP NAT traversal. At the moment (20/08/09)
-    // user must supply the public address/port
-    // manually.
-    success = createTlsTransport (id);
+pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::string& remoteAddr)
+{
+    
+    // Retrieve the account information
+    SIPAccount * account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
-    if (success != PJ_SUCCESS) {
-        unsigned int randomPort = RANDOM_SIP_PORT;
+    if(!account) {
 
-        // Update new port in the corresponding SIPAccount
-        SIPAccount * account = NULL;
-        account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id));
+        _debug("Account is NULL, returning");
+	return !PJ_SUCCESS;
+    }
 
-        if (account == NULL) {
-            _debug ("createTlsTransportRetryOnFailure: Account is null. Returning");
-            return !PJ_SUCCESS;
-        }
+    pj_sockaddr_in rem_addr;
+    pj_str_t remote;
 
-        account->setLocalPort ( (pj_uint16_t) randomPort);
+    pj_cstr(&remote, remoteAddr.c_str());
 
-        // Try to start the transport again on
-        // the new port.
-        success = createTlsTransport (id);
+    pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5061);
 
-        if (success != PJ_SUCCESS) {
-            _debug ("createTlsTransportRetryOnFailure: failed to retry on random port %d", randomPort);
-            return success;
-        }
+    pjsip_transport *tcp;
+    pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
+	    				  NULL, &tcp);
 
-        _debug ("createTlsTransportRetryOnFailure: TLS transport listening on port %d", randomPort);
-    }
+    account->setAccountTransport(tcp);
 
     return PJ_SUCCESS;
 }
@@ -2732,119 +2701,6 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
 }
 
 
-
-pj_status_t SIPVoIPLink::createTlsTransport (AccountID id)
-{
-    pjsip_tpfactory *tls;
-    pj_sockaddr_in local_addr;
-    pjsip_host_port a_name;
-    pj_status_t status;
-
-    /* Grab the tls settings, populated
-     * from configuration file.
-     */
-    SIPAccount * account = NULL;
-    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id));
-
-    if (account == NULL) {
-        _debug ("Account is null. Returning");
-        return !PJ_SUCCESS;
-    }
-
-    /**
-     * Init local address.
-     * If IP interface address is not specified,
-     * socket will be bound to PJ_INADDR_ANY.
-     * If user specified port is an empty string
-     * or if it is equal to 0, then the port will
-     * be chosen automatically by the OS.
-     */
-    pj_sockaddr_in_init (&local_addr, 0, 0);
-
-    pj_uint16_t localTlsPort = account->getLocalPort();
-
-    if (localTlsPort != 0) {
-        local_addr.sin_port = pj_htons (localTlsPort);
-    }
-
-    /*
-    std::string localAddress;
-    if (account->getLocalInterface() == "default"){
-
-        // Current selected interface address is 0.0.0.0, resolve local address using  
-        loadSIPLocalIP (&localAddress);
-    }
-    else {
-
-        // Specific interface selected, reslove it
-        localAddress = getInterfaceAddrFromName(account->getLocalInterface());
-    }
-    */
-
-    std::string localAddress = getInterfaceAddrFromName(account->getLocalInterface());
-
-    if (!localAddress.empty()) {
-        pj_str_t pjAddress;
-        pj_cstr (&pjAddress, localAddress.c_str());
-
-        pj_status_t success;
-        success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress);
-
-        if (success != PJ_SUCCESS) {
-            _debug ("Failed to set local address in %d", __LINE__);
-        }
-    }
-
-    std::string publishedAddress;
-    if (account->getPublishedSameasLocal()) {
-
-        // if "default" interface is selected, loadSIPLocalIP() is used to get local address
-        if (account->getLocalInterface() == "default"){
-
-	    loadSIPLocalIP (&publishedAddress);
-	}
-	else {
-
-	    // Specific interface selected
-	    publishedAddress = localAddress;
-	}   
-    }
-    else {
-
-        publishedAddress = account->getPublishedAddress();
-    }
-
-
-    /* Init published name */
-    pj_bzero (&a_name, sizeof (pjsip_host_port));
-
-    pj_cstr (&a_name.host, publishedAddress.c_str());
-
-    a_name.port = account->getPublishedPort();
-
-    /* Get TLS settings. Expected to be filled */
-    pjsip_tls_setting * tls_setting = account->getTlsSetting();
-
-    _debug ("TLS transport to be initialized with published address %.*s,"
-            " published port %d, local address %s, local port %d",
-            (int) a_name.host.slen, a_name.host.ptr,
-            (int) a_name.port, localAddress.c_str(), (int) localTlsPort);
-
-
-
-    status = pjsip_tls_transport_start (_endpt, tls_setting, &local_addr, &a_name, 1, &tls);
-
-    if (status != PJ_SUCCESS) {
-        _debug ("Error creating SIP TLS listener (%d)", status);
-    }
-    else {
-
-    }
-
-    return PJ_SUCCESS;
-}
-
-
 void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
 {
     _debug("Shutdown Sip Transport");
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 28a71cd100..686e3abbba 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -375,7 +375,7 @@ class SIPVoIPLink : public VoIPLink
         bool pjsip_init();
 
         /**
-         * Delete link-related stuuf like calls
+         * Delete link-related stuff like calls
          */
         bool pjsip_shutdown(void);
 
@@ -386,10 +386,10 @@ class SIPVoIPLink : public VoIPLink
 	 * Function used to create a new sip transport or get an existing one from the map.
 	 * The SIP transport is "acquired" according to account's current settings.
 	 * This function should be called before registering an account
-	 * @param accountID            An account id for which transport is to be set
+	 * @param accountID An account id for which transport is to be set
 	 *
-	 * @return bool                True if the account is succesfully created or 
-	 *                             successfully obtained from the transport map
+	 * @return bool True if the account is succesfully created or successfully obtained 
+	 * from the transport map
 	 */
 	bool acquireTransport(const AccountID& accountID);
 
@@ -407,46 +407,51 @@ class SIPVoIPLink : public VoIPLink
 
 
 	/**
-	 * Create a new sip transport according to the trasport type specified in account settings
+	 * General Sip transport creation method according to the 
+	 * transport type specified in account settings
+	 * @param id The account id for which a transport must
+         * be created.
 	 */
 	bool createSipTransport(AccountID id);
 
 
+	/**
+	 * Method to store newly created UDP transport in internal transport map. 
+	 * Transports are stored in order to retreive them in case
+	 * several accounts would share the same port number for UDP transprt.
+	 * @param key The transport's port number
+	 * @param transport A pointer to the UDP transport
+	 */
 	bool addTransportToMap(std::string key, pjsip_transport* transport);
 
-        /** Create SIP UDP Listener */
-        int createUDPServer (AccountID = "");
+        /** 
+	 * Create SIP UDP transport from account's setting
+	 * @param id The account id for which a transport must
+         * be created.
+	 * @return pj_status_t PJ_SUCCESS on success 
+	 */
+        int createUdpTransport (AccountID = "");
 
         /**
-         * Try to create a new TLS transport
-         * with the settings defined in the corresponding
-         * SIPAccount with id "id". If creatation fails
-         * for whatever reason, it will try to start
-         * it again on a randomly chosen port.
-         *
-         * A better idea would be to list all the transports
-         * registered to the transport manager in order to find
-         * an available port. Note that creation might also fail
-         * for other reason than just a wrong port.
-         * 
-         * @param id The account id for which a tranport must
+         * Create a TLS transport from the default TLS listener from
+         * @param id The account id for which a transport must
          * be created.
-         * @return pj_status_t PJ_SUCCESS on success
+         * @return pj_status_t PJ_SUCCESS on success 
          */
-        pj_status_t createTlsTransportRetryOnFailure(AccountID id);
+        pj_status_t createTlsTransport(const AccountID& id,  std::string& remoteAddr);
 
-        /**
-         * Try to create a TLS transport with the settings
-         * defined in the corresponding SIPAccount with id
-         * "id". 
+	/**
+         * Create a UDP transport using stun server to resove public address
          * @param id The account id for which a transport must
          * be created.
          * @return pj_status_t PJ_SUCCESS on success 
          */
-        pj_status_t createTlsTransport(AccountID id);
-
 	pj_status_t createAlternateUdpTransport (AccountID id);
 
+	/** 
+	 * UDP Transports are stored in this map in order to retreive them in case
+	 * several accounts would share the same port number.
+	 */
 	SipTransportMap _transportMap;
 
         /** For registration use only */
-- 
GitLab


From 23d2e9189b14d36bc733dc1f1d34e432f751db1b Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 26 Jan 2010 12:15:29 -0500
Subject: [PATCH 016/160] [#2605] Update to PJSIP 1.5.5

---
 sflphone-common/globals.mak                   |    18 +-
 sflphone-common/libs/pjproject/Makefile       |    45 +-
 sflphone-common/libs/pjproject/aconfigure     | 11426 ++++++++++++----
 sflphone-common/libs/pjproject/aconfigure.ac  |    13 +-
 sflphone-common/libs/pjproject/autogen.sh     |    26 -
 sflphone-common/libs/pjproject/build.mak.in   |    44 +-
 .../libs/pjproject/build.symbian/bld.inf      |     3 +-
 .../pjproject/build.symbian/libg7221codec.mmp |     1 +
 .../pjproject/build.symbian/libgsmcodec.mmp   |     1 +
 .../build.symbian/libpassthroughcodec.mmp     |     1 +
 .../pjproject/build.symbian/libresample.mmp   |     1 +
 .../pjproject/build.symbian/libspeexcodec.mmp |     1 +
 .../libs/pjproject/build.symbian/libsrtp.mmp  |     1 +
 .../pjproject/build.symbian/null_audio.mmp    |     1 +
 .../libs/pjproject/build.symbian/pjlib.mmp    |     6 +-
 .../pjproject/build.symbian/pjlib_test.mmp    |     6 +-
 .../pjproject/build.symbian/pjlib_util.mmp    |     2 +-
 .../libs/pjproject/build.symbian/pjmedia.mmp  |     2 +-
 .../build.symbian/pjmedia_audiodev.mmp        |     1 +
 .../libs/pjproject/build.symbian/pjnath.mmp   |     2 +
 .../libs/pjproject/build.symbian/pjsdp.mmp    |     2 +-
 .../libs/pjproject/build.symbian/pjsip.mmp    |     3 +-
 .../pjproject/build.symbian/pjsip_simple.mmp  |     3 +-
 .../libs/pjproject/build.symbian/pjsip_ua.mmp |     2 +-
 .../pjproject/build.symbian/pjstun_client.mmp |     2 +
 .../pjproject/build.symbian/pjsua_lib.mmp     |     2 +-
 .../pjproject/build.symbian/symbian_audio.mmp |     1 +
 .../pjproject/build.symbian/symbian_ua.mmp    |     4 +-
 .../pjproject/build.symbian/symsndtest.mmp    |     2 +
 .../libs/pjproject/build/os-auto.mak          |    11 -
 sflphone-common/libs/pjproject/config.guess   |  1318 +-
 sflphone-common/libs/pjproject/config.sub     |  1573 ++-
 sflphone-common/libs/pjproject/configure.ac   |     5 -
 .../libs/pjproject/libpj-sfl.pc.in            |    12 -
 .../libs/pjproject/pjlib-util/build/Makefile  |     4 +-
 .../pjproject/pjlib-util/build/os-auto.mak    |     3 -
 .../pjlib-util/include/pjlib-util/config.h    |    18 +-
 .../include/pjlib-util/srv_resolver.h         |    14 +-
 .../src/pjlib-util/resolver_wrap.cpp          |     4 +-
 .../pjlib-util/src/pjlib-util/srv_resolver.c  |    55 +-
 .../pjlib-util/src/pjlib-util/xml_wrap.cpp    |     4 +-
 .../libs/pjproject/pjlib/build/Makefile       |     7 +-
 .../libs/pjproject/pjlib/build/cacert.pem     |    21 +
 .../libs/pjproject/pjlib/build/os-auto.mak    |    35 -
 .../libs/pjproject/pjlib/build/os-win32.mak   |     4 +-
 .../libs/pjproject/pjlib/build/pjlib.dsp      |    41 +-
 .../libs/pjproject/pjlib/build/pjlib.vcproj   |  2446 ++--
 .../libs/pjproject/pjlib/build/pjlib_test.dsp |     6 +-
 .../pjproject/pjlib/build/pjlib_test.vcproj   |   840 +-
 .../libs/pjproject/pjlib/build/privkey.pem    |    27 +
 .../pjproject/pjlib/include/pj/addr_resolv.h  |     5 +-
 .../pjlib/include/pj/compat/cc_armcc.h        |     8 +-
 .../pjlib/include/pj/compat/os_auto.h.in      |     9 +-
 .../pjlib/include/pj/compat/os_darwinos.h     |     3 +-
 .../pjlib/include/pj/compat/os_symbian.h      |     3 +-
 .../pjlib/include/pj/compat/os_win32.h        |    10 +-
 .../pjlib/include/pj/compat/os_win32_wince.h  |     3 +-
 .../pjlib/include/pj/compat/socket.h          |     7 +-
 .../pjlib/include/pj/compat/string.h          |     4 +-
 .../libs/pjproject/pjlib/include/pj/config.h  |   271 +-
 .../pjproject/pjlib/include/pj/config_site.h  |     0
 .../libs/pjproject/pjlib/include/pj/errno.h   |   220 +-
 .../libs/pjproject/pjlib/include/pj/sock.h    |    31 +-
 .../pjproject/pjlib/include/pj/sock_qos.h     |   427 +
 .../pjproject/pjlib/include/pj/ssl_sock.h     |   874 ++
 .../libs/pjproject/pjlib/include/pj/timer.h   |     6 +-
 .../libs/pjproject/pjlib/include/pjlib.h      |     4 +-
 .../libs/pjproject/pjlib/src/pj/activesock.c  |    17 +-
 .../pjproject/pjlib/src/pj/addr_resolv_sock.c |    64 +-
 .../pjlib/src/pj/addr_resolv_symbian.cpp      |   226 +-
 .../libs/pjproject/pjlib/src/pj/config.c      |     4 +-
 .../libs/pjproject/pjlib/src/pj/errno.c       |   114 +-
 .../pjlib/src/pj/exception_symbian.cpp        |    42 +-
 .../pjlib/src/pj/ioqueue_symbian.cpp          |   895 +-
 .../pjproject/pjlib/src/pj/ioqueue_winnt.c    |    58 +-
 .../pjlib/src/pj/ip_helper_generic.c          |     5 +-
 .../pjlib/src/pj/ip_helper_symbian.cpp        |   152 +-
 .../pjproject/pjlib/src/pj/ip_helper_win32.c  |   190 +-
 .../src/pj/log_writer_symbian_console.cpp     |    20 +-
 .../pjlib/src/pj/os_core_symbian.cpp          |   573 +-
 .../pjproject/pjlib/src/pj/os_core_win32.c    |     3 +-
 .../pjlib/src/pj/os_error_symbian.cpp         |   163 +-
 .../libs/pjproject/pjlib/src/pj/pool.c        |    21 +-
 .../pjlib/src/pj/pool_policy_new.cpp          |    60 +-
 .../libs/pjproject/pjlib/src/pj/sock_bsd.c    |    40 +-
 .../libs/pjproject/pjlib/src/pj/sock_common.c |    23 +-
 .../pjproject/pjlib/src/pj/sock_qos_bsd.c     |   132 +
 .../pjproject/pjlib/src/pj/sock_qos_common.c  |   151 +
 .../pjproject/pjlib/src/pj/sock_qos_dummy.c   |    76 +
 .../pjlib/src/pj/sock_qos_symbian.cpp         |    95 +
 .../libs/pjproject/pjlib/src/pj/sock_qos_wm.c |   103 +
 .../pjlib/src/pj/sock_select_symbian.cpp      |   143 +-
 .../pjproject/pjlib/src/pj/sock_symbian.cpp   |   774 +-
 .../pjproject/pjlib/src/pj/ssl_sock_common.c  |   142 +
 .../pjproject/pjlib/src/pj/ssl_sock_ossl.c    |  2137 +++
 .../pjlib/src/pj/ssl_sock_symbian.cpp         |  1117 ++
 .../pjproject/pjlib/src/pj/timer_symbian.cpp  |   413 +-
 .../pjlib/src/pj/unicode_symbian.cpp          |    44 +-
 .../pjproject/pjlib/src/pj/unicode_win32.c    |    18 +-
 .../pjproject/pjlib/src/pjlib++-test/main.cpp |    20 +-
 .../pjlib/src/pjlib-test/activesock.c         |     4 +-
 .../pjproject/pjlib/src/pjlib-test/errno.c    |     6 +-
 .../pjlib/src/pjlib-test/exception_wrap.cpp   |     4 +-
 .../pjproject/pjlib/src/pjlib-test/ioq_tcp.c  |    49 +-
 .../pjlib/src/pjlib-test/main_symbian.cpp     |    76 +-
 .../pjlib/src/pjlib-test/pool_wrap.cpp        |     4 +-
 .../pjproject/pjlib/src/pjlib-test/sock.c     |   108 +-
 .../pjproject/pjlib/src/pjlib-test/ssl_sock.c |  1196 ++
 .../pjproject/pjlib/src/pjlib-test/test.c     |     6 +-
 .../pjproject/pjlib/src/pjlib-test/test.h     |     5 +-
 .../pjlib/src/pjlib-test/test_wrap.cpp        |     4 +-
 .../libs/pjproject/pjmedia/build/Makefile     |    22 +-
 .../pjmedia/include/pjmedia-audiodev/config.h |    70 +-
 .../pjmedia/include/pjmedia-codec/config.h    |    14 +-
 .../pjmedia/include/pjmedia/config.h          |   108 +-
 .../pjmedia/include/pjmedia/config_auto.h     |    44 -
 .../pjproject/pjmedia/include/pjmedia/sdp.h   |    14 +-
 .../pjmedia/include/pjmedia/transport.h       |     4 +-
 .../pjmedia/include/pjmedia/transport_ice.h   |    48 +-
 .../src/pjmedia-audiodev/symb_aps_dev.cpp     |  2386 ++--
 .../src/pjmedia-audiodev/symb_mda_dev.cpp     |  1301 +-
 .../src/pjmedia-audiodev/symb_vas_dev.cpp     |  2697 ++--
 .../pjmedia/src/pjmedia-audiodev/wmme_dev.c   |    12 +-
 .../pjmedia/src/pjmedia-codec/passthrough.c   |     7 +-
 .../libs/pjproject/pjmedia/src/pjmedia/jbuf.c |     4 +-
 .../libs/pjproject/pjmedia/src/pjmedia/rtp.c  |     4 +-
 .../libs/pjproject/pjmedia/src/pjmedia/sdp.c  |    39 +-
 .../pjproject/pjmedia/src/pjmedia/sdp_neg.c   |    15 +-
 .../pjmedia/src/pjmedia/sdp_wrap.cpp          |     4 +-
 .../pjmedia/src/pjmedia/transport_ice.c       |    49 +-
 .../pjproject/pjmedia/src/test/mips_test.c    |     8 +-
 .../pjproject/pjmedia/src/test/sdp_neg_test.c |     4 +-
 .../libs/pjproject/pjnath/build/Makefile      |     6 +-
 .../pjproject/pjnath/include/pjnath/config.h  |    36 +-
 .../pjnath/include/pjnath/ice_strans.h        |   113 +-
 .../pjnath/include/pjnath/stun_sock.h         |    29 +-
 .../pjnath/include/pjnath/turn_session.h      |    12 +-
 .../pjnath/include/pjnath/turn_sock.h         |    51 +-
 .../pjproject/pjnath/src/pjnath-test/stun.c   |    14 +-
 .../pjproject/pjnath/src/pjnath/ice_session.c |    74 +-
 .../pjproject/pjnath/src/pjnath/ice_strans.c  |    90 +-
 .../pjproject/pjnath/src/pjnath/stun_msg.c    |    21 +-
 .../pjnath/src/pjnath/stun_session.c          |     4 +-
 .../pjproject/pjnath/src/pjnath/stun_sock.c   |    24 +-
 .../pjnath/src/pjnath/turn_session.c          |    18 +-
 .../pjproject/pjnath/src/pjnath/turn_sock.c   |   138 +-
 .../libs/pjproject/pjsip-apps/build/Makefile  |    38 +-
 .../pjsip-apps/src/confbot/confbot.py         |   575 +
 .../pjsip-apps/src/confbot/config.py          |    41 +
 .../pjsip-apps/src/pjsua/pjsua_app.c          |   127 +-
 .../src/pjsua_wince/pjsua_wince.cpp           |   827 +-
 .../pjsip-apps/src/pjsystest/systest.c        |    41 +-
 .../pjsip-apps/src/pjsystest/systest.h        |     4 +-
 .../pjsip-apps/src/pocketpj/PocketPJ.cpp      |    54 +-
 .../pjsip-apps/src/pocketpj/PocketPJDlg.cpp   |   935 +-
 .../pjsip-apps/src/pocketpj/PopUpWnd.cpp      |   219 +-
 .../pjsip-apps/src/pocketpj/SettingsDlg.cpp   |   400 +-
 .../pjproject/pjsip-apps/src/python/_pjsua.c  |    35 +-
 .../pjproject/pjsip-apps/src/python/_pjsua.h  |    19 +-
 .../pjproject/pjsip-apps/src/python/pjsua.py  |    47 +-
 .../pjproject/pjsip-apps/src/samples/debug.c  |     4 +-
 .../pjsip-apps/src/samples/icedemo.c          |    43 +-
 .../pjproject/pjsip-apps/src/samples/jbsim.c  |     4 +-
 .../src/symbian_ua/main_symbian.cpp           |    30 +-
 .../pjsip-apps/src/symbian_ua/ua.cpp          |  1450 +-
 .../src/Symbian_ua_guiSettingItemListSets.cpp |   191 +-
 .../src/symbian_ua_gui/src/symbian_ua.cpp     |   502 +-
 .../src/symbian_ua_guiAppUi.cpp               |   340 +-
 .../src/symbian_ua_guiApplication.cpp         |    54 +-
 .../src/symbian_ua_guiContainer.cpp           |   383 +-
 .../src/symbian_ua_guiContainerView.cpp       |   661 +-
 .../src/symbian_ua_guiDocument.cpp            |    48 +-
 .../src/symbian_ua_guiSettingItemList.cpp     |   612 +-
 .../src/symbian_ua_guiSettingItemListView.cpp |   372 +-
 .../pjsip-apps/src/symsndtest/app_main.cpp    |   279 +-
 .../src/symsndtest/main_symbian.cpp           |    21 +-
 .../libs/pjproject/pjsip/build/Makefile       |    20 +-
 .../libs/pjproject/pjsip/build/os-auto.mak    |     0
 .../libs/pjproject/pjsip/build/pjsip_core.dsp |     5 +
 .../pjproject/pjsip/build/pjsip_core.vcproj   |   634 +-
 .../pjproject/pjsip/build/pjsip_simple.dsp    |     8 +
 .../pjproject/pjsip/build/pjsip_simple.vcproj |   624 +-
 .../pjsip/include/pjsip-simple/mwi.h          |   208 +
 .../pjsip/include/pjsip-simple/publish.h      |    49 +-
 .../pjsip/include/pjsip/sip_autoconf.h        |    40 -
 .../pjsip/include/pjsip/sip_autoconf.h.in     |    12 +-
 .../pjsip/include/pjsip/sip_config.h          |    22 +-
 .../pjproject/pjsip/include/pjsip/sip_msg.h   |    14 +-
 .../pjsip/include/pjsip/sip_transport.h       |    32 +-
 .../pjsip/include/pjsip/sip_transport_tcp.h   |    89 +-
 .../pjsip/include/pjsip/sip_transport_tls.h   |    31 +-
 .../pjproject/pjsip/include/pjsip/sip_util.h  |    10 +-
 .../pjproject/pjsip/include/pjsip_simple.h    |     4 +-
 .../pjproject/pjsip/include/pjsua-lib/pjsua.h |   165 +-
 .../pjsip/include/pjsua-lib/pjsua_internal.h  |    15 +-
 .../pjproject/pjsip/src/pjsip-simple/mwi.c    |   599 +
 .../pjsip/src/pjsip-simple/presence_body.c    |     4 +-
 .../pjsip/src/pjsip-simple/publishc.c         |    97 +-
 .../pjproject/pjsip/src/pjsip-simple/rpid.c   |    14 +-
 .../pjproject/pjsip/src/pjsip-ua/sip_inv.c    |   141 +-
 .../pjproject/pjsip/src/pjsip-ua/sip_timer.c  |    27 +-
 .../pjsip/src/pjsip/sip_auth_client.c         |    29 +-
 .../pjsip/src/pjsip/sip_auth_parser_wrap.cpp  |     4 +-
 .../pjproject/pjsip/src/pjsip/sip_dialog.c    |    17 +-
 .../pjsip/src/pjsip/sip_dialog_wrap.cpp       |     4 +-
 .../pjsip/src/pjsip/sip_endpoint_wrap.cpp     |     4 +-
 .../libs/pjproject/pjsip/src/pjsip/sip_msg.c  |    27 +-
 .../pjproject/pjsip/src/pjsip/sip_parser.c    |    56 +-
 .../pjsip/src/pjsip/sip_parser_wrap.cpp       |     4 +-
 .../pjproject/pjsip/src/pjsip/sip_resolve.c   |    97 +-
 .../pjsip/src/pjsip/sip_tel_uri_wrap.cpp      |     4 +-
 .../pjsip/src/pjsip/sip_transaction.c         |    32 +-
 .../pjproject/pjsip/src/pjsip/sip_transport.c |    10 +-
 .../pjsip/src/pjsip/sip_transport_tcp.c       |   140 +-
 .../pjsip/src/pjsip/sip_transport_tls.c       |  1381 ++
 .../pjsip/src/pjsip/sip_transport_tls_ossl.c  |     4 +-
 .../pjsip/src/pjsip/sip_transport_wrap.cpp    |     4 +-
 .../libs/pjproject/pjsip/src/pjsip/sip_util.c |    89 +-
 .../pjsip/src/pjsip/sip_util_proxy_wrap.cpp   |     4 +-
 .../pjsip/src/pjsip/sip_util_wrap.cpp         |     4 +-
 .../pjproject/pjsip/src/pjsua-lib/pjsua_acc.c |    50 +-
 .../pjsip/src/pjsua-lib/pjsua_call.c          |    47 +-
 .../pjsip/src/pjsua-lib/pjsua_core.c          |   174 +-
 .../pjproject/pjsip/src/pjsua-lib/pjsua_im.c  |     8 +-
 .../pjsip/src/pjsua-lib/pjsua_media.c         |    78 +-
 .../pjsip/src/pjsua-lib/pjsua_pres.c          |   803 +-
 ...ith_port_0_and_no_rtpmap_for_dynamic_pt.py |    26 +
 .../tests/pjsua/scripts-sipp/uac-bad-ack.xml  |   132 +
 .../scripts-sipp/uac-inv-multiple-require.xml |    91 +
 .../tests/pjsua/scripts-sipp/uac-options.xml  |    54 +
 .../uac-reinvite-bad-via-branch.xml           |   173 +
 .../uac-reinvite-port-0-bad-sdp.xml           |   207 +
 .../pjsua/scripts-sipp/uac-subscribe.xml      |   113 +
 .../scripts-sipp/uas-422-then-200-bad-se.xml  |   119 +
 .../tests/pjsua/scripts-sipp/uas-auth.xml     |    67 +
 .../tests/pjsua/scripts-sipp/uas-mwi-0.xml    |    86 +
 .../tests/pjsua/scripts-sipp/uas-mwi.xml      |   112 +
 .../uas-subscribe-refresh-481.xml             |   116 +
 .../uas-subscribe-terminated-retry.xml        |   120 +
 .../libs/pjproject/third_party/build/Makefile |     2 +-
 .../third_party/build/milenage/Makefile       |    58 +
 .../build/milenage/libmilenage.dsp            |   110 +
 .../build/milenage/libmilenage.vcp            |  1562 +++
 .../build/milenage/libmilenage.vcproj         |  2888 ++++
 .../third_party/build/portaudio/os-auto.mak   |    79 -
 .../third_party/build/speex/config.h          |     4 +-
 .../third_party/g7221/common/basic_op.c       |     2 +-
 .../third_party/g7221/common/basic_op_i.h     |     2 +-
 .../third_party/g7221/common/config.h         |     9 +-
 .../third_party/ilbc/FrameClassify.c          |   114 +
 .../third_party/ilbc/FrameClassify.h          |    27 +
 .../pjproject/third_party/ilbc/LPCdecode.c    |   158 +
 .../pjproject/third_party/ilbc/LPCdecode.h    |    52 +
 .../pjproject/third_party/ilbc/LPCencode.c    |   241 +
 .../pjproject/third_party/ilbc/LPCencode.h    |    28 +
 .../third_party/ilbc/StateConstructW.c        |    86 +
 .../third_party/ilbc/StateConstructW.h        |    31 +
 .../pjproject/third_party/ilbc/StateSearchW.c |   211 +
 .../pjproject/third_party/ilbc/StateSearchW.h |    52 +
 .../pjproject/third_party/ilbc/anaFilter.c    |    72 +
 .../pjproject/third_party/ilbc/anaFilter.h    |    30 +
 .../pjproject/third_party/ilbc/constants.c    |   770 ++
 .../pjproject/third_party/ilbc/constants.h    |    80 +
 .../pjproject/third_party/ilbc/createCB.c     |   231 +
 .../pjproject/third_party/ilbc/createCB.h     |    58 +
 .../libs/pjproject/third_party/ilbc/doCPLC.c  |   270 +
 .../libs/pjproject/third_party/ilbc/doCPLC.h  |    29 +
 .../pjproject/third_party/ilbc/enhancer.c     |   701 +
 .../pjproject/third_party/ilbc/enhancer.h     |    36 +
 .../libs/pjproject/third_party/ilbc/filter.c  |   175 +
 .../libs/pjproject/third_party/ilbc/filter.h  |    80 +
 .../pjproject/third_party/ilbc/gainquant.c    |   116 +
 .../pjproject/third_party/ilbc/gainquant.h    |    30 +
 .../pjproject/third_party/ilbc/getCBvec.c     |   193 +
 .../pjproject/third_party/ilbc/getCBvec.h     |    25 +
 .../libs/pjproject/third_party/ilbc/helpfun.c |   326 +
 .../libs/pjproject/third_party/ilbc/helpfun.h |   106 +
 .../libs/pjproject/third_party/ilbc/hpInput.c |    65 +
 .../libs/pjproject/third_party/ilbc/hpInput.h |    24 +
 .../pjproject/third_party/ilbc/hpOutput.c     |    61 +
 .../pjproject/third_party/ilbc/hpOutput.h     |    24 +
 .../pjproject/third_party/ilbc/iCBConstruct.c |   112 +
 .../pjproject/third_party/ilbc/iCBConstruct.h |    40 +
 .../pjproject/third_party/ilbc/iCBSearch.c    |   515 +
 .../pjproject/third_party/ilbc/iCBSearch.h    |    37 +
 .../pjproject/third_party/ilbc/iLBC_decode.c  |   652 +
 .../pjproject/third_party/ilbc/iLBC_decode.h  |    42 +
 .../pjproject/third_party/ilbc/iLBC_define.h  |   217 +
 .../pjproject/third_party/ilbc/iLBC_encode.c  |   543 +
 .../pjproject/third_party/ilbc/iLBC_encode.h  |    39 +
 .../pjproject/third_party/ilbc/iLBC_test.c    |   310 +
 .../libs/pjproject/third_party/ilbc/lsf.c     |   283 +
 .../libs/pjproject/third_party/ilbc/lsf.h     |    27 +
 .../libs/pjproject/third_party/ilbc/packing.c |   182 +
 .../libs/pjproject/third_party/ilbc/packing.h |    68 +
 .../pjproject/third_party/ilbc/syntFilter.c   |    80 +
 .../pjproject/third_party/ilbc/syntFilter.h   |    24 +
 .../pjproject/third_party/milenage/milenage.c |   284 +
 .../pjproject/third_party/milenage/milenage.h |    35 +
 .../pjproject/third_party/milenage/rijndael.c |   444 +
 .../pjproject/third_party/milenage/rijndael.h |    26 +
 .../portaudio/build/msvc/readme.txt           |    29 +
 .../third_party/portaudio/configure.in        |   287 +-
 .../third_party/portaudio/include/pa_asio.h   |    15 +-
 .../portaudio/include/pa_linux_alsa.h         |     7 +-
 .../portaudio/include/pa_win_waveformat.h     |    22 +-
 .../portaudio/include/pa_win_wmme.h           |    11 +-
 .../portaudio/src/common/pa_dither.c          |    29 +-
 .../portaudio/src/common/pa_dither.h          |    18 +-
 .../portaudio/src/common/pa_front.c           |     4 +-
 .../portaudio/src/common/pa_memorybarrier.h   |     6 +-
 .../portaudio/src/common/pa_process.c         |     4 +-
 .../portaudio/src/common/pa_ringbuffer.c      |    44 +-
 .../portaudio/src/common/pa_ringbuffer.h      |    55 +-
 .../src/hostapi/alsa/pa_linux_alsa.c          |   195 +-
 .../hostapi/asio/iasiothiscallresolver.cpp    |   114 +-
 .../portaudio/src/hostapi/asio/pa_asio.cpp    |  3353 +++--
 .../src/hostapi/coreaudio/pa_mac_core.c       |     8 +-
 .../hostapi/coreaudio/pa_mac_core_blocking.c  |     2 +-
 .../hostapi/coreaudio/pa_mac_core_internal.h  |     3 +-
 .../hostapi/coreaudio/pa_mac_core_utilities.c |   131 +-
 .../hostapi/coreaudio/pa_mac_core_utilities.h |    12 -
 .../portaudio/src/hostapi/dsound/pa_win_ds.c  |    20 +-
 .../src/hostapi/wasapi/pa_win_wasapi.cpp      |  1835 ++-
 .../src/hostapi/wdmks/pa_win_wdmks.c          |    57 +-
 .../portaudio/src/hostapi/wmme/pa_win_wmme.c  |   195 +-
 .../portaudio/src/os/unix/pa_unix_hostapis.c  |     7 +-
 .../portaudio/src/os/unix/pa_unix_util.c      |    45 +-
 .../portaudio/src/os/win/pa_win_util.c        |     6 +-
 .../portaudio/src/os/win/pa_win_waveformat.c  |    37 +-
 330 files changed, 53546 insertions(+), 18829 deletions(-)
 delete mode 100755 sflphone-common/libs/pjproject/autogen.sh
 delete mode 100644 sflphone-common/libs/pjproject/build/os-auto.mak
 mode change 120000 => 100755 sflphone-common/libs/pjproject/config.guess
 mode change 120000 => 100755 sflphone-common/libs/pjproject/config.sub
 delete mode 100644 sflphone-common/libs/pjproject/configure.ac
 delete mode 100644 sflphone-common/libs/pjproject/libpj-sfl.pc.in
 delete mode 100644 sflphone-common/libs/pjproject/pjlib-util/build/os-auto.mak
 create mode 100644 sflphone-common/libs/pjproject/pjlib/build/cacert.pem
 delete mode 100644 sflphone-common/libs/pjproject/pjlib/build/os-auto.mak
 create mode 100644 sflphone-common/libs/pjproject/pjlib/build/privkey.pem
 delete mode 100644 sflphone-common/libs/pjproject/pjlib/include/pj/config_site.h
 create mode 100644 sflphone-common/libs/pjproject/pjlib/include/pj/sock_qos.h
 create mode 100644 sflphone-common/libs/pjproject/pjlib/include/pj/ssl_sock.h
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_bsd.c
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_common.c
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_dummy.c
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_wm.c
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_common.c
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_ossl.c
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp
 create mode 100644 sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ssl_sock.c
 delete mode 100644 sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config_auto.h
 create mode 100644 sflphone-common/libs/pjproject/pjsip-apps/src/confbot/confbot.py
 create mode 100644 sflphone-common/libs/pjproject/pjsip-apps/src/confbot/config.py
 delete mode 100644 sflphone-common/libs/pjproject/pjsip/build/os-auto.mak
 create mode 100644 sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/mwi.h
 delete mode 100644 sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h
 create mode 100644 sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/mwi.c
 create mode 100644 sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sendto/126_sdp_with_port_0_and_no_rtpmap_for_dynamic_pt.py
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-bad-ack.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-inv-multiple-require.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-options.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-bad-via-branch.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-port-0-bad-sdp.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-subscribe.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-422-then-200-bad-se.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-auth.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi-0.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-refresh-481.xml
 create mode 100644 sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-terminated-retry.xml
 create mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/Makefile
 create mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp
 create mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp
 create mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj
 delete mode 100644 sflphone-common/libs/pjproject/third_party/build/portaudio/os-auto.mak
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/constants.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/constants.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/createCB.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/createCB.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/filter.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/filter.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/lsf.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/lsf.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/packing.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/packing.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/milenage/milenage.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/milenage/milenage.h
 create mode 100644 sflphone-common/libs/pjproject/third_party/milenage/rijndael.c
 create mode 100644 sflphone-common/libs/pjproject/third_party/milenage/rijndael.h

diff --git a/sflphone-common/globals.mak b/sflphone-common/globals.mak
index bcbb63eb25..23f700e61f 100644
--- a/sflphone-common/globals.mak
+++ b/sflphone-common/globals.mak
@@ -14,15 +14,15 @@ PJSIP_LIBS= \
 			-L$(src)/libs/pjproject/pjlib/lib/ \
 			-L$(src)/libs/pjproject/pjlib-util/lib/ \
 			-L$(src)/libs/pjproject/pjmedia/lib/ \
-			-lpjnath-sfl-$(target) \
-			-lpjsua-sfl-$(target) \
-			-lpjsip-sfl-$(target) \
-			-lpjmedia-sfl-$(target) \
-			-lpjsip-simple-sfl-$(target) \
-			-lpjsip-ua-sfl-$(target) \
-			-lpjmedia-codec-sfl-$(target) \
-			-lpjlib-util-sfl-$(target) \
-			-lpj-sfl-$(target) 
+			-lpjnath-$(target) \
+			-lpjsua-$(target) \
+			-lpjsip-$(target) \
+			-lpjmedia-$(target) \
+			-lpjsip-simple-$(target) \
+			-lpjsip-ua-$(target) \
+			-lpjmedia-codec-$(target) \
+			-lpjlib-util-$(target) \
+			-lpj-$(target) 
 
 SIP_CFLAGS=-I$(src)/libs/pjproject/pjsip/include \
 		   -I$(src)/libs/pjproject/pjlib/include \
diff --git a/sflphone-common/libs/pjproject/Makefile b/sflphone-common/libs/pjproject/Makefile
index 50f4da18e7..f8ed4b0de0 100644
--- a/sflphone-common/libs/pjproject/Makefile
+++ b/sflphone-common/libs/pjproject/Makefile
@@ -29,17 +29,17 @@ doc:
 		fi; \
 	done
 	
-LIBS = 	pjlib/lib/libpj-sfl-$(TARGET_NAME).a \
-	pjlib-util/lib/libpjlib-util-sfl-$(TARGET_NAME).a \
-	pjnath/lib/libpjnath-sfl-$(TARGET_NAME).a \
-	pjmedia/lib/libpjmedia-sfl-$(TARGET_NAME).a \
-	pjmedia/lib/libpjmedia-audiodev-sfl-$(TARGET_NAME).a \
-	pjmedia/lib/libpjmedia-codec-sfl-$(TARGET_NAME).a \
-       	pjsip/lib/libpjsip-sfl-$(TARGET_NAME).a \
-	pjsip/lib/libpjsip-ua-sfl-$(TARGET_NAME).a \
-	pjsip/lib/libpjsip-simple-sfl-$(TARGET_NAME).a \
-	pjsip/lib/libpjsua-sfl-$(TARGET_NAME).a
-BINS = 	pjsip-apps/bin/pjsua-sfl-$(TARGET_NAME)$(HOST_EXE) 
+LIBS = 	pjlib/lib/libpj-$(TARGET_NAME).a \
+	pjlib-util/lib/libpjlib-util-$(TARGET_NAME).a \
+	pjnath/lib/libpjnath-$(TARGET_NAME).a \
+	pjmedia/lib/libpjmedia-$(TARGET_NAME).a \
+	pjmedia/lib/libpjmedia-audiodev-$(TARGET_NAME).a \
+	pjmedia/lib/libpjmedia-codec-$(TARGET_NAME).a \
+       	pjsip/lib/libpjsip-$(TARGET_NAME).a \
+	pjsip/lib/libpjsip-ua-$(TARGET_NAME).a \
+	pjsip/lib/libpjsip-simple-$(TARGET_NAME).a \
+	pjsip/lib/libpjsua-$(TARGET_NAME).a
+BINS = 	pjsip-apps/bin/pjsua-$(TARGET_NAME)$(HOST_EXE) 
 
 size:
 	@echo -n 'Date: '
@@ -70,6 +70,27 @@ xhdrid:
 		cp /tmp/id $$f; \
 	done
 
+selftest: pjlib-test pjlib-util-test pjnath-test pjmedia-test pjsip-test pjsua-test
+
+pjlib-test: pjlib/bin/pjlib-test-$(TARGET_NAME)
+	cd pjlib/build && ../bin/pjlib-test-$(TARGET_NAME)
+
+pjlib-util-test: pjlib-util/bin/pjlib-util-test-$(TARGET_NAME)
+	cd pjlib-util/build && ../bin/pjlib-util-test-$(TARGET_NAME)
+
+pjnath-test: pjnath/bin/pjnath-test-$(TARGET_NAME)
+	cd pjnath/build && ../bin/pjnath-test-$(TARGET_NAME)
+
+pjmedia-test: pjmedia/bin/pjmedia-test-$(TARGET_NAME)
+	cd pjmedia/build && ../bin/pjmedia-test-$(TARGET_NAME)
+
+pjsip-test: pjsip/bin/pjsip-test-$(TARGET_NAME)
+	cd pjsip/build && ../bin/pjsip-test-$(TARGET_NAME)
+
+pjsua-test:
+	cd tests/pjsua && python runall.py
+
+prefix = /usr/local
 install:
 	mkdir -p $(DESTDIR)$(prefix)/lib
 	cp -L $$(find . -name '*.a') $(DESTDIR)$(prefix)/lib
@@ -79,4 +100,4 @@ install:
 		ln -s $$i $$(echo $$i | sed -e "s/-$(TARGET_NAME)//");\
 	done
 	mkdir -p $(DESTDIR)$(prefix)/lib/pkgconfig
-	sed -e "s!@PREFIX@!$(DESTDIR)$(prefix)!" libpj-sfl.pc.in > $(DESTDIR)/$(prefix)/lib/pkgconfig/libpj-sfl.pc
+	sed -e "s!@PREFIX@!$(DESTDIR)$(prefix)!" libpj.pc.in > $(DESTDIR)/$(prefix)/lib/pkgconfig/libpj.pc
diff --git a/sflphone-common/libs/pjproject/aconfigure b/sflphone-common/libs/pjproject/aconfigure
index 67e64d34bf..3ae02b02d2 100755
--- a/sflphone-common/libs/pjproject/aconfigure
+++ b/sflphone-common/libs/pjproject/aconfigure
@@ -1,81 +1,60 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64 for pjproject 1.0.
+# Generated by GNU Autoconf 2.61 for pjproject 1.0.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-# Foundation, Inc.
-#
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
 esac
+
 fi
 
 
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
   else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
+    PATH_SEPARATOR=:
   fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
+  rm -f conf$$.sh
 fi
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
 fi
 
 
@@ -84,18 +63,20 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
+as_nl='
+'
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
+case $0 in
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
 IFS=$as_save_IFS
 
      ;;
@@ -106,321 +87,354 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
 done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
 # CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+$as_unset CDPATH
+
 
 if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
 else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
+  as_have_required=no
 fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
+
+  if test $as_have_required = yes && 	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
 
 exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
+if as_func_success; then
+  :
 else
-  as_have_required=no
+  exitcode=1
+  echo as_func_success failed.
 fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
 
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
 else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
+  case $as_dir in
 	 /*)
 	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
 	   done;;
        esac
-  as_found=false
 done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
 IFS=$as_save_IFS
 
 
-      if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-	# neutralization value for shells without unset; and this also
-	# works around shells that cannot unset nonexistent variables.
-	BASH_ENV=/dev/null
-	ENV=/dev/null
-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
 
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
 fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
 fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
 
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
 }
-as_unset=as_fn_unset
 
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
 
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
 
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
+if as_func_ret_success; then
+  :
 else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
 else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
+  exitcode=1
+  echo positional parameters were not saved.
+fi
 
+test $exitcode = 0) || { (exit 1); exit 1; }
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
-  fi
-  $as_echo "$as_me: error: $1" >&2
-  as_fn_exit $as_status
-} # as_fn_error
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
 
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
 else
-  as_expr=false
+  exitcode=1
+  echo as_func_success failed.
 fi
 
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
 else
-  as_basename=false
+  exitcode=1
+  echo as_func_ret_success failed.
 fi
 
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
 else
-  as_dirname=false
+  exitcode=1
+  echo positional parameters were not saved.
 fi
 
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf@gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
 
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
     /[$]LINENO/=
@@ -437,7 +451,8 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
@@ -447,40 +462,49 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   exit
 }
 
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
     as_ln_s='cp -p'
-  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
 else
   as_ln_s='cp -p'
 fi
@@ -488,7 +512,7 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
+  as_mkdir_p=:
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -505,12 +529,12 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-	test -d "$1/.";
+        test -d "$1/.";
       else
-	case $1 in #(
-	-*)set "./$1";;
+	case $1 in
+        -*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -524,6 +548,7 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
+
 exec 7<&0 </dev/null 6>&1
 
 # Name of the host.
@@ -542,6 +567,7 @@ cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME='pjproject'
@@ -549,7 +575,6 @@ PACKAGE_TARNAME='pjproject'
 PACKAGE_VERSION='1.0'
 PACKAGE_STRING='pjproject 1.0'
 PACKAGE_BUGREPORT=''
-PACKAGE_URL=''
 
 # Factoring default headers for most tests.
 ac_includes_default="\
@@ -587,119 +612,96 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-ac_main_obj
-ac_host
-ac_linux_poll
-ac_cross_compile
-libcrypto_present
-libssl_present
-openssl_h_present
-ac_no_ssl
-ac_no_ilbc_codec
-ac_no_speex_codec
-ac_no_g7221_codec
-ac_no_g722_codec
-ac_no_gsm_codec
-ac_no_l16_codec
-ac_no_g711_codec
-ac_no_speex_aec
-ac_no_large_filter
-ac_no_small_filter
-ac_pa_use_oss
-ac_pa_use_alsa
-ac_pa_cflags
-ac_pjmedia_snd
-ac_os_objs
-EGREP
-GREP
-CPP
-ac_build_mak_vars
-ac_pjdir
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_os
-target_vendor
-target_cpu
-target
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
+ac_subst_vars='SHELL
 PATH_SEPARATOR
-SHELL'
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+CXX
+CXXFLAGS
+ac_ct_CXX
+ac_pjdir
+ac_build_mak_vars
+CPP
+GREP
+EGREP
+ac_os_objs
+ac_pjmedia_snd
+ac_pa_cflags
+ac_pa_use_alsa
+ac_pa_use_oss
+ac_no_small_filter
+ac_no_large_filter
+ac_no_speex_aec
+ac_no_g711_codec
+ac_no_l16_codec
+ac_no_gsm_codec
+ac_no_g722_codec
+ac_no_g7221_codec
+ac_no_speex_codec
+ac_no_ilbc_codec
+ac_no_ssl
+openssl_h_present
+libssl_present
+libcrypto_present
+ac_cross_compile
+ac_linux_poll
+ac_host
+ac_main_obj
+LIBOBJS
+LTLIBOBJS'
 ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_floating_point
-enable_epoll
-enable_sound
-enable_oss
-enable_ext_sound
-enable_small_filter
-enable_large_filter
-enable_speex_aec
-enable_g711_codec
-enable_l16_codec
-enable_gsm_codec
-enable_g722_codec
-enable_g7221_codec
-enable_speex_codec
-enable_ilbc_codec
-enable_libsamplerate
-enable_ipp
-enable_ipp_samples
-enable_ssl
-'
       ac_precious_vars='build_alias
 host_alias
 target_alias
@@ -717,8 +719,6 @@ CPP'
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -817,20 +817,13 @@ do
     datarootdir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
 
   -docdir | --docdir | --docdi | --doc | --do)
     ac_prev=docdir ;;
@@ -843,20 +836,13 @@ do
     dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1047,36 +1033,22 @@ do
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -1096,25 +1068,25 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
     ;;
 
   *=*)
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
-    esac
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
@@ -1123,36 +1095,23 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
 fi
 
-# Check all directory arguments for consistency.
+# Be sure to have absolute directory names.
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
 		libdir localedir mandir
 do
   eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
   case $ac_val in
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1166,7 +1125,7 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
     If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
@@ -1182,21 +1141,23 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error "working directory cannot be determined"
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error "pwd does not report name of working directory"
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
 
 
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -1223,11 +1184,13 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1275,9 +1238,9 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
+			  [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
+			  [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1287,25 +1250,25 @@ for instance \`--prefix=\$HOME'.
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/pjproject]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/pjproject]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
 _ACEOF
 
   cat <<\_ACEOF
@@ -1324,7 +1287,6 @@ if test -n "$ac_init_help"; then
   cat <<\_ACEOF
 
 Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-floating-point
@@ -1370,7 +1332,6 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to the package provider.
 _ACEOF
 ac_status=$?
 fi
@@ -1378,17 +1339,15 @@ fi
 if test "$ac_init_help" = "recursive"; then
   # If there are subdirs, report their specific --help.
   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
+    test -d "$ac_dir" || continue
     ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1424,7 +1383,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1434,362 +1393,40 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 pjproject configure 1.0
-generated by GNU Autoconf 2.64
+generated by GNU Autoconf 2.61
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
   exit
 fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
 
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+It was created by pjproject $as_me 1.0, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
 
-} # ac_fn_c_try_compile
+  $ $0 $@
 
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
+_ACEOF
+exec 5>>config.log
 {
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
 
-	ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
 
-} # ac_fn_cxx_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  return $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_mongrel
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by pjproject $as_me 1.0, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
 
 /bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
 /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
@@ -1806,8 +1443,8 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
+  echo "PATH: $as_dir"
+done
 IFS=$as_save_IFS
 
 } >&5
@@ -1841,12 +1478,12 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
     2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
       if test $ac_must_keep_next = true; then
 	ac_must_keep_next=false # Got value, back to normal.
       else
@@ -1862,13 +1499,13 @@ do
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      as_fn_append ac_configure_args " '$ac_arg'"
+      ac_configure_args="$ac_configure_args '$ac_arg'"
       ;;
     esac
   done
 done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
@@ -1893,13 +1530,12 @@ _ASBOX
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
+      *) $as_unset $ac_var ;;
       esac ;;
     esac
   done
@@ -1928,9 +1564,9 @@ _ASBOX
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      $as_echo "$ac_var='\''$ac_val'\''"
+      echo "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
@@ -1945,9 +1581,9 @@ _ASBOX
       do
 	eval ac_val=\$$ac_var
 	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
 	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
+	echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
@@ -1963,69 +1599,64 @@ _ASBOX
       echo
     fi
     test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
     exit $exit_status
 ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
-$as_echo "/* confdefs.h */" > confdefs.h
-
 # Predefined preprocessor variables.
 
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
+
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
+
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
+
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
+# Prefer explicitly selected file to automatically selected ones.
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  set x "$CONFIG_SITE"
 elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
 else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
+  set x "$ac_default_prefix/share/config.site" \
+	"$ac_default_prefix/etc/config.site"
 fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+shift
+for ac_site_file
 do
-  test "x$ac_site_file" = xNONE && continue
   if test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file"
   fi
@@ -2035,16 +1666,16 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
@@ -2058,56 +1689,68 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
 fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -2121,16 +1764,24 @@ host_orig="$host"
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  for ac_t in install-sh install.sh shtool; do
-    if test -f "$ac_dir/$ac_t"; then
-      ac_aux_dir=$ac_dir
-      ac_install_sh="$ac_aux_dir/$ac_t -c"
-      break 2
-    fi
-  done
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2144,27 +1795,35 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -2180,24 +1839,28 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -2213,24 +1876,28 @@ IFS=$ac_save_IFS
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
-$as_echo_n "checking target system type... " >&6; }
-if test "${ac_cv_target+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "x$target_alias" = x; then
   ac_cv_target=$ac_cv_host
 else
   ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
-$as_echo "$ac_cv_target" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
 case $ac_cv_target in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+   { (exit 1); exit 1; }; };;
 esac
 target=$ac_cv_target
 ac_save_IFS=$IFS; IFS='-'
@@ -2274,10 +1941,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2287,25 +1954,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -2314,10 +1981,10 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2327,25 +1994,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -2353,8 +2020,12 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2367,10 +2038,10 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2380,25 +2051,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -2407,10 +2078,10 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2421,18 +2092,18 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
@@ -2451,11 +2122,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -2466,10 +2137,10 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2479,25 +2150,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -2510,10 +2181,10 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2523,25 +2194,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -2553,8 +2224,12 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2564,82 +2239,98 @@ fi
 fi
 
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 
 # Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
   ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
 
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stdio.h>
+
 int
 main ()
 {
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
 ac_rmfiles=
 for ac_file in $ac_files
 do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
     * ) ac_rmfiles="$ac_rmfiles $ac_file";;
   esac
 done
 rm -f $ac_rmfiles
 
-if { { ac_try="$ac_link_default"
+if { (ac_try="$ac_link_default"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -2649,14 +2340,14 @@ for ac_file in $ac_files ''
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
 	;;
     [ab].out )
 	# We found the default executable, but exeext='' is most
 	# certainly right.
 	break;;
     *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
 	then :; else
 	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	fi
@@ -2675,75 +2366,78 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then :
-  $as_echo "$as_me: failed program was:" >&5
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
 fi
+
 ac_exeext=$ac_cv_exeext
 
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
 # If not cross compiling, check that we can run a simple program.
 if test "$cross_compiling" != yes; then
   if { ac_try='./$ac_file'
-  { { case "(($ac_try" in
+  { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
 	cross_compiling=yes
     else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
     fi
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2751,31 +2445,37 @@ $as_echo "$ac_try_echo"; } >&5
 for ac_file in conftest.exe conftest conftest.*; do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	  break;;
     * ) break;;
   esac
 done
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
+
 rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -2787,46 +2487,51 @@ main ()
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
+if { (ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  $as_echo "$as_me: failed program was:" >&5
+  echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
+
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -2840,34 +2545,54 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_compiler_gnu=yes
 else
-  ac_compiler_gnu=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
    CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -2878,11 +2603,34 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
 else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -2893,12 +2641,35 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
 else
-  ac_c_werror_flag=$ac_save_c_werror_flag
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -2909,18 +2680,42 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -2936,14 +2731,18 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
@@ -3000,9 +2799,31 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
 	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
+
 rm -f core conftest.err conftest.$ac_objext
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
@@ -3013,19 +2834,17 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
   xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
 esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
 
-fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3047,10 +2866,10 @@ if test -z "$CXX"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CXX"; then
   ac_cv_prog_CXX="$CXX" # Let the user override the test.
@@ -3060,25 +2879,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 CXX=$ac_cv_prog_CXX
 if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -3091,10 +2910,10 @@ if test -z "$CXX"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$ac_ct_CXX"; then
   ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
@@ -3104,25 +2923,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-  done
+done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
 if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
 
 
@@ -3134,8 +2953,12 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
 ac_tool_warned=yes ;;
 esac
     CXX=$ac_ct_CXX
@@ -3145,36 +2968,49 @@ fi
   fi
 fi
 # Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
   ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    rm -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -3188,34 +3024,54 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_compiler_gnu=yes
 else
-  ac_compiler_gnu=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
 ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
    ac_cxx_werror_flag=yes
    ac_cv_prog_cxx_g=no
    CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -3226,11 +3082,34 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cxx_g=yes
 else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -3241,12 +3120,35 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
 else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 int
@@ -3257,18 +3159,42 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
 if test "$ac_test_CXXFLAGS" = set; then
   CXXFLAGS=$ac_save_CXXFLAGS
 elif test $ac_cv_prog_cxx_g = yes; then
@@ -3309,14 +3235,19 @@ case $target in
 esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
-$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
-if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; }
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpthread  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3334,18 +3265,39 @@ return pthread_create ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_pthread_pthread_create=yes
 else
-  ac_cv_lib_pthread_pthread_create=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_pthread_pthread_create=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; }
+if test $ac_cv_lib_pthread_pthread_create = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBPTHREAD 1
 _ACEOF
@@ -3354,14 +3306,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lwsock32" >&5
-$as_echo_n "checking for puts in -lwsock32... " >&6; }
-if test "${ac_cv_lib_wsock32_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lwsock32" >&5
+echo $ECHO_N "checking for puts in -lwsock32... $ECHO_C" >&6; }
+if test "${ac_cv_lib_wsock32_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lwsock32  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3379,18 +3336,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_wsock32_puts=yes
 else
-  ac_cv_lib_wsock32_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_wsock32_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wsock32_puts" >&5
-$as_echo "$ac_cv_lib_wsock32_puts" >&6; }
-if test "x$ac_cv_lib_wsock32_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_wsock32_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_wsock32_puts" >&6; }
+if test $ac_cv_lib_wsock32_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBWSOCK32 1
 _ACEOF
@@ -3399,14 +3377,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lws2_32" >&5
-$as_echo_n "checking for puts in -lws2_32... " >&6; }
-if test "${ac_cv_lib_ws2_32_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lws2_32" >&5
+echo $ECHO_N "checking for puts in -lws2_32... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ws2_32_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lws2_32  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3424,18 +3407,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_ws2_32_puts=yes
 else
-  ac_cv_lib_ws2_32_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ws2_32_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_puts" >&5
-$as_echo "$ac_cv_lib_ws2_32_puts" >&6; }
-if test "x$ac_cv_lib_ws2_32_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ws2_32_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_ws2_32_puts" >&6; }
+if test $ac_cv_lib_ws2_32_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBWS2_32 1
 _ACEOF
@@ -3444,14 +3448,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lole32" >&5
-$as_echo_n "checking for puts in -lole32... " >&6; }
-if test "${ac_cv_lib_ole32_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lole32" >&5
+echo $ECHO_N "checking for puts in -lole32... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ole32_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lole32  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3469,18 +3478,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_ole32_puts=yes
 else
-  ac_cv_lib_ole32_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ole32_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ole32_puts" >&5
-$as_echo "$ac_cv_lib_ole32_puts" >&6; }
-if test "x$ac_cv_lib_ole32_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ole32_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_ole32_puts" >&6; }
+if test $ac_cv_lib_ole32_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBOLE32 1
 _ACEOF
@@ -3489,14 +3519,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lwinmm" >&5
-$as_echo_n "checking for puts in -lwinmm... " >&6; }
-if test "${ac_cv_lib_winmm_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lwinmm" >&5
+echo $ECHO_N "checking for puts in -lwinmm... $ECHO_C" >&6; }
+if test "${ac_cv_lib_winmm_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lwinmm  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3514,18 +3549,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_winmm_puts=yes
 else
-  ac_cv_lib_winmm_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_winmm_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_winmm_puts" >&5
-$as_echo "$ac_cv_lib_winmm_puts" >&6; }
-if test "x$ac_cv_lib_winmm_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_winmm_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_winmm_puts" >&6; }
+if test $ac_cv_lib_winmm_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBWINMM 1
 _ACEOF
@@ -3534,14 +3590,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lsocket" >&5
-$as_echo_n "checking for puts in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lsocket" >&5
+echo $ECHO_N "checking for puts in -lsocket... $ECHO_C" >&6; }
+if test "${ac_cv_lib_socket_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsocket  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3559,18 +3620,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_socket_puts=yes
 else
-  ac_cv_lib_socket_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_socket_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_puts" >&5
-$as_echo "$ac_cv_lib_socket_puts" >&6; }
-if test "x$ac_cv_lib_socket_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_puts" >&6; }
+if test $ac_cv_lib_socket_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSOCKET 1
 _ACEOF
@@ -3579,14 +3661,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lrt" >&5
-$as_echo_n "checking for puts in -lrt... " >&6; }
-if test "${ac_cv_lib_rt_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lrt" >&5
+echo $ECHO_N "checking for puts in -lrt... $ECHO_C" >&6; }
+if test "${ac_cv_lib_rt_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lrt  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3604,18 +3691,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_rt_puts=yes
 else
-  ac_cv_lib_rt_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_rt_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_puts" >&5
-$as_echo "$ac_cv_lib_rt_puts" >&6; }
-if test "x$ac_cv_lib_rt_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_rt_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_rt_puts" >&6; }
+if test $ac_cv_lib_rt_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBRT 1
 _ACEOF
@@ -3624,14 +3732,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lnsl" >&5
-$as_echo_n "checking for puts in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_puts+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for puts in -lnsl" >&5
+echo $ECHO_N "checking for puts in -lnsl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_nsl_puts+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnsl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3649,18 +3762,39 @@ return puts ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_nsl_puts=yes
 else
-  ac_cv_lib_nsl_puts=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_nsl_puts=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_puts" >&5
-$as_echo "$ac_cv_lib_nsl_puts" >&6; }
-if test "x$ac_cv_lib_nsl_puts" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_puts" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_puts" >&6; }
+if test $ac_cv_lib_nsl_puts = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBNSL 1
 _ACEOF
@@ -3669,14 +3803,19 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
-$as_echo_n "checking for uuid_generate in -luuid... " >&6; }
-if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+
+{ echo "$as_me:$LINENO: checking for uuid_generate in -luuid" >&5
+echo $ECHO_N "checking for uuid_generate in -luuid... $ECHO_C" >&6; }
+if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3694,18 +3833,39 @@ return uuid_generate ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_uuid_uuid_generate=yes
 else
-  ac_cv_lib_uuid_uuid_generate=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_uuid_uuid_generate=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
-$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
-if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_generate" >&5
+echo "${ECHO_T}$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test $ac_cv_lib_uuid_uuid_generate = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBUUID 1
 _ACEOF
@@ -3714,14 +3874,18 @@ _ACEOF
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
-$as_echo_n "checking for uuid_generate in -luuid... " >&6; }
-if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for uuid_generate in -luuid" >&5
+echo $ECHO_N "checking for uuid_generate in -luuid... $ECHO_C" >&6; }
+if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3739,43 +3903,68 @@ return uuid_generate ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_uuid_uuid_generate=yes
 else
-  ac_cv_lib_uuid_uuid_generate=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_uuid_uuid_generate=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
-$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
-if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_generate" >&5
+echo "${ECHO_T}$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test $ac_cv_lib_uuid_uuid_generate = yes; then
   ac_has_uuid_lib=1
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_M_NAME to $target_cpu" >&5
-$as_echo "Setting PJ_M_NAME to $target_cpu" >&6; }
+{ echo "$as_me:$LINENO: result: Setting PJ_M_NAME to $target_cpu" >&5
+echo "${ECHO_T}Setting PJ_M_NAME to $target_cpu" >&6; }
 cat >>confdefs.h <<_ACEOF
 #define PJ_M_NAME "$target_cpu"
 _ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking memory alignment" >&5
-$as_echo_n "checking memory alignment... " >&6; }
+{ echo "$as_me:$LINENO: checking memory alignment" >&5
+echo $ECHO_N "checking memory alignment... $ECHO_C" >&6; }
 case $target in
     ia64-* | x86_64-* )
-	$as_echo "#define PJ_POOL_ALIGNMENT 8" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_POOL_ALIGNMENT 8
+_ACEOF
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 8 bytes" >&5
-$as_echo "8 bytes" >&6; }
+	{ echo "$as_me:$LINENO: result: 8 bytes" >&5
+echo "${ECHO_T}8 bytes" >&6; }
 	;;
     * )
-	$as_echo "#define PJ_POOL_ALIGNMENT 4" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_POOL_ALIGNMENT 4
+_ACEOF
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 4 bytes (default)" >&5
-$as_echo "4 bytes (default)" >&6; }
+	{ echo "$as_me:$LINENO: result: 4 bytes (default)" >&5
+echo "${ECHO_T}4 bytes (default)" >&6; }
 	;;
 esac
 
@@ -3785,15 +3974,15 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -3807,7 +3996,11 @@ do
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -3816,34 +4009,76 @@ do
 #endif
 		     Syntax error
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
 else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
   # Broken: fails on valid input.
 continue
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   # Broken: success on invalid input.
 continue
 else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok; then
   break
 fi
 
@@ -3855,8 +4090,8 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -3866,7 +4101,11 @@ do
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -3875,40 +4114,83 @@ do
 #endif
 		     Syntax error
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
 else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
   # Broken: fails on valid input.
 continue
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
   # Broken: success on invalid input.
 continue
 else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
+
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
+if $ac_preproc_ok; then
+  :
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
 
 ac_ext=c
@@ -3918,40 +4200,45 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test -z "$GREP"; then
   ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
+  for ac_prog in grep ggrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+    # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
+    echo 'GREP' >> "conftest.nl"
     "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    ac_count=`expr $ac_count + 1`
     if test $ac_count -gt ${ac_path_GREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_GREP="$ac_path_GREP"
@@ -3963,61 +4250,77 @@ case `"$ac_path_GREP" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-      $ac_path_GREP_found && break 3
-    done
-  done
+
+    $ac_path_GREP_found && break 3
   done
+done
+
+done
 IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
 else
   ac_cv_path_GREP=$GREP
 fi
 
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
    then ac_cv_path_EGREP="$GREP -E"
    else
-     if test -z "$EGREP"; then
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
   ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
+  for ac_prog in egrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+    # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
+    echo 'EGREP' >> "conftest.nl"
     "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    ac_count=`expr $ac_count + 1`
     if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_EGREP="$ac_path_EGREP"
@@ -4029,31 +4332,46 @@ case `"$ac_path_EGREP" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-      $ac_path_EGREP_found && break 3
-    done
-  done
+
+    $ac_path_EGREP_found && break 3
   done
+done
+
+done
 IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
 else
   ac_cv_path_EGREP=$EGREP
 fi
 
+
    fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -4068,23 +4386,47 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_header_stdc=yes
 else
-  ac_cv_header_stdc=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_stdc=no
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
 else
   ac_cv_header_stdc=no
 fi
@@ -4094,14 +4436,18 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
+  $EGREP "free" >/dev/null 2>&1; then
+  :
 else
   ac_cv_header_stdc=no
 fi
@@ -4111,10 +4457,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
+  if test "$cross_compiling" = yes; then
   :
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -4141,36 +4491,113 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
 else
-  ac_cv_header_stdc=no
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
+
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
 
 fi
 
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-eval as_val=\$$as_ac_Header
-   if test "x$as_val" = x""yes; then :
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -4178,254 +4605,280 @@ fi
 done
 
 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_cv_c_bigendian=unknown
-    # See if we're dealing with a universal compiler.
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-	       not a universal capable compiler
-	     #endif
-	     typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-	# Check for potential -arch flags.  It is not universal unless
-	# there are at least two -arch flags with different values.
-	ac_arch=
-	ac_prev=
-	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
-	 if test -n "$ac_prev"; then
-	   case $ac_word in
-	     i?86 | x86_64 | ppc | ppc64)
-	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
-		 ac_arch=$ac_word
-	       else
-		 ac_cv_c_bigendian=universal
-		 break
-	       fi
-	       ;;
-	   esac
-	   ac_prev=
-	 elif test "x$ac_word" = "x-arch"; then
-	   ac_prev=arch
-	 fi
-       done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if sys/param.h defines the BYTE_ORDER macro.
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-	     #include <sys/param.h>
+#include <sys/param.h>
 
 int
 main ()
 {
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
-		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
-		     && LITTLE_ENDIAN)
-	      bogus endian macros
-	     #endif
+#if  ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
+	&& BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
+ bogus endian macros
+#endif
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   # It does; now see whether it defined to BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-		#include <sys/param.h>
+#include <sys/param.h>
 
 int
 main ()
 {
 #if BYTE_ORDER != BIG_ENDIAN
-		 not big endian
-		#endif
+ not big endian
+#endif
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
   ac_cv_c_bigendian=yes
 else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_c_bigendian=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
 
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
-	      bogus endian macros
-	     #endif
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-  ;
-  return 0;
-}
+	# It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+  # try to guess the endianness by grepping values into an object file
+  ac_cv_c_bigendian=unknown
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to _BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <limits.h>
-
+short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
 int
 main ()
 {
-#ifndef _BIG_ENDIAN
-		 not big endian
-		#endif
-
+ _ascii (); _ebcdic ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
   ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+  if test "$ac_cv_c_bigendian" = unknown; then
+    ac_cv_c_bigendian=no
+  else
+    # finding both strings is unlikely to happen, but who knows?
+    ac_cv_c_bigendian=unknown
+  fi
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # Compile a test program.
-      if test "$cross_compiling" = yes; then :
-  # Try to guess by grepping values from an object file.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-short int ascii_mm[] =
-		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-		short int ascii_ii[] =
-		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-		int use_ascii (int i) {
-		  return ascii_mm[i] + ascii_ii[i];
-		}
-		short int ebcdic_ii[] =
-		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-		short int ebcdic_mm[] =
-		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-		int use_ebcdic (int i) {
-		  return ebcdic_mm[i] + ebcdic_ii[i];
-		}
-		extern int foo;
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
 
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
-	      ac_cv_c_bigendian=yes
-	    fi
-	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-	      if test "$ac_cv_c_bigendian" = unknown; then
-		ac_cv_c_bigendian=no
-	      else
-		# finding both strings is unlikely to happen, but who knows?
-		ac_cv_c_bigendian=unknown
-	      fi
-	    fi
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
 int
 main ()
 {
 
-	     /* Are we little or big endian?  From Harbison&Steele.  */
-	     union
-	     {
-	       long int l;
-	       char c[sizeof (long int)];
-	     } u;
-	     u.l = 1;
-	     return u.c[sizeof (long int) - 1] == 1;
+  /* Are we little or big endian?  From Harbison&Steele.  */
+  union
+  {
+    long int l;
+    char c[sizeof (long int)];
+  } u;
+  u.l = 1;
+  return u.c[sizeof (long int) - 1] == 1;
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_c_bigendian=no
 else
-  ac_cv_c_bigendian=yes
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-    fi
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
-   yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
-   no)
-      ;; #(
-   universal)
 
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
+case $ac_cv_c_bigendian in
+  yes)
 
-     ;; #(
-   *)
-     as_fn_error "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+  no)
+     ;;
+  *)
+    { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
 
 
 case $target in
     *mingw* | *cygw* | *win32* | *w32* )
-	$as_echo "#define PJ_WIN32 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_WIN32 1
+_ACEOF
 
-	$as_echo "#define PJ_WIN32_WINNT 0x0400" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_WIN32_WINNT 0x0400
+_ACEOF
 
-	$as_echo "#define WIN32_LEAN_AND_MEAN 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define WIN32_LEAN_AND_MEAN 1
+_ACEOF
 
 	;;
     *darwin*)
-	$as_echo "#define PJ_DARWINOS 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_DARWINOS 1
+_ACEOF
 
 	;;
     *linux*)
-	$as_echo "#define PJ_LINUX 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_LINUX 1
+_ACEOF
 
 	;;
     *rtems*)
-	$as_echo "#define PJ_RTEMS 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_RTEMS 1
+_ACEOF
 
 	;;
     *sunos* | *solaris* )
-	$as_echo "#define PJ_SUNOS 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_SUNOS 1
+_ACEOF
 
 	;;
     *)
@@ -4436,27 +4889,36 @@ esac
 
 
 # Check whether --enable-floating-point was given.
-if test "${enable_floating_point+set}" = set; then :
+if test "${enable_floating_point+set}" = set; then
   enableval=$enable_floating_point; if test "$enable_floating_point" = "no"; then
-		$as_echo "#define PJ_HAS_FLOATING_POINT 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_FLOATING_POINT 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if floating point is disabled... yes" >&5
-$as_echo "Checking if floating point is disabled... yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if floating point is disabled... yes" >&5
+echo "${ECHO_T}Checking if floating point is disabled... yes" >&6; }
 	       fi
 else
 
-		$as_echo "#define PJ_HAS_FLOATING_POINT 1" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_FLOATING_POINT 1
+_ACEOF
+
+	        { echo "$as_me:$LINENO: result: Checking if floating point is disabled... no" >&5
+echo "${ECHO_T}Checking if floating point is disabled... no" >&6; }
 
-	        { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if floating point is disabled... no" >&5
-$as_echo "Checking if floating point is disabled... no" >&6; }
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmod in -lm" >&5
-$as_echo_n "checking for fmod in -lm... " >&6; }
-if test "${ac_cv_lib_m_fmod+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+{ echo "$as_me:$LINENO: checking for fmod in -lm" >&5
+echo $ECHO_N "checking for fmod in -lm... $ECHO_C" >&6; }
+if test "${ac_cv_lib_m_fmod+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lm  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -4474,18 +4936,39 @@ return fmod ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_m_fmod=yes
 else
-  ac_cv_lib_m_fmod=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_m_fmod=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_fmod" >&5
-$as_echo "$ac_cv_lib_m_fmod" >&6; }
-if test "x$ac_cv_lib_m_fmod" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmod" >&5
+echo "${ECHO_T}$ac_cv_lib_m_fmod" >&6; }
+if test $ac_cv_lib_m_fmod = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBM 1
 _ACEOF
@@ -4499,303 +4982,4488 @@ fi
 
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default"
-if test "x$ac_cv_header_arpa_inet_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_ARPA_INET_H 1" >>confdefs.h
+if test "${ac_cv_header_arpa_inet_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for arpa/inet.h" >&5
+echo $ECHO_N "checking for arpa/inet.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_arpa_inet_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_arpa_inet_h" >&5
+echo "${ECHO_T}$ac_cv_header_arpa_inet_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking arpa/inet.h usability" >&5
+echo $ECHO_N "checking arpa/inet.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <arpa/inet.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_header_compiler=no
 fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "assert.h" "ac_cv_header_assert_h" "$ac_includes_default"
-if test "x$ac_cv_header_assert_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_ASSERT_H 1" >>confdefs.h
+# Is the header present?
+{ echo "$as_me:$LINENO: checking arpa/inet.h presence" >&5
+echo $ECHO_N "checking arpa/inet.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <arpa/inet.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default"
-if test "x$ac_cv_header_ctype_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_CTYPE_H 1" >>confdefs.h
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: arpa/inet.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: arpa/inet.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: arpa/inet.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: arpa/inet.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: arpa/inet.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: arpa/inet.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: arpa/inet.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for arpa/inet.h" >&5
+echo $ECHO_N "checking for arpa/inet.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_arpa_inet_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_arpa_inet_h=$ac_header_preproc
 fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_arpa_inet_h" >&5
+echo "${ECHO_T}$ac_cv_header_arpa_inet_h" >&6; }
 
+fi
+if test $ac_cv_header_arpa_inet_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_ARPA_INET_H 1
+_ACEOF
 
+fi
 
-case $target in
-    *mingw* | *cygw* | *win32* | *w32* )
-	$as_echo "#define PJ_HAS_ERRNO_H 0" >>confdefs.h
 
-	;;
-    *)
-	ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default"
-if test "x$ac_cv_header_errno_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_ERRNO_H 1" >>confdefs.h
+if test "${ac_cv_header_assert_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for assert.h" >&5
+echo $ECHO_N "checking for assert.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_assert_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_assert_h" >&5
+echo "${ECHO_T}$ac_cv_header_assert_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking assert.h usability" >&5
+echo $ECHO_N "checking assert.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <assert.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking assert.h presence" >&5
+echo $ECHO_N "checking assert.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <assert.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: assert.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: assert.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: assert.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: assert.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: assert.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: assert.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: assert.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: assert.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: assert.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: assert.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: assert.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: assert.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: assert.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: assert.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: assert.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: assert.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for assert.h" >&5
+echo $ECHO_N "checking for assert.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_assert_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_assert_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_assert_h" >&5
+echo "${ECHO_T}$ac_cv_header_assert_h" >&6; }
+
+fi
+if test $ac_cv_header_assert_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_ASSERT_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_ctype_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for ctype.h" >&5
+echo $ECHO_N "checking for ctype.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_ctype_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_ctype_h" >&5
+echo "${ECHO_T}$ac_cv_header_ctype_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking ctype.h usability" >&5
+echo $ECHO_N "checking ctype.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <ctype.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking ctype.h presence" >&5
+echo $ECHO_N "checking ctype.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: ctype.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: ctype.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ctype.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: ctype.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: ctype.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: ctype.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ctype.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: ctype.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ctype.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: ctype.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ctype.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: ctype.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ctype.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: ctype.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ctype.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: ctype.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for ctype.h" >&5
+echo $ECHO_N "checking for ctype.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_ctype_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_ctype_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_ctype_h" >&5
+echo "${ECHO_T}$ac_cv_header_ctype_h" >&6; }
+
+fi
+if test $ac_cv_header_ctype_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_CTYPE_H 1
+_ACEOF
+
+fi
+
+
+
+case $target in
+    *mingw* | *cygw* | *win32* | *w32* )
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_ERRNO_H 0
+_ACEOF
+
+	;;
+    *)
+	if test "${ac_cv_header_errno_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for errno.h" >&5
+echo $ECHO_N "checking for errno.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_errno_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
+echo "${ECHO_T}$ac_cv_header_errno_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking errno.h usability" >&5
+echo $ECHO_N "checking errno.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <errno.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking errno.h presence" >&5
+echo $ECHO_N "checking errno.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <errno.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: errno.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: errno.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: errno.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: errno.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: errno.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: errno.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: errno.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: errno.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: errno.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: errno.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for errno.h" >&5
+echo $ECHO_N "checking for errno.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_errno_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_errno_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
+echo "${ECHO_T}$ac_cv_header_errno_h" >&6; }
+
+fi
+if test $ac_cv_header_errno_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_ERRNO_H 1
+_ACEOF
+
+fi
+
+
+	;;
+esac
+
+if test "${ac_cv_header_fcntl_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for fcntl.h" >&5
+echo $ECHO_N "checking for fcntl.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_fcntl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_fcntl_h" >&5
+echo "${ECHO_T}$ac_cv_header_fcntl_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking fcntl.h usability" >&5
+echo $ECHO_N "checking fcntl.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <fcntl.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking fcntl.h presence" >&5
+echo $ECHO_N "checking fcntl.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <fcntl.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: fcntl.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: fcntl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: fcntl.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: fcntl.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: fcntl.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: fcntl.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: fcntl.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: fcntl.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: fcntl.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: fcntl.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: fcntl.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: fcntl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: fcntl.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: fcntl.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: fcntl.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: fcntl.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for fcntl.h" >&5
+echo $ECHO_N "checking for fcntl.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_fcntl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_fcntl_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_fcntl_h" >&5
+echo "${ECHO_T}$ac_cv_header_fcntl_h" >&6; }
+
+fi
+if test $ac_cv_header_fcntl_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_FCNTL_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_linux_socket_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for linux/socket.h" >&5
+echo $ECHO_N "checking for linux/socket.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_linux_socket_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_socket_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_socket_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking linux/socket.h usability" >&5
+echo $ECHO_N "checking linux/socket.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <linux/socket.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking linux/socket.h presence" >&5
+echo $ECHO_N "checking linux/socket.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <linux/socket.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: linux/socket.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: linux/socket.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: linux/socket.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: linux/socket.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: linux/socket.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: linux/socket.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: linux/socket.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/socket.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: linux/socket.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for linux/socket.h" >&5
+echo $ECHO_N "checking for linux/socket.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_linux_socket_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_linux_socket_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_socket_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_socket_h" >&6; }
+
+fi
+if test $ac_cv_header_linux_socket_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_LINUX_SOCKET_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_malloc_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for malloc.h" >&5
+echo $ECHO_N "checking for malloc.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_malloc_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_malloc_h" >&5
+echo "${ECHO_T}$ac_cv_header_malloc_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking malloc.h usability" >&5
+echo $ECHO_N "checking malloc.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <malloc.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking malloc.h presence" >&5
+echo $ECHO_N "checking malloc.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <malloc.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: malloc.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: malloc.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: malloc.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: malloc.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: malloc.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: malloc.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: malloc.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: malloc.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: malloc.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: malloc.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: malloc.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: malloc.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: malloc.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: malloc.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: malloc.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: malloc.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for malloc.h" >&5
+echo $ECHO_N "checking for malloc.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_malloc_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_malloc_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_malloc_h" >&5
+echo "${ECHO_T}$ac_cv_header_malloc_h" >&6; }
+
+fi
+if test $ac_cv_header_malloc_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_MALLOC_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_netdb_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for netdb.h" >&5
+echo $ECHO_N "checking for netdb.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netdb_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netdb_h" >&5
+echo "${ECHO_T}$ac_cv_header_netdb_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking netdb.h usability" >&5
+echo $ECHO_N "checking netdb.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <netdb.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking netdb.h presence" >&5
+echo $ECHO_N "checking netdb.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <netdb.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: netdb.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: netdb.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netdb.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: netdb.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: netdb.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: netdb.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netdb.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: netdb.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netdb.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: netdb.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netdb.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: netdb.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netdb.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: netdb.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netdb.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: netdb.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for netdb.h" >&5
+echo $ECHO_N "checking for netdb.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netdb_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_netdb_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netdb_h" >&5
+echo "${ECHO_T}$ac_cv_header_netdb_h" >&6; }
+
+fi
+if test $ac_cv_header_netdb_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_NETDB_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_netinet_in_systm_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for netinet/in_systm.h" >&5
+echo $ECHO_N "checking for netinet/in_systm.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_in_systm_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_systm_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_in_systm_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking netinet/in_systm.h usability" >&5
+echo $ECHO_N "checking netinet/in_systm.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <netinet/in_systm.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking netinet/in_systm.h presence" >&5
+echo $ECHO_N "checking netinet/in_systm.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <netinet/in_systm.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: netinet/in_systm.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: netinet/in_systm.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: netinet/in_systm.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: netinet/in_systm.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: netinet/in_systm.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: netinet/in_systm.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: netinet/in_systm.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: netinet/in_systm.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for netinet/in_systm.h" >&5
+echo $ECHO_N "checking for netinet/in_systm.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_in_systm_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_netinet_in_systm_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_systm_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_in_systm_h" >&6; }
+
+fi
+if test $ac_cv_header_netinet_in_systm_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_NETINET_IN_SYSTM_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_netinet_in_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for netinet/in.h" >&5
+echo $ECHO_N "checking for netinet/in.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_in_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_in_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking netinet/in.h usability" >&5
+echo $ECHO_N "checking netinet/in.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <netinet/in.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking netinet/in.h presence" >&5
+echo $ECHO_N "checking netinet/in.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <netinet/in.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: netinet/in.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: netinet/in.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: netinet/in.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: netinet/in.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: netinet/in.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: netinet/in.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: netinet/in.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for netinet/in.h" >&5
+echo $ECHO_N "checking for netinet/in.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_in_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_netinet_in_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_in_h" >&6; }
+
+fi
+if test $ac_cv_header_netinet_in_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_NETINET_IN_H 1
+_ACEOF
+
+fi
+
+
+{ echo "$as_me:$LINENO: checking for netinet/ip.h" >&5
+echo $ECHO_N "checking for netinet/ip.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_ip_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if PJ_HAS_NETINET_IN_SYSTM_H
+          	  #	include <netinet/in_systm.h>
+          	  #endif
+
+
+#include <netinet/ip.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_netinet_ip_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_netinet_ip_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_ip_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_ip_h" >&6; }
+if test $ac_cv_header_netinet_ip_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_NETINET_IP_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_netinet_tcp_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for netinet/tcp.h" >&5
+echo $ECHO_N "checking for netinet/tcp.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_tcp_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_tcp_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_tcp_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking netinet/tcp.h usability" >&5
+echo $ECHO_N "checking netinet/tcp.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <netinet/tcp.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking netinet/tcp.h presence" >&5
+echo $ECHO_N "checking netinet/tcp.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <netinet/tcp.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: netinet/tcp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: netinet/tcp.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: netinet/tcp.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: netinet/tcp.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: netinet/tcp.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: netinet/tcp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: netinet/tcp.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: netinet/tcp.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for netinet/tcp.h" >&5
+echo $ECHO_N "checking for netinet/tcp.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_netinet_tcp_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_netinet_tcp_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_tcp_h" >&5
+echo "${ECHO_T}$ac_cv_header_netinet_tcp_h" >&6; }
+
+fi
+if test $ac_cv_header_netinet_tcp_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_NETINET_TCP_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_ifaddrs_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for ifaddrs.h" >&5
+echo $ECHO_N "checking for ifaddrs.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_ifaddrs_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_ifaddrs_h" >&5
+echo "${ECHO_T}$ac_cv_header_ifaddrs_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking ifaddrs.h usability" >&5
+echo $ECHO_N "checking ifaddrs.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <ifaddrs.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking ifaddrs.h presence" >&5
+echo $ECHO_N "checking ifaddrs.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ifaddrs.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: ifaddrs.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: ifaddrs.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: ifaddrs.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: ifaddrs.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: ifaddrs.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: ifaddrs.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: ifaddrs.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: ifaddrs.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for ifaddrs.h" >&5
+echo $ECHO_N "checking for ifaddrs.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_ifaddrs_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_ifaddrs_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_ifaddrs_h" >&5
+echo "${ECHO_T}$ac_cv_header_ifaddrs_h" >&6; }
+
+fi
+if test $ac_cv_header_ifaddrs_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_IFADDRS_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_semaphore_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for semaphore.h" >&5
+echo $ECHO_N "checking for semaphore.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_semaphore_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_semaphore_h" >&5
+echo "${ECHO_T}$ac_cv_header_semaphore_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking semaphore.h usability" >&5
+echo $ECHO_N "checking semaphore.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <semaphore.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking semaphore.h presence" >&5
+echo $ECHO_N "checking semaphore.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <semaphore.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: semaphore.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: semaphore.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: semaphore.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: semaphore.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: semaphore.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: semaphore.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: semaphore.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: semaphore.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: semaphore.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: semaphore.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: semaphore.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: semaphore.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: semaphore.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: semaphore.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: semaphore.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: semaphore.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for semaphore.h" >&5
+echo $ECHO_N "checking for semaphore.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_semaphore_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_semaphore_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_semaphore_h" >&5
+echo "${ECHO_T}$ac_cv_header_semaphore_h" >&6; }
+
+fi
+if test $ac_cv_header_semaphore_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SEMAPHORE_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_setjmp_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for setjmp.h" >&5
+echo $ECHO_N "checking for setjmp.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_setjmp_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_setjmp_h" >&5
+echo "${ECHO_T}$ac_cv_header_setjmp_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking setjmp.h usability" >&5
+echo $ECHO_N "checking setjmp.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <setjmp.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking setjmp.h presence" >&5
+echo $ECHO_N "checking setjmp.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <setjmp.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: setjmp.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: setjmp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: setjmp.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: setjmp.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: setjmp.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: setjmp.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: setjmp.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: setjmp.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: setjmp.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: setjmp.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: setjmp.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: setjmp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: setjmp.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: setjmp.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: setjmp.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: setjmp.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for setjmp.h" >&5
+echo $ECHO_N "checking for setjmp.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_setjmp_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_setjmp_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_setjmp_h" >&5
+echo "${ECHO_T}$ac_cv_header_setjmp_h" >&6; }
+
+fi
+if test $ac_cv_header_setjmp_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SETJMP_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_stdarg_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for stdarg.h" >&5
+echo $ECHO_N "checking for stdarg.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdarg_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdarg_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking stdarg.h usability" >&5
+echo $ECHO_N "checking stdarg.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <stdarg.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking stdarg.h presence" >&5
+echo $ECHO_N "checking stdarg.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: stdarg.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: stdarg.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: stdarg.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdarg.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: stdarg.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdarg.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: stdarg.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdarg.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: stdarg.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: stdarg.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdarg.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: stdarg.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for stdarg.h" >&5
+echo $ECHO_N "checking for stdarg.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdarg_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_stdarg_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdarg_h" >&6; }
+
+fi
+if test $ac_cv_header_stdarg_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_STDARG_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_stddef_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for stddef.h" >&5
+echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stddef_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
+echo "${ECHO_T}$ac_cv_header_stddef_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking stddef.h usability" >&5
+echo $ECHO_N "checking stddef.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <stddef.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking stddef.h presence" >&5
+echo $ECHO_N "checking stddef.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: stddef.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: stddef.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stddef.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: stddef.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: stddef.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: stddef.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stddef.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: stddef.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stddef.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: stddef.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stddef.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: stddef.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stddef.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: stddef.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stddef.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: stddef.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for stddef.h" >&5
+echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stddef_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_stddef_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
+echo "${ECHO_T}$ac_cv_header_stddef_h" >&6; }
+
+fi
+if test $ac_cv_header_stddef_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_STDDEF_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_stdio_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for stdio.h" >&5
+echo $ECHO_N "checking for stdio.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdio_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdio_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdio_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking stdio.h usability" >&5
+echo $ECHO_N "checking stdio.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <stdio.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking stdio.h presence" >&5
+echo $ECHO_N "checking stdio.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: stdio.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: stdio.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdio.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: stdio.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: stdio.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: stdio.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdio.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: stdio.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdio.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: stdio.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdio.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: stdio.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdio.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: stdio.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdio.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: stdio.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for stdio.h" >&5
+echo $ECHO_N "checking for stdio.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdio_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_stdio_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdio_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdio_h" >&6; }
+
+fi
+if test $ac_cv_header_stdio_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_STDIO_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_stdint_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdint_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking stdint.h usability" >&5
+echo $ECHO_N "checking stdint.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <stdint.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking stdint.h presence" >&5
+echo $ECHO_N "checking stdint.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdint.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: stdint.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: stdint.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdint.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: stdint.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: stdint.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: stdint.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdint.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: stdint.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdint.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: stdint.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdint.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: stdint.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdint.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: stdint.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdint.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: stdint.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdint_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_stdint_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
+
+fi
+if test $ac_cv_header_stdint_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_STDINT_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_stdlib_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for stdlib.h" >&5
+echo $ECHO_N "checking for stdlib.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdlib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdlib_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking stdlib.h usability" >&5
+echo $ECHO_N "checking stdlib.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <stdlib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking stdlib.h presence" >&5
+echo $ECHO_N "checking stdlib.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: stdlib.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: stdlib.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: stdlib.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdlib.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: stdlib.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdlib.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: stdlib.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdlib.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: stdlib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: stdlib.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: stdlib.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: stdlib.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for stdlib.h" >&5
+echo $ECHO_N "checking for stdlib.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdlib_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_stdlib_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5
+echo "${ECHO_T}$ac_cv_header_stdlib_h" >&6; }
+
+fi
+if test $ac_cv_header_stdlib_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_STDLIB_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_string_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for string.h" >&5
+echo $ECHO_N "checking for string.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_string_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5
+echo "${ECHO_T}$ac_cv_header_string_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking string.h usability" >&5
+echo $ECHO_N "checking string.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <string.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking string.h presence" >&5
+echo $ECHO_N "checking string.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: string.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: string.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: string.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: string.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: string.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: string.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: string.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: string.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: string.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: string.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: string.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: string.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: string.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: string.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for string.h" >&5
+echo $ECHO_N "checking for string.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_string_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_string_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5
+echo "${ECHO_T}$ac_cv_header_string_h" >&6; }
+
+fi
+if test $ac_cv_header_string_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_STRING_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_sys_ioctl_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/ioctl.h" >&5
+echo $ECHO_N "checking for sys/ioctl.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_ioctl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_ioctl_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_ioctl_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/ioctl.h usability" >&5
+echo $ECHO_N "checking sys/ioctl.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/ioctl.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/ioctl.h presence" >&5
+echo $ECHO_N "checking sys/ioctl.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/ioctl.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/ioctl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/ioctl.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/ioctl.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/ioctl.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/ioctl.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/ioctl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/ioctl.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/ioctl.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/ioctl.h" >&5
+echo $ECHO_N "checking for sys/ioctl.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_ioctl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_ioctl_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_ioctl_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_ioctl_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_ioctl_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SYS_IOCTL_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_sys_select_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/select.h" >&5
+echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_select_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/select.h usability" >&5
+echo $ECHO_N "checking sys/select.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/select.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/select.h presence" >&5
+echo $ECHO_N "checking sys/select.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/select.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/select.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/select.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/select.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/select.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/select.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/select.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/select.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/select.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/select.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/select.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/select.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/select.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/select.h" >&5
+echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_select_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_select_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_select_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SYS_SELECT_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_sys_socket_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/socket.h" >&5
+echo $ECHO_N "checking for sys/socket.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_socket_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_socket_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_socket_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/socket.h usability" >&5
+echo $ECHO_N "checking sys/socket.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/socket.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/socket.h presence" >&5
+echo $ECHO_N "checking sys/socket.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/socket.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/socket.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/socket.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/socket.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/socket.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/socket.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/socket.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/socket.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/socket.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/socket.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/socket.h" >&5
+echo $ECHO_N "checking for sys/socket.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_socket_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_socket_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_socket_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_socket_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_socket_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SYS_SOCKET_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_sys_time_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/time.h" >&5
+echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_time_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/time.h usability" >&5
+echo $ECHO_N "checking sys/time.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/time.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/time.h presence" >&5
+echo $ECHO_N "checking sys/time.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/time.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/time.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/time.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/time.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/time.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/time.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/time.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/time.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/time.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/time.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/time.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/time.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/time.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/time.h" >&5
+echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_time_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_time_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_time_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SYS_TIME_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_sys_timeb_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/timeb.h" >&5
+echo $ECHO_N "checking for sys/timeb.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_timeb_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_timeb_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_timeb_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/timeb.h usability" >&5
+echo $ECHO_N "checking sys/timeb.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/timeb.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/timeb.h presence" >&5
+echo $ECHO_N "checking sys/timeb.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/timeb.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/timeb.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/timeb.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/timeb.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/timeb.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/timeb.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/timeb.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/timeb.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/timeb.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/timeb.h" >&5
+echo $ECHO_N "checking for sys/timeb.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_timeb_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_timeb_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_timeb_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_timeb_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_timeb_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SYS_TIMEB_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_sys_types_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/types.h" >&5
+echo $ECHO_N "checking for sys/types.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_types_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_types_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/types.h usability" >&5
+echo $ECHO_N "checking sys/types.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/types.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/types.h presence" >&5
+echo $ECHO_N "checking sys/types.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/types.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/types.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/types.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/types.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/types.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/types.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/types.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/types.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/types.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/types.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/types.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/types.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/types.h" >&5
+echo $ECHO_N "checking for sys/types.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_types_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_types_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_types_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_types_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SYS_TYPES_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_time_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for time.h" >&5
+echo $ECHO_N "checking for time.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_time_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time_h" >&5
+echo "${ECHO_T}$ac_cv_header_time_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking time.h usability" >&5
+echo $ECHO_N "checking time.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <time.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking time.h presence" >&5
+echo $ECHO_N "checking time.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <time.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: time.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: time.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: time.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: time.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: time.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: time.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: time.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: time.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: time.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: time.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: time.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: time.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: time.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: time.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: time.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: time.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for time.h" >&5
+echo $ECHO_N "checking for time.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_time_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_time_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time_h" >&5
+echo "${ECHO_T}$ac_cv_header_time_h" >&6; }
+
+fi
+if test $ac_cv_header_time_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_TIME_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_unistd_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for unistd.h" >&5
+echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_unistd_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5
+echo "${ECHO_T}$ac_cv_header_unistd_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking unistd.h usability" >&5
+echo $ECHO_N "checking unistd.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <unistd.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking unistd.h presence" >&5
+echo $ECHO_N "checking unistd.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: unistd.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: unistd.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: unistd.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: unistd.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: unistd.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: unistd.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: unistd.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: unistd.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: unistd.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: unistd.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: unistd.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: unistd.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for unistd.h" >&5
+echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_unistd_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_unistd_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5
+echo "${ECHO_T}$ac_cv_header_unistd_h" >&6; }
+
+fi
+if test $ac_cv_header_unistd_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_UNISTD_H 1
+_ACEOF
+
+fi
+
+
+if test "${ac_cv_header_winsock_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for winsock.h" >&5
+echo $ECHO_N "checking for winsock.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_winsock_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock_h" >&5
+echo "${ECHO_T}$ac_cv_header_winsock_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking winsock.h usability" >&5
+echo $ECHO_N "checking winsock.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <winsock.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_header_compiler=no
 fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-	;;
+# Is the header present?
+{ echo "$as_me:$LINENO: checking winsock.h presence" >&5
+echo $ECHO_N "checking winsock.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <winsock.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
 esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
-if test "x$ac_cv_header_fcntl_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_FCNTL_H 1" >>confdefs.h
-
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "linux/socket.h" "ac_cv_header_linux_socket_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_socket_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_LINUX_SOCKET_H 1" >>confdefs.h
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: winsock.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: winsock.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: winsock.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: winsock.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: winsock.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: winsock.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: winsock.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: winsock.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: winsock.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: winsock.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for winsock.h" >&5
+echo $ECHO_N "checking for winsock.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_winsock_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_winsock_h=$ac_header_preproc
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
-if test "x$ac_cv_header_malloc_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_MALLOC_H 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock_h" >&5
+echo "${ECHO_T}$ac_cv_header_winsock_h" >&6; }
 
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default"
-if test "x$ac_cv_header_netdb_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_NETDB_H 1" >>confdefs.h
+if test $ac_cv_header_winsock_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_WINSOCK_H 1
+_ACEOF
 
 fi
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "netinet/in_systm.h" "ac_cv_header_netinet_in_systm_h" "$ac_includes_default"
-if test "x$ac_cv_header_netinet_in_systm_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_NETINET_IN_SYSTM_H 1" >>confdefs.h
-
+if test "${ac_cv_header_winsock2_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for winsock2.h" >&5
+echo $ECHO_N "checking for winsock2.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_winsock2_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock2_h" >&5
+echo "${ECHO_T}$ac_cv_header_winsock2_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking winsock2.h usability" >&5
+echo $ECHO_N "checking winsock2.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <winsock2.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-
-ac_fn_c_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
-if test "x$ac_cv_header_netinet_in_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_NETINET_IN_H 1" >>confdefs.h
-
+	ac_header_compiler=no
 fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-ac_fn_c_check_header_compile "$LINENO" "netinet/ip.h" "ac_cv_header_netinet_ip_h" "#if PJ_HAS_NETINET_IN_SYSTM_H
-          	  #	include <netinet/in_systm.h>
-          	  #endif
-
-"
-if test "x$ac_cv_header_netinet_ip_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_NETINET_IP_H 1" >>confdefs.h
+# Is the header present?
+{ echo "$as_me:$LINENO: checking winsock2.h presence" >&5
+echo $ECHO_N "checking winsock2.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <winsock2.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "ifaddrs.h" "ac_cv_header_ifaddrs_h" "$ac_includes_default"
-if test "x$ac_cv_header_ifaddrs_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_IFADDRS_H 1" >>confdefs.h
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: winsock2.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: winsock2.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock2.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: winsock2.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: winsock2.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: winsock2.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock2.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: winsock2.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock2.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: winsock2.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock2.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: winsock2.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock2.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: winsock2.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: winsock2.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: winsock2.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for winsock2.h" >&5
+echo $ECHO_N "checking for winsock2.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_winsock2_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_winsock2_h=$ac_header_preproc
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "semaphore.h" "ac_cv_header_semaphore_h" "$ac_includes_default"
-if test "x$ac_cv_header_semaphore_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SEMAPHORE_H 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock2_h" >&5
+echo "${ECHO_T}$ac_cv_header_winsock2_h" >&6; }
 
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$ac_includes_default"
-if test "x$ac_cv_header_setjmp_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SETJMP_H 1" >>confdefs.h
+if test $ac_cv_header_winsock2_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_WINSOCK2_H 1
+_ACEOF
 
 fi
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdarg_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_STDARG_H 1" >>confdefs.h
-
-fi
+{ echo "$as_me:$LINENO: checking for mswsock.h" >&5
+echo $ECHO_N "checking for mswsock.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_mswsock_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if PJ_HAS_WINSOCK2_H
+          	  #	include <winsock2.h>
+		  #elif PJ_HAS_WINSOCK_H
+          	  #	include <winsock.h>
+          	  #endif
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
-if test "x$ac_cv_header_stddef_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_STDDEF_H 1" >>confdefs.h
+#include <mswsock.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_mswsock_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_cv_header_mswsock_h=no
 fi
 
-
-ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdio_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_STDIO_H 1" >>confdefs.h
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_STDINT_H 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: $ac_cv_header_mswsock_h" >&5
+echo "${ECHO_T}$ac_cv_header_mswsock_h" >&6; }
+if test $ac_cv_header_mswsock_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_MSWSOCK_H 1
+_ACEOF
 
 fi
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_STDLIB_H 1" >>confdefs.h
-
+if test "${ac_cv_header_ws2tcpip_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for ws2tcpip.h" >&5
+echo $ECHO_N "checking for ws2tcpip.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_ws2tcpip_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_ws2tcpip_h" >&5
+echo "${ECHO_T}$ac_cv_header_ws2tcpip_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking ws2tcpip.h usability" >&5
+echo $ECHO_N "checking ws2tcpip.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <ws2tcpip.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-
-ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
-if test "x$ac_cv_header_string_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_STRING_H 1" >>confdefs.h
-
+	ac_header_compiler=no
 fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_ioctl_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SYS_IOCTL_H 1" >>confdefs.h
+# Is the header present?
+{ echo "$as_me:$LINENO: checking ws2tcpip.h presence" >&5
+echo $ECHO_N "checking ws2tcpip.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ws2tcpip.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_select_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SYS_SELECT_H 1" >>confdefs.h
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: ws2tcpip.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: ws2tcpip.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: ws2tcpip.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: ws2tcpip.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: ws2tcpip.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: ws2tcpip.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: ws2tcpip.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: ws2tcpip.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for ws2tcpip.h" >&5
+echo $ECHO_N "checking for ws2tcpip.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_ws2tcpip_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_ws2tcpip_h=$ac_header_preproc
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_socket_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SYS_SOCKET_H 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: $ac_cv_header_ws2tcpip_h" >&5
+echo "${ECHO_T}$ac_cv_header_ws2tcpip_h" >&6; }
 
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_time_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SYS_TIME_H 1" >>confdefs.h
+if test $ac_cv_header_ws2tcpip_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_WS2TCPIP_H 1
+_ACEOF
 
 fi
 
 
-ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_timeb_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SYS_TIMEB_H 1" >>confdefs.h
-
+if test "${ac_cv_header_uuid_uuid_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for uuid/uuid.h" >&5
+echo $ECHO_N "checking for uuid/uuid.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_uuid_uuid_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_uuid_uuid_h" >&5
+echo "${ECHO_T}$ac_cv_header_uuid_uuid_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking uuid/uuid.h usability" >&5
+echo $ECHO_N "checking uuid/uuid.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <uuid/uuid.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-
-ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_types_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_SYS_TYPES_H 1" >>confdefs.h
-
+	ac_header_compiler=no
 fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_time_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_TIME_H 1" >>confdefs.h
+# Is the header present?
+{ echo "$as_me:$LINENO: checking uuid/uuid.h presence" >&5
+echo $ECHO_N "checking uuid/uuid.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <uuid/uuid.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_UNISTD_H 1" >>confdefs.h
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: uuid/uuid.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: uuid/uuid.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: uuid/uuid.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: uuid/uuid.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: uuid/uuid.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: uuid/uuid.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: uuid/uuid.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: uuid/uuid.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for uuid/uuid.h" >&5
+echo $ECHO_N "checking for uuid/uuid.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_uuid_uuid_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_uuid_uuid_h=$ac_header_preproc
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "winsock.h" "ac_cv_header_winsock_h" "$ac_includes_default"
-if test "x$ac_cv_header_winsock_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_WINSOCK_H 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: $ac_cv_header_uuid_uuid_h" >&5
+echo "${ECHO_T}$ac_cv_header_uuid_uuid_h" >&6; }
 
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
-if test "x$ac_cv_header_winsock2_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_WINSOCK2_H 1" >>confdefs.h
-
+if test $ac_cv_header_uuid_uuid_h = yes; then
+  ac_has_uuid_h=1
 fi
 
 
-ac_fn_c_check_header_compile "$LINENO" "mswsock.h" "ac_cv_header_mswsock_h" "#if PJ_HAS_WINSOCK2_H
-          	  #	include <winsock2.h>
-		  #elif PJ_HAS_WINSOCK_H
-          	  #	include <winsock.h>
+{ echo "$as_me:$LINENO: checking for net/if.h" >&5
+echo $ECHO_N "checking for net/if.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_net_if_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if PJ_HAS_SYS_SOCKET_H
+          	  #	include <sys/socket.h>
           	  #endif
 
-"
-if test "x$ac_cv_header_mswsock_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_MSWSOCK_H 1" >>confdefs.h
-
-fi
-
 
-ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default"
-if test "x$ac_cv_header_ws2tcpip_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_WS2TCPIP_H 1" >>confdefs.h
+#include <net/if.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_net_if_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_cv_header_net_if_h=no
 fi
 
-
-ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default"
-if test "x$ac_cv_header_uuid_uuid_h" = x""yes; then :
-  ac_has_uuid_h=1
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
-
-ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#if PJ_HAS_SYS_SOCKET_H
-          	  #	include <sys/socket.h>
-          	  #endif
-
-"
-if test "x$ac_cv_header_net_if_h" = x""yes; then :
-  $as_echo "#define PJ_HAS_NET_IF_H 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: $ac_cv_header_net_if_h" >&5
+echo "${ECHO_T}$ac_cv_header_net_if_h" >&6; }
+if test $ac_cv_header_net_if_h = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_NET_IF_H 1
+_ACEOF
 
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_OS_NAME to $target" >&5
-$as_echo "Setting PJ_OS_NAME to $target" >&6; }
+{ echo "$as_me:$LINENO: result: Setting PJ_OS_NAME to $target" >&5
+echo "${ECHO_T}Setting PJ_OS_NAME to $target" >&6; }
 cat >>confdefs.h <<_ACEOF
 #define PJ_OS_NAME "$target"
 _ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_HAS_ERRNO_VAR to 1" >&5
-$as_echo "Setting PJ_HAS_ERRNO_VAR to 1" >&6; }
-$as_echo "#define PJ_HAS_ERRNO_VAR 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: Setting PJ_HAS_ERRNO_VAR to 1" >&5
+echo "${ECHO_T}Setting PJ_HAS_ERRNO_VAR to 1" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_ERRNO_VAR 1
+_ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_HAS_HIGH_RES_TIMER to 1" >&5
-$as_echo "Setting PJ_HAS_HIGH_RES_TIMER to 1" >&6; }
-$as_echo "#define PJ_HAS_HIGH_RES_TIMER 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: Setting PJ_HAS_HIGH_RES_TIMER to 1" >&5
+echo "${ECHO_T}Setting PJ_HAS_HIGH_RES_TIMER to 1" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_HIGH_RES_TIMER 1
+_ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_HAS_MALLOC to 1" >&5
-$as_echo "Setting PJ_HAS_MALLOC to 1" >&6; }
-$as_echo "#define PJ_HAS_MALLOC 1" >>confdefs.h
+{ echo "$as_me:$LINENO: result: Setting PJ_HAS_MALLOC to 1" >&5
+echo "${ECHO_T}Setting PJ_HAS_MALLOC to 1" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_MALLOC 1
+_ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&5
-$as_echo "Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&6; }
-$as_echo "#define PJ_NATIVE_STRING_IS_UNICODE 0" >>confdefs.h
+{ echo "$as_me:$LINENO: result: Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&5
+echo "${ECHO_T}Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define PJ_NATIVE_STRING_IS_UNICODE 0
+_ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_ATOMIC_VALUE_TYPE to long" >&5
-$as_echo "Setting PJ_ATOMIC_VALUE_TYPE to long" >&6; }
-$as_echo "#define PJ_ATOMIC_VALUE_TYPE long" >>confdefs.h
+{ echo "$as_me:$LINENO: result: Setting PJ_ATOMIC_VALUE_TYPE to long" >&5
+echo "${ECHO_T}Setting PJ_ATOMIC_VALUE_TYPE to long" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define PJ_ATOMIC_VALUE_TYPE long
+_ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_aton() is available" >&5
-$as_echo_n "checking if inet_aton() is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if inet_aton() is available" >&5
+echo $ECHO_N "checking if inet_aton() is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -4808,20 +9476,46 @@ inet_aton(0, 0);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_SOCK_HAS_INET_ATON 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_SOCK_HAS_INET_ATON 1
+_ACEOF
 
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton() is available" >&5
-$as_echo_n "checking if inet_pton() is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if inet_pton() is available" >&5
+echo $ECHO_N "checking if inet_pton() is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -4834,20 +9528,46 @@ inet_pton(0, 0, 0);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_SOCK_HAS_INET_PTON 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_SOCK_HAS_INET_PTON 1
+_ACEOF
 
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop() is available" >&5
-$as_echo_n "checking if inet_ntop() is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if inet_ntop() is available" >&5
+echo $ECHO_N "checking if inet_ntop() is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -4860,20 +9580,46 @@ inet_ntop(0, 0, 0, 0);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_SOCK_HAS_INET_NTOP 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_SOCK_HAS_INET_NTOP 1
+_ACEOF
 
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo() is available" >&5
-$as_echo_n "checking if getaddrinfo() is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if getaddrinfo() is available" >&5
+echo $ECHO_N "checking if getaddrinfo() is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -4886,20 +9632,46 @@ getaddrinfo(0, 0, 0, 0);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_SOCK_HAS_GETADDRINFO 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_SOCK_HAS_GETADDRINFO 1
+_ACEOF
 
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sockaddr_in has sin_len member" >&5
-$as_echo_n "checking if sockaddr_in has sin_len member... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if sockaddr_in has sin_len member" >&5
+echo $ECHO_N "checking if sockaddr_in has sin_len member... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -4913,20 +9685,46 @@ struct sockaddr_in a; a.sin_len=0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_SOCKADDR_HAS_LEN 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_SOCKADDR_HAS_LEN 1
+_ACEOF
 
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if socklen_t is available" >&5
-$as_echo_n "checking if socklen_t is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if socklen_t is available" >&5
+echo $ECHO_N "checking if socklen_t is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/socket.h>
 int
@@ -4937,28 +9735,56 @@ socklen_t xxx = 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_HAS_SOCKLEN_T 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SOCKLEN_T 1
+_ACEOF
 
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if SO_ERROR is available" >&5
-$as_echo_n "checking if SO_ERROR is available... " >&6; }
+{ echo "$as_me:$LINENO: checking if SO_ERROR is available" >&5
+echo $ECHO_N "checking if SO_ERROR is available... $ECHO_C" >&6; }
 case $target in
     *mingw* | *cygw* | *win32* | *w32* )
-	$as_echo "#define PJ_HAS_SO_ERROR 1" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SO_ERROR 1
+_ACEOF
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+	{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 	;;
     *)
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
 					     #include <sys/socket.h>
@@ -4972,23 +9798,49 @@ int i=SO_ERROR;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_HAS_SO_ERROR 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SO_ERROR 1
+_ACEOF
 
-			   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+			   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	;;
 esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_rwlock_t is available" >&5
-$as_echo_n "checking if pthread_rwlock_t is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if pthread_rwlock_t is available" >&5
+echo $ECHO_N "checking if pthread_rwlock_t is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -4999,25 +9851,53 @@ pthread_rwlock_t *x;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_EMULATE_RWMUTEX 0" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_EMULATE_RWMUTEX 0
+_ACEOF
 
 		   ac_rwmutex="yes"
-  		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  $as_echo "#define PJ_EMULATE_RWMUTEX 1" >>confdefs.h
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_EMULATE_RWMUTEX 1
+_ACEOF
 
 		   ac_rwmutex="no"
-		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+		   { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test "$ac_rwmutex" = "no"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS" >&5
-$as_echo_n "checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS... " >&6; }
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+    { echo "$as_me:$LINENO: checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS" >&5
+echo $ECHO_N "checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS... $ECHO_C" >&6; }
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #define _POSIX_READER_WRITER_LOCKS
 					 #include <pthread.h>
@@ -5029,24 +9909,52 @@ pthread_rwlock_t *x;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_EMULATE_RWMUTEX 0" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_EMULATE_RWMUTEX 0
+_ACEOF
 
 		       CFLAGS="$CFLAGS -D_POSIX_THREADS -D_POSIX_READER_WRITER_LOCKS"
-		       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+		       { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  $as_echo "#define PJ_EMULATE_RWMUTEX 1" >>confdefs.h
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_EMULATE_RWMUTEX 1
+_ACEOF
 
-		       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+		       { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_mutexattr_settype() is available" >&5
-$as_echo_n "checking if pthread_mutexattr_settype() is available... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if pthread_mutexattr_settype() is available" >&5
+echo $ECHO_N "checking if pthread_mutexattr_settype() is available... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -5057,20 +9965,46 @@ pthread_mutexattr_settype(0,PTHREAD_MUTEX_FAST_NP);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_HAS_PTHREAD_MUTEXATTR_SETTYPE 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_PTHREAD_MUTEXATTR_SETTYPE 1
+_ACEOF
 
-  		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
 fi
+
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_mutexattr_t has recursive member" >&5
-$as_echo_n "checking if pthread_mutexattr_t has recursive member... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ echo "$as_me:$LINENO: checking if pthread_mutexattr_t has recursive member" >&5
+echo $ECHO_N "checking if pthread_mutexattr_t has recursive member... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -5082,82 +10016,476 @@ pthread_mutexattr_t attr;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  $as_echo "#define PJ_PTHREAD_MUTEXATTR_T_HAS_RECURSIVE 1" >>confdefs.h
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >>confdefs.h <<\_ACEOF
+#define PJ_PTHREAD_MUTEXATTR_T_HAS_RECURSIVE 1
+_ACEOF
+
+  		   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+{ echo "$as_me:$LINENO: checking ioqueue backend" >&5
+echo $ECHO_N "checking ioqueue backend... $ECHO_C" >&6; }
+# Check whether --enable-epoll was given.
+if test "${enable_epoll+set}" = set; then
+  enableval=$enable_epoll;
+		ac_os_objs=ioqueue_epoll.o
+		{ echo "$as_me:$LINENO: result: /dev/epoll" >&5
+echo "${ECHO_T}/dev/epoll" >&6; }
+
+else
+
+		ac_os_objs=ioqueue_select.o
+	        { echo "$as_me:$LINENO: result: select()" >&5
+echo "${ECHO_T}select()" >&6; }
+
+fi
+
+
+
+case $target in
+  *mingw* | *cygw* | *win32* | *w32* )
+	ac_os_objs="$ac_os_objs file_access_win32.o file_io_win32.o os_core_win32.o os_error_win32.o os_time_win32.o os_timestamp_win32.o guid_win32.o"
+	;;
+  *)
+	ac_os_objs="$ac_os_objs file_access_unistd.o file_io_ansi.o os_core_unix.o os_error_unix.o os_time_unix.o os_timestamp_posix.o"
+	# UUID
+	if test "$ac_has_uuid_lib" = "1" -a "$ac_has_uuid_h" = "1"; then
+		ac_os_objs="$ac_os_objs guid_uuid.o"
+	else
+		ac_os_objs="$ac_os_objs guid_simple.o"
+	fi
+	;;
+esac
+
+
+
+
+
+# Check whether --enable-sound was given.
+if test "${enable_sound+set}" = set; then
+  enableval=$enable_sound; if test "$enable_sound" = "no"; then
+		ac_pjmedia_snd=null
+		{ echo "$as_me:$LINENO: result: Checking if sound is disabled... yes" >&5
+echo "${ECHO_T}Checking if sound is disabled... yes" >&6; }
+	       fi
+
+fi
+
+
+
+if test "${ac_cv_header_sys_soundcard_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5
+echo $ECHO_N "checking for sys/soundcard.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_soundcard_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking sys/soundcard.h usability" >&5
+echo $ECHO_N "checking sys/soundcard.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <sys/soundcard.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking sys/soundcard.h presence" >&5
+echo $ECHO_N "checking sys/soundcard.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/soundcard.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: sys/soundcard.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: sys/soundcard.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: sys/soundcard.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: sys/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5
+echo $ECHO_N "checking for sys/soundcard.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_soundcard_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_sys_soundcard_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6; }
+
+fi
+if test $ac_cv_header_sys_soundcard_h = yes; then
+  ac_pa_cflags="$ac_pa_cflags -DHAVE_SYS_SOUNDCARD_H"
+fi
+
+
+if test "${ac_cv_header_linux_soundcard_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for linux/soundcard.h" >&5
+echo $ECHO_N "checking for linux/soundcard.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_linux_soundcard_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_soundcard_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_soundcard_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking linux/soundcard.h usability" >&5
+echo $ECHO_N "checking linux/soundcard.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <linux/soundcard.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-  		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+# Is the header present?
+{ echo "$as_me:$LINENO: checking linux/soundcard.h presence" >&5
+echo $ECHO_N "checking linux/soundcard.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <linux/soundcard.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ioqueue backend" >&5
-$as_echo_n "checking ioqueue backend... " >&6; }
-# Check whether --enable-epoll was given.
-if test "${enable_epoll+set}" = set; then :
-  enableval=$enable_epoll;
-		ac_os_objs=ioqueue_epoll.o
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: /dev/epoll" >&5
-$as_echo "/dev/epoll" >&6; }
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: linux/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: linux/soundcard.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: linux/soundcard.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: linux/soundcard.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: linux/soundcard.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: linux/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: linux/soundcard.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: linux/soundcard.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for linux/soundcard.h" >&5
+echo $ECHO_N "checking for linux/soundcard.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_linux_soundcard_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-
-		ac_os_objs=ioqueue_select.o
-	        { $as_echo "$as_me:${as_lineno-$LINENO}: result: select()" >&5
-$as_echo "select()" >&6; }
-
+  ac_cv_header_linux_soundcard_h=$ac_header_preproc
 fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_soundcard_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_soundcard_h" >&6; }
 
+fi
+if test $ac_cv_header_linux_soundcard_h = yes; then
+  ac_pa_cflags="$ac_pa_cflags -DHAVE_LINUX_SOUNDCARD_H"
+fi
 
 
-case $target in
-  *mingw* | *cygw* | *win32* | *w32* )
-	ac_os_objs="$ac_os_objs file_access_win32.o file_io_win32.o os_core_win32.o os_error_win32.o os_time_win32.o os_timestamp_win32.o guid_win32.o"
-	;;
-  *)
-	ac_os_objs="$ac_os_objs file_access_unistd.o file_io_ansi.o os_core_unix.o os_error_unix.o os_time_unix.o os_timestamp_posix.o"
-	# UUID
-	if test "$ac_has_uuid_lib" = "1" -a "$ac_has_uuid_h" = "1"; then
-		ac_os_objs="$ac_os_objs guid_uuid.o"
-	else
-		ac_os_objs="$ac_os_objs guid_simple.o"
-	fi
-	;;
+if test "${ac_cv_header_machine_soundcard_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for machine/soundcard.h" >&5
+echo $ECHO_N "checking for machine/soundcard.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_machine_soundcard_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_machine_soundcard_h" >&5
+echo "${ECHO_T}$ac_cv_header_machine_soundcard_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking machine/soundcard.h usability" >&5
+echo $ECHO_N "checking machine/soundcard.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <machine/soundcard.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
 esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+	ac_header_compiler=no
+fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
 
+# Is the header present?
+{ echo "$as_me:$LINENO: checking machine/soundcard.h presence" >&5
+echo $ECHO_N "checking machine/soundcard.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <machine/soundcard.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-
-# Check whether --enable-sound was given.
-if test "${enable_sound+set}" = set; then :
-  enableval=$enable_sound; if test "$enable_sound" = "no"; then
-		ac_pjmedia_snd=null
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if sound is disabled... yes" >&5
-$as_echo "Checking if sound is disabled... yes" >&6; }
-	       fi
-
+  ac_header_preproc=no
 fi
 
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: machine/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: machine/soundcard.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: machine/soundcard.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: machine/soundcard.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: machine/soundcard.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: machine/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: machine/soundcard.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: machine/soundcard.h: in the future, the compiler will take precedence" >&2;}
 
-ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_soundcard_h" = x""yes; then :
-  ac_pa_cflags="$ac_pa_cflags -DHAVE_SYS_SOUNDCARD_H"
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for machine/soundcard.h" >&5
+echo $ECHO_N "checking for machine/soundcard.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_machine_soundcard_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_machine_soundcard_h=$ac_header_preproc
 fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_machine_soundcard_h" >&5
+echo "${ECHO_T}$ac_cv_header_machine_soundcard_h" >&6; }
 
-
-ac_fn_c_check_header_mongrel "$LINENO" "linux/soundcard.h" "ac_cv_header_linux_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_linux_soundcard_h" = x""yes; then :
-  ac_pa_cflags="$ac_pa_cflags -DHAVE_LINUX_SOUNDCARD_H"
 fi
-
-
-ac_fn_c_check_header_mongrel "$LINENO" "machine/soundcard.h" "ac_cv_header_machine_soundcard_h" "$ac_includes_default"
-if test "x$ac_cv_header_machine_soundcard_h" = x""yes; then :
+if test $ac_cv_header_machine_soundcard_h = yes; then
   ac_pa_cflags="$ac_pa_cflags -DHAVE_MACHINE_SOUNDCARD_H"
 fi
 
@@ -5179,28 +10507,152 @@ else
 		#ac_pa_cflags="$ac_pa_cflags -DPA_OLD_CORE_AUDIO -DMOSX_USE_NON_ATOMIC_FLAG_BITS"
 		#AC_MSG_RESULT([Setting additional PortAudio CFLAGS.. -DPA_OLD_CORE_AUDIO -DMOSX_USE_NON_ATOMIC_FLAG_BITS])
 		ac_pjmedia_snd=pa_old_darwinos
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... old coreaudio" >&5
-$as_echo "Checking sound device backend... old coreaudio" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking sound device backend... old coreaudio" >&5
+echo "${ECHO_T}Checking sound device backend... old coreaudio" >&6; }
 	else
 		ac_pjmedia_snd=pa_darwinos
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... coreaudio" >&5
-$as_echo "Checking sound device backend... coreaudio" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking sound device backend... coreaudio" >&5
+echo "${ECHO_T}Checking sound device backend... coreaudio" >&6; }
 	fi
 	;;
   *cygwin* | *mingw*)
 	ac_pjmedia_snd=pa_win32
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... win32 sound" >&5
-$as_echo "Checking sound device backend... win32 sound" >&6; }
+	{ echo "$as_me:$LINENO: result: Checking sound device backend... win32 sound" >&5
+echo "${ECHO_T}Checking sound device backend... win32 sound" >&6; }
 	;;
   *rtems*)
 	ac_pjmedia_snd=null
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... null sound" >&5
-$as_echo "Checking sound device backend... null sound" >&6; }
+	{ echo "$as_me:$LINENO: result: Checking sound device backend... null sound" >&5
+echo "${ECHO_T}Checking sound device backend... null sound" >&6; }
 	;;
   *)
 		ac_pjmedia_snd=pa_unix
-	ac_fn_c_check_header_mongrel "$LINENO" "alsa/version.h" "ac_cv_header_alsa_version_h" "$ac_includes_default"
-if test "x$ac_cv_header_alsa_version_h" = x""yes; then :
+	if test "${ac_cv_header_alsa_version_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for alsa/version.h" >&5
+echo $ECHO_N "checking for alsa/version.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_alsa_version_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_alsa_version_h" >&5
+echo "${ECHO_T}$ac_cv_header_alsa_version_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking alsa/version.h usability" >&5
+echo $ECHO_N "checking alsa/version.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <alsa/version.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking alsa/version.h presence" >&5
+echo $ECHO_N "checking alsa/version.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <alsa/version.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: alsa/version.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: alsa/version.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: alsa/version.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: alsa/version.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: alsa/version.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: alsa/version.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: alsa/version.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: alsa/version.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: alsa/version.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for alsa/version.h" >&5
+echo $ECHO_N "checking for alsa/version.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_alsa_version_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_alsa_version_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_alsa_version_h" >&5
+echo "${ECHO_T}$ac_cv_header_alsa_version_h" >&6; }
+
+fi
+if test $ac_cv_header_alsa_version_h = yes; then
   ac_pa_use_alsa=1
 
 			 LIBS="$LIBS -lasound"
@@ -5211,18 +10663,18 @@ else
 fi
 
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... unix" >&5
-$as_echo "Checking sound device backend... unix" >&6; }
+	{ echo "$as_me:$LINENO: result: Checking sound device backend... unix" >&5
+echo "${ECHO_T}Checking sound device backend... unix" >&6; }
 
 		ac_pa_use_oss=1
 
 	# Check whether --enable-oss was given.
-if test "${enable_oss+set}" = set; then :
+if test "${enable_oss+set}" = set; then
   enableval=$enable_oss;
 			if test "$enable_oss" = "no"; then
 			 ac_pa_use_oss=0
-			 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if OSS audio is disabled... yes" >&5
-$as_echo "Checking if OSS audio is disabled... yes" >&6; }
+			 { echo "$as_me:$LINENO: result: Checking if OSS audio is disabled... yes" >&5
+echo "${ECHO_T}Checking if OSS audio is disabled... yes" >&6; }
 			fi
 
 fi
@@ -5232,11 +10684,11 @@ fi
 fi
 
 # Check whether --enable-ext_sound was given.
-if test "${enable_ext_sound+set}" = set; then :
+if test "${enable_ext_sound+set}" = set; then
   enableval=$enable_ext_sound; if test "$enable_ext_sound" = "yes"; then
 		ac_pjmedia_snd=external
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if external sound is set... yes" >&5
-$as_echo "Checking if external sound is set... yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if external sound is set... yes" >&5
+echo "${ECHO_T}Checking if external sound is set... yes" >&6; }
 	       fi
 
 fi
@@ -5244,177 +10696,189 @@ fi
 
 
 # Check whether --enable-small-filter was given.
-if test "${enable_small_filter+set}" = set; then :
+if test "${enable_small_filter+set}" = set; then
   enableval=$enable_small_filter; if test "$enable_small_filter" = "no"; then
 		ac_no_small_filter='-DPJMEDIA_HAS_SMALL_FILTER=0'
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if small filter is disabled... yes" >&5
-$as_echo "Checking if small filter is disabled... yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if small filter is disabled... yes" >&5
+echo "${ECHO_T}Checking if small filter is disabled... yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if small filter is disabled... no" >&5
-$as_echo "Checking if small filter is disabled... no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if small filter is disabled... no" >&5
+echo "${ECHO_T}Checking if small filter is disabled... no" >&6; }
 fi
 
 
 
 # Check whether --enable-large-filter was given.
-if test "${enable_large_filter+set}" = set; then :
+if test "${enable_large_filter+set}" = set; then
   enableval=$enable_large_filter; if test "$enable_large_filter" = "no"; then
 		ac_no_large_filter='-DPJMEDIA_HAS_LARGE_FILTER=0'
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if large filter is disabled... yes" >&5
-$as_echo "Checking if large filter is disabled... yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if large filter is disabled... yes" >&5
+echo "${ECHO_T}Checking if large filter is disabled... yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if large filter is disabled... no" >&5
-$as_echo "Checking if large filter is disabled... no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if large filter is disabled... no" >&5
+echo "${ECHO_T}Checking if large filter is disabled... no" >&6; }
 fi
 
 
 
 # Check whether --enable-speex-aec was given.
-if test "${enable_speex_aec+set}" = set; then :
+if test "${enable_speex_aec+set}" = set; then
   enableval=$enable_speex_aec; if test "$enable_speex_aec" = "no"; then
 		ac_no_speex_aec='-DPJMEDIA_HAS_SPEEX_AEC=0'
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex AEC is disabled...yes" >&5
-$as_echo "Checking if Speex AEC is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if Speex AEC is disabled...yes" >&5
+echo "${ECHO_T}Checking if Speex AEC is disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex AEC is disabled...no" >&5
-$as_echo "Checking if Speex AEC is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if Speex AEC is disabled...no" >&5
+echo "${ECHO_T}Checking if Speex AEC is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-g711-codec was given.
-if test "${enable_g711_codec+set}" = set; then :
+if test "${enable_g711_codec+set}" = set; then
   enableval=$enable_g711_codec; if test "$enable_g711_codec" = "no"; then
 		ac_no_g711_codec=1
-		$as_echo "#define PJMEDIA_HAS_G711_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_G711_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.711 codec is disabled...yes" >&5
-$as_echo "Checking if G.711 codec is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if G.711 codec is disabled...yes" >&5
+echo "${ECHO_T}Checking if G.711 codec is disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.711 codec is disabled...no" >&5
-$as_echo "Checking if G.711 codec is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if G.711 codec is disabled...no" >&5
+echo "${ECHO_T}Checking if G.711 codec is disabled...no" >&6; }
 fi
 
 
 
 
 # Check whether --enable-l16-codec was given.
-if test "${enable_l16_codec+set}" = set; then :
+if test "${enable_l16_codec+set}" = set; then
   enableval=$enable_l16_codec; if test "$enable_l16_codec" = "no"; then
 		ac_no_l16_codec=1
-		$as_echo "#define PJMEDIA_HAS_L16_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_L16_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if L16 codecs are disabled...yes" >&5
-$as_echo "Checking if L16 codecs are disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if L16 codecs are disabled...yes" >&5
+echo "${ECHO_T}Checking if L16 codecs are disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if L16 codec is disabled...no" >&5
-$as_echo "Checking if L16 codec is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if L16 codec is disabled...no" >&5
+echo "${ECHO_T}Checking if L16 codec is disabled...no" >&6; }
 fi
 
 
 
 
 # Check whether --enable-gsm-codec was given.
-if test "${enable_gsm_codec+set}" = set; then :
+if test "${enable_gsm_codec+set}" = set; then
   enableval=$enable_gsm_codec; if test "$enable_gsm_codec" = "no"; then
 		ac_no_gsm_codec=1
-		$as_echo "#define PJMEDIA_HAS_GSM_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_GSM_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if GSM codec is disabled...yes" >&5
-$as_echo "Checking if GSM codec is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if GSM codec is disabled...yes" >&5
+echo "${ECHO_T}Checking if GSM codec is disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if GSM codec is disabled...no" >&5
-$as_echo "Checking if GSM codec is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if GSM codec is disabled...no" >&5
+echo "${ECHO_T}Checking if GSM codec is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-g722-codec was given.
-if test "${enable_g722_codec+set}" = set; then :
+if test "${enable_g722_codec+set}" = set; then
   enableval=$enable_g722_codec; if test "$enable_g722_codec" = "no"; then
 		ac_no_g722_codec=1
-		$as_echo "#define PJMEDIA_HAS_G722_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_G722_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722 codec is disabled...yes" >&5
-$as_echo "Checking if G.722 codec is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if G.722 codec is disabled...yes" >&5
+echo "${ECHO_T}Checking if G.722 codec is disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722 codec is disabled...no" >&5
-$as_echo "Checking if G.722 codec is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if G.722 codec is disabled...no" >&5
+echo "${ECHO_T}Checking if G.722 codec is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-g7221-codec was given.
-if test "${enable_g7221_codec+set}" = set; then :
+if test "${enable_g7221_codec+set}" = set; then
   enableval=$enable_g7221_codec; if test "$enable_g7221_codec" = "no"; then
 		ac_no_g7221_codec=1
-		$as_echo "#define PJMEDIA_HAS_G7221_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_G7221_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722.1 codec is disabled...yes" >&5
-$as_echo "Checking if G.722.1 codec is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if G.722.1 codec is disabled...yes" >&5
+echo "${ECHO_T}Checking if G.722.1 codec is disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722.1 codec is disabled...no" >&5
-$as_echo "Checking if G.722.1 codec is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if G.722.1 codec is disabled...no" >&5
+echo "${ECHO_T}Checking if G.722.1 codec is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-speex-codec was given.
-if test "${enable_speex_codec+set}" = set; then :
+if test "${enable_speex_codec+set}" = set; then
   enableval=$enable_speex_codec; if test "$enable_speex_codec" = "no"; then
 		ac_no_speex_codec=1
-		$as_echo "#define PJMEDIA_HAS_SPEEX_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_SPEEX_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex codec is disabled...yes" >&5
-$as_echo "Checking if Speex codec is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if Speex codec is disabled...yes" >&5
+echo "${ECHO_T}Checking if Speex codec is disabled...yes" >&6; }
 	       fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex codec is disabled...no" >&5
-$as_echo "Checking if Speex codec is disabled...no" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if Speex codec is disabled...no" >&5
+echo "${ECHO_T}Checking if Speex codec is disabled...no" >&6; }
 fi
 
 
 
-#AC_DEFINE(ac_no_ilbc_codec, 1)
-#AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC, 0)
-#AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
-
 # Check whether --enable-ilbc-codec was given.
-if test "${enable_ilbc_codec+set}" = set; then :
+if test "${enable_ilbc_codec+set}" = set; then
   enableval=$enable_ilbc_codec; if test "$enable_ilbc_codec" = "no"; then
 		ac_no_ilbc_codec=1
-		$as_echo "#define PJMEDIA_HAS_ILBC_CODEC 0" >>confdefs.h
+		cat >>confdefs.h <<\_ACEOF
+#define PJMEDIA_HAS_ILBC_CODEC 0
+_ACEOF
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if iLBC codec is disabled...yes" >&5
-$as_echo "Checking if iLBC codec is disabled...yes" >&6; }
+		{ echo "$as_me:$LINENO: result: Checking if iLBC codec is disabled...yes" >&5
+echo "${ECHO_T}Checking if iLBC codec is disabled...yes" >&6; }
 	       fi
 else
-  ac_no_ilbc_codec=1
-		$as_echo "#define PJMEDIA_HAS_ILBC_CODEC 0" >>confdefs.h
-
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if iLBC codec is disabled...yes" >&5
-$as_echo "Checking if iLBC codec is disabled...yes" >&6; }
+  { echo "$as_me:$LINENO: result: Checking if iLBC codec is disabled...no" >&5
+echo "${ECHO_T}Checking if iLBC codec is disabled...no" >&6; }
 fi
 
 
 # Check whether --enable-libsamplerate was given.
-if test "${enable_libsamplerate+set}" = set; then :
-  enableval=$enable_libsamplerate;  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for src_new in -lsamplerate" >&5
-$as_echo_n "checking for src_new in -lsamplerate... " >&6; }
-if test "${ac_cv_lib_samplerate_src_new+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+if test "${enable_libsamplerate+set}" = set; then
+  enableval=$enable_libsamplerate;
+{ echo "$as_me:$LINENO: checking for src_new in -lsamplerate" >&5
+echo $ECHO_N "checking for src_new in -lsamplerate... $ECHO_C" >&6; }
+if test "${ac_cv_lib_samplerate_src_new+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsamplerate  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -5432,18 +10896,39 @@ return src_new ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_samplerate_src_new=yes
 else
-  ac_cv_lib_samplerate_src_new=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_samplerate_src_new=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_samplerate_src_new" >&5
-$as_echo "$ac_cv_lib_samplerate_src_new" >&6; }
-if test "x$ac_cv_lib_samplerate_src_new" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_samplerate_src_new" >&5
+echo "${ECHO_T}$ac_cv_lib_samplerate_src_new" >&6; }
+if test $ac_cv_lib_samplerate_src_new = yes; then
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSAMPLERATE 1
 _ACEOF
@@ -5453,15 +10938,15 @@ _ACEOF
 fi
 
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Skipping libsamplerate detection" >&5
-$as_echo "Skipping libsamplerate detection" >&6; }
+  { echo "$as_me:$LINENO: result: Skipping libsamplerate detection" >&5
+echo "${ECHO_T}Skipping libsamplerate detection" >&6; }
 
 fi
 
 
 
 # Check whether --enable-ipp was given.
-if test "${enable_ipp+set}" = set; then :
+if test "${enable_ipp+set}" = set; then
   enableval=$enable_ipp;
 else
   enable_ipp=no
@@ -5470,7 +10955,7 @@ fi
 
 
 # Check whether --enable-ipp was given.
-if test "${enable_ipp+set}" = set; then :
+if test "${enable_ipp+set}" = set; then
   enableval=$enable_ipp;
 else
   with_ipp=no
@@ -5479,7 +10964,7 @@ fi
 
 
 # Check whether --enable-ipp-samples was given.
-if test "${enable_ipp_samples+set}" = set; then :
+if test "${enable_ipp_samples+set}" = set; then
   enableval=$enable_ipp_samples;
 else
   with_ipp_samples=no
@@ -5488,30 +10973,36 @@ fi
 
 
 if test "x$enable_ipp" != "xno"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP location" >&5
-$as_echo_n "checking Intel IPP location... " >&6; }
+                { echo "$as_me:$LINENO: checking Intel IPP location" >&5
+echo $ECHO_N "checking Intel IPP location... $ECHO_C" >&6; }
 
     if test "x$with_ipp" != "xno" -a "x$with_ipp" != "x"; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ipp" >&5
-$as_echo "$with_ipp" >&6; }
+	{ echo "$as_me:$LINENO: result: $with_ipp" >&5
+echo "${ECHO_T}$with_ipp" >&6; }
 	IPPROOT=$with_ipp
     elif test "x$IPPROOT" = "x"; then
 	if test -d /opt/intel/ipp; then
 	    IPPROOT=`ls -d /opt/intel/ipp/*/* | head -1`
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: autodetected in $IPPROOT" >&5
-$as_echo "autodetected in $IPPROOT" >&6; }
+	    { echo "$as_me:$LINENO: result: autodetected in $IPPROOT" >&5
+echo "${ECHO_T}autodetected in $IPPROOT" >&6; }
 	fi
     else
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPROOT" >&5
-$as_echo "$IPPROOT" >&6; }
+	{ echo "$as_me:$LINENO: result: $IPPROOT" >&5
+echo "${ECHO_T}$IPPROOT" >&6; }
     fi
 
     if test x$IPPROOT = x; then
-	as_fn_error "the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option" "$LINENO" 5
+	{ { echo "$as_me:$LINENO: error: the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option" >&5
+echo "$as_me: error: the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option" >&2;}
+   { (exit 1); exit 1; }; }
     elif test ! -d $IPPROOT; then
-	as_fn_error "not found" "$LINENO" 5
+	{ { echo "$as_me:$LINENO: error: not found" >&5
+echo "$as_me: error: not found" >&2;}
+   { (exit 1); exit 1; }; }
     elif test ! -d $IPPROOT/include; then
-	as_fn_error "directory doesn't seem to be valid" "$LINENO" 5
+	{ { echo "$as_me:$LINENO: error: directory doesn't seem to be valid" >&5
+echo "$as_me: error: directory doesn't seem to be valid" >&2;}
+   { (exit 1); exit 1; }; }
     else
 	# IPP directory looks okay.
 	# Remove trailing backslash
@@ -5532,9 +11023,13 @@ $as_echo "$IPPROOT" >&6; }
 	LIBS="$IPP_LIBS $LIBS"
 
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP usability" >&5
-$as_echo_n "checking Intel IPP usability... " >&6; }
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	{ echo "$as_me:$LINENO: checking Intel IPP usability" >&5
+echo $ECHO_N "checking Intel IPP usability... $ECHO_C" >&6; }
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <ippcore.h>
 
@@ -5546,69 +11041,99 @@ ippStaticInit();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6; }
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "failed
-See \`config.log' for more details." "$LINENO" 5; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ { echo "$as_me:$LINENO: error: failed
+See \`config.log' for more details." >&5
+echo "$as_me: error: failed
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 
 	CFLAGS="$SAVED_CFLAGS"
 	LDFLAGS="$SAVED_LDFLAGS"
 	LIBS="$SAVED_LIBS"
     fi
 
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP samples location" >&5
-$as_echo_n "checking Intel IPP samples location... " >&6; }
+                { echo "$as_me:$LINENO: checking Intel IPP samples location" >&5
+echo $ECHO_N "checking Intel IPP samples location... $ECHO_C" >&6; }
 
     if test "x$with_ipp_samples" != "xno" -a "x$with_ipp_samples" != "x"; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ipp_samples" >&5
-$as_echo "$with_ipp_samples" >&6; }
+	{ echo "$as_me:$LINENO: result: $with_ipp_samples" >&5
+echo "${ECHO_T}$with_ipp_samples" >&6; }
 	IPPSAMPLES=$with_ipp_samples
     elif test "x$IPPSAMPLES" = "x"; then
 	if test -d /opt/intel/ipp-samples; then
 	    IPPSAMPLES=/opt/intel/ipp-samples
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: autodetected in $IPPSAMPLES" >&5
-$as_echo "autodetected in $IPPSAMPLES" >&6; }
+	    { echo "$as_me:$LINENO: result: autodetected in $IPPSAMPLES" >&5
+echo "${ECHO_T}autodetected in $IPPSAMPLES" >&6; }
 	fi
     else
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPSAMPLES" >&5
-$as_echo "$IPPSAMPLES" >&6; }
+	{ echo "$as_me:$LINENO: result: $IPPSAMPLES" >&5
+echo "${ECHO_T}$IPPSAMPLES" >&6; }
     fi
 
     if test x$IPPSAMPLES = x; then
-	as_fn_error "the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option" "$LINENO" 5
+	{ { echo "$as_me:$LINENO: error: the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option" >&5
+echo "$as_me: error: the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option" >&2;}
+   { (exit 1); exit 1; }; }
     elif test ! -d $IPPSAMPLES; then
-	as_fn_error "not found" "$LINENO" 5
+	{ { echo "$as_me:$LINENO: error: not found" >&5
+echo "$as_me: error: not found" >&2;}
+   { (exit 1); exit 1; }; }
     elif test ! -d $IPPSAMPLES/speech-codecs; then
-	as_fn_error "directory doesn't seem to be valid" "$LINENO" 5
+	{ { echo "$as_me:$LINENO: error: directory doesn't seem to be valid" >&5
+echo "$as_me: error: directory doesn't seem to be valid" >&2;}
+   { (exit 1); exit 1; }; }
     else
 	# Remove trailing backslash
 	IPPSAMPLES=`echo $IPPSAMPLES | sed 's/\/$//'`
 
 	# Guess the libusc.a build location
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP USC build location" >&5
-$as_echo_n "checking Intel IPP USC build location... " >&6; }
+	{ echo "$as_me:$LINENO: checking Intel IPP USC build location" >&5
+echo $ECHO_N "checking Intel IPP USC build location... $ECHO_C" >&6; }
 	IPPSAMPLESLIB=`ls -d $IPPSAMPLES/speech-codecs/bin/*gcc*/lib | head -1`
 	if test ! -d $IPPSAMPLESLIB; then
-	    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "the $IPPSAMPLES/speech-codecs/bin/*gcc*/lib directory not found. Have you built the samples?
-See \`config.log' for more details." "$LINENO" 5; }
+	    { { echo "$as_me:$LINENO: error: the $IPPSAMPLES/speech-codecs/bin/*gcc*/lib directory not found. Have you built the samples?
+See \`config.log' for more details." >&5
+echo "$as_me: error: the $IPPSAMPLES/speech-codecs/bin/*gcc*/lib directory not found. Have you built the samples?
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 	fi
 	if test ! -f $IPPSAMPLESLIB/libusc.a; then
-	    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "libusc.a doesn't exist in $IPPSAMPLESLIB
-See \`config.log' for more details." "$LINENO" 5; }
+	    { { echo "$as_me:$LINENO: error: libusc.a doesn't exist in $IPPSAMPLESLIB
+See \`config.log' for more details." >&5
+echo "$as_me: error: libusc.a doesn't exist in $IPPSAMPLESLIB
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPSAMPLESLIB" >&5
-$as_echo "$IPPSAMPLESLIB" >&6; }
+	{ echo "$as_me:$LINENO: result: $IPPSAMPLESLIB" >&5
+echo "${ECHO_T}$IPPSAMPLESLIB" >&6; }
 
 	SAVED_CFLAGS="$CFLAGS"
 	SAVED_LDFLAGS="$LDFLAGS"
@@ -5619,9 +11144,13 @@ $as_echo "$IPPSAMPLESLIB" >&6; }
 	LDFLAGS="$LDFLAGS -L$IPPSAMPLESLIB"
 	LIBS="-lusc $LIBS"
 
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP USC usability" >&5
-$as_echo_n "checking Intel IPP USC usability... " >&6; }
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+	{ echo "$as_me:$LINENO: checking Intel IPP USC usability" >&5
+echo $ECHO_N "checking Intel IPP USC usability... $ECHO_C" >&6; }
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <usc.h>
 
@@ -5633,17 +11162,39 @@ extern USC_Fxns USC_G729AFP_Fxns;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6; }
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "failed
-See \`config.log' for more details." "$LINENO" 5; }
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ { echo "$as_me:$LINENO: error: failed
+See \`config.log' for more details." >&5
+echo "$as_me: error: failed
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 
 	CFLAGS="$SAVED_CFLAGS"
 	LDFLAGS="\$(IPP_LDFLAGS) $SAVED_LDFLAGS"
@@ -5659,43 +11210,171 @@ export IPP_CFLAGS=$IPP_CFLAGS\n\
 export IPP_LDFLAGS=$IPP_LDFLAGS\n\
 export IPP_LIBS=$IPP_LIBS"
 else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Skipping Intel IPP settings (not wanted)" >&5
-$as_echo "Skipping Intel IPP settings (not wanted)" >&6; }
+    { echo "$as_me:$LINENO: result: Skipping Intel IPP settings (not wanted)" >&5
+echo "${ECHO_T}Skipping Intel IPP settings (not wanted)" >&6; }
 fi
 
 
 
 
 # Check whether --enable-ssl was given.
-if test "${enable_ssl+set}" = set; then :
+if test "${enable_ssl+set}" = set; then
   enableval=$enable_ssl;
 		if test "$enable_ssl" = "no"; then
 		 ac_no_ssl=1
-		 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if SSL support is disabled... yes" >&5
-$as_echo "Checking if SSL support is disabled... yes" >&6; }
+		 { echo "$as_me:$LINENO: result: Checking if SSL support is disabled... yes" >&5
+echo "${ECHO_T}Checking if SSL support is disabled... yes" >&6; }
 	        fi
 
 else
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for OpenSSL installations.." >&5
-$as_echo "checking for OpenSSL installations.." >&6; }
+		{ echo "$as_me:$LINENO: result: checking for OpenSSL installations.." >&5
+echo "${ECHO_T}checking for OpenSSL installations.." >&6; }
+
+
+
+		if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
+echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
+echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking openssl/ssl.h usability" >&5
+echo $ECHO_N "checking openssl/ssl.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <openssl/ssl.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking openssl/ssl.h presence" >&5
+echo $ECHO_N "checking openssl/ssl.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <openssl/ssl.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
 
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: openssl/ssl.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: openssl/ssl.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: openssl/ssl.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: openssl/ssl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&2;}
 
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
+echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_openssl_ssl_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
+echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6; }
 
-		ac_fn_c_check_header_mongrel "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default"
-if test "x$ac_cv_header_openssl_ssl_h" = x""yes; then :
+fi
+if test $ac_cv_header_openssl_ssl_h = yes; then
   openssl_h_present=1
 fi
 
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_library_init in -lssl" >&5
-$as_echo_n "checking for SSL_library_init in -lssl... " >&6; }
-if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+		{ echo "$as_me:$LINENO: checking for SSL_library_init in -lssl" >&5
+echo $ECHO_N "checking for SSL_library_init in -lssl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lssl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -5713,29 +11392,54 @@ return SSL_library_init ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_ssl_SSL_library_init=yes
 else
-  ac_cv_lib_ssl_SSL_library_init=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ssl_SSL_library_init=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_library_init" >&5
-$as_echo "$ac_cv_lib_ssl_SSL_library_init" >&6; }
-if test "x$ac_cv_lib_ssl_SSL_library_init" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_library_init" >&5
+echo "${ECHO_T}$ac_cv_lib_ssl_SSL_library_init" >&6; }
+if test $ac_cv_lib_ssl_SSL_library_init = yes; then
   libssl_present=1 && LIBS="$LIBS -lssl"
 fi
 
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ERR_load_BIO_strings in -lcrypto" >&5
-$as_echo_n "checking for ERR_load_BIO_strings in -lcrypto... " >&6; }
-if test "${ac_cv_lib_crypto_ERR_load_BIO_strings+set}" = set; then :
-  $as_echo_n "(cached) " >&6
+		{ echo "$as_me:$LINENO: checking for ERR_load_BIO_strings in -lcrypto" >&5
+echo $ECHO_N "checking for ERR_load_BIO_strings in -lcrypto... $ECHO_C" >&6; }
+if test "${ac_cv_lib_crypto_ERR_load_BIO_strings+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrypto  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -5753,29 +11457,54 @@ return ERR_load_BIO_strings ();
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
   ac_cv_lib_crypto_ERR_load_BIO_strings=yes
 else
-  ac_cv_lib_crypto_ERR_load_BIO_strings=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_crypto_ERR_load_BIO_strings=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_ERR_load_BIO_strings" >&5
-$as_echo "$ac_cv_lib_crypto_ERR_load_BIO_strings" >&6; }
-if test "x$ac_cv_lib_crypto_ERR_load_BIO_strings" = x""yes; then :
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_ERR_load_BIO_strings" >&5
+echo "${ECHO_T}$ac_cv_lib_crypto_ERR_load_BIO_strings" >&6; }
+if test $ac_cv_lib_crypto_ERR_load_BIO_strings = yes; then
   libcrypto_present=1 && LIBS="$LIBS -lcrypto"
 fi
 
 		if test "x$openssl_h_present" = "x1" -a "x$libssl_present" = "x1" -a "x$libcrypto_present" = "x1"; then
-	        	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenSSL library found, SSL support enabled" >&5
-$as_echo "OpenSSL library found, SSL support enabled" >&6; }
-			$as_echo "#define PJSIP_HAS_TLS_TRANSPORT 1" >>confdefs.h
+	        	{ echo "$as_me:$LINENO: result: OpenSSL library found, SSL support enabled" >&5
+echo "${ECHO_T}OpenSSL library found, SSL support enabled" >&6; }
+			# PJSIP_HAS_TLS_TRANSPORT setting follows PJ_HAS_SSL_SOCK
+			#AC_DEFINE(PJSIP_HAS_TLS_TRANSPORT, 1)
+			cat >>confdefs.h <<\_ACEOF
+#define PJ_HAS_SSL_SOCK 1
+_ACEOF
 
 		else
-			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ** OpenSSL libraries not found, disabling SSL support **" >&5
-$as_echo "** OpenSSL libraries not found, disabling SSL support **" >&6; }
+			{ echo "$as_me:$LINENO: result: ** OpenSSL libraries not found, disabling SSL support **" >&5
+echo "${ECHO_T}** OpenSSL libraries not found, disabling SSL support **" >&6; }
 		fi
 
 fi
@@ -5784,74 +11513,94 @@ fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if select() needs correct nfds" >&5
-$as_echo_n "checking if select() needs correct nfds... " >&6; }
+{ echo "$as_me:$LINENO: checking if select() needs correct nfds" >&5
+echo $ECHO_N "checking if select() needs correct nfds... $ECHO_C" >&6; }
 case $target in
-  *rtems*) $as_echo "#define PJ_SELECT_NEEDS_NFDS 1" >>confdefs.h
+  *rtems*) cat >>confdefs.h <<\_ACEOF
+#define PJ_SELECT_NEEDS_NFDS 1
+_ACEOF
 
-	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+	   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 	;;
-  *) $as_echo "#define PJ_SELECT_NEEDS_NFDS 0" >>confdefs.h
+  *) cat >>confdefs.h <<\_ACEOF
+#define PJ_SELECT_NEEDS_NFDS 0
+_ACEOF
 
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
-$as_echo "no (default)" >&6; }
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Decided that select() doesn't need correct nfds (please check)" >&5
-$as_echo "** Decided that select() doesn't need correct nfds (please check)" >&6; }
+     { echo "$as_me:$LINENO: result: no (default)" >&5
+echo "${ECHO_T}no (default)" >&6; }
+     { echo "$as_me:$LINENO: result: ** Decided that select() doesn't need correct nfds (please check)" >&5
+echo "${ECHO_T}** Decided that select() doesn't need correct nfds (please check)" >&6; }
 	;;
 esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pj_thread_create() should enforce stack size" >&5
-$as_echo_n "checking if pj_thread_create() should enforce stack size... " >&6; }
+{ echo "$as_me:$LINENO: checking if pj_thread_create() should enforce stack size" >&5
+echo $ECHO_N "checking if pj_thread_create() should enforce stack size... $ECHO_C" >&6; }
 case $target in
-  *rtems*) $as_echo "#define PJ_THREAD_SET_STACK_SIZE 1" >>confdefs.h
+  *rtems*) cat >>confdefs.h <<\_ACEOF
+#define PJ_THREAD_SET_STACK_SIZE 1
+_ACEOF
 
-	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+	   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 	;;
-  *) $as_echo "#define PJ_THREAD_SET_STACK_SIZE 0" >>confdefs.h
+  *) cat >>confdefs.h <<\_ACEOF
+#define PJ_THREAD_SET_STACK_SIZE 0
+_ACEOF
 
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
-$as_echo "no (default)" >&6; }
+     { echo "$as_me:$LINENO: result: no (default)" >&5
+echo "${ECHO_T}no (default)" >&6; }
 	;;
 esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pj_thread_create() should allocate stack" >&5
-$as_echo_n "checking if pj_thread_create() should allocate stack... " >&6; }
+{ echo "$as_me:$LINENO: checking if pj_thread_create() should allocate stack" >&5
+echo $ECHO_N "checking if pj_thread_create() should allocate stack... $ECHO_C" >&6; }
 case $target in
-  *rtems*) $as_echo "#define PJ_THREAD_ALLOCATE_STACK 1" >>confdefs.h
+  *rtems*) cat >>confdefs.h <<\_ACEOF
+#define PJ_THREAD_ALLOCATE_STACK 1
+_ACEOF
 
-	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+	   { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
 	;;
-  *) $as_echo "#define PJ_THREAD_ALLOCATE_STACK 0" >>confdefs.h
+  *) cat >>confdefs.h <<\_ACEOF
+#define PJ_THREAD_ALLOCATE_STACK 0
+_ACEOF
 
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
-$as_echo "no (default)" >&6; }
+     { echo "$as_me:$LINENO: result: no (default)" >&5
+echo "${ECHO_T}no (default)" >&6; }
 	;;
 esac
 
 case $target in
   *mingw* | *cygw* | *win32* | *w32* )
-	$as_echo "#define PJ_BLOCKING_ERROR_VAL WSAEWOULDBLOCK" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_BLOCKING_ERROR_VAL WSAEWOULDBLOCK
+_ACEOF
 
 	;;
-  *) $as_echo "#define PJ_BLOCKING_ERROR_VAL EAGAIN" >>confdefs.h
+  *) cat >>confdefs.h <<\_ACEOF
+#define PJ_BLOCKING_ERROR_VAL EAGAIN
+_ACEOF
 
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Setting non-blocking recv() retval to EAGAIN (please check)" >&5
-$as_echo "** Setting non-blocking recv() retval to EAGAIN (please check)" >&6; }
+     { echo "$as_me:$LINENO: result: ** Setting non-blocking recv() retval to EAGAIN (please check)" >&5
+echo "${ECHO_T}** Setting non-blocking recv() retval to EAGAIN (please check)" >&6; }
 	;;
 esac
 
 case $target in
   *mingw* | *cygw* | *win32* | *w32* )
-	$as_echo "#define PJ_BLOCKING_CONNECT_ERROR_VAL WSAEWOULDBLOCK" >>confdefs.h
+	cat >>confdefs.h <<\_ACEOF
+#define PJ_BLOCKING_CONNECT_ERROR_VAL WSAEWOULDBLOCK
+_ACEOF
 
 	;;
-  *) $as_echo "#define PJ_BLOCKING_CONNECT_ERROR_VAL EINPROGRESS" >>confdefs.h
+  *) cat >>confdefs.h <<\_ACEOF
+#define PJ_BLOCKING_CONNECT_ERROR_VAL EINPROGRESS
+_ACEOF
 
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&5
-$as_echo "** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&6; }
+     { echo "$as_me:$LINENO: result: ** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&5
+echo "${ECHO_T}** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&6; }
 	;;
 esac
 
@@ -5906,13 +11655,12 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
+      *) $as_unset $ac_var ;;
       esac ;;
     esac
   done
@@ -5920,8 +11668,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
   (set) 2>&1 |
     case $as_nl`(ac_space=' '; set) 2>&1` in #(
     *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
       sed -n \
 	"s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
@@ -5944,12 +11692,12 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     test "x$cache_file" != "x/dev/null" &&
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
     cat confcache >$cache_file
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -5965,11 +11713,11 @@ ac_ltlibobjs=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -5977,15 +11725,12 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 
-
 : ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -5995,79 +11740,59 @@ cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
-
 SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
 esac
+
 fi
 
 
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
   else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
+    PATH_SEPARATOR=:
   fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
+  rm -f conf$$.sh
 fi
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
 fi
 
 
@@ -6076,18 +11801,20 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
+as_nl='
+'
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in #((
+case $0 in
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
 IFS=$as_save_IFS
 
      ;;
@@ -6098,111 +11825,32 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
 done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$?; test $as_status -eq 0 && as_status=1
-  if test "$3"; then
-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
   fi
-  $as_echo "$as_me: error: $1" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
+done
 
+# Required to use basename.
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -6216,17 +11864,13 @@ else
   as_basename=false
 fi
 
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
 
+# Name of the executable.
 as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
 	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
@@ -6241,103 +11885,104 @@ $as_echo X/"$0" |
 	  }
 	  s/.*/./; q'`
 
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
+case `echo -n x` in
 -n*)
-  case `echo 'xy\c'` in
+  case `echo 'x\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
+  *)   ECHO_C='\c';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
     as_ln_s='cp -p'
-  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
 else
   as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
+  as_mkdir_p=:
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -6354,12 +11999,12 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-	test -d "$1/.";
+        test -d "$1/.";
       else
-	case $1 in #(
-	-*)set "./$1";;
+	case $1 in
+        -*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -6374,19 +12019,13 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
 exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
+# Save the log message, to keep $[0] and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
 This file was extended by pjproject $as_me 1.0, which was
-generated by GNU Autoconf 2.64.  Invocation command line was
+generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -6399,40 +12038,29 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
 
 _ACEOF
 
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<_ACEOF
 # Files that config.status was made for.
 config_files="$ac_config_files"
 config_headers="$ac_config_headers"
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<\_ACEOF
 ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
+\`$as_me' instantiates files from templates according to the
+current configuration.
 
-Usage: $0 [OPTION]... [TAG]...
+Usage: $0 [OPTIONS] [FILE]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
+  -q, --quiet      do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
 
 Configuration files:
 $config_files
@@ -6440,26 +12068,26 @@ $config_files
 Configuration headers:
 $config_headers
 
-Report bugs to the package provider."
+Report bugs to <bug-autoconf@gnu.org>."
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
 pjproject config.status 1.0
-configured by $0, generated by GNU Autoconf 2.64,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2006 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
-test -n "\$AWK" || AWK=awk
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
 ac_need_defaults=:
 while test $# != 0
 do
@@ -6481,38 +12109,34 @@ do
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
+    echo "$ac_cs_version"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
     $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
+    { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
   --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
+    echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
 
-  *) as_fn_append ac_config_targets " $1"
+  *) ac_config_targets="$ac_config_targets $1"
      ac_need_defaults=false ;;
 
   esac
@@ -6527,32 +12151,30 @@ if $ac_cs_silent; then
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<_ACEOF
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
   export CONFIG_SHELL
-  exec "\$@"
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<\_ACEOF
 exec 5>>config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  $as_echo "$ac_log"
+  echo "$ac_log"
 } >&5
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<_ACEOF
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<\_ACEOF
 
 # Handling of arguments.
 for ac_config_target in $ac_config_targets
@@ -6572,7 +12194,9 @@ do
     "third_party/build/portaudio/os-auto.mak") CONFIG_FILES="$CONFIG_FILES third_party/build/portaudio/os-auto.mak" ;;
     "third_party/build/os-auto.mak") CONFIG_FILES="$CONFIG_FILES third_party/build/os-auto.mak" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
   esac
 done
 
@@ -6598,7 +12222,7 @@ $debug ||
   trap 'exit_status=$?
   { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
 ' 0
-  trap 'as_fn_exit 1' 1 2 13 15
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
 }
 # Create a (secure) tmp directory for tmp files.
 
@@ -6609,140 +12233,156 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
 
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
 
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
 _ACEOF
 
 
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+CXX!$CXX$ac_delim
+CXXFLAGS!$CXXFLAGS$ac_delim
+ac_ct_CXX!$ac_ct_CXX$ac_delim
+ac_pjdir!$ac_pjdir$ac_delim
+ac_build_mak_vars!$ac_build_mak_vars$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+ac_os_objs!$ac_os_objs$ac_delim
+ac_pjmedia_snd!$ac_pjmedia_snd$ac_delim
+ac_pa_cflags!$ac_pa_cflags$ac_delim
+ac_pa_use_alsa!$ac_pa_use_alsa$ac_delim
+ac_pa_use_oss!$ac_pa_use_oss$ac_delim
+ac_no_small_filter!$ac_no_small_filter$ac_delim
+ac_no_large_filter!$ac_no_large_filter$ac_delim
+ac_no_speex_aec!$ac_no_speex_aec$ac_delim
+ac_no_g711_codec!$ac_no_g711_codec$ac_delim
+ac_no_l16_codec!$ac_no_l16_codec$ac_delim
+ac_no_gsm_codec!$ac_no_gsm_codec$ac_delim
+ac_no_g722_codec!$ac_no_g722_codec$ac_delim
+ac_no_g7221_codec!$ac_no_g7221_codec$ac_delim
+ac_no_speex_codec!$ac_no_speex_codec$ac_delim
+ac_no_ilbc_codec!$ac_no_ilbc_codec$ac_delim
+ac_no_ssl!$ac_no_ssl$ac_delim
+openssl_h_present!$openssl_h_present$ac_delim
+libssl_present!$libssl_present$ac_delim
+libcrypto_present!$libcrypto_present$ac_delim
+ac_cross_compile!$ac_cross_compile$ac_delim
+ac_linux_poll!$ac_linux_poll$ac_delim
+ac_host!$ac_host$ac_delim
+ac_main_obj!$ac_main_obj$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
 
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 89; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
 done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
 
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
 
-_ACAWK
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
 _ACEOF
 
+
 # VPATH may cause trouble with some makes, so we remove $(srcdir),
 # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
@@ -6758,128 +12398,20 @@ s/^[^=]*=[	 ]*$//
 }'
 fi
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<\_ACEOF
 fi # test -n "$CONFIG_FILES"
 
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
 
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
-shift
-for ac_tag
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS
 do
   case $ac_tag in
   :[FHLC]) ac_mode=$ac_tag; continue;;
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -6907,34 +12439,26 @@ do
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
       esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
+      ac_file_inputs="$ac_file_inputs $ac_f"
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
+    configure_input="Generated from "`IFS=:
+	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
     fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    *:-:* | *:-) cat >"$tmp/stdin";;
     esac
     ;;
   esac
@@ -6944,7 +12468,42 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$ac_file" : 'X\(//\)[^/]' \| \
 	 X"$ac_file" : 'X\(//\)$' \| \
 	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -6962,15 +12521,20 @@ $as_echo X"$ac_file" |
 	    q
 	  }
 	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
   ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -7006,12 +12570,12 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<\_ACEOF
 # If the template does not know about datarootdir, expand it.
 # FIXME: This hack should be removed a few years after 2.60.
 ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
+
+case `sed -n '/datarootdir/ {
   p
   q
 }
@@ -7019,37 +12583,36 @@ ac_sed_dataroot='
 /@docdir@/p
 /@infodir@/p
 /@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+/@mandir@/p
+' $ac_file_inputs` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<_ACEOF
   ac_datarootdir_hack='
   s&@datadir@&$datadir&g
   s&@docdir@&$docdir&g
   s&@infodir@&$infodir&g
   s&@localedir@&$localedir&g
   s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
+    s&\\\${datarootdir}&$datarootdir&g' ;;
 esac
 _ACEOF
 
 # Neutralize VPATH when `$srcdir' = `.'.
 # Shell code in configure.ac might set extrasub.
 # FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
 $extrasub
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+cat >>$CONFIG_STATUS <<\_ACEOF
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
+s&@configure_input@&$configure_input&;t t
 s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
 s&@srcdir@&$ac_srcdir&;t t
 s&@abs_srcdir@&$ac_abs_srcdir&;t t
 s&@top_srcdir@&$ac_top_srcdir&;t t
@@ -7058,48 +12621,119 @@ s&@builddir@&$ac_builddir&;t t
 s&@abs_builddir@&$ac_abs_builddir&;t t
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 $ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
  ;;
   :H)
   #
   # CONFIG_HEADER
   #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([	 #]*\\)[^	 ]*\\([	 ]*'
+ac_dB='\\)[	 (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+	t rset
+	:rset
+	s/^[	 ]*#[	 ]*define[	 ][	 ]*//
+	t ok
+	d
+	:ok
+	s/[\\&,]/\\&/g
+	s/^\('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+	s/^\('"$ac_word_re"'\)[	 ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[	 #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:	 sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:	 sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:	 sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[	 ]*#[	 ]*undef[	 ][	 ]*$ac_word_re[	 ]*\$/b def
+/^[	 ]*#[	 ]*define[	 ][	 ]*$ac_word_re[(	 ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
   if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
     else
-      rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
     fi
   else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+    echo "/* $configure_input  */"
+    cat "$ac_result"
   fi
+  rm -f "$tmp/out12"
  ;;
 
 
@@ -7108,13 +12742,11 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;}
 done # for ac_tag
 
 
-as_fn_exit 0
+{ (exit 0); exit 0; }
 _ACEOF
+chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
-test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -7134,16 +12766,12 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit $?
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+  $ac_cs_success || { (exit 1); exit 1; }
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
+{ echo "$as_me:$LINENO: result:
 
 Configurations for current target have been written to 'build.mak', and 'os-auto.mak' in various build directories, and pjlib/include/pj/compat/os_auto.h.
 
@@ -7153,7 +12781,7 @@ Further customizations can be put in:
 
 The next step now is to run 'make dep' and 'make'.
 " >&5
-$as_echo "
+echo "${ECHO_T}
 
 Configurations for current target have been written to 'build.mak', and 'os-auto.mak' in various build directories, and pjlib/include/pj/compat/os_auto.h.
 
diff --git a/sflphone-common/libs/pjproject/aconfigure.ac b/sflphone-common/libs/pjproject/aconfigure.ac
index b8b7914f25..7f579e7fe6 100644
--- a/sflphone-common/libs/pjproject/aconfigure.ac
+++ b/sflphone-common/libs/pjproject/aconfigure.ac
@@ -150,6 +150,7 @@ AC_CHECK_HEADER(netinet/ip.h,[AC_DEFINE(PJ_HAS_NETINET_IP_H,1)],[],
           	  #	include <netinet/in_systm.h>
           	  #endif
           	 ])
+AC_CHECK_HEADER(netinet/tcp.h,[AC_DEFINE(PJ_HAS_NETINET_TCP_H,1)])
 AC_CHECK_HEADER(ifaddrs.h,[AC_DEFINE(PJ_HAS_IFADDRS_H,1)])
 AC_CHECK_HEADER(semaphore.h,[AC_DEFINE(PJ_HAS_SEMAPHORE_H,1)])
 AC_CHECK_HEADER(setjmp.h,[AC_DEFINE(PJ_HAS_SETJMP_H,1)])
@@ -559,10 +560,6 @@ AC_ARG_ENABLE(speex-codec,
 
 dnl # Include iLBC codec
 AC_SUBST(ac_no_ilbc_codec)
-#AC_DEFINE(ac_no_ilbc_codec, 1)
-#AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC, 0)
-#AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
-
 AC_ARG_ENABLE(ilbc-codec,
 	      AC_HELP_STRING([--disable-ilbc-codec],
 			     [Exclude iLBC codec in the build]),
@@ -571,9 +568,7 @@ AC_ARG_ENABLE(ilbc-codec,
 		AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC,0)
 		AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
 	       fi],
-		[ac_no_ilbc_codec=1]
-		AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC,0)
-	    AC_MSG_RESULT([Checking if iLBC codec is disabled...yes]))
+	      AC_MSG_RESULT([Checking if iLBC codec is disabled...no]))
 
 dnl # Include libsamplerate
 AC_ARG_ENABLE(libsamplerate,
@@ -763,7 +758,9 @@ AC_ARG_ENABLE(ssl,
 		AC_CHECK_LIB(crypto,ERR_load_BIO_strings,[libcrypto_present=1 && LIBS="$LIBS -lcrypto"])
 		if test "x$openssl_h_present" = "x1" -a "x$libssl_present" = "x1" -a "x$libcrypto_present" = "x1"; then
 	        	AC_MSG_RESULT([OpenSSL library found, SSL support enabled])
-			AC_DEFINE(PJSIP_HAS_TLS_TRANSPORT, 1)
+			# PJSIP_HAS_TLS_TRANSPORT setting follows PJ_HAS_SSL_SOCK
+			#AC_DEFINE(PJSIP_HAS_TLS_TRANSPORT, 1)
+			AC_DEFINE(PJ_HAS_SSL_SOCK, 1)
 		else
 			AC_MSG_RESULT([** OpenSSL libraries not found, disabling SSL support **])
 		fi
diff --git a/sflphone-common/libs/pjproject/autogen.sh b/sflphone-common/libs/pjproject/autogen.sh
deleted file mode 100755
index 695c27e85e..0000000000
--- a/sflphone-common/libs/pjproject/autogen.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-#####################################################
-# File Name: autogen.sh
-#
-# Purpose :
-#
-# Author: Julien Bonjean (julien@bonjean.info) 
-#
-# Creation Date: 2009-05-26
-# Last Modified: 2009-06-01 18:25:28 -0400
-#####################################################
-
-if [ -e /usr/share/misc/config.guess ]; then
-	rm -f config.sub config.guess
-        ln -s /usr/share/misc/config.sub .
-        ln -s /usr/share/misc/config.guess .	
-elif [ -e /usr/lib/rpm/config.guess ]; then
-	rm -f config.sub config.guess
-	ln -s /usr/lib/rpm/config.sub .
-	ln -s /usr/lib/rpm/config.guess .
-else
-	aclocal --force
-	automake --add-missing --force-missing --copy	
-fi
-
-exit 0
diff --git a/sflphone-common/libs/pjproject/build.mak.in b/sflphone-common/libs/pjproject/build.mak.in
index d9e9e09cbf..e393eb7174 100644
--- a/sflphone-common/libs/pjproject/build.mak.in
+++ b/sflphone-common/libs/pjproject/build.mak.in
@@ -10,8 +10,8 @@ export LINUX_POLL := @ac_linux_poll@
 LIB_SUFFIX = $(TARGET_NAME).a
 
 # Determine which party libraries to use
-export APP_THIRD_PARTY_LIBS := -lresample-$(TARGET_NAME) -lsrtp-$(TARGET_NAME)
-export APP_THIRD_PARTY_LIB_FILES = $(PJ_DIR)/third_party/lib/libresample-$(LIB_SUFFIX) $(PJ_DIR)/third_party/lib/libsrtp-$(LIB_SUFFIX)
+export APP_THIRD_PARTY_LIBS := -lresample-$(TARGET_NAME) -lmilenage-$(TARGET_NAME) -lsrtp-$(TARGET_NAME)
+export APP_THIRD_PARTY_LIB_FILES = $(PJ_DIR)/third_party/lib/libresample-$(LIB_SUFFIX) $(PJ_DIR)/third_party/lib/libmilenage-$(LIB_SUFFIX) $(PJ_DIR)/third_party/lib/libsrtp-$(LIB_SUFFIX)
 
 ifneq (@ac_no_gsm_codec@,1)
 APP_THIRD_PARTY_LIBS += -lgsmcodec-$(TARGET_NAME)
@@ -59,29 +59,29 @@ export APP_LDFLAGS := -L$(PJDIR)/pjlib/lib\
 	-L$(PJDIR)/pjsip/lib\
 	-L$(PJDIR)/third_party/lib\
 	@LDFLAGS@
-export APP_LDLIBS := -lpjsua-sfl-$(TARGET_NAME)\
-	-lpjsip-ua-sfl-$(TARGET_NAME)\
-	-lpjsip-simple-sfl-$(TARGET_NAME)\
-	-lpjsip-sfl-$(TARGET_NAME)\
-	-lpjmedia-codec-sfl-$(TARGET_NAME)\
-	-lpjmedia-sfl-$(TARGET_NAME)\
-	-lpjmedia-audiodev-sfl-$(TARGET_NAME)\
-	-lpjnath-sfl-$(TARGET_NAME)\
-	-lpjlib-util-sfl-$(TARGET_NAME)\
+export APP_LDLIBS := -lpjsua-$(TARGET_NAME)\
+	-lpjsip-ua-$(TARGET_NAME)\
+	-lpjsip-simple-$(TARGET_NAME)\
+	-lpjsip-$(TARGET_NAME)\
+	-lpjmedia-codec-$(TARGET_NAME)\
+	-lpjmedia-$(TARGET_NAME)\
+	-lpjmedia-audiodev-$(TARGET_NAME)\
+	-lpjnath-$(TARGET_NAME)\
+	-lpjlib-util-$(TARGET_NAME)\
 	$(APP_THIRD_PARTY_LIBS)\
-	-lpj-sfl-$(TARGET_NAME)\
+	-lpj-$(TARGET_NAME)\
 	@LIBS@
-export APP_LIB_FILES = $(PJ_DIR)/pjsip/lib/libpjsua-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjsip/lib/libpjsip-ua-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjsip/lib/libpjsip-simple-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjsip/lib/libpjsip-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjmedia/lib/libpjmedia-codec-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjmedia/lib/libpjmedia-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjmedia/lib/libpjmedia-audiodev-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjnath/lib/libpjnath-sfl-$(LIB_SUFFIX) \
-	$(PJ_DIR)/pjlib-util/lib/libpjlib-util-sfl-$(LIB_SUFFIX) \
+export APP_LIB_FILES = $(PJ_DIR)/pjsip/lib/libpjsua-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjsip/lib/libpjsip-ua-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjsip/lib/libpjsip-simple-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjsip/lib/libpjsip-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjmedia/lib/libpjmedia-codec-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjmedia/lib/libpjmedia-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjmedia/lib/libpjmedia-audiodev-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjnath/lib/libpjnath-$(LIB_SUFFIX) \
+	$(PJ_DIR)/pjlib-util/lib/libpjlib-util-$(LIB_SUFFIX) \
 	$(APP_THIRD_PARTY_LIB_FILES) \
-	$(PJ_DIR)/pjlib/lib/libpj-sfl-$(LIB_SUFFIX)
+	$(PJ_DIR)/pjlib/lib/libpj-$(LIB_SUFFIX)
 
 export PJ_DIR := $(PJDIR)
 export PJ_CC := $(APP_CC)
diff --git a/sflphone-common/libs/pjproject/build.symbian/bld.inf b/sflphone-common/libs/pjproject/build.symbian/bld.inf
index b516a1d9cf..7e26998768 100644
--- a/sflphone-common/libs/pjproject/build.symbian/bld.inf
+++ b/sflphone-common/libs/pjproject/build.symbian/bld.inf
@@ -1,6 +1,6 @@
 prj_platforms
 winscw
-//armv5
+armv5
 gcce
 
 prj_mmpfiles
@@ -30,7 +30,6 @@ libresample.mmp
 pjmedia_audiodev.mmp
 
 /* Applications */
-//pjlib_test.mmp
 //symsndtest.mmp
 symbian_ua.mmp
 ..\pjsip-apps\src\symbian_ua_gui\group\symbian_ua_gui.mmp
diff --git a/sflphone-common/libs/pjproject/build.symbian/libg7221codec.mmp b/sflphone-common/libs/pjproject/build.symbian/libg7221codec.mmp
index 95d379591f..814fcae6ee 100644
--- a/sflphone-common/libs/pjproject/build.symbian/libg7221codec.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/libg7221codec.mmp
@@ -3,6 +3,7 @@ TARGETTYPE 	lib
 
 //OPTION		CW -lang c++
 OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/libgsmcodec.mmp b/sflphone-common/libs/pjproject/build.symbian/libgsmcodec.mmp
index 754bceac37..1b301f8c39 100644
--- a/sflphone-common/libs/pjproject/build.symbian/libgsmcodec.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/libgsmcodec.mmp
@@ -19,6 +19,7 @@ TARGETTYPE 	lib
 #endif
 
 //OPTION		CW -lang c++
+OPTION          ARMCC --gnu
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/libpassthroughcodec.mmp b/sflphone-common/libs/pjproject/build.symbian/libpassthroughcodec.mmp
index c4fb277552..3a1911714e 100644
--- a/sflphone-common/libs/pjproject/build.symbian/libpassthroughcodec.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/libpassthroughcodec.mmp
@@ -9,6 +9,7 @@ MACRO		PJ_SYMBIAN=1
 // GCCE optimization setting
 //
 OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 //
 // Passthrough codecs wrapper for pjmedia-codec
diff --git a/sflphone-common/libs/pjproject/build.symbian/libresample.mmp b/sflphone-common/libs/pjproject/build.symbian/libresample.mmp
index 1498714685..0dd074ff08 100644
--- a/sflphone-common/libs/pjproject/build.symbian/libresample.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/libresample.mmp
@@ -7,6 +7,7 @@ SOURCEPATH	..\third_party\resample\src
 // GCCE optimization setting
 //
 OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/libspeexcodec.mmp b/sflphone-common/libs/pjproject/build.symbian/libspeexcodec.mmp
index 1be8a19eea..816d805370 100644
--- a/sflphone-common/libs/pjproject/build.symbian/libspeexcodec.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/libspeexcodec.mmp
@@ -9,6 +9,7 @@ MACRO		PJ_SYMBIAN=1
 // GCCE optimization setting
 //
 OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 //
 // Speex files
diff --git a/sflphone-common/libs/pjproject/build.symbian/libsrtp.mmp b/sflphone-common/libs/pjproject/build.symbian/libsrtp.mmp
index 11384d22df..4309e6dc10 100644
--- a/sflphone-common/libs/pjproject/build.symbian/libsrtp.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/libsrtp.mmp
@@ -8,6 +8,7 @@ MACRO		PJ_SYMBIAN=1
 // GCCE optimization setting
 //
 OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 //
 // Speex files
diff --git a/sflphone-common/libs/pjproject/build.symbian/null_audio.mmp b/sflphone-common/libs/pjproject/build.symbian/null_audio.mmp
index ea935bb236..de1dcbdc69 100644
--- a/sflphone-common/libs/pjproject/build.symbian/null_audio.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/null_audio.mmp
@@ -22,6 +22,7 @@ TARGETTYPE 	lib
 SOURCEPATH	..\pjmedia\src\pjmedia
 
 OPTION		CW -lang c++
+OPTION          ARMCC --gnu
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjlib.mmp b/sflphone-common/libs/pjproject/build.symbian/pjlib.mmp
index ec4a9902ce..65ffcc5a09 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjlib.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjlib.mmp
@@ -24,7 +24,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
@@ -50,6 +50,7 @@ SOURCE		pool_caching.c
 SOURCE		rand.c
 SOURCE		rbtree.c
 SOURCE		sock_common.c
+SOURCE		sock_qos_common.c
 SOURCE		types.c
 
 
@@ -71,8 +72,11 @@ SOURCE		os_timestamp_common.c
 SOURCE		os_time_unix.c
 SOURCE		os_timestamp_posix.c
 SOURCE		pool_policy_new.cpp
+SOURCE		ssl_sock_common.c
+SOURCE		ssl_sock_symbian.cpp
 SOURCE		sock_symbian.cpp
 SOURCE		sock_select_symbian.cpp
+SOURCE		sock_qos_symbian.cpp
 SOURCE		timer_symbian.cpp
 SOURCE		unicode_symbian.cpp
 
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjlib_test.mmp b/sflphone-common/libs/pjproject/build.symbian/pjlib_test.mmp
index 406b0d5093..e48a332cc7 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjlib_test.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjlib_test.mmp
@@ -10,7 +10,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION CW -lang c++
-OPTION ARMCC --cpp
+OPTION ARMCC --cpp --gnu
 OPTION GCC -x c++
 OPTION GCCE -x c++
 
@@ -46,6 +46,7 @@ SOURCE	select.c
 SOURCE	sleep.c
 SOURCE	sock.c
 SOURCE	sock_perf.c
+SOURCE	ssl_sock.c
 SOURCE	string.c
 SOURCE	test_wrap.cpp
 SOURCE	thread.c
@@ -68,7 +69,7 @@ SYSTEMINCLUDE	..\pjlib\include
 SYSTEMINCLUDE	\epoc32\include
 SYSTEMINCLUDE	\epoc32\include\libc
 
-LIBRARY		esock.lib insock.lib charconv.lib euser.lib estlib.lib 
+LIBRARY		esock.lib insock.lib charconv.lib euser.lib estlib.lib securesocket.lib 
 #ifdef WINSCW
 STATICLIBRARY   eexe.lib ecrt0.lib
 #endif
@@ -76,3 +77,4 @@ STATICLIBRARY   eexe.lib ecrt0.lib
 // Need a bit of mem for logging in the app.
 EPOCSTACKSIZE		32768
 
+CAPABILITY	NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjlib_util.mmp b/sflphone-common/libs/pjproject/build.symbian/pjlib_util.mmp
index 5dac2f8f9d..3eb3701ac9 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjlib_util.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjlib_util.mmp
@@ -24,7 +24,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC -x c++
 OPTION          GCCE -x c++
 
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjmedia.mmp b/sflphone-common/libs/pjproject/build.symbian/pjmedia.mmp
index 7dd9fc7965..b72934345a 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjmedia.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjmedia.mmp
@@ -30,7 +30,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjmedia_audiodev.mmp b/sflphone-common/libs/pjproject/build.symbian/pjmedia_audiodev.mmp
index da98b05eff..f4e25d210f 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjmedia_audiodev.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjmedia_audiodev.mmp
@@ -7,6 +7,7 @@ SOURCEPATH	..\pjmedia\src\pjmedia-audiodev
 // GCCE optimization setting
 //
 //OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjnath.mmp b/sflphone-common/libs/pjproject/build.symbian/pjnath.mmp
index 7168313d19..76b64dda88 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjnath.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjnath.mmp
@@ -17,6 +17,8 @@ TARGETTYPE 	lib
 
 #endif
 
+OPTION          ARMCC --gnu
+
 SOURCEPATH	..\pjnath\src\pjnath
 
 MACRO		PJ_M_I386=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjsdp.mmp b/sflphone-common/libs/pjproject/build.symbian/pjsdp.mmp
index 25f3db19fe..e165704ee7 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjsdp.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjsdp.mmp
@@ -24,7 +24,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjsip.mmp b/sflphone-common/libs/pjproject/build.symbian/pjsip.mmp
index 785a799f36..6269b47df9 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjsip.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjsip.mmp
@@ -27,7 +27,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
@@ -51,6 +51,7 @@ SOURCE	sip_transport_wrap.cpp
 SOURCE	sip_transport_loop.c
 SOURCE	sip_transport_tcp.c
 SOURCE	sip_transport_udp.c
+SOURCE	sip_transport_tls.c
 SOURCE	sip_ua_layer.c
 SOURCE	sip_uri.c
 SOURCE	sip_util_wrap.cpp
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjsip_simple.mmp b/sflphone-common/libs/pjproject/build.symbian/pjsip_simple.mmp
index a6ddbf2d13..9b83a9df97 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjsip_simple.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjsip_simple.mmp
@@ -27,7 +27,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
@@ -37,6 +37,7 @@ SOURCE	errno.c
 SOURCE	evsub.c
 SOURCE	evsub_msg.c
 SOURCE	iscomposing.c
+SOURCE	mwi.c
 SOURCE	pidf.c
 SOURCE	presence.c
 SOURCE	presence_body.c
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjsip_ua.mmp b/sflphone-common/libs/pjproject/build.symbian/pjsip_ua.mmp
index 59293049b3..609c0a3947 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjsip_ua.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjsip_ua.mmp
@@ -27,7 +27,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjstun_client.mmp b/sflphone-common/libs/pjproject/build.symbian/pjstun_client.mmp
index fedb7a250c..6ca5eabcae 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjstun_client.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjstun_client.mmp
@@ -2,6 +2,8 @@ TARGET 		pjstun_client.exe
 TARGETTYPE 	exe
 UID		0x0 0xA000000A
 
+OPTION          ARMCC --gnu
+
 SOURCEPATH	..\pjnath\src\pjstun-client
 
 MACRO		PJ_M_I386=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/pjsua_lib.mmp b/sflphone-common/libs/pjproject/build.symbian/pjsua_lib.mmp
index 0b19781957..ee7c6b0851 100644
--- a/sflphone-common/libs/pjproject/build.symbian/pjsua_lib.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/pjsua_lib.mmp
@@ -27,7 +27,7 @@ MACRO		PJ_SYMBIAN=1
 
 // Must compile as C++, otherwise exception would not work
 OPTION          CW -lang c++
-OPTION          ARMCC --cpp
+OPTION          ARMCC --cpp --gnu
 OPTION          GCC     -x c++
 OPTION          GCCE    -x c++
 
diff --git a/sflphone-common/libs/pjproject/build.symbian/symbian_audio.mmp b/sflphone-common/libs/pjproject/build.symbian/symbian_audio.mmp
index e53f4e8937..bba9ce5fa0 100644
--- a/sflphone-common/libs/pjproject/build.symbian/symbian_audio.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/symbian_audio.mmp
@@ -25,6 +25,7 @@ SOURCEPATH	..\pjmedia\src\pjmedia
 
 OPTION		CW -lang c++
 OPTION		GCCE -O2 -fno-unit-at-a-time
+OPTION          ARMCC --gnu
 
 MACRO		PJ_M_I386=1
 MACRO		PJ_SYMBIAN=1
diff --git a/sflphone-common/libs/pjproject/build.symbian/symbian_ua.mmp b/sflphone-common/libs/pjproject/build.symbian/symbian_ua.mmp
index 8ef9f73f31..9514cde3aa 100644
--- a/sflphone-common/libs/pjproject/build.symbian/symbian_ua.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/symbian_ua.mmp
@@ -9,6 +9,8 @@ UID			0x0 0xA000000D
 
 SOURCEPATH		..\pjsip-apps\src\symbian_ua
 
+OPTION			ARMCC --gnu
+
 MACRO			PJ_M_I386=1
 MACRO			PJ_SYMBIAN=1
 
@@ -69,7 +71,7 @@ STATICLIBRARY		libresample.lib
 	STATICLIBRARY   eexe.lib ecrt0.lib
 #endif
 
-LIBRARY			esock.lib insock.lib charconv.lib euser.lib estlib.lib commdb.lib apengine.lib 
+LIBRARY			esock.lib insock.lib charconv.lib euser.lib estlib.lib commdb.lib apengine.lib securesocket.lib 
 
 // The default 8KB seems to be insufficient with all bells and
 // whistles turned on
diff --git a/sflphone-common/libs/pjproject/build.symbian/symsndtest.mmp b/sflphone-common/libs/pjproject/build.symbian/symsndtest.mmp
index 415807df31..c729e1c52b 100644
--- a/sflphone-common/libs/pjproject/build.symbian/symsndtest.mmp
+++ b/sflphone-common/libs/pjproject/build.symbian/symsndtest.mmp
@@ -5,6 +5,8 @@ TARGET 			symsndtest.exe
 TARGETTYPE 		exe
 UID			0x0 0xA000000E
 
+OPTION			ARMCC --gnu
+
 SOURCEPATH		..\pjsip-apps\src\symsndtest
 
 MACRO			PJ_M_I386=1
diff --git a/sflphone-common/libs/pjproject/build/os-auto.mak b/sflphone-common/libs/pjproject/build/os-auto.mak
deleted file mode 100644
index 6fa43bda1b..0000000000
--- a/sflphone-common/libs/pjproject/build/os-auto.mak
+++ /dev/null
@@ -1,11 +0,0 @@
-# build/os-auto.mak.  Generated from os-auto.mak.in by configure.
-
-export OS_CFLAGS   := $(CC_DEF)PJ_AUTOCONF=1 -O2
-
-export OS_CXXFLAGS := $(CC_DEF)PJ_AUTOCONF=1 -O2 
-
-export OS_LDFLAGS  :=  -lm -luuid -lnsl -lrt -lpthread  -lasound -lssl -lcrypto
-
-export OS_SOURCES  := 
-
-
diff --git a/sflphone-common/libs/pjproject/config.guess b/sflphone-common/libs/pjproject/config.guess
deleted file mode 120000
index f42b0a5a40..0000000000
--- a/sflphone-common/libs/pjproject/config.guess
+++ /dev/null
@@ -1 +0,0 @@
-/usr/share/misc/config.guess
\ No newline at end of file
diff --git a/sflphone-common/libs/pjproject/config.guess b/sflphone-common/libs/pjproject/config.guess
new file mode 100755
index 0000000000..dff9e481b7
--- /dev/null
+++ b/sflphone-common/libs/pjproject/config.guess
@@ -0,0 +1,1317 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+#   Free Software Foundation, Inc.
+
+timestamp='2001-09-04'
+
+# This file 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# Please send patches to <config-patches@gnu.org>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int dummy(){}" > $dummy.c ;
+	for c in cc gcc c89 ; do
+	  ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+	  if test $? = 0 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	rm -f $dummy.c $dummy.o $dummy.rel ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# Netbsd (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	# Determine the machine/vendor (is the vendor relevant).
+	case "${UNAME_MACHINE}" in
+	    amiga) machine=m68k-unknown ;;
+	    arm32) machine=arm-unknown ;;
+	    atari*) machine=m68k-atari ;;
+	    sun3*) machine=m68k-sun ;;
+	    mac68k) machine=m68k-apple ;;
+	    macppc) machine=powerpc-apple ;;
+	    hp3[0-9][05]) machine=m68k-hp ;;
+	    ibmrt|romp-ibm) machine=romp-ibm ;;
+	    *) machine=${UNAME_MACHINE}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE}" in
+	    i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	if test $UNAME_RELEASE = "V4.0"; then
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+	fi
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	cat <<EOF >$dummy.s
+	.data
+\$Lformat:
+	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
+
+	.text
+	.globl main
+	.align 4
+	.ent main
+main:
+	.frame \$30,16,\$26,0
+	ldgp \$29,0(\$27)
+	.prologue 1
+	.long 0x47e03d80 # implver \$0
+	lda \$2,-1
+	.long 0x47e20c21 # amask \$2,\$1
+	lda \$16,\$Lformat
+	mov \$0,\$17
+	not \$1,\$18
+	jsr \$26,printf
+	ldgp \$29,0(\$26)
+	mov 0,\$16
+	jsr \$26,exit
+	.end main
+EOF
+	eval $set_cc_for_build
+	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+	if test "$?" = 0 ; then
+		case `./$dummy` in
+			0-0)
+				UNAME_MACHINE="alpha"
+				;;
+			1-0)
+				UNAME_MACHINE="alphaev5"
+				;;
+			1-1)
+				UNAME_MACHINE="alphaev56"
+				;;
+			1-101)
+				UNAME_MACHINE="alphapca56"
+				;;
+			2-303)
+				UNAME_MACHINE="alphaev6"
+				;;
+			2-307)
+				UNAME_MACHINE="alphaev67"
+				;;
+			2-1307)
+				UNAME_MACHINE="alphaev68"
+				;;
+		esac
+	fi
+	rm -f $dummy.s $dummy
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    arc64:OpenBSD:*:*)
+	echo mips64el-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hkmips:OpenBSD:*:*)
+	echo mips-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mips-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:NetBSD:*)
+	echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    sun3*:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD $dummy.c -o $dummy \
+	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && rm -f $dummy.c $dummy && exit 0
+	rm -f $dummy.c $dummy
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+		rm -f $dummy.c $dummy
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+              case "${HPUX_REV}" in
+                11.[0-9][0-9])
+                  if [ -x /usr/bin/getconf ]; then
+                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                        esac ;;
+                    esac
+                  fi ;;
+              esac
+              if [ "${HP_ARCH}" = "" ]; then
+	      eval $set_cc_for_build
+              sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+	    (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+	    if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+	    rm -f $dummy.c $dummy
+	fi ;;
+	esac
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
+	rm -f $dummy.c $dummy
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    hppa*:OpenBSD:*:*)
+	echo hppa-unknown-openbsd
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*X-MP:*:*:*)
+	echo xmp-cray-unicos
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3D:*:*:*)
+	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY-2:*:*:*)
+	echo cray2-cray-unicos
+        exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i386-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
+	  big)    echo mips-unknown-linux-gnu && exit 0 ;;
+	  little) echo mipsel-unknown-linux-gnu && exit 0 ;;
+	esac
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	ld_supported_targets=`cd /; ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;		
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	cat >$dummy.c <<EOF
+#include <features.h>
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+#  if __GLIBC__ >= 2
+    printf ("%s-pc-linux-gnu\n", argv[1]);
+#  else
+    printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+#  endif
+# else
+   printf ("%s-pc-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+  printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+	$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
+	rm -f $dummy.c $dummy
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes@openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	echo `uname -p`-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	if test "${UNAME_MACHINE}" = "x86pc"; then
+		UNAME_MACHINE=pc
+	fi
+	echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-[KW]:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/sflphone-common/libs/pjproject/config.sub b/sflphone-common/libs/pjproject/config.sub
deleted file mode 120000
index 04fd6e297d..0000000000
--- a/sflphone-common/libs/pjproject/config.sub
+++ /dev/null
@@ -1 +0,0 @@
-/usr/share/misc/config.sub
\ No newline at end of file
diff --git a/sflphone-common/libs/pjproject/config.sub b/sflphone-common/libs/pjproject/config.sub
new file mode 100755
index 0000000000..746ee208a1
--- /dev/null
+++ b/sflphone-common/libs/pjproject/config.sub
@@ -0,0 +1,1572 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-04-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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 2 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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| msp430-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	nios2*)
+		basic_machine=nios2-altera
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/sflphone-common/libs/pjproject/configure.ac b/sflphone-common/libs/pjproject/configure.ac
deleted file mode 100644
index bf1644033a..0000000000
--- a/sflphone-common/libs/pjproject/configure.ac
+++ /dev/null
@@ -1,5 +0,0 @@
-dnl Dummy configure.ac for autotools
-
-AC_INIT
-LT_INIT
-AC_OUTPUT
diff --git a/sflphone-common/libs/pjproject/libpj-sfl.pc.in b/sflphone-common/libs/pjproject/libpj-sfl.pc.in
deleted file mode 100644
index 8fa8d809cd..0000000000
--- a/sflphone-common/libs/pjproject/libpj-sfl.pc.in
+++ /dev/null
@@ -1,12 +0,0 @@
-# Package Information for pkg-config
-
-prefix=@PREFIX@
-exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
-includedir=${prefix}/include
-
-Name: libpj-sfl
-Description: Multimedia communication library
-Version: 0.5.10.3
-Libs: -L${libdir} -lpjsua-sfl -lpjsip-sfl -lpjmedia-sfl -lpjsip-ua-sfl -lpjsip-simple-sfl -lpjsip-ua-sfl -lpjmedia-codec-sfl -lpjlib-util-sfl -lpj-sfl
-Cflags: -I${includedir}
diff --git a/sflphone-common/libs/pjproject/pjlib-util/build/Makefile b/sflphone-common/libs/pjproject/pjlib-util/build/Makefile
index 7dd8a9b27c..ef0939af69 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjlib-util/build/Makefile
@@ -7,8 +7,8 @@ include $(PJDIR)/build/common.mak
 
 RULES_MAK := $(PJDIR)/build/rules.mak
 
-PJLIB_LIB:=$(PJDIR)/pjlib/lib/libpj-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJLIB_UTIL_LIB:=../lib/libpjlib-util-sfl-$(TARGET_NAME)$(LIBEXT)
+PJLIB_LIB:=$(PJDIR)/pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT)
+export PJLIB_UTIL_LIB:=../lib/libpjlib-util-$(TARGET_NAME)$(LIBEXT)
 
 ###############################################################################
 # Gather all flags.
diff --git a/sflphone-common/libs/pjproject/pjlib-util/build/os-auto.mak b/sflphone-common/libs/pjproject/pjlib-util/build/os-auto.mak
deleted file mode 100644
index fe7975b644..0000000000
--- a/sflphone-common/libs/pjproject/pjlib-util/build/os-auto.mak
+++ /dev/null
@@ -1,3 +0,0 @@
-# pjlib-util/build/os-auto.mak.  Generated from os-auto.mak.in by configure.
-export UTIL_TEST_OBJS = main.o
-
diff --git a/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h b/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h
index 84259301c0..f1e5b1e993 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h
+++ b/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #ifndef __PJLIB_UTIL_CONFIG_H__
 #define __PJLIB_UTIL_CONFIG_H__
@@ -59,7 +59,7 @@
  * (the #pj_dns_packet_dup() function).
  *
  * Generally name compression is desired, since it saves some memory (see
- * PJ_DNS_RESOLVER_RES_BUF_SIZE setting). However it comes at the expense of
+ * PJ_DNS_RESOLVER_RES_BUF_SIZE setting). However it comes at the expense of 
  * a little processing overhead to perform name scanning and also a little
  * bit more stack usage (8 bytes per entry on 32bit platform).
  *
@@ -84,7 +84,7 @@
 
 
 /**
- * Default retransmission delay, in miliseconds. The combination of
+ * Default retransmission delay, in miliseconds. The combination of 
  * retransmission delay and count determines the query timeout.
  *
  * Default: 2000 (2 seconds, according to RFC 1035)
@@ -106,8 +106,8 @@
 
 
 /**
- * Maximum life-time of DNS response in the resolver response cache,
- * in seconds. If the value is zero, then DNS response caching will be
+ * Maximum life-time of DNS response in the resolver response cache, 
+ * in seconds. If the value is zero, then DNS response caching will be 
  * disabled.
  *
  * Default is 300 seconds (5 minutes).
@@ -120,8 +120,8 @@
 
 /**
  * The life-time of invalid DNS response in the resolver response cache.
- * An invalid DNS response is a response which RCODE is non-zero and
- * response without any answer section. These responses can be put in
+ * An invalid DNS response is a response which RCODE is non-zero and 
+ * response without any answer section. These responses can be put in 
  * the cache too to minimize message round-trip.
  *
  * Default: 60 (one minute).
@@ -133,7 +133,7 @@
 #endif
 
 /**
- * The interval on which nameservers which are known to be good to be
+ * The interval on which nameservers which are known to be good to be 
  * probed again to determine whether they are still good. Note that
  * this applies to both active nameserver (the one currently being used)
  * and idle nameservers (good nameservers that are not currently selected).
diff --git a/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/srv_resolver.h b/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/srv_resolver.h
index 45e0535789..216e91b9e5 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/srv_resolver.h
+++ b/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/srv_resolver.h
@@ -104,19 +104,7 @@ typedef enum pj_dns_srv_option
      * this option is not specified, the SRV resolver will query
      * the DNS A record for the target instead.
      */
-    PJ_DNS_SRV_RESOLVE_AAAA	= 4,
-
-    /** 
-     * Specify if the resolver should fallback to getaddrinfo 
-     * under IPV4 mode if DNS A fails after DNS SRV.
-     */
-     PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV4 = 8,
-    
-    /** 
-     * Specify if the resolver should fallback to getaddrinfo 
-     * under IPV6 mode if DNS A fails after DNS SRV.
-     */
-    PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV6 = 16,
+    PJ_DNS_SRV_RESOLVE_AAAA	= 4
 
 } pj_dns_srv_option;
 
diff --git a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp
index 19d306e1d0..aece5356d7 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: resolver_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/srv_resolver.c b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/srv_resolver.c
index df15eb9033..8396349557 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/srv_resolver.c
+++ b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/srv_resolver.c
@@ -19,7 +19,6 @@
  */
 #include <pjlib-util/srv_resolver.h>
 #include <pjlib-util/errno.h>
-#include <pj/addr_resolv.h>
 #include <pj/array.h>
 #include <pj/assert.h>
 #include <pj/log.h>
@@ -584,53 +583,13 @@ static void dns_callback(void *user_data,
 	} else if (status != PJ_SUCCESS) {
 	    char errmsg[PJ_ERR_MSG_SIZE];
 
-	    if ((query_job->option & 
-	     (PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV4 | PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV6)))
-	    {
-	        pj_strerror(status, errmsg, sizeof(errmsg));
-            PJ_LOG(4,(query_job->objname, 
-                      "DNS A record resolution failed: %s,"
-                      " trying getaddrinfo()", 
-        	           errmsg));
-        	           
-            pj_addrinfo ai;
-    	    unsigned count;
-        	int af;
-       	
-                if ((query_job->option & PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV6)) {
-        	    af = pj_AF_INET6();
-        	} else {
-	            af = pj_AF_INET();
-        	}   
-        	
-        	count = 1;   
-            status = pj_getaddrinfo(af, &query_job->domain_part, &count, &ai);
-            if (status != PJ_SUCCESS) {     
-                query_job->last_error = status;
-                pj_strerror(status, errmsg, sizeof(errmsg));
-                PJ_LOG(4,(query_job->objname, "DNS resolution failed with getaddrinfo(): %s", 
-            	          errmsg));
-            } else {
-
-                if (srv->addr_cnt < ADDR_MAX_COUNT) {
-                    srv->addr[srv->addr_cnt++].s_addr = ai.ai_addr.ipv4.sin_addr.s_addr;
-                }
-                
-            	PJ_LOG(5,(query_job->objname, 
-                          "DNS getaddrinfo() for %.*s: %s",
-                          (int)srv->target_name.slen, 
-                          srv->target_name.ptr,
-                          pj_inet_ntoa(srv->addr[srv->addr_cnt])));
-            }
-	    } else {
-             /* Update last error */
-            query_job->last_error = status;
-            
-            /* Log error */
-            pj_strerror(status, errmsg, sizeof(errmsg));
-            PJ_LOG(4,(query_job->objname, "DNS A record resolution failed: %s", 
-                      errmsg));
-	    }
+	    /* Update last error */
+	    query_job->last_error = status;
+
+	    /* Log error */
+	    pj_strerror(status, errmsg, sizeof(errmsg));
+	    PJ_LOG(4,(query_job->objname, "DNS A record resolution failed: %s", 
+		      errmsg));
 	}
 
 	++query_job->host_resolved;
diff --git a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp
index 66c9273931..b33e4d3cf1 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: xml_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjlib/build/Makefile b/sflphone-common/libs/pjproject/pjlib/build/Makefile
index 5fed97cd5c..a3482e005e 100644
--- a/sflphone-common/libs/pjproject/pjlib/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjlib/build/Makefile
@@ -4,7 +4,7 @@ include $(PJDIR)/build/common.mak
 RULES_MAK := $(PJDIR)/build/rules.mak
 
 
-export PJLIB_LIB := ../lib/libpj-sfl-$(TARGET_NAME)$(LIBEXT)
+export PJLIB_LIB := ../lib/libpj-$(TARGET_NAME)$(LIBEXT)
 
 ###############################################################################
 # Gather all flags.
@@ -25,7 +25,8 @@ export PJLIB_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
 	activesock.o array.o config.o ctype.o errno.o except.o fifobuf.o \
 	guid.o hash.o ip_helper_generic.o list.o lock.o log.o os_time_common.o \
 	pool.o pool_buf.o pool_caching.o pool_dbg.o rand.o \
-	rbtree.o sock_common.o string.o timer.o types.o
+	rbtree.o sock_common.o sock_qos_common.o sock_qos_bsd.o \
+	ssl_sock_common.o ssl_sock_ossl.o string.o timer.o types.o
 export PJLIB_CFLAGS += $(_CFLAGS)
 
 ###############################################################################
@@ -36,7 +37,7 @@ export TEST_OBJS += activesock.o atomic.o echo_clt.o errno.o exception.o \
 		    fifobuf.o file.o hash_test.o ioq_perf.o ioq_udp.o \
 		    ioq_unreg.o ioq_tcp.o \
 		    list.o mutex.o os.o pool.o pool_perf.o rand.o rbtree.o \
-		    select.o sleep.o sock.o sock_perf.o \
+		    select.o sleep.o sock.o sock_perf.o ssl_sock.o \
 		    string.o test.o thread.o timer.o timestamp.o \
 		    udp_echo_srv_sync.o udp_echo_srv_ioqueue.o \
 		    util.o
diff --git a/sflphone-common/libs/pjproject/pjlib/build/cacert.pem b/sflphone-common/libs/pjproject/pjlib/build/cacert.pem
new file mode 100644
index 0000000000..0a2ee45bd6
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/build/cacert.pem
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgIJAPqAwYU5OQLXMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNV
+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMQ4wDAYDVQQKDAVwanNpcDESMBAG
+A1UEAwwJcGpzaXAubGFiMB4XDTA5MTAyMjE3MTczN1oXDTE5MTAyMDE3MTczN1ow
+RjELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxDjAMBgNVBAoMBXBq
+c2lwMRIwEAYDVQQDDAlwanNpcC5sYWIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDWWvnL+oSC0Q6OwGLt2YuhXTEzIVv3B+SGQ7tajB6H3WXVeq+1NmU9
+Yzca33g4FRrU7n4smYmKLzm1aniBhNmJjA+t+gbyizKnLMaCLoG52tUoULcANGKU
+aGwlmvZFugDn2eVg6UfUfRzEGbV3q3a/PzSsOEPwsMeF3YMQJPhkoyPQLtWgUXgP
+89Nyq3XjGGtw/qmUgQjE8a6/P0yXc+myI0hmApmZ9nB3YmlB5W3q6WoU2gGhLXf4
+12rH/LgdnPhM4ijS554Kv9EcUDdQTTrm6bYg66tj+qTet7DolUOlTZ3vKpuCK3tt
+eK9CbNPVzsMsB3yCALSLzQ347pIwfLaJAgMBAAGjUDBOMB0GA1UdDgQWBBRE/VNp
+kNQmLEXKQ+NM4bOVj95zYTAfBgNVHSMEGDAWgBRE/VNpkNQmLEXKQ+NM4bOVj95z
+YTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCj/gzJKTOZDEBD+zr7
+lvbVctiYE9o8ObxZQsnl/6zI2V9H/2yc1sqQyjBupzw6c37ehvk30yIyUfD3ts87
+2xaJ5VgtgUI3FI5DQ+ASyQXmDawUEmXIGqHb2gDrXBQLd6uMpvNDNW+7TouuniyA
+F12JUCNITeXaVJ0c8d4A9J9DlszBfYUzI45yIQu1gbpnpH74Sp/hG77EMxrRau+x
+EFFmV7gAmkCgOBnXm8jTKqNre/GfLfO7w2xoLsubSLnK46U3iLGBIJJRVGu3UQuN
+k1o7CiIKf0SSWj1bQI99ipTj8obBKRqj1nSbgKF/U6FIfd8DGcVvbJCSAG2czzyA
+5tdA
+-----END CERTIFICATE-----
diff --git a/sflphone-common/libs/pjproject/pjlib/build/os-auto.mak b/sflphone-common/libs/pjproject/pjlib/build/os-auto.mak
deleted file mode 100644
index fc6b33eb28..0000000000
--- a/sflphone-common/libs/pjproject/pjlib/build/os-auto.mak
+++ /dev/null
@@ -1,35 +0,0 @@
-# pjlib/build/os-auto.mak.  Generated from os-auto.mak.in by configure.
-
-# Determine OS specific files
-AC_OS_OBJS=ioqueue_select.o file_access_unistd.o file_io_ansi.o os_core_unix.o os_error_unix.o os_time_unix.o os_timestamp_posix.o guid_uuid.o
-
-#
-# PJLIB_OBJS specified here are object files to be included in PJLIB
-# (the library) for this specific operating system. Object files common 
-# to all operating systems should go in Makefile instead.
-#
-export PJLIB_OBJS +=	$(AC_OS_OBJS) \
-			addr_resolv_sock.o \
-			log_writer_stdout.o \
-			os_timestamp_common.o \
-			pool_policy_malloc.o sock_bsd.o sock_select.o
-
-#
-# TEST_OBJS are operating system specific object files to be included in
-# the test application.
-#
-export TEST_OBJS +=	main.o
-
-#
-# Additional LDFLAGS for pjlib-test
-#
-export TEST_LDFLAGS +=  -lm -luuid -lnsl -lrt -lpthread  -lasound -lssl -lcrypto
-
-#
-# TARGETS are make targets in the Makefile, to be executed for this given
-# operating system.
-#
-export TARGETS	    =	pjlib pjlib-test
-
-
-
diff --git a/sflphone-common/libs/pjproject/pjlib/build/os-win32.mak b/sflphone-common/libs/pjproject/pjlib/build/os-win32.mak
index b495bb2126..0290fea955 100644
--- a/sflphone-common/libs/pjproject/pjlib/build/os-win32.mak
+++ b/sflphone-common/libs/pjproject/pjlib/build/os-win32.mak
@@ -13,8 +13,8 @@ export PJLIB_OBJS += 	addr_resolv_sock.o guid_win32.o  \
 			os_timestamp_win32.o \
 			pool_policy_malloc.o sock_bsd.o sock_select.o
 
-export PJLIB_OBJS +=	ioqueue_winnt.o
-#export PJLIB_OBJS +=	ioqueue_select.o
+#export PJLIB_OBJS +=	ioqueue_winnt.o
+export PJLIB_OBJS +=	ioqueue_select.o
 
 export PJLIB_OBJS +=	file_io_win32.o file_access_win32.o
 #export PJLIB_OBJS +=	file_io_ansi.o
diff --git a/sflphone-common/libs/pjproject/pjlib/build/pjlib.dsp b/sflphone-common/libs/pjproject/pjlib/build/pjlib.dsp
index 39d800cd26..6977f8a932 100644
--- a/sflphone-common/libs/pjproject/pjlib/build/pjlib.dsp
+++ b/sflphone-common/libs/pjproject/pjlib/build/pjlib.dsp
@@ -240,28 +240,11 @@ SOURCE=..\src\pj\ioqueue_common_abs.h
 # Begin Source File
 
 SOURCE=..\src\pj\ioqueue_select.c
-
-!IF  "$(CFG)" == "pjlib - Win32 Release"
-
-# PROP Exclude_From_Build 1
-
-!ELSEIF  "$(CFG)" == "pjlib - Win32 Debug"
-
-!ENDIF 
-
 # End Source File
 # Begin Source File
 
 SOURCE=..\src\pj\ioqueue_winnt.c
-
-!IF  "$(CFG)" == "pjlib - Win32 Release"
-
-!ELSEIF  "$(CFG)" == "pjlib - Win32 Debug"
-
 # PROP Exclude_From_Build 1
-
-!ENDIF 
-
 # End Source File
 # Begin Source File
 
@@ -341,10 +324,26 @@ SOURCE=..\src\pj\sock_common.c
 # End Source File
 # Begin Source File
 
+SOURCE=..\src\pj\sock_qos_bsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pj\sock_qos_common.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\src\pj\sock_select.c
 # End Source File
 # Begin Source File
 
+SOURCE=..\src\pj\ssl_sock_common.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pj\ssl_sock_ossl.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\src\pj\string.c
 # End Source File
 # Begin Source File
@@ -589,10 +588,18 @@ SOURCE=..\include\pj\sock.h
 # End Source File
 # Begin Source File
 
+SOURCE=..\include\pj\sock_qos.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\include\pj\sock_select.h
 # End Source File
 # Begin Source File
 
+SOURCE=..\include\pj\ssl_sock.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\include\pj\string.h
 # End Source File
 # Begin Source File
diff --git a/sflphone-common/libs/pjproject/pjlib/build/pjlib.vcproj b/sflphone-common/libs/pjproject/pjlib/build/pjlib.vcproj
index 2f0360398a..d151dfbbf5 100644
--- a/sflphone-common/libs/pjproject/pjlib/build/pjlib.vcproj
+++ b/sflphone-common/libs/pjproject/pjlib/build/pjlib.vcproj
@@ -34,11 +34,11 @@
 	<Configurations>
 		<Configuration
 			Name="Debug|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
 			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -57,8 +57,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -91,10 +91,10 @@
 		</Configuration>
 		<Configuration
 			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -113,9 +113,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -129,7 +129,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -157,10 +157,10 @@
 		</Configuration>
 		<Configuration
 			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -179,9 +179,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -195,7 +195,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -222,12 +222,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -246,8 +245,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -261,6 +261,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -272,18 +273,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -302,9 +311,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -318,7 +327,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -345,11 +354,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -368,9 +377,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -384,7 +393,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -411,12 +420,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -435,8 +443,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -450,6 +459,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -461,18 +471,27 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -491,9 +510,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -507,7 +525,6 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -519,26 +536,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -557,9 +566,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -573,7 +582,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -600,12 +609,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -624,8 +632,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -639,6 +648,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -650,18 +660,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -680,9 +698,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -696,7 +714,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -723,11 +741,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -746,9 +764,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -762,7 +780,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -789,12 +807,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -813,8 +830,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -828,6 +846,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -839,18 +858,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -869,9 +896,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -885,7 +912,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -912,11 +939,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -935,9 +963,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -951,7 +978,6 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -963,27 +989,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1002,8 +1019,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1017,6 +1035,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1028,18 +1047,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1058,9 +1085,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1074,7 +1101,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1101,11 +1128,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1124,9 +1151,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1140,7 +1167,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1167,11 +1194,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1190,9 +1217,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1206,7 +1233,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1233,11 +1260,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1256,9 +1283,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1272,7 +1299,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1299,11 +1326,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1322,9 +1349,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1338,7 +1365,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1365,11 +1392,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1388,9 +1416,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1404,7 +1431,6 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1416,26 +1442,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1454,9 +1472,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1470,7 +1488,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1497,11 +1515,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1520,9 +1538,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1536,7 +1554,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1563,11 +1581,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1586,9 +1604,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1602,7 +1620,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1629,11 +1647,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1652,9 +1670,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1668,7 +1686,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1695,11 +1713,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1718,9 +1736,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1734,7 +1752,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1761,11 +1779,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1784,9 +1802,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1800,7 +1818,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1827,11 +1845,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1850,9 +1869,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1866,7 +1884,6 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1878,26 +1895,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1916,9 +1925,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1932,7 +1941,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1959,11 +1968,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1982,9 +1991,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1998,7 +2007,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2025,11 +2034,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2048,9 +2057,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2064,7 +2073,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2091,11 +2100,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2114,9 +2123,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2130,7 +2139,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2157,11 +2166,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2180,9 +2189,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2196,7 +2205,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2223,11 +2232,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2246,9 +2255,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2262,7 +2271,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2289,11 +2298,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2312,9 +2322,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2328,7 +2337,6 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2340,26 +2348,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2378,9 +2378,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2394,7 +2394,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2421,11 +2421,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2444,9 +2444,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2460,7 +2460,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2487,11 +2487,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2510,9 +2510,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2526,7 +2526,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2553,11 +2553,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2576,9 +2576,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2592,7 +2592,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2619,11 +2619,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2642,9 +2642,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2658,7 +2658,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2686,10 +2686,10 @@
 		</Configuration>
 		<Configuration
 			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2708,9 +2708,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2724,7 +2724,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -3256,17 +3256,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Win32"
+					Name="Debug|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3274,7 +3272,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3282,25 +3280,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Win32"
+					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3308,17 +3306,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Win32"
+					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3326,7 +3322,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3334,17 +3330,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
+					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3352,25 +3346,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Win32"
+					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3378,7 +3372,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3386,7 +3380,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3394,7 +3388,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3402,7 +3396,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3410,15 +3404,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3426,7 +3422,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3434,7 +3430,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3442,7 +3438,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3450,7 +3446,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3458,7 +3454,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3466,15 +3462,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3482,7 +3480,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3490,7 +3488,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3498,7 +3496,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3506,7 +3504,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3514,7 +3512,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3522,15 +3520,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Release-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3538,7 +3538,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3546,7 +3546,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3554,7 +3554,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3562,7 +3562,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3840,17 +3840,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Win32"
+					Name="Debug|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3858,7 +3856,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3866,25 +3864,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Win32"
+					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3892,17 +3890,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Win32"
+					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3910,7 +3906,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3918,17 +3914,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
+					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3936,25 +3930,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Win32"
+					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3962,7 +3956,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3970,7 +3964,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3978,7 +3972,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3986,7 +3980,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3994,15 +3988,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4010,7 +4006,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4018,7 +4014,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4026,7 +4022,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4034,7 +4030,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4042,7 +4038,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4050,15 +4046,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4066,7 +4064,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4074,7 +4072,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4082,7 +4080,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4090,7 +4088,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4098,7 +4096,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4106,15 +4104,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Release-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4122,7 +4122,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4130,7 +4130,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4138,7 +4138,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4146,7 +4146,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4180,7 +4180,6 @@
 				</FileConfiguration>
 				<FileConfiguration
 					Name="Release|Win32"
-					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
@@ -4199,7 +4198,6 @@
 				</FileConfiguration>
 				<FileConfiguration
 					Name="Release-Dynamic|Win32"
-					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
@@ -4218,7 +4216,6 @@
 				</FileConfiguration>
 				<FileConfiguration
 					Name="Release-Static|Win32"
-					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
@@ -4257,16 +4254,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Win32"
+					Name="Debug|Pocket PC 2003 (ARMV4)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4274,7 +4270,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4282,25 +4278,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Win32"
+					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4308,16 +4304,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Win32"
+					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4325,7 +4320,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4333,17 +4328,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
+					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4351,24 +4344,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Win32"
+					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4376,7 +4370,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4384,7 +4378,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4392,7 +4386,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4400,7 +4394,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4408,15 +4402,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4424,7 +4420,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4432,7 +4428,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4440,7 +4436,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4448,7 +4444,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4456,7 +4452,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4464,15 +4460,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4480,7 +4478,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4488,7 +4486,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4496,7 +4494,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4504,7 +4502,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4512,7 +4510,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4520,15 +4518,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Release-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4536,7 +4536,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4544,7 +4544,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4552,7 +4552,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4560,7 +4560,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -5570,6 +5570,22 @@
 				RelativePath="..\src\pj\sock_common.c"
 				>
 			</File>
+			<File
+				RelativePath="..\src\pj\sock_qos_bsd.c"
+				>
+			</File>
+			<File
+				RelativePath="..\src\pj\sock_qos_common.c"
+				>
+			</File>
+			<File
+				RelativePath="..\src\pj\sock_qos_dummy.c"
+				>
+			</File>
+			<File
+				RelativePath="..\src\pj\sock_qos_wm.c"
+				>
+			</File>
 			<File
 				RelativePath="..\src\pj\sock_select.c"
 				>
@@ -5628,6 +5644,14 @@
 					/>
 				</FileConfiguration>
 			</File>
+			<File
+				RelativePath="..\src\pj\ssl_sock_common.c"
+				>
+			</File>
+			<File
+				RelativePath="..\src\pj\ssl_sock_ossl.c"
+				>
+			</File>
 			<File
 				RelativePath="..\src\pj\string.c"
 				>
@@ -5893,17 +5917,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -5911,7 +5933,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -5919,25 +5941,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -5945,17 +5967,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -5963,7 +5983,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -5971,17 +5991,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -5989,25 +6007,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6015,7 +6033,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6023,7 +6041,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6031,7 +6049,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6039,7 +6057,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6047,15 +6065,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6063,7 +6083,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6071,7 +6091,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6079,7 +6099,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6087,7 +6107,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6095,7 +6115,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6103,15 +6123,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6119,7 +6141,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6127,7 +6149,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6135,7 +6157,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6143,7 +6165,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6151,7 +6173,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6159,15 +6181,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6175,7 +6199,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6183,7 +6207,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6191,7 +6215,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6199,7 +6223,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6245,17 +6269,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6263,7 +6285,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6271,25 +6293,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6297,17 +6319,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6315,7 +6335,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6323,17 +6343,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6341,25 +6359,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6367,7 +6385,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6375,7 +6393,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6383,7 +6401,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6391,7 +6409,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6399,15 +6417,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6415,7 +6435,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6423,7 +6443,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6431,7 +6451,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6439,7 +6459,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6447,7 +6467,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6455,15 +6475,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6471,7 +6493,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6479,7 +6501,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6487,7 +6509,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6495,7 +6517,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6503,7 +6525,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6511,15 +6533,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6527,7 +6551,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6535,7 +6559,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6543,7 +6567,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6551,7 +6575,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6597,17 +6621,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6615,7 +6637,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6623,25 +6645,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6649,17 +6671,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6667,7 +6687,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6675,17 +6695,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6693,25 +6711,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6719,7 +6737,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6727,7 +6745,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6735,7 +6753,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6743,7 +6761,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6751,15 +6769,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6767,7 +6787,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6775,7 +6795,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6783,7 +6803,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6791,7 +6811,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6799,7 +6819,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6807,15 +6827,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6823,7 +6845,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6831,7 +6853,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6839,7 +6861,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6847,7 +6869,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6855,7 +6877,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6863,15 +6885,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6879,7 +6903,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6887,7 +6911,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6895,7 +6919,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6903,7 +6927,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6949,17 +6973,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6967,7 +6989,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -6975,25 +6997,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7001,17 +7023,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7019,7 +7039,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7027,17 +7047,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7045,25 +7063,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7071,7 +7089,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7079,7 +7097,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7087,7 +7105,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7095,7 +7113,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7103,15 +7121,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7119,7 +7139,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7127,7 +7147,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7135,7 +7155,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7143,7 +7163,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7151,7 +7171,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7159,15 +7179,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7175,7 +7197,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7183,7 +7205,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7191,7 +7213,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7199,7 +7221,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7207,7 +7229,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7215,15 +7237,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7231,7 +7255,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7239,7 +7263,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7247,7 +7271,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7255,7 +7279,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7299,7 +7323,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7307,7 +7331,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7315,7 +7339,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7323,7 +7347,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7331,7 +7355,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7339,7 +7363,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7347,7 +7371,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7355,7 +7379,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7363,7 +7387,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7371,7 +7395,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7379,7 +7403,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7387,7 +7411,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7395,7 +7419,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7403,7 +7427,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7411,7 +7435,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7419,7 +7443,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7427,7 +7451,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7435,7 +7459,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7443,7 +7467,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7451,7 +7475,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7459,7 +7483,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7467,7 +7491,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7475,7 +7499,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7483,7 +7507,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7491,7 +7515,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7499,7 +7523,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7507,7 +7531,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7515,7 +7539,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7523,7 +7547,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7531,7 +7555,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7539,7 +7563,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7547,7 +7571,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7555,7 +7579,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7563,7 +7587,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7571,7 +7595,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7579,7 +7603,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7587,7 +7611,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7595,7 +7619,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7641,17 +7665,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7659,7 +7681,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7667,25 +7689,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7693,17 +7715,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7711,7 +7731,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7719,17 +7739,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7737,25 +7755,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7763,7 +7781,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7771,7 +7789,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7779,7 +7797,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7787,7 +7805,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7795,15 +7813,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7811,7 +7831,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7819,7 +7839,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7827,7 +7847,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7835,7 +7855,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7843,7 +7863,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7851,15 +7871,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7867,7 +7889,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7875,7 +7897,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7883,7 +7905,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7891,7 +7913,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7899,7 +7921,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7907,15 +7929,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7923,7 +7947,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7931,7 +7955,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7939,7 +7963,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7947,7 +7971,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -7993,17 +8017,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8011,7 +8033,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8019,25 +8041,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8045,17 +8067,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8063,7 +8083,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8071,17 +8091,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8089,25 +8107,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8115,7 +8133,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8123,7 +8141,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8131,7 +8149,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8139,7 +8157,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8147,15 +8165,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8163,7 +8183,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8171,7 +8191,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8179,7 +8199,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8187,7 +8207,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8195,7 +8215,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8203,15 +8223,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8219,7 +8241,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8227,7 +8249,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8235,7 +8257,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8243,7 +8265,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8251,7 +8273,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8259,15 +8281,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8275,7 +8299,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8283,7 +8307,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8291,7 +8315,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8299,7 +8323,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8345,17 +8369,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8363,7 +8385,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8371,25 +8393,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8397,17 +8419,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8415,7 +8435,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8423,17 +8443,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8441,25 +8459,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8467,7 +8485,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8475,7 +8493,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8483,7 +8501,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8491,7 +8509,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8499,15 +8517,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8515,7 +8535,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8523,7 +8543,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8531,7 +8551,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8539,7 +8559,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8547,7 +8567,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8555,15 +8575,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8571,7 +8593,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8579,7 +8601,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8587,7 +8609,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8595,7 +8617,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8603,7 +8625,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8611,15 +8633,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8627,7 +8651,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8635,7 +8659,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8643,7 +8667,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8651,7 +8675,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8697,17 +8721,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8715,7 +8737,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8723,25 +8745,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8749,17 +8771,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8767,7 +8787,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8775,17 +8795,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8793,25 +8811,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8819,7 +8837,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8827,7 +8845,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8835,7 +8853,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8843,7 +8861,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8851,15 +8869,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8867,7 +8887,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8875,7 +8895,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8883,7 +8903,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8891,7 +8911,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8899,7 +8919,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8907,15 +8927,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8923,7 +8945,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8931,7 +8953,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8939,7 +8961,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8947,7 +8969,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8955,7 +8977,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8963,15 +8985,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8979,7 +9003,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8987,7 +9011,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -8995,7 +9019,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9003,7 +9027,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9049,17 +9073,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9067,7 +9089,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9075,25 +9097,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9101,17 +9123,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9119,7 +9139,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9127,17 +9147,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9145,25 +9163,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9171,7 +9189,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9179,7 +9197,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9187,7 +9205,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9195,7 +9213,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9203,15 +9221,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9219,7 +9239,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9227,7 +9247,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9235,7 +9255,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9243,7 +9263,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9251,7 +9271,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9259,15 +9279,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9275,7 +9297,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9283,7 +9305,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9291,7 +9313,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9299,7 +9321,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9307,7 +9329,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9315,15 +9337,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9331,7 +9355,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9339,7 +9363,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9347,7 +9371,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9355,7 +9379,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9401,17 +9425,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9419,7 +9441,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9427,25 +9449,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9453,17 +9475,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9471,7 +9491,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9479,17 +9499,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9497,25 +9515,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9523,7 +9541,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9531,7 +9549,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9539,7 +9557,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9547,7 +9565,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9555,15 +9573,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9571,7 +9591,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9579,7 +9599,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9587,7 +9607,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9595,7 +9615,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9603,7 +9623,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9611,15 +9631,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9627,7 +9649,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9635,7 +9657,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9643,7 +9665,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9651,7 +9673,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9659,7 +9681,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9667,15 +9689,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9683,7 +9707,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9691,7 +9715,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9699,7 +9723,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9707,7 +9731,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9753,17 +9777,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9771,7 +9793,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9779,25 +9801,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9805,17 +9827,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9823,7 +9843,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9831,17 +9851,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9849,25 +9867,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9875,7 +9893,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9883,7 +9901,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9891,7 +9909,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9899,7 +9917,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9907,15 +9925,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9923,7 +9943,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9931,7 +9951,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9939,7 +9959,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9947,7 +9967,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9955,7 +9975,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9963,15 +9983,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9979,7 +10001,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9987,7 +10009,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -9995,7 +10017,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10003,7 +10025,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10011,7 +10033,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10019,15 +10041,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10035,7 +10059,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10043,7 +10067,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10051,7 +10075,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10059,7 +10083,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10105,17 +10129,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10123,7 +10145,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10131,25 +10153,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10157,17 +10179,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10175,7 +10195,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10183,17 +10203,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10201,25 +10219,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10227,7 +10245,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10235,7 +10253,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10243,7 +10261,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10251,7 +10269,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10259,15 +10277,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10275,7 +10295,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10283,7 +10303,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10291,7 +10311,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10299,7 +10319,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10307,7 +10327,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10315,15 +10335,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10331,7 +10353,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10339,7 +10361,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10347,7 +10369,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10355,7 +10377,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10363,7 +10385,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10371,15 +10393,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10387,7 +10411,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10395,7 +10419,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10403,7 +10427,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10411,7 +10435,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10457,17 +10481,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10475,7 +10497,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10483,25 +10505,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10509,17 +10531,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10527,7 +10547,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10535,17 +10555,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10553,25 +10571,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10579,7 +10597,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10587,7 +10605,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10595,7 +10613,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10603,7 +10621,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10611,15 +10629,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10627,7 +10647,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10635,7 +10655,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10643,7 +10663,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10651,7 +10671,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10659,7 +10679,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10667,15 +10687,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10683,7 +10705,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10691,7 +10713,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10699,7 +10721,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10707,7 +10729,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10715,7 +10737,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10723,15 +10745,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10739,7 +10763,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10747,7 +10771,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10755,7 +10779,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10763,7 +10787,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10809,17 +10833,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10827,7 +10849,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10835,25 +10857,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10861,17 +10883,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10879,7 +10899,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10887,17 +10907,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10905,25 +10923,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10931,7 +10949,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10939,7 +10957,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10947,7 +10965,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10955,7 +10973,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10963,15 +10981,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10979,7 +10999,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10987,7 +11007,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -10995,7 +11015,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11003,7 +11023,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11011,7 +11031,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11019,15 +11039,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11035,7 +11057,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11043,7 +11065,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11051,7 +11073,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11059,7 +11081,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11067,7 +11089,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11075,15 +11097,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11091,7 +11115,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11099,7 +11123,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11107,7 +11131,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11115,7 +11139,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11161,17 +11185,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Win32"
+						Name="Debug|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11179,7 +11201,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11187,25 +11209,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Win32"
+						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11213,17 +11235,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Win32"
+						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11231,7 +11251,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Release|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11239,17 +11259,15 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
+						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11257,25 +11275,25 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Win32"
+						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11283,7 +11301,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11291,7 +11309,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11299,7 +11317,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11307,7 +11325,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11315,15 +11333,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11331,7 +11351,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11339,7 +11359,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11347,7 +11367,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11355,7 +11375,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11363,7 +11383,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11371,15 +11391,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
+						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11387,7 +11409,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11395,7 +11417,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11403,7 +11425,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11411,7 +11433,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11419,7 +11441,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11427,15 +11449,17 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+						Name="Release-Static|Win32"
 						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11443,7 +11467,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11451,7 +11475,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Pocket PC 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11459,7 +11483,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Smartphone 2003 (ARMV4)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11467,7 +11491,7 @@
 						/>
 					</FileConfiguration>
 					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 						ExcludedFromBuild="true"
 						>
 						<Tool
@@ -11613,10 +11637,18 @@
 				RelativePath="..\include\pj\sock.h"
 				>
 			</File>
+			<File
+				RelativePath="..\include\pj\sock_qos.h"
+				>
+			</File>
 			<File
 				RelativePath="..\include\pj\sock_select.h"
 				>
 			</File>
+			<File
+				RelativePath="..\include\pj\ssl_sock.h"
+				>
+			</File>
 			<File
 				RelativePath="..\include\pj\string.h"
 				>
diff --git a/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.dsp b/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.dsp
index 8252f12fd3..067dea1d25 100644
--- a/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.dsp
+++ b/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.dsp
@@ -74,7 +74,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 netapi32.lib mswsock.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"../bin/pjlib-test-i386-win32-vc6-debug.exe" /pdbtype:sept
+# ADD LINK32 netapi32.lib mswsock.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  libeay32MT.lib ssleay32MT.lib /nologo /subsystem:console /debug /machine:I386 /out:"../bin/pjlib-test-i386-win32-vc6-debug.exe" /pdbtype:sept
 
 !ENDIF 
 
@@ -193,6 +193,10 @@ SOURCE="..\src\pjlib-test\sock_perf.c"
 # End Source File
 # Begin Source File
 
+SOURCE="..\src\pjlib-test\ssl_sock.c"
+# End Source File
+# Begin Source File
+
 SOURCE="..\src\pjlib-test\string.c"
 # End Source File
 # Begin Source File
diff --git a/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.vcproj b/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.vcproj
index 6156d7ce7a..050f67920c 100644
--- a/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.vcproj
+++ b/sflphone-common/libs/pjproject/pjlib/build/pjlib_test.vcproj
@@ -34,11 +34,11 @@
 	<Configurations>
 		<Configuration
 			Name="Debug|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
 			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -57,8 +57,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_CONSOLE;"

 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_CONSOLE;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -73,7 +73,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -102,10 +102,10 @@
 		</Configuration>
 		<Configuration
 			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -140,7 +140,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -168,10 +168,10 @@
 		</Configuration>
 		<Configuration
 			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -206,7 +206,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -233,12 +233,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="1"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -257,7 +256,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_CONSOLE;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
 				PrecompiledHeaderFile=""
 			/>
@@ -272,15 +271,12 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="ws2.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -288,24 +284,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
+				Name="VCPostBuildEventTool"
 			/>
-			<Tool
-				Name="VCWebDeploymentTool"
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
 			/>
-			<Tool
-				Name="VCPostBuildEventTool"
+			<DebuggerTool
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Smartphone 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -340,7 +338,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -367,11 +365,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -406,7 +404,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -433,12 +431,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="1"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -457,7 +454,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_CONSOLE;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
 				PrecompiledHeaderFile=""
 			/>
@@ -472,15 +469,12 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="ws2.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -488,24 +482,27 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
+				Name="VCPostBuildEventTool"
 			/>
-			<Tool
-				Name="VCWebDeploymentTool"
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
 			/>
-			<Tool
-				Name="VCPostBuildEventTool"
+			<DebuggerTool
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Win32"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -524,8 +521,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_CONSOLE;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -539,12 +536,15 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -552,26 +552,24 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCPostBuildEventTool"
+				Name="VCAppVerifierTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
+			<Tool
+				Name="VCWebDeploymentTool"
 			/>
-			<DebuggerTool
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -606,7 +604,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -633,12 +631,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="1"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -657,7 +654,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_CONSOLE;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
 				PrecompiledHeaderFile=""
 			/>
@@ -672,15 +669,12 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="ws2.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -688,24 +682,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
+				Name="VCPostBuildEventTool"
 			/>
-			<Tool
-				Name="VCWebDeploymentTool"
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
 			/>
-			<Tool
-				Name="VCPostBuildEventTool"
+			<DebuggerTool
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -740,7 +736,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -767,11 +763,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Smartphone 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -806,7 +802,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -833,12 +829,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="1"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -857,7 +852,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_CONSOLE;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
 				PrecompiledHeaderFile=""
 			/>
@@ -872,15 +867,12 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="ws2.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -888,24 +880,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
+				Name="VCPostBuildEventTool"
 			/>
-			<Tool
-				Name="VCWebDeploymentTool"
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
 			/>
-			<Tool
-				Name="VCPostBuildEventTool"
+			<DebuggerTool
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -940,7 +934,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -967,11 +961,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Win32"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -990,8 +985,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_CONSOLE;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1005,12 +1000,15 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -1018,27 +1016,24 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCPostBuildEventTool"
+				Name="VCAppVerifierTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
+			<Tool
+				Name="VCWebDeploymentTool"
 			/>
-			<DebuggerTool
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="1"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1057,7 +1052,7 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_CONSOLE;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
 				PrecompiledHeaderFile=""
 			/>
@@ -1072,15 +1067,12 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="ws2.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -1088,24 +1080,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
-				Name="VCAppVerifierTool"
+				Name="VCPostBuildEventTool"
 			/>
-			<Tool
-				Name="VCWebDeploymentTool"
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
 			/>
-			<Tool
-				Name="VCPostBuildEventTool"
+			<DebuggerTool
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1140,7 +1134,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1167,11 +1161,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1206,7 +1200,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1233,11 +1227,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1272,7 +1266,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1299,11 +1293,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1338,7 +1332,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1365,11 +1359,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1404,7 +1398,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1431,11 +1425,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Win32"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1454,8 +1449,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_CONSOLE;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1469,12 +1464,15 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -1482,26 +1480,24 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCPostBuildEventTool"
+				Name="VCAppVerifierTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
+			<Tool
+				Name="VCWebDeploymentTool"
 			/>
-			<DebuggerTool
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1536,7 +1532,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1563,11 +1559,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1602,7 +1598,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1629,11 +1625,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1668,7 +1664,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1695,11 +1691,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1734,7 +1730,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1761,11 +1757,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1800,7 +1796,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1827,11 +1823,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1866,7 +1862,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1893,11 +1889,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Win32"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1916,8 +1913,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_CONSOLE;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1931,12 +1928,15 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -1944,26 +1944,24 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCPostBuildEventTool"
+				Name="VCAppVerifierTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
+			<Tool
+				Name="VCWebDeploymentTool"
 			/>
-			<DebuggerTool
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1998,7 +1996,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2025,11 +2023,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2064,7 +2062,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2091,11 +2089,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2130,7 +2128,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2157,11 +2155,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2196,7 +2194,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2223,11 +2221,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2262,7 +2260,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2289,11 +2287,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2328,7 +2326,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2355,11 +2353,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Win32"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2378,8 +2377,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include"
+				PreprocessorDefinitions="_CONSOLE;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2393,12 +2392,15 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"

+				AdditionalDependencies="netapi32.lib mswsock.lib ws2_32.lib odbc32.lib odbccp32.lib oleaut32.lib ole32.lib"
+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
 			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
 			<Tool
 				Name="VCXDCMakeTool"
 			/>
@@ -2406,26 +2408,24 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
-				Name="VCPostBuildEventTool"
+				Name="VCAppVerifierTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
+			<Tool
+				Name="VCWebDeploymentTool"
 			/>
-			<DebuggerTool
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2460,7 +2460,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2487,11 +2487,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2526,7 +2526,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2553,11 +2553,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2592,7 +2592,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2619,11 +2619,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2658,7 +2658,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2685,11 +2685,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2724,7 +2724,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2752,10 +2752,10 @@
 		</Configuration>
 		<Configuration
 			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="1"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2790,7 +2790,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalDependencies="ws2.lib"
-				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"

+				OutputFile="..\bin\pjlib-test-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).exe"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -3499,16 +3499,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Win32"
+					Name="Debug|Pocket PC 2003 (ARMV4)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3516,7 +3515,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3524,24 +3523,24 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Win32"
+					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-					ExcludedFromBuild="true"
+					Name="Release|Win32"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3549,16 +3548,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Win32"
+					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3566,7 +3564,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3574,16 +3572,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
+					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3591,24 +3588,24 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-					ExcludedFromBuild="true"
+					Name="Debug-Static|Win32"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Win32"
+					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3616,7 +3613,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3624,7 +3621,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3632,7 +3629,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3640,7 +3637,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3648,15 +3645,16 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-					ExcludedFromBuild="true"
+					Name="Release-Dynamic|Win32"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3664,7 +3662,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3672,7 +3670,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3680,7 +3678,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3688,7 +3686,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3696,7 +3694,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3704,15 +3702,16 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-					ExcludedFromBuild="true"
+					Name="Debug-Dynamic|Win32"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3720,7 +3719,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3728,7 +3727,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3736,7 +3735,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3744,7 +3743,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3752,7 +3751,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3760,15 +3759,16 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-					ExcludedFromBuild="true"
+					Name="Release-Static|Win32"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3776,7 +3776,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3784,7 +3784,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3792,7 +3792,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3800,7 +3800,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3846,17 +3846,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Win32"
+					Name="Debug|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3864,7 +3862,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3872,25 +3870,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Win32"
+					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3898,17 +3896,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Win32"
+					Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3916,7 +3912,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Release|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3924,17 +3920,15 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
+					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3942,25 +3936,25 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Win32"
+					Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+					Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3968,7 +3962,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3976,7 +3970,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3984,7 +3978,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -3992,7 +3986,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4000,15 +3994,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4016,7 +4012,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Pocket PC 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4024,7 +4020,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4032,7 +4028,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4040,7 +4036,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4048,7 +4044,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4056,15 +4052,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Smartphone 2003 (ARMV4)"
+					Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4072,7 +4070,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4080,7 +4078,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4088,7 +4086,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4096,7 +4094,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4104,7 +4102,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4112,15 +4110,17 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+					Name="Release-Static|Win32"
 					ExcludedFromBuild="true"
 					>
 					<Tool
 						Name="VCCLCompilerTool"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions=""
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4128,7 +4128,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4136,7 +4136,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Pocket PC 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4144,7 +4144,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Smartphone 2003 (ARMV4)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4152,7 +4152,7 @@
 					/>
 				</FileConfiguration>
 				<FileConfiguration
-					Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+					Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 					ExcludedFromBuild="true"
 					>
 					<Tool
@@ -4812,6 +4812,10 @@
 					/>
 				</FileConfiguration>
 			</File>
+			<File
+				RelativePath="..\src\pjlib-test\ssl_sock.c"
+				>
+			</File>
 			<File
 				RelativePath="..\src\pjlib-test\string.c"
 				>
diff --git a/sflphone-common/libs/pjproject/pjlib/build/privkey.pem b/sflphone-common/libs/pjproject/pjlib/build/privkey.pem
new file mode 100644
index 0000000000..3241be208c
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/build/privkey.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpQIBAAKCAQEA1lr5y/qEgtEOjsBi7dmLoV0xMyFb9wfkhkO7Woweh91l1Xqv
+tTZlPWM3Gt94OBUa1O5+LJmJii85tWp4gYTZiYwPrfoG8osypyzGgi6BudrVKFC3
+ADRilGhsJZr2RboA59nlYOlH1H0cxBm1d6t2vz80rDhD8LDHhd2DECT4ZKMj0C7V
+oFF4D/PTcqt14xhrcP6plIEIxPGuvz9Ml3PpsiNIZgKZmfZwd2JpQeVt6ulqFNoB
+oS13+Ndqx/y4HZz4TOIo0ueeCr/RHFA3UE065um2IOurY/qk3rew6JVDpU2d7yqb
+git7bXivQmzT1c7DLAd8ggC0i80N+O6SMHy2iQIDAQABAoIBAQCAke7Ujz2d7WDq
+9LAh8+NRdUFGZtLvd9d1RPkCVZsWaRBknIL5kVfmGzV5M+K62MXQRACAJdOeg7b8
+fpErNpD4dH8PHjG+lwlZxnyGpvh+jqhd1xP81m7ujzeW0ry2k9tpNYPkveespyJy
+6Oy0i67dBT9FsTXnD1GNlJDBRTuLuEkTTBqbn/2s3+gUfChJ4HPmYMeO9HU4PcfM
+yUsHatBiIkXiCKdDZVMDr5AUVD0Wo3uHPGJ8ZreURAjH+ldG09+/EsVoPberbrDZ
+ZxJ70VKG+ZZTY8HZr9OsZhDZDrHiw9PdG7Hvg7bCvv+gDzZ/z8F+7YHjRjmD5Tp5
+Ex5hDco1AoGBAPfdfzwmqb79AXwYH0HZkkl2EXpzbR9LRgvWlOMSN3GlZhusvGQR
+up6iGk9QnmoEtQS2IAuK4JT3r+yoM/20Nadq5ZUpkZ49SHuZ6+eZpotv3Fh8Oay8
+TAi2vBGM7EQPUOjPOWMRaYGBz3FT/GvUGPTeQ8jYt1gy8F18+A8xD8pTAoGBAN1j
+7+yTly+M47U6mIUXcwoelaS4f/kMcwKHO0O182S4ktfjzc3TpQbHm68ws1rB3iFZ
+SFOP/d04tVxZqPBhN2SpXRHGqTJxXthdTbu3scLMedlf4jY11SRiHX4PDnoBQ1GJ
+NpdkMoex25Fw3AqSVpP61zo8sJkqpqjFfeQDbfgzAoGBAKyGx1ZmDwc6cjsfSzp5
+p+JsRVQ3XcBHk9UPooi/mEoJd55RyLvav0xFxwxoMCvZZOqHnpyKKTJniVOv7Khu
+NF55AJ6n1Y0QWRB3ngWSJKOv0+7fYQHD+yShlRyeO6JQCuBRxT8Y0phrc6oNbIjd
+lBV1VDdL6aqBol9gagWg/72zAoGBAK1rAx1F3z+YFSZ459AZNjvPCVkmTNhBMDXi
+yEGZ3TYgfqYuA6AfET3mTcVFWLjW87EbxtPuDuWi7i2Q7gydmk53fDfYbeDdfXXu
+YF2S3uPAWBI2UXQ1ZuhBEukT0jsvkhPkb6bXDd3NLDkZNsPxLXBtJPqxX4QbLME3
+Mg3RweqRAoGAJ4iXP2b4XWhg17qpDtpn8nhFxLNdhxdaDSKRL8oKQLteds3wS0fi
+ZlaU1P9a3ygTpNquKlmdLJTQEDAVjV5DDlrQAPxtSSytHulNzXRMQFaeydar3Ssv
+J07BPdQs6JEgV071rGGzBcL8ulo7qCdnGxU6GmhLkS4MBbTuqR6jmgU=
+-----END RSA PRIVATE KEY-----
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/addr_resolv.h b/sflphone-common/libs/pjproject/pjlib/include/pj/addr_resolv.h
index 71c0640cbf..04db2f0851 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/addr_resolv.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/addr_resolv.h
@@ -1,4 +1,4 @@
-/* $Id: addr_resolv.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: addr_resolv.h 2908 2009-08-22 11:18:50Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -89,7 +89,8 @@ typedef struct pj_addrinfo
  * For host resolution function that also works with IPv6, please see
  * #pj_getaddrinfo().
  *
- * @param name	    Host name, or IPv4 address in standard dot notation.
+ * @param name	    Host name to resolve. Specifying IPv4 address here
+ *		    may fail on some platforms (e.g. Windows)
  * @param he	    The pj_hostent structure to be filled. Note that
  *		    the pointers in this structure points to temporary
  *		    variables which value will be reset upon subsequent
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/cc_armcc.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/cc_armcc.h
index 7bf1c91bad..a6b8dfe907 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/cc_armcc.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/cc_armcc.h
@@ -1,4 +1,4 @@
-/* $Id: cc_armcc.h 2407 2009-01-01 20:56:36Z bennylp $ */
+/* $Id: cc_armcc.h 3046 2010-01-06 08:34:41Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -30,9 +30,9 @@
 #endif
 
 #define PJ_CC_NAME		"armcc"
-#define PJ_CC_VER_1		__ARMCC__
-#define PJ_CC_VER_2		__ARMCC_MINOR__
-#define PJ_CC_VER_3		__ARMCC_PATCHLEVEL__
+#define PJ_CC_VER_1             (__ARMCC_VERSION/100000)
+#define PJ_CC_VER_2             ((__ARMCC_VERSION%100000)/10000)
+#define PJ_CC_VER_3             (__ARMCC_VERSION%10000)
 
 #ifdef __cplusplus
 #  define PJ_INLINE_SPECIFIER	inline
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_auto.h.in b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_auto.h.in
index e922a9b952..1877175190 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_auto.h.in
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_auto.h.in
@@ -1,4 +1,4 @@
-/* $Id: os_auto.h.in 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: os_auto.h.in 2970 2009-10-26 15:47:52Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -54,6 +54,7 @@
 #undef PJ_HAS_NETINET_IN_SYSTM_H
 #undef PJ_HAS_NETINET_IN_H
 #undef PJ_HAS_NETINET_IP_H
+#undef PJ_HAS_NETINET_TCP_H
 #undef PJ_HAS_NET_IF_H
 #undef PJ_HAS_IFADDRS_H
 #undef PJ_HAS_SEMAPHORE_H
@@ -180,5 +181,11 @@
  */
 #undef PJ_THREAD_ALLOCATE_STACK
 
+/* SSL socket availability. */
+#ifndef PJ_HAS_SSL_SOCK
+#undef PJ_HAS_SSL_SOCK
+#endif
+
+
 #endif	/* __PJ_COMPAT_OS_AUTO_H__ */
 
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_darwinos.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_darwinos.h
index 6fff311579..4afbe02aa6 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_darwinos.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_darwinos.h
@@ -1,4 +1,4 @@
-/* $Id: os_darwinos.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: os_darwinos.h 2962 2009-10-24 00:00:40Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -35,6 +35,7 @@
 #define PJ_HAS_MALLOC_H		    0
 #define PJ_HAS_NETDB_H		    1
 #define PJ_HAS_NETINET_IN_H	    1
+#define PJ_HAS_NETINET_TCP_H	    1
 #define PJ_HAS_SETJMP_H		    1
 #define PJ_HAS_STDARG_H		    1
 #define PJ_HAS_STDDEF_H		    1
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_symbian.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_symbian.h
index c5c4e4b509..727cbc153d 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_symbian.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_symbian.h
@@ -1,4 +1,4 @@
-/* $Id: os_symbian.h 2506 2009-03-12 18:11:37Z bennylp $ */
+/* $Id: os_symbian.h 2962 2009-10-24 00:00:40Z bennylp $ */
 /*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -35,6 +35,7 @@
 #define PJ_HAS_MALLOC_H		    0
 #define PJ_HAS_NETDB_H		    1
 #define PJ_HAS_NETINET_IN_H	    1
+#define PJ_HAS_NETINET_TCP_H	    0
 #define PJ_HAS_SETJMP_H		    1
 #define PJ_HAS_STDARG_H		    1
 #define PJ_HAS_STDDEF_H		    1
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32.h
index 8283491ec6..496d478050 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32.h
@@ -1,4 +1,4 @@
-/* $Id: os_win32.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: os_win32.h 3002 2009-11-10 04:30:46Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -41,6 +41,7 @@
 #define PJ_HAS_MALLOC_H		    1
 #define PJ_HAS_NETDB_H		    0
 #define PJ_HAS_NETINET_IN_H	    0
+#define PJ_HAS_NETINET_TCP_H	    0
 #define PJ_HAS_SETJMP_H		    1
 #define PJ_HAS_STDARG_H		    1
 #define PJ_HAS_STDDEF_H		    1
@@ -110,7 +111,12 @@
 #ifndef PJ_OS_HAS_CHECK_STACK
 #   define PJ_OS_HAS_CHECK_STACK	1
 #endif
-#define PJ_NATIVE_STRING_IS_UNICODE	0
+
+#ifdef UNICODE
+#   define PJ_NATIVE_STRING_IS_UNICODE    1
+#else
+#   define PJ_NATIVE_STRING_IS_UNICODE    0
+#endif
 
 #define PJ_ATOMIC_VALUE_TYPE		long
 
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32_wince.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32_wince.h
index 3dd0012594..16d3019479 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32_wince.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/os_win32_wince.h
@@ -1,4 +1,4 @@
-/* $Id: os_win32_wince.h 2660 2009-04-28 19:38:43Z nanang $ */
+/* $Id: os_win32_wince.h 2962 2009-10-24 00:00:40Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -40,6 +40,7 @@
 #define PJ_HAS_MALLOC_H		    1
 #define PJ_HAS_NETDB_H		    0
 #define PJ_HAS_NETINET_IN_H	    0
+#define PJ_HAS_NETINET_TCP_H	    0
 #define PJ_HAS_SETJMP_H		    1
 #define PJ_HAS_STDARG_H		    1
 #define PJ_HAS_STDDEF_H		    1
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/socket.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/socket.h
index 3f2e787f86..b091c40ba6 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/socket.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/socket.h
@@ -1,4 +1,4 @@
-/* $Id: socket.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: socket.h 2962 2009-10-24 00:00:40Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -104,6 +104,11 @@
 #  include <netinet/ip.h>
 #endif
 
+#if defined(PJ_HAS_NETINET_TCP_H) && PJ_HAS_NETINET_TCP_H != 0
+/* To pull in TCP_NODELAY constants */
+#  include <netinet/tcp.h>
+#endif
+
 #if defined(PJ_HAS_NET_IF_H) && PJ_HAS_NET_IF_H != 0
 /* For interface enumeration in ip_helper */
 #   include <net/if.h>
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h
index e0ceb53f89..198fbe9850 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h
@@ -52,8 +52,8 @@
 #   define wcsicmp	_wcsicmp
 #   define wcsnicmp	_wcsnicmp
 #else
-// #   define stricmp	strcasecmp
-// #   define strnicmp	strncasecmp
+#   define stricmp	strcasecmp
+#   define strnicmp	strncasecmp
 
 #   if defined(PJ_NATIVE_STRING_IS_UNICODE) && PJ_NATIVE_STRING_IS_UNICODE!=0
 #	error "Implement Unicode string functions"
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/config.h b/sflphone-common/libs/pjproject/pjlib/include/pj/config.h
index aba3fa7070..7c21e8efa3 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/config.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/config.h
@@ -1,5 +1,5 @@
-/* $Id: config.h 2843 2009-07-22 11:12:35Z bennylp $ */
-/*
+/* $Id: config.h 2970 2009-10-26 15:47:52Z nanang $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #ifndef __PJ_CONFIG_H__
 #define __PJ_CONFIG_H__
@@ -49,78 +49,78 @@
  * Include target OS specific configuration.
  */
 #if defined(PJ_AUTOCONF)
-/*
- * Autoconf
- */
+    /*
+     * Autoconf
+     */
 #   include <pj/compat/os_auto.h>
 
 #elif defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0
-/*
- * SymbianOS
- */
+    /*
+     * SymbianOS
+     */
 #  include <pj/compat/os_symbian.h>
 
 #elif defined(PJ_WIN32_WINCE) || defined(_WIN32_WCE) || defined(UNDER_CE)
-/*
- * Windows CE
- */
+    /*
+     * Windows CE
+     */
 #   undef PJ_WIN32_WINCE
 #   define PJ_WIN32_WINCE   1
 #   include <pj/compat/os_win32_wince.h>
 
-/* Also define Win32 */
+    /* Also define Win32 */
 #   define PJ_WIN32 1
 
 #elif defined(PJ_WIN32) || defined(_WIN32) || defined(__WIN32__) || \
 	defined(_WIN64) || defined(WIN32) || defined(__TOS_WIN__)
-/*
- * Win32
- */
+    /*
+     * Win32
+     */
 #   undef PJ_WIN32
 #   define PJ_WIN32 1
 #   include <pj/compat/os_win32.h>
 
 #elif defined(PJ_LINUX_KERNEL) && PJ_LINUX_KERNEL!=0
-/*
- * Linux kernel
- */
+    /*
+     * Linux kernel
+     */
 #  include <pj/compat/os_linux_kernel.h>
 
 #elif defined(PJ_LINUX) || defined(linux) || defined(__linux)
-/*
- * Linux
- */
+    /*
+     * Linux
+     */
 #   undef PJ_LINUX
 #   define PJ_LINUX	    1
 #   include <pj/compat/os_linux.h>
 
 #elif defined(PJ_PALMOS) && PJ_PALMOS!=0
-/*
- * Palm
- */
+    /*
+     * Palm
+     */
 #  include <pj/compat/os_palmos.h>
 
 #elif defined(PJ_SUNOS) || defined(sun) || defined(__sun)
-/*
- * SunOS
- */
+    /*
+     * SunOS
+     */
 #   undef PJ_SUNOS
 #   define PJ_SUNOS	    1
 #   include <pj/compat/os_sunos.h>
 
 #elif defined(PJ_DARWINOS) || defined(__MACOSX__) || \
       defined (__APPLE__) || defined (__MACH__)
-/*
- * MacOS X
- */
+    /*
+     * MacOS X
+     */
 #   undef PJ_DARWINOS
 #   define PJ_DARWINOS	    1
 #   include <pj/compat/os_darwinos.h>
 
 #elif defined(PJ_RTEMS) && PJ_RTEMS!=0
-/*
- * RTEMS
- */
+    /*
+     * RTEMS
+     */
 #  include <pj/compat/os_rtems.h>
 #else
 #   error "Please specify target os."
@@ -131,17 +131,17 @@
  * Target machine specific configuration.
  */
 #if defined(PJ_AUTOCONF)
-/*
- * Autoconf configured
- */
+    /*
+     * Autoconf configured
+     */
 #include <pj/compat/m_auto.h>
 
 #elif defined (PJ_M_I386) || defined(_i386_) || defined(i_386_) || \
 	defined(_X86_) || defined(x86) || defined(__i386__) || \
 	defined(__i386) || defined(_M_IX86) || defined(__I86__)
-/*
- * Generic i386 processor family, little-endian
- */
+    /*
+     * Generic i386 processor family, little-endian
+     */
 #   undef PJ_M_I386
 #   define PJ_M_I386		1
 #   define PJ_M_NAME		"i386"
@@ -152,9 +152,9 @@
 
 #elif defined (PJ_M_X86_64) || defined(__amd64__) || defined(__amd64) || \
 	defined(__x86_64__) || defined(__x86_64)
-/*
- * AMD 64bit processor, little endian
- */
+    /*
+     * AMD 64bit processor, little endian
+     */
 #   undef PJ_M_X86_64
 #   define PJ_M_X86_64		1
 #   define PJ_M_NAME		"x86_64"
@@ -164,9 +164,9 @@
 
 #elif defined(PJ_M_IA64) || defined(__ia64__) || defined(_IA64) || \
 	defined(__IA64__) || defined( 	_M_IA64)
-/*
- * Intel IA64 processor, little endian
- */
+    /*
+     * Intel IA64 processor, little endian
+     */
 #   undef PJ_M_IA64
 #   define PJ_M_IA64		1
 #   define PJ_M_NAME		"ia64"
@@ -176,9 +176,9 @@
 
 #elif defined (PJ_M_M68K) && PJ_M_M68K != 0
 
-/*
- * Motorola m64k processor, little endian
- */
+    /*
+     * Motorola m64k processor, little endian
+     */
 #   undef PJ_M_M68K
 #   define PJ_M_M68K		1
 #   define PJ_M_NAME		"m68k"
@@ -189,9 +189,9 @@
 
 #elif defined (PJ_M_ALPHA) || defined (__alpha__) || defined (__alpha) || \
 	defined (_M_ALPHA)
-/*
- * DEC Alpha processor, little endian
- */
+    /*
+     * DEC Alpha processor, little endian
+     */
 #   undef PJ_M_ALPHA
 #   define PJ_M_ALPHA		1
 #   define PJ_M_NAME		"alpha"
@@ -202,9 +202,9 @@
 
 #elif defined(PJ_M_MIPS) || defined(__mips__) || defined(__mips) || \
 	defined(__MIPS__) || defined(MIPS) || defined(_MIPS_)
-/*
- * MIPS, default to little endian
- */
+    /*
+     * MIPS, default to little endian
+     */
 #   undef PJ_M_MIPS
 #   define PJ_M_MIPS		1
 #   define PJ_M_NAME		"mips"
@@ -216,9 +216,9 @@
 
 
 #elif defined (PJ_M_SPARC) || defined( 	__sparc__) || defined(__sparc)
-/*
- * Sun Sparc, big endian
- */
+    /*
+     * Sun Sparc, big endian
+     */
 #   undef PJ_M_SPARC
 #   define PJ_M_SPARC		1
 #   define PJ_M_NAME		"sparc"
@@ -228,9 +228,9 @@
 
 #elif defined (PJ_M_ARMV4) || defined(ARM) || defined(_ARM_) ||  \
 	defined(ARMV4) || defined(__arm__)
-/*
- * ARM, default to little endian
- */
+    /*
+     * ARM, default to little endian
+     */
 #   undef PJ_M_ARMV4
 #   define PJ_M_ARMV4		1
 #   define PJ_M_NAME		"armv4"
@@ -243,9 +243,9 @@
 #elif defined (PJ_M_POWERPC) || defined(__powerpc) || defined(__powerpc__) || \
 	defined(__POWERPC__) || defined(__ppc__) || defined(_M_PPC) || \
 	defined(_ARCH_PPC)
-/*
- * PowerPC, big endian
- */
+    /*
+     * PowerPC, big endian
+     */
 #   undef PJ_M_POWERPC
 #   define PJ_M_POWERPC		1
 #   define PJ_M_NAME		"powerpc"
@@ -255,16 +255,16 @@
 
 #elif defined (PJ_M_NIOS2) || defined(__nios2) || defined(__nios2__) || \
       defined(__NIOS2__) || defined(__M_NIOS2) || defined(_ARCH_NIOS2)
-/*
- * Nios2, little endian
- */
+    /*
+     * Nios2, little endian
+     */
 #   undef PJ_M_NIOS2
 #   define PJ_M_NIOS2		1
 #   define PJ_M_NAME		"nios2"
 #   define PJ_HAS_PENTIUM	0
 #   define PJ_IS_LITTLE_ENDIAN	1
 #   define PJ_IS_BIG_ENDIAN	0
-
+		
 #else
 #   error "Please specify target machine."
 #endif
@@ -420,7 +420,7 @@
  * in the application.
  *
  * This will slow down pool creation and destruction and will add
- * few bytes of overhead, so application would normally want to
+ * few bytes of overhead, so application would normally want to 
  * disable this feature on release build.
  *
  * Default: 0
@@ -449,14 +449,14 @@
  *
  * Default: 8192
  */
-#ifndef PJ_THREAD_DEFAULT_STACK_SIZE
+#ifndef PJ_THREAD_DEFAULT_STACK_SIZE 
 #  define PJ_THREAD_DEFAULT_STACK_SIZE    8192
 #endif
 
 
 /**
- * Specify if PJ_CHECK_STACK() macro is enabled to check the sanity of
- * the stack. The OS implementation may check that no stack overflow
+ * Specify if PJ_CHECK_STACK() macro is enabled to check the sanity of 
+ * the stack. The OS implementation may check that no stack overflow 
  * occurs, and it also may collect statistic about stack usage. Note
  * that this will increase the footprint of the libraries since it
  * tracks the filename and line number of each functions.
@@ -486,7 +486,7 @@
 #endif
 
 /**
- * Support IPv6 in the library. If this support is disabled, some IPv6
+ * Support IPv6 in the library. If this support is disabled, some IPv6 
  * related functions will return PJ_EIPV6NOTSUP.
  *
  * Default: 0 (disabled, for now)
@@ -495,21 +495,21 @@
 #  define PJ_HAS_IPV6		    0
 #endif
 
-/**
-* Maximum hostname length.
-* Libraries sometimes needs to make copy of an address to stack buffer;
-* the value here affects the stack usage.
-*
-* Default: 128
-*/
+ /**
+ * Maximum hostname length.
+ * Libraries sometimes needs to make copy of an address to stack buffer;
+ * the value here affects the stack usage.
+ *
+ * Default: 128
+ */
 #ifndef PJ_MAX_HOSTNAME
 #  define PJ_MAX_HOSTNAME	    (128)
 #endif
 
 /**
  * Constants for declaring the maximum handles that can be supported by
- * a single IOQ framework. This constant might not be relevant to the
- * underlying I/O queue impelementation, but still, developers should be
+ * a single IOQ framework. This constant might not be relevant to the 
+ * underlying I/O queue impelementation, but still, developers should be 
  * aware of this constant, to make sure that the program will not break when
  * the underlying implementation changes.
  */
@@ -523,8 +523,8 @@
  * things to ensure thread safety of handle unregistration operation by
  * employing reference counter to each handle.
  *
- * In addition, the ioqueue will preallocate memory for the handles,
- * according to the maximum number of handles that is specified during
+ * In addition, the ioqueue will preallocate memory for the handles, 
+ * according to the maximum number of handles that is specified during 
  * ioqueue creation.
  *
  * All applications would normally want this enabled, but you may disable
@@ -545,7 +545,7 @@
  * concurrently/in parallel. The default is yes, which means that if there
  * are more than one pending operations complete simultaneously, more
  * than one threads may call the key's callback at the same time. This
- * generally would promote good scalability for application, at the
+ * generally would promote good scalability for application, at the 
  * expense of more complexity to manage the concurrent accesses.
  *
  * Please see the ioqueue documentation for more info.
@@ -600,14 +600,14 @@
  * set to value lower than FD_SETSIZE.
  */
 #if PJ_FD_SETSIZE_SETABLE
-/* Only override FD_SETSIZE if the value has not been set */
+    /* Only override FD_SETSIZE if the value has not been set */
 #   ifndef FD_SETSIZE
 #	define FD_SETSIZE		PJ_IOQUEUE_MAX_HANDLES
 #   endif
 #else
-/* When FD_SETSIZE is not changeable, check if PJ_IOQUEUE_MAX_HANDLES
- * is lower than FD_SETSIZE value.
- */
+    /* When FD_SETSIZE is not changeable, check if PJ_IOQUEUE_MAX_HANDLES
+     * is lower than FD_SETSIZE value.
+     */
 #   ifdef FD_SETSIZE
 #	if PJ_IOQUEUE_MAX_HANDLES > FD_SETSIZE
 #	    error "PJ_IOQUEUE_MAX_HANDLES is greater than FD_SETSIZE"
@@ -724,7 +724,7 @@
 #ifndef PJ_NATIVE_ERR_POSITIVE
 #   define PJ_NATIVE_ERR_POSITIVE   1
 #endif
-
+ 
 /**
  * Include error message string in the library (pj_strerror()).
  * This is very much desirable!
@@ -741,13 +741,56 @@
  * functions to compare alnum strings. On some systems, they're faster
  * then stricmp/strcasecmp, but they can be slower on other systems.
  * When disabled, pjlib will fallback to stricmp/strnicmp.
- *
+ * 
  * Default: 0
  */
 #ifndef PJ_HAS_STRICMP_ALNUM
 #   define PJ_HAS_STRICMP_ALNUM	    0
 #endif
 
+
+/*
+ * Types of QoS backend implementation.
+ */
+
+/** 
+ * Dummy QoS backend implementation, will always return error on all
+ * the APIs.
+ */
+#define PJ_QOS_DUMMY	    1
+
+/** QoS backend based on setsockopt(IP_TOS) */
+#define PJ_QOS_BSD	    2
+
+/** QoS backend for Windows Mobile 6 */
+#define PJ_QOS_WM	    3
+
+/** QoS backend for Symbian */
+#define PJ_QOS_SYMBIAN	    4
+
+/**
+ * Force the use of some QoS backend API for some platforms.
+ */
+#ifndef PJ_QOS_IMPLEMENTATION
+#   if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE && _WIN32_WCE >= 0x502
+	/* Windows Mobile 6 or later */
+#	define PJ_QOS_IMPLEMENTATION    PJ_QOS_WM
+#   endif
+#endif
+
+
+/**
+ * Enable secure socket. For most platforms, this is implemented using
+ * OpenSSL, so this will require OpenSSL to be installed. For Symbian
+ * platform, this is implemented natively using CSecureSocket.
+ *
+ * Default: 0 (for now)
+ */
+#ifndef PJ_HAS_SSL_SOCK
+#  define PJ_HAS_SSL_SOCK	    0
+#endif
+
+
 /** @} */
 
 /********************************************************************
@@ -761,7 +804,7 @@
  *
  * The libraries support generation of dynamic link libraries for
  * Symbian ABIv2 target (.dso/Dynamic Shared Object files, in Symbian
- * terms). Similar procedures may be applied for Win32 DLL with some
+ * terms). Similar procedures may be applied for Win32 DLL with some 
  * modification.
  *
  * Depending on the platforms, these steps may be necessary in order to
@@ -769,7 +812,7 @@
  *  - Create the (Visual Studio) projects to produce DLL output. PJLIB
  *    does not provide ready to use project files to produce DLL, so
  *    you need to create these projects yourself. For Symbian, the MMP
- *    files have been setup to produce DSO files for targets that
+ *    files have been setup to produce DSO files for targets that 
  *    require them.
  *  - In the (Visual Studio) projects, some macros need to be declared
  *    so that appropriate modifiers are added to symbol declarations
@@ -778,49 +821,49 @@
  *    MMP files.
  *  - Some build systems require .DEF file to be specified when creating
  *    the DLL. For Symbian, .DEF files are included in pjlib distribution,
- *    in <tt>pjlib/build.symbian</tt> directory. These DEF files are
+ *    in <tt>pjlib/build.symbian</tt> directory. These DEF files are 
  *    created by running <tt>./makedef.sh all</tt> from this directory,
  *    inside Mingw.
  *
  * Macros related for building DLL/DSO files:
  *  - For platforms that supports dynamic link libraries generation,
  *    it must declare <tt>PJ_EXPORT_SPECIFIER</tt> macro which value contains
- *    the prefix to be added to symbol definition, to export this
+ *    the prefix to be added to symbol definition, to export this 
  *    symbol in the DLL/DSO. For example, on Win32/Visual Studio, the
- *    value of this macro is \a __declspec(dllexport), and for ARM
- *    ABIv2/Symbian, the value is \a EXPORT_C.
+ *    value of this macro is \a __declspec(dllexport), and for ARM 
+ *    ABIv2/Symbian, the value is \a EXPORT_C. 
  *  - For platforms that supports linking with dynamic link libraries,
  *    it must declare <tt>PJ_IMPORT_SPECIFIER</tt> macro which value contains
- *    the prefix to be added to symbol declaration, to import this
+ *    the prefix to be added to symbol declaration, to import this 
  *    symbol from a DLL/DSO. For example, on Win32/Visual Studio, the
- *    value of this macro is \a __declspec(dllimport), and for ARM
- *    ABIv2/Symbian, the value is \a IMPORT_C.
- *  - Both <tt>PJ_EXPORT_SPECIFIER</tt> and <tt>PJ_IMPORT_SPECIFIER</tt>
+ *    value of this macro is \a __declspec(dllimport), and for ARM 
+ *    ABIv2/Symbian, the value is \a IMPORT_C. 
+ *  - Both <tt>PJ_EXPORT_SPECIFIER</tt> and <tt>PJ_IMPORT_SPECIFIER</tt> 
  *    macros above can be declared in your \a config_site.h if they are not
  *    declared by pjlib.
- *  - When PJLIB is built as DLL/DSO, both <tt>PJ_DLL</tt> and
- *    <tt>PJ_EXPORTING</tt> macros must be declared, so that
+ *  - When PJLIB is built as DLL/DSO, both <tt>PJ_DLL</tt> and 
+ *    <tt>PJ_EXPORTING</tt> macros must be declared, so that 
  *     <tt>PJ_EXPORT_SPECIFIER</tt> modifier will be added into function
  *    definition.
  *  - When application wants to link dynamically with PJLIB, then it
  *    must declare <tt>PJ_DLL</tt> macro when using/including PJLIB header,
- *    so that <tt>PJ_IMPORT_SPECIFIER</tt> modifier is properly added into
+ *    so that <tt>PJ_IMPORT_SPECIFIER</tt> modifier is properly added into 
  *    symbol declarations.
  *
  * When <b>PJ_DLL</b> macro is not declared, static linking is assumed.
  *
  * For example, here are some settings to produce DLLs with Visual Studio
  * on Windows/Win32:
- *  - Create Visual Studio projects to produce DLL. Add the appropriate
+ *  - Create Visual Studio projects to produce DLL. Add the appropriate 
  *    project dependencies to avoid link errors.
- *  - In the projects, declare <tt>PJ_DLL</tt> and <tt>PJ_EXPORTING</tt>
+ *  - In the projects, declare <tt>PJ_DLL</tt> and <tt>PJ_EXPORTING</tt> 
  *    macros.
  *  - Declare these macros in your <tt>config_site.h</tt>:
  \verbatim
 	#define PJ_EXPORT_SPECIFIER  __declspec(dllexport)
 	#define PJ_IMPORT_SPECIFIER  __declspec(dllimport)
  \endverbatim
- *  - And in the application (that links with the DLL) project, add
+ *  - And in the application (that links with the DLL) project, add 
  *    <tt>PJ_DLL</tt> in the macro declarations.
  */
 
@@ -844,7 +887,7 @@
  * is built as dynamic library.
  *
  * This macro should have been added by platform specific headers,
- * if the platform supports building dynamic library target.
+ * if the platform supports building dynamic library target. 
  */
 #ifndef PJ_EXPORT_DECL_SPECIFIER
 #   define PJ_EXPORT_DECL_SPECIFIER
@@ -857,7 +900,7 @@
  * is built as dynamic library.
  *
  * This macro should have been added by platform specific headers,
- * if the platform supports building dynamic library target.
+ * if the platform supports building dynamic library target. 
  */
 #ifndef PJ_EXPORT_DEF_SPECIFIER
 #   define PJ_EXPORT_DEF_SPECIFIER
@@ -952,7 +995,7 @@
  * @def PJ_DECL_DATA(type)
  * @param type The data type.
  * Declare a global data.
- */
+ */ 
 #if defined(PJ_DLL)
 #   if defined(PJ_EXPORTING)
 #	define PJ_DECL_DATA(type)   PJ_EXPORT_DECL_SPECIFIER extern type
@@ -968,7 +1011,7 @@
  * @def PJ_DEF_DATA(type)
  * @param type The data type.
  * Define a global data.
- */
+ */ 
 #if defined(PJ_DLL) && defined(PJ_EXPORTING)
 #   define PJ_DEF_DATA(type)	    PJ_EXPORT_DEF_SPECIFIER type
 #elif !defined(PJ_DEF_DATA)
@@ -1058,19 +1101,19 @@ PJ_BEGIN_DECL
 /**
  * PJLIB version string constant. @see pj_get_version()
  */
-PJ_DECL_DATA (const char*) PJ_VERSION;
+PJ_DECL_DATA(const char*) PJ_VERSION;
 
 /**
  * Get PJLIB version string.
  *
  * @return #PJ_VERSION constant.
  */
-PJ_DECL (const char*) pj_get_version (void);
+PJ_DECL(const char*) pj_get_version(void);
 
 /**
  * Dump configuration to log with verbosity equal to info(3).
  */
-PJ_DECL (void) pj_dump_config (void);
+PJ_DECL(void) pj_dump_config(void);
 
 PJ_END_DECL
 
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/config_site.h b/sflphone-common/libs/pjproject/pjlib/include/pj/config_site.h
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/errno.h b/sflphone-common/libs/pjproject/pjlib/include/pj/errno.h
index fdc6cdf76c..7576a4cf7a 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/errno.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/errno.h
@@ -1,4 +1,4 @@
-/* $Id: errno.h 2506 2009-03-12 18:11:37Z bennylp $ */
+/* $Id: errno.h 2992 2009-11-09 04:09:13Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -22,21 +22,24 @@
 
 /**
  * @file errno.h
- * @brief PJLIB Error Codes
+ * @brief PJLIB Error Subsystem
  */
 #include <pj/types.h>
 #include <pj/compat/errno.h>
+#include <stdarg.h>
 
 PJ_BEGIN_DECL
 
 /**
- * @defgroup pj_errno Error Codes
+ * @defgroup pj_errno Error Subsystem
  * @{
  *
- * In PJLIB, error/status codes from operating system are translated
- * into PJLIB error namespace, and stored in @a pj_status_t. All functions
- * that work with @a pj_status_t expect to get PJLIB error code instead
- * of native codes.
+ * The PJLIB Error Subsystem is a framework to unify all error codes
+ * produced by all components into a single error space, and provide
+ * uniform set of APIs to access them. With this framework, any error
+ * codes are encoded as pj_status_t value. The framework is extensible,
+ * application may register new error spaces to be recognized by
+ * the framework.
  *
  * @section pj_errno_retval Return Values
  *
@@ -47,20 +50,33 @@ PJ_BEGIN_DECL
  * #PJ_STATUS_FROM_OS() macro. The function will do this automatically
  * before returning the error to caller.
  *
- * @section pj_errno_errmsg Error Message
+ * @section err_services Retrieving and Displaying Error Messages
  *
- * To get the error message corresponding to a particular code, use function
- * #pj_strerror(). This function expects error code in PJLIB error namespace,
- * not the native error code. Application can pass the value from the 
- * following sources to this function:
- *  - #pj_get_os_error()
- *  - #pj_get_netos_error()
- *  - any return value from function returning @a pj_status_t.
+ * The framework provides the following APIs to retrieve and/or display
+ * error messages:
  *
- * Application MUST NOT pass native error code (such as error code from
+ *   - #pj_strerror(): this is the base API to retrieve error string
+ *      description for the specified pj_status_t error code.
+ *
+ *   - #PJ_PERROR() macro: use this macro similar to PJ_LOG to format
+ *      an error message and display them to the log
+ *
+ *   - #pj_perror(): this function is similar to PJ_PERROR() but unlike
+ *      #PJ_PERROR(), this function will always be included in the
+ *      link process. Due to this reason, prefer to use #PJ_PERROR()
+ *      if the application is concerned about the executable size.
+ *
+ * Application MUST NOT pass native error codes (such as error code from
  * functions like GetLastError() or errno) to PJLIB functions expecting
  * @a pj_status_t.
  *
+ * @section err_extending Extending the Error Space
+ *
+ * Application may register new error space to be recognized by the
+ * framework by using #pj_register_strerror(). Use the range started
+ * from PJ_ERRNO_START_USER to avoid conflict with existing error
+ * spaces.
+ *
  */
 
 /**
@@ -68,6 +84,14 @@ PJ_BEGIN_DECL
  */
 #define PJ_ERR_MSG_SIZE  80
 
+/**
+ * Buffer for title string of #PJ_PERROR().
+ */
+#ifndef PJ_PERROR_TITLE_BUF_SIZE
+#   define PJ_PERROR_TITLE_BUF_SIZE	120
+#endif
+
+
 /**
  * Get the last platform error/status, folded into pj_status_t.
  * @return	OS dependent error code, folded into pj_status_t.
@@ -111,6 +135,74 @@ PJ_DECL(void) pj_set_netos_error(pj_status_t code);
 PJ_DECL(pj_str_t) pj_strerror( pj_status_t statcode, 
 			       char *buf, pj_size_t bufsize);
 
+/**
+ * A utility macro to print error message pertaining to the specified error 
+ * code to the log. This macro will construct the error message title 
+ * according to the 'title_fmt' argument, and add the error string pertaining
+ * to the error code after the title string. A colon (':') will be added 
+ * automatically between the title and the error string.
+ *
+ * This function is similar to pj_perror() function, but has the advantage
+ * that the function call can be omitted from the link process if the
+ * log level argument is below PJ_LOG_MAX_LEVEL threshold.
+ *
+ * Note that the title string constructed from the title_fmt will be built on
+ * a string buffer which size is PJ_PERROR_TITLE_BUF_SIZE, which normally is
+ * allocated from the stack. By default this buffer size is small (around
+ * 120 characters). Application MUST ensure that the constructed title string
+ * will not exceed this limit, since not all platforms support truncating
+ * the string.
+ *
+ * @see pj_perror()
+ *
+ * @param level	    The logging verbosity level, valid values are 0-6. Lower
+ *		    number indicates higher importance, with level zero 
+ *		    indicates fatal error. Only numeral argument is 
+ *		    permitted (e.g. not variable).
+ * @param arg	    Enclosed 'printf' like arguments, with the following
+ *		    arguments:
+ *		     - the sender (NULL terminated string),
+ *		     - the error code (pj_status_t)
+ *		     - the format string (title_fmt), and 
+ *		     - optional variable number of arguments suitable for the 
+ *		       format string.
+ *
+ * Sample:
+ * \verbatim
+   PJ_PERROR(2, (__FILE__, PJ_EBUSY, "Error making %s", "coffee"));
+   \endverbatim
+ * @hideinitializer
+ */
+#define PJ_PERROR(level,arg)	do { \
+				    pj_perror_wrapper_##level(arg); \
+				} while (0)
+
+/**
+ * A utility function to print error message pertaining to the specified error 
+ * code to the log. This function will construct the error message title 
+ * according to the 'title_fmt' argument, and add the error string pertaining
+ * to the error code after the title string. A colon (':') will be added 
+ * automatically between the title and the error string.
+ *
+ * Unlike the PJ_PERROR() macro, this function takes the \a log_level argument
+ * as a normal argument, unlike in PJ_PERROR() where a numeral value must be
+ * given. However this function will always be linked to the executable,
+ * unlike PJ_PERROR() which can be omitted when the level is below the 
+ * PJ_LOG_MAX_LEVEL.
+ *
+ * Note that the title string constructed from the title_fmt will be built on
+ * a string buffer which size is PJ_PERROR_TITLE_BUF_SIZE, which normally is
+ * allocated from the stack. By default this buffer size is small (around
+ * 120 characters). Application MUST ensure that the constructed title string
+ * will not exceed this limit, since not all platforms support truncating
+ * the string.
+ *
+ * @see PJ_PERROR()
+ */
+PJ_DECL(void) pj_perror(int log_level, const char *sender, pj_status_t status,
+		        const char *title_fmt, ...);
+
+
 /**
  * Type of callback to be specified in #pj_register_strerror()
  *
@@ -381,6 +473,102 @@ PJ_DECL(pj_status_t) pj_register_strerror(pj_status_t start_code,
 /* Internal */
 void pj_errno_clear_handlers(void);
 
+
+/****** Internal for PJ_PERROR *******/
+
+/**
+ * @def pj_perror_wrapper_1(arg)
+ * Internal function to write log with verbosity 1. Will evaluate to
+ * empty expression if PJ_LOG_MAX_LEVEL is below 1.
+ * @param arg       Log expression.
+ */
+#if PJ_LOG_MAX_LEVEL >= 1
+    #define pj_perror_wrapper_1(arg)	pj_perror_1 arg
+    /** Internal function. */
+    PJ_DECL(void) pj_perror_1(const char *sender, pj_status_t status, 
+			      const char *title_fmt, ...);
+#else
+    #define pj_perror_wrapper_1(arg)
+#endif
+
+/**
+ * @def pj_perror_wrapper_2(arg)
+ * Internal function to write log with verbosity 2. Will evaluate to
+ * empty expression if PJ_LOG_MAX_LEVEL is below 2.
+ * @param arg       Log expression.
+ */
+#if PJ_LOG_MAX_LEVEL >= 2
+    #define pj_perror_wrapper_2(arg)	pj_perror_2 arg
+    /** Internal function. */
+    PJ_DECL(void) pj_perror_2(const char *sender, pj_status_t status, 
+			      const char *title_fmt, ...);
+#else
+    #define pj_perror_wrapper_2(arg)
+#endif
+
+/**
+ * @def pj_perror_wrapper_3(arg)
+ * Internal function to write log with verbosity 3. Will evaluate to
+ * empty expression if PJ_LOG_MAX_LEVEL is below 3.
+ * @param arg       Log expression.
+ */
+#if PJ_LOG_MAX_LEVEL >= 3
+    #define pj_perror_wrapper_3(arg)	pj_perror_3 arg
+    /** Internal function. */
+    PJ_DECL(void) pj_perror_3(const char *sender, pj_status_t status, 
+			      const char *title_fmt, ...);
+#else
+    #define pj_perror_wrapper_3(arg)
+#endif
+
+/**
+ * @def pj_perror_wrapper_4(arg)
+ * Internal function to write log with verbosity 4. Will evaluate to
+ * empty expression if PJ_LOG_MAX_LEVEL is below 4.
+ * @param arg       Log expression.
+ */
+#if PJ_LOG_MAX_LEVEL >= 4
+    #define pj_perror_wrapper_4(arg)	pj_perror_4 arg
+    /** Internal function. */
+    PJ_DECL(void) pj_perror_4(const char *sender, pj_status_t status, 
+			      const char *title_fmt, ...);
+#else
+    #define pj_perror_wrapper_4(arg)
+#endif
+
+/**
+ * @def pj_perror_wrapper_5(arg)
+ * Internal function to write log with verbosity 5. Will evaluate to
+ * empty expression if PJ_LOG_MAX_LEVEL is below 5.
+ * @param arg       Log expression.
+ */
+#if PJ_LOG_MAX_LEVEL >= 5
+    #define pj_perror_wrapper_5(arg)	pj_perror_5 arg
+    /** Internal function. */
+    PJ_DECL(void) pj_perror_5(const char *sender, pj_status_t status, 
+			      const char *title_fmt, ...);
+#else
+    #define pj_perror_wrapper_5(arg)
+#endif
+
+/**
+ * @def pj_perror_wrapper_6(arg)
+ * Internal function to write log with verbosity 6. Will evaluate to
+ * empty expression if PJ_LOG_MAX_LEVEL is below 6.
+ * @param arg       Log expression.
+ */
+#if PJ_LOG_MAX_LEVEL >= 6
+    #define pj_perror_wrapper_6(arg)	pj_perror_6 arg
+    /** Internal function. */
+    PJ_DECL(void) pj_perror_6(const char *sender, pj_status_t status, 
+			      const char *title_fmt, ...);
+#else
+    #define pj_perror_wrapper_6(arg)
+#endif
+
+
+
+
 PJ_END_DECL
 
 #endif	/* __PJ_ERRNO_H__ */
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/sock.h b/sflphone-common/libs/pjproject/pjlib/include/pj/sock.h
index b0bbfe283c..90c9f05ce8 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/sock.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/sock.h
@@ -1,4 +1,4 @@
-/* $Id: sock.h 2863 2009-08-12 10:56:06Z bennylp $ */
+/* $Id: sock.h 2966 2009-10-25 09:02:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -290,6 +290,17 @@ extern const pj_uint16_t PJ_SO_RCVBUF;
 /** Buffer size for send. @see pj_SO_SNDBUF() */
 extern const pj_uint16_t PJ_SO_SNDBUF;
 
+/** Disables the Nagle algorithm for send coalescing. @see pj_TCP_NODELAY */
+extern const pj_uint16_t PJ_TCP_NODELAY;
+
+/** Allows the socket to be bound to an address that is already in use.
+ *  @see pj_SO_REUSEADDR */
+extern const pj_uint16_t PJ_SO_REUSEADDR;
+
+/** Set the protocol-defined priority for all packets to be sent on socket.
+ */
+extern const pj_uint16_t PJ_SO_PRIORITY;
+
 /** IP multicast interface. @see pj_IP_MULTICAST_IF() */
 extern const pj_uint16_t PJ_IP_MULTICAST_IF;
  
@@ -316,6 +327,15 @@ extern const pj_uint16_t PJ_IP_DROP_MEMBERSHIP;
     /** Get #PJ_SO_SNDBUF constant */
     PJ_DECL(pj_uint16_t) pj_SO_SNDBUF(void);
 
+    /** Get #PJ_TCP_NODELAY constant */
+    PJ_DECL(pj_uint16_t) pj_TCP_NODELAY(void);
+
+    /** Get #PJ_SO_REUSEADDR constant */
+    PJ_DECL(pj_uint16_t) pj_SO_REUSEADDR(void);
+
+    /** Get #PJ_SO_PRIORITY constant */
+    PJ_DECL(pj_uint16_t) pj_SO_PRIORITY(void);
+
     /** Get #PJ_IP_MULTICAST_IF constant */
     PJ_DECL(pj_uint16_t) pj_IP_MULTICAST_IF(void);
 
@@ -340,6 +360,15 @@ extern const pj_uint16_t PJ_IP_DROP_MEMBERSHIP;
     /** Get #PJ_SO_SNDBUF constant */
 #   define pj_SO_SNDBUF()   PJ_SO_SNDBUF
 
+    /** Get #PJ_TCP_NODELAY constant */
+#   define pj_TCP_NODELAY() PJ_TCP_NODELAY
+
+    /** Get #PJ_SO_REUSEADDR constant */
+#   define pj_SO_REUSEADDR() PJ_SO_REUSEADDR
+
+    /** Get #PJ_SO_PRIORITY constant */
+#   define pj_SO_PRIORITY() PJ_SO_PRIORITY
+
     /** Get #PJ_IP_MULTICAST_IF constant */
 #   define pj_IP_MULTICAST_IF()    PJ_IP_MULTICAST_IF
 
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/sock_qos.h b/sflphone-common/libs/pjproject/pjlib/include/pj/sock_qos.h
new file mode 100644
index 0000000000..4422253b68
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/sock_qos.h
@@ -0,0 +1,427 @@
+/* $Id: sock_qos.h 2967 2009-10-25 10:50:17Z bennylp $ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * 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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#ifndef __PJ_SOCK_QOS_H__
+#define __PJ_SOCK_QOS_H__
+
+/**
+ * @file sock_qos.h
+ * @brief Socket QoS API
+ */
+
+#include <pj/sock.h>
+
+PJ_BEGIN_DECL 
+
+
+/**
+ * @defgroup socket_qos Socket Quality of Service (QoS) API: TOS, DSCP, WMM, IEEE 802.1p
+ * @ingroup PJ_SOCK
+ * @{
+
+
+    \section intro QoS Technologies
+
+    QoS settings are available for both Layer 2 and 3 of TCP/IP protocols:
+
+    \subsection intro_ieee8021p Layer 2: IEEE 802.1p for Ethernet
+
+    IEEE 802.1p tagging will mark frames sent by a host for prioritized 
+    delivery using a 3-bit Priority field in the virtual local area network 
+    (VLAN) header of the Ethernet frame. The VLAN header is placed inside 
+    the Ethernet header, between the Source Address field and either the 
+    Length field (for an IEEE 802.3 frame) or the EtherType field (for an
+    Ethernet II frame).
+
+    \subsection intro_wmm Layer 2: WMM
+
+    At the Network Interface layer for IEEE 802.11 wireless, the Wi-Fi 
+    Alliance certification for Wi-Fi Multimedia (WMM) defines four access 
+    categories for prioritizing network traffic. These access categories 
+    are (in order of highest to lowest priority) voice, video, best-effort, 
+    and background. Host support for WMM prioritization requires that both 
+    wireless network adapters and their drivers support WMM. Wireless 
+    access points (APs) must have WMM enabled.
+
+    \subsection intro_dscp Layer 3: DSCP
+
+    At the Internet layer, you can use Differentiated Services/Diffserv and
+    set the value of the Differentiated Services Code Point (DSCP) in the 
+    IP header. As defined in RFC 2474, the DSCP value is the high-order 6 bits
+    of the IP version 4 (IPv4) TOS field and the IP version 6 (IPv6) Traffic 
+    Class field.
+
+    \subsection intro_other Layer 3: Other
+
+    Other mechanisms exist (such as RSVP, IntServ) but this will not be 
+    implemented.
+
+
+    \section availability QoS Availability
+
+    \subsection linux Linux
+
+    DSCP is available via IP TOS option.
+
+    Ethernet 802.1p tagging is done by setting setsockopt(SO_PRIORITY) option 
+    of the socket, then with the set_egress_map option of the vconfig utility 
+    to convert this to set vlan-qos field of the packet.
+
+    WMM is not known to be available.
+
+    \subsection windows Windows and Windows Mobile
+
+    (It's a mess!)
+
+    DSCP is settable with setsockopt() on Windows 2000 or older, but Windows 
+    would silently ignore this call on WinXP or later, unless administrator 
+    modifies the registry. On Windows 2000, Windows XP, and Windows Server 
+    2003, GQoS (Generic QoS) API is the standard API, but this API may not be
+    supported in the future. On Vista and Windows 7, the is a new QoS2 API, 
+    also known as Quality Windows Audio-Video Experience (qWAVE).
+
+    IEEE 802.1p tagging is available via Traffic Control (TC) API, available
+    on Windows XP SP2, but this needs administrator access. For Vista and 
+    later, it's in qWAVE.
+
+    WMM is available for mobile platforms on Windows Mobile 6 platform and 
+    Windows Embedded CE 6, via setsockopt(IP_DSCP_TRAFFIC_TYPE). qWAVE 
+    supports this as well.
+
+    \subsection symbian Symbian S60 3rd Ed
+
+    Both DSCP and WMM is supported via RSocket::SetOpt() with will set both 
+    Layer 2 and Layer 3 QoS settings accordingly. Internally, PJLIB sets the
+    DSCP field of the socket, and based on certain DSCP values mapping,
+    Symbian will set the WMM tag accordingly.
+
+    \section api PJLIB's QoS API Abstraction
+
+    Based on the above, the following API is implemented.
+
+    Declare the following "standard" traffic types.
+
+    \code
+     typedef enum pj_qos_type
+     {
+	PJ_QOS_TYPE_BEST_EFFORT,
+	PJ_QOS_TYPE_BACKGROUND,
+	PJ_QOS_TYPE_VIDEO,
+	PJ_QOS_TYPE_VOICE,
+	PJ_QOS_TYPE_CONTROL
+     } pj_qos_type;
+    \endcode
+
+    The traffic classes above will determine how the Layer 2 and 3 QoS 
+    settings will be used. The standard mapping between the classes above 
+    to the corresponding Layer 2 and 3 settings are as follows:
+
+    \code
+    =================================================================
+    PJLIB Traffic Type 	IP DSCP 	WMM 		    802.1p
+    -----------------------------------------------------------------
+    BEST_EFFORT 	0x00 		BE (Bulk Effort) 	0
+    BACKGROUND 		0x08 		BK (Bulk) 		2
+    VIDEO 		0x28 		VI (Video) 		5
+    VOICE 		0x30 		VO (Voice) 		6
+    CONTROL 		0x38 		VO (Voice) 		7
+    =================================================================
+    \endcode
+
+    There are two sets of API provided to manipulate the QoS parameters.
+
+    \subsection portable_api Portable API
+
+    The first set of API is:
+
+    \code
+     // Set QoS parameters
+     PJ_DECL(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
+					       pj_qos_type val);
+
+     // Get QoS parameters
+     PJ_DECL(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
+					       pj_qos_type *p_val);
+    \endcode
+
+    The API will set the traffic type according to the DSCP class, for both 
+    Layer 2 and Layer 3 QoS settings, where it's available. If any of the 
+    layer QoS setting is not settable, the API will silently ignore it. 
+    If both layers are not setable, the API will return error.
+
+    The API above is the recommended use of QoS, since it is the most 
+    portable across all platforms.
+
+    \subsection detail_api Fine Grained Control API
+
+    The second set of API is intended for application that wants to fine 
+    tune the QoS parameters.
+
+    The Layer 2 and 3 QoS parameters are stored in pj_qos_params structure:
+
+    \code
+     typedef enum pj_qos_flag
+     {
+	PJ_QOS_PARAM_HAS_DSCP = 1,
+	PJ_QOS_PARAM_HAS_SO_PRIO = 2,
+	PJ_QOS_PARAM_HAS_WMM = 4
+     } pj_qos_flag;
+
+     typedef enum pj_qos_wmm_prio
+     {
+	PJ_QOS_WMM_PRIO_BULK_EFFORT,
+	PJ_QOS_WMM_PRIO_BULK,
+	PJ_QOS_WMM_PRIO_VIDEO,
+	PJ_QOS_WMM_PRIO_VOICE
+     } pj_qos_wmm_prio;
+
+     typedef struct pj_qos_params
+     {
+	pj_uint8_t      flags;    // Determines which values to 
+				  // set, bitmask of pj_qos_flag
+	pj_uint8_t      dscp_val; // The 6 bits DSCP value to set
+	pj_uint8_t      so_prio;  // SO_PRIORITY value
+	pj_qos_wmm_prio wmm_prio; // WMM priority value
+     } pj_qos_params;
+    \endcode
+
+    The second set of API with more fine-grained control over the parameters 
+    are:
+
+    \code
+     // Retrieve QoS params for the specified traffic type
+     PJ_DECL(pj_status_t) pj_qos_get_params(pj_qos_type type, 
+					    pj_qos_params *p);
+
+     // Set QoS parameters to the socket
+     PJ_DECL(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
+						 const pj_qos_params *p);
+
+     // Get QoS parameters from the socket
+     PJ_DECL(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
+						 pj_qos_params *p);
+    \endcode
+
+
+    Important:
+
+    The pj_sock_set/get_qos_params() APIs are not portable, and it's probably 
+    only going to be implemented on Linux. Application should always try to 
+    use pj_sock_set_qos_type() instead.
+ */
+
+
+/**
+ * High level traffic classification.
+ */
+typedef enum pj_qos_type
+{
+    PJ_QOS_TYPE_BEST_EFFORT,	/**< Best effort traffic (default value).
+				     Any QoS function calls with specifying
+				     this value are effectively no-op	*/
+    PJ_QOS_TYPE_BACKGROUND,	/**< Background traffic.		*/
+    PJ_QOS_TYPE_VIDEO,		/**< Video traffic.			*/
+    PJ_QOS_TYPE_VOICE,		/**< Voice traffic.			*/
+    PJ_QOS_TYPE_CONTROL		/**< Control traffic.			*/
+} pj_qos_type;
+
+/**
+ * Bitmask flag to indicate which QoS layer setting is set in the 
+ * \a flags field of the #pj_qos_params structure. 
+ */
+typedef enum pj_qos_flag
+{
+    PJ_QOS_PARAM_HAS_DSCP = 1,	    /**< DSCP field is set.	    */
+    PJ_QOS_PARAM_HAS_SO_PRIO = 2,   /**< Socket SO_PRIORITY	    */
+    PJ_QOS_PARAM_HAS_WMM = 4	    /**< WMM  field is set. 	    */
+} pj_qos_flag;
+
+
+/**
+ * Standard WMM priorities.
+ */
+typedef enum pj_qos_wmm_prio
+{
+    PJ_QOS_WMM_PRIO_BULK_EFFORT,	/**< Bulk effort priority   */
+    PJ_QOS_WMM_PRIO_BULK,		/**< Bulk priority.	    */
+    PJ_QOS_WMM_PRIO_VIDEO,		/**< Video priority	    */
+    PJ_QOS_WMM_PRIO_VOICE		/**< Voice priority	    */
+} pj_qos_wmm_prio;
+
+
+/**
+ * QoS parameters to be set or retrieved to/from the socket.
+ */
+typedef struct pj_qos_params
+{
+    pj_uint8_t      flags;    /**< Determines which values to 
+				   set, bitmask of pj_qos_flag	    */
+    pj_uint8_t      dscp_val; /**< The 6 bits DSCP value to set	    */
+    pj_uint8_t      so_prio;  /**< SO_PRIORITY value		    */
+    pj_qos_wmm_prio wmm_prio; /**< WMM priority value		    */
+} pj_qos_params;
+
+
+
+/**
+ * This is the high level and portable API to enable QoS on the specified 
+ * socket, by setting the traffic type to the specified parameter.
+ *
+ * @param sock	    The socket.
+ * @param type	    Traffic type to be set.
+ *
+ * @return	    PJ_SUCCESS if at least Layer 2 or Layer 3 setting is
+ *		    successfully set. If both Layer 2 and Layer 3 settings
+ *		    can't be set, this function will return error.
+ */
+PJ_DECL(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
+					  pj_qos_type type);
+
+/**
+ * This is the high level and portable API to get the traffic type that has
+ * been set on the socket. On occasions where the Layer 2 or Layer 3 settings
+ * were modified by using low level API, this function may return approximation
+ * of the closest QoS type that matches the settings.
+ *
+ * @param sock	    The socket.
+ * @param p_type    Pointer to receive the traffic type of the socket.
+ *
+ * @return	    PJ_SUCCESS if traffic type for the socket can be obtained
+ *		    or approximated..
+ */
+PJ_DECL(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
+					  pj_qos_type *p_type);
+
+
+/**
+ * This is a convenience function to apply QoS to the socket, and print error
+ * logging if the operations failed. Both QoS traffic type and the low level
+ * QoS parameters can be applied with this function.
+ *
+ * @param sock		The socket handle.
+ * @param qos_type	QoS traffic type. The QoS traffic type will be applied
+ *			only if the value is not PJ_QOS_TYPE_BEST_EFFORT,
+ * @param qos_params	Optional low-level QoS parameters. This will be 
+ *			applied only if this argument is not NULL and the 
+ *			flags inside the structure is non-zero. Upon return, 
+ *			the flags will indicate which parameters have been 
+ *			applied successfully.
+ * @param log_level	This function will print to log at this level upon
+ *			encountering errors.
+ * @param log_sender	Optional sender name in the log.
+ * @param sock_name	Optional name to help identify the socket in the log.
+ *
+ * @return		PJ_SUCCESS if at least Layer 2 or Layer 3 setting is
+ *			successfully set. If both Layer 2 and Layer 3 settings
+ *			can't be set, this function will return error.
+ *
+ * @see pj_sock_apply_qos2()
+ */
+PJ_DECL(pj_status_t) pj_sock_apply_qos(pj_sock_t sock,
+				       pj_qos_type qos_type,
+				       pj_qos_params *qos_params,
+				       unsigned log_level,
+				       const char *log_sender,
+				       const char *sock_name);
+
+/**
+ * Variant of #pj_sock_apply_qos() where the \a qos_params parameter is
+ * const.
+ *
+ * @see pj_sock_apply_qos()
+ */
+PJ_DECL(pj_status_t) pj_sock_apply_qos2(pj_sock_t sock,
+ 				        pj_qos_type qos_type,
+				        const pj_qos_params *qos_params,
+				        unsigned log_level,
+				        const char *log_sender,
+				        const char *sock_name);
+
+/**
+ * Retrieve the standard mapping of QoS params for the specified traffic
+ * type.
+ *
+ * @param type	    The traffic type from which the QoS parameters
+ *		    are to be retrieved.
+ * @param p_param   Pointer to receive the QoS parameters.
+ *
+ * @return	    PJ_SUCCESS on success or the appropriate error code.
+ */ 
+PJ_DECL(pj_status_t) pj_qos_get_params(pj_qos_type type, 
+				       pj_qos_params *p_param);
+
+
+/**
+ * Retrieve the traffic type that matches the specified QoS parameters.
+ * If no exact matching is found, this function will return an
+ * approximation of the closest matching traffic type for the specified
+ * QoS parameters.
+ *
+ * @param param	    Structure containing QoS parameters to map into
+ *		    "standard" traffic types.
+ * @param p_type    Pointer to receive the traffic type.
+ *
+ * @return	    PJ_SUCCESS on success or the appropriate error code.
+ */ 
+PJ_DECL(pj_status_t) pj_qos_get_type(const pj_qos_params *param,
+				     pj_qos_type *p_type);
+
+
+/**
+ * This is a low level API to set QoS parameters to the socket.
+ *
+ * @param sock	    The socket.
+ * @param param	    Structure containing QoS parameters to be applied
+ *		    to the socket. Upon return, the \a flags field
+ *		    of this structure will be set with bitmask value
+ *		    indicating which QoS settings have successfully
+ *		    been applied to the socket.
+ *
+ * @return	    PJ_SUCCESS if at least one field setting has been
+ *		    successfully set. If no setting can't be set, 
+ *		    this function will return error.
+ */ 
+PJ_DECL(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
+					    pj_qos_params *param);
+
+/**
+ * This is a low level API to get QoS parameters from the socket.
+ *
+ * @param sock	    The socket.
+ * @param p_param   Pointer to receive the parameters. Upon returning
+ *		    successfully, the \a flags field of this structure
+ *		    will be initialized with the appropriate bitmask
+ *		    to indicate which fields have been successfully
+ *		    retrieved.
+ *
+ * @return	    PJ_SUCCESS on success or the appropriate error code.
+ */
+PJ_DECL(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
+					    pj_qos_params *p_param);
+
+
+/**
+ * @}
+ */
+
+
+PJ_END_DECL
+
+#endif	/* __PJ_SOCK_QOS_H__ */
+
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/ssl_sock.h b/sflphone-common/libs/pjproject/pjlib/include/pj/ssl_sock.h
new file mode 100644
index 0000000000..3ac2b7f2bf
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/ssl_sock.h
@@ -0,0 +1,874 @@
+/* $Id: ssl_sock.h 2998 2009-11-09 08:51:34Z bennylp $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#ifndef __PJ_SSL_SOCK_H__
+#define __PJ_SSL_SOCK_H__
+
+/**
+ * @file ssl_sock.h
+ * @brief Secure socket
+ */
+
+#include <pj/ioqueue.h>
+#include <pj/sock.h>
+#include <pj/sock_qos.h>
+
+
+PJ_BEGIN_DECL
+
+/**
+ * @defgroup PJ_SSL_SOCK Secure socket I/O
+ * @brief Secure socket provides security on socket operation using standard
+ * security protocols such as SSL and TLS.
+ * @ingroup PJ_IO
+ * @{
+ *
+ * Secure socket wraps normal socket and applies security features, i.e: 
+ * privacy and data integrity, on the socket traffic, using standard security
+ * protocols such as SSL and TLS.
+ *
+ * Secure socket employs active socket operations, which is similar to (and
+ * described more detail) in \ref PJ_ACTIVESOCK.
+ */
+
+
+ /**
+ * This opaque structure describes the secure socket.
+ */
+typedef struct pj_ssl_sock_t pj_ssl_sock_t;
+
+
+/**
+ * Opaque declaration of endpoint certificate or credentials. This may contains
+ * certificate, private key, and trusted Certificate Authorities list.
+ */
+typedef struct pj_ssl_cert_t pj_ssl_cert_t;
+
+
+/**
+ * Describe structure of certificate info.
+ */
+typedef struct pj_ssl_cert_info {
+    pj_str_t	subject;	    /**< Subject.		*/
+    pj_str_t	issuer;		    /**< Issuer.		*/
+    unsigned	version;	    /**< Certificate version.	*/
+    pj_time_val	validity_start;	    /**< Validity start.	*/
+    pj_time_val	validity_end;	    /**< Validity end.		*/
+    pj_bool_t	validity_use_gmt;   /**< Flag if validity date/time 
+					 use GMT.		*/
+} pj_ssl_cert_info;
+
+
+/**
+ * Create credential from files.
+ *
+ * @param CA_file	The file of trusted CA list.
+ * @param cert_file	The file of certificate.
+ * @param privkey_file	The file of private key.
+ * @param privkey_pass	The password of private key, if any.
+ * @param p_cert	Pointer to credential instance to be created.
+ *
+ * @return		PJ_SUCCESS when successful.
+ */
+PJ_DECL(pj_status_t) pj_ssl_cert_load_from_files(pj_pool_t *pool,
+						 const pj_str_t *CA_file,
+						 const pj_str_t *cert_file,
+						 const pj_str_t *privkey_file,
+						 const pj_str_t *privkey_pass,
+						 pj_ssl_cert_t **p_cert);
+
+
+/** 
+ * Cipher suites enumeration.
+ */
+typedef enum pj_ssl_cipher {
+
+    /* NULL */
+    TLS_NULL_WITH_NULL_NULL               = 0x00000000,
+
+    /* TLS/SSLv3 */
+    TLS_RSA_WITH_NULL_MD5                 = 0x00000001,
+    TLS_RSA_WITH_NULL_SHA                 = 0x00000002,
+    TLS_RSA_WITH_NULL_SHA256              = 0x0000003B,
+    TLS_RSA_WITH_RC4_128_MD5              = 0x00000004,
+    TLS_RSA_WITH_RC4_128_SHA              = 0x00000005,
+    TLS_RSA_WITH_3DES_EDE_CBC_SHA         = 0x0000000A,
+    TLS_RSA_WITH_AES_128_CBC_SHA          = 0x0000002F,
+    TLS_RSA_WITH_AES_256_CBC_SHA          = 0x00000035,
+    TLS_RSA_WITH_AES_128_CBC_SHA256       = 0x0000003C,
+    TLS_RSA_WITH_AES_256_CBC_SHA256       = 0x0000003D,
+    TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA      = 0x0000000D,
+    TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA      = 0x00000010,
+    TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA     = 0x00000013,
+    TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA     = 0x00000016,
+    TLS_DH_DSS_WITH_AES_128_CBC_SHA       = 0x00000030,
+    TLS_DH_RSA_WITH_AES_128_CBC_SHA       = 0x00000031,
+    TLS_DHE_DSS_WITH_AES_128_CBC_SHA      = 0x00000032,
+    TLS_DHE_RSA_WITH_AES_128_CBC_SHA      = 0x00000033,
+    TLS_DH_DSS_WITH_AES_256_CBC_SHA       = 0x00000036,
+    TLS_DH_RSA_WITH_AES_256_CBC_SHA       = 0x00000037,
+    TLS_DHE_DSS_WITH_AES_256_CBC_SHA      = 0x00000038,
+    TLS_DHE_RSA_WITH_AES_256_CBC_SHA      = 0x00000039,
+    TLS_DH_DSS_WITH_AES_128_CBC_SHA256    = 0x0000003E,
+    TLS_DH_RSA_WITH_AES_128_CBC_SHA256    = 0x0000003F,
+    TLS_DHE_DSS_WITH_AES_128_CBC_SHA256   = 0x00000040,
+    TLS_DHE_RSA_WITH_AES_128_CBC_SHA256   = 0x00000067,
+    TLS_DH_DSS_WITH_AES_256_CBC_SHA256    = 0x00000068,
+    TLS_DH_RSA_WITH_AES_256_CBC_SHA256    = 0x00000069,
+    TLS_DHE_DSS_WITH_AES_256_CBC_SHA256   = 0x0000006A,
+    TLS_DHE_RSA_WITH_AES_256_CBC_SHA256   = 0x0000006B,
+    TLS_DH_anon_WITH_RC4_128_MD5          = 0x00000018,
+    TLS_DH_anon_WITH_3DES_EDE_CBC_SHA     = 0x0000001B,
+    TLS_DH_anon_WITH_AES_128_CBC_SHA      = 0x00000034,
+    TLS_DH_anon_WITH_AES_256_CBC_SHA      = 0x0000003A,
+    TLS_DH_anon_WITH_AES_128_CBC_SHA256   = 0x0000006C,
+    TLS_DH_anon_WITH_AES_256_CBC_SHA256   = 0x0000006D,
+
+    /* TLS (deprecated) */
+    TLS_RSA_EXPORT_WITH_RC4_40_MD5        = 0x00000003,
+    TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5    = 0x00000006,
+    TLS_RSA_WITH_IDEA_CBC_SHA             = 0x00000007,
+    TLS_RSA_EXPORT_WITH_DES40_CBC_SHA     = 0x00000008,
+    TLS_RSA_WITH_DES_CBC_SHA              = 0x00000009,
+    TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA  = 0x0000000B,
+    TLS_DH_DSS_WITH_DES_CBC_SHA           = 0x0000000C,
+    TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA  = 0x0000000E,
+    TLS_DH_RSA_WITH_DES_CBC_SHA           = 0x0000000F,
+    TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x00000011,
+    TLS_DHE_DSS_WITH_DES_CBC_SHA          = 0x00000012,
+    TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000014,
+    TLS_DHE_RSA_WITH_DES_CBC_SHA          = 0x00000015,
+    TLS_DH_anon_EXPORT_WITH_RC4_40_MD5    = 0x00000017,
+    TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x00000019,
+    TLS_DH_anon_WITH_DES_CBC_SHA          = 0x0000001A,
+
+    /* SSLv3 */
+    SSL_FORTEZZA_KEA_WITH_NULL_SHA        = 0x0000001C,
+    SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA= 0x0000001D,
+    SSL_FORTEZZA_KEA_WITH_RC4_128_SHA     = 0x0000001E,
+    
+    /* SSLv2 */
+    SSL_CK_RC4_128_WITH_MD5               = 0x00010080,
+    SSL_CK_RC4_128_EXPORT40_WITH_MD5      = 0x00020080,
+    SSL_CK_RC2_128_CBC_WITH_MD5           = 0x00030080,
+    SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5  = 0x00040080,
+    SSL_CK_IDEA_128_CBC_WITH_MD5          = 0x00050080,
+    SSL_CK_DES_64_CBC_WITH_MD5            = 0x00060040,
+    SSL_CK_DES_192_EDE3_CBC_WITH_MD5      = 0x000700C0
+
+} pj_ssl_cipher;
+
+
+/**
+ * Get cipher list supported by SSL/TLS backend.
+ *
+ * @param ciphers	The ciphers buffer to receive cipher list.
+ * @param cipher_num	Maximum number of ciphers to be received.
+ *
+ * @return		PJ_SUCCESS when successful.
+ */
+PJ_DECL(pj_status_t) pj_ssl_cipher_get_availables(pj_ssl_cipher ciphers[],
+					          unsigned *cipher_num);
+
+
+/**
+ * Get cipher name string.
+ *
+ * @param cipher	The cipher.
+ *
+ * @return		The cipher name or NULL if cipher is not recognized.
+ */
+PJ_DECL(const char*) pj_ssl_cipher_name(pj_ssl_cipher cipher);
+
+
+/**
+ * This structure contains the callbacks to be called by the secure socket.
+ */
+typedef struct pj_ssl_sock_cb
+{
+    /**
+     * This callback is called when a data arrives as the result of
+     * pj_ssl_sock_start_read().
+     *
+     * @param ssock	The secure socket.
+     * @param data	The buffer containing the new data, if any. If 
+     *			the status argument is non-PJ_SUCCESS, this 
+     *			argument may be NULL.
+     * @param size	The length of data in the buffer.
+     * @param status	The status of the read operation. This may contain
+     *			non-PJ_SUCCESS for example when the TCP connection
+     *			has been closed. In this case, the buffer may
+     *			contain left over data from previous callback which
+     *			the application may want to process.
+     * @param remainder	If application wishes to leave some data in the 
+     *			buffer (common for TCP applications), it should 
+     *			move the remainder data to the front part of the 
+     *			buffer and set the remainder length here. The value
+     *			of this parameter will be ignored for datagram
+     *			sockets.
+     *
+     * @return		PJ_TRUE if further read is desired, and PJ_FALSE 
+     *			when application no longer wants to receive data.
+     *			Application may destroy the secure socket in the
+     *			callback and return PJ_FALSE here.
+     */
+    pj_bool_t (*on_data_read)(pj_ssl_sock_t *ssock,
+			      void *data,
+			      pj_size_t size,
+			      pj_status_t status,
+			      pj_size_t *remainder);
+    /**
+     * This callback is called when a packet arrives as the result of
+     * pj_ssl_sock_start_recvfrom().
+     *
+     * @param ssock	The secure socket.
+     * @param data	The buffer containing the packet, if any. If 
+     *			the status argument is non-PJ_SUCCESS, this 
+     *			argument will be set to NULL.
+     * @param size	The length of packet in the buffer. If 
+     *			the status argument is non-PJ_SUCCESS, this 
+     *			argument will be set to zero.
+     * @param src_addr	Source address of the packet.
+     * @param addr_len	Length of the source address.
+     * @param status	This contains
+     *
+     * @return		PJ_TRUE if further read is desired, and PJ_FALSE 
+     *			when application no longer wants to receive data.
+     *			Application may destroy the secure socket in the
+     *			callback and return PJ_FALSE here.
+     */
+    pj_bool_t (*on_data_recvfrom)(pj_ssl_sock_t *ssock,
+				  void *data,
+				  pj_size_t size,
+				  const pj_sockaddr_t *src_addr,
+				  int addr_len,
+				  pj_status_t status);
+
+    /**
+     * This callback is called when data has been sent.
+     *
+     * @param ssock	The secure socket.
+     * @param send_key	Key associated with the send operation.
+     * @param sent	If value is positive non-zero it indicates the
+     *			number of data sent. When the value is negative,
+     *			it contains the error code which can be retrieved
+     *			by negating the value (i.e. status=-sent).
+     *
+     * @return		Application may destroy the secure socket in the
+     *			callback and return PJ_FALSE here.
+     */
+    pj_bool_t (*on_data_sent)(pj_ssl_sock_t *ssock,
+			      pj_ioqueue_op_key_t *send_key,
+			      pj_ssize_t sent);
+
+    /**
+     * This callback is called when new connection arrives as the result
+     * of pj_ssl_sock_start_accept().
+     *
+     * @param ssock	The secure socket.
+     * @param newsock	The new incoming secure socket.
+     * @param src_addr	The source address of the connection.
+     * @param addr_len	Length of the source address.
+     *
+     * @return		PJ_TRUE if further accept() is desired, and PJ_FALSE
+     *			when application no longer wants to accept incoming
+     *			connection. Application may destroy the secure socket
+     *			in the callback and return PJ_FALSE here.
+     */
+    pj_bool_t (*on_accept_complete)(pj_ssl_sock_t *ssock,
+				    pj_ssl_sock_t *newsock,
+				    const pj_sockaddr_t *src_addr,
+				    int src_addr_len);
+
+    /**
+     * This callback is called when pending connect operation has been
+     * completed.
+     *
+     * @param ssock	The secure socket.
+     * @param status	The connection result. If connection has been
+     *			successfully established, the status will contain
+     *			PJ_SUCCESS.
+     *
+     * @return		Application may destroy the secure socket in the
+     *			callback and return PJ_FALSE here. 
+     */
+    pj_bool_t (*on_connect_complete)(pj_ssl_sock_t *ssock,
+				     pj_status_t status);
+
+} pj_ssl_sock_cb;
+
+
+/** 
+ * Enumeration of secure socket protocol types.
+ */
+typedef enum pj_ssl_sock_proto
+{
+    PJ_SSL_SOCK_PROTO_DEFAULT,	    /**< Default protocol of backend.	*/
+    PJ_SSL_SOCK_PROTO_TLS1,	    /**< TLSv1.0 protocol.		*/
+    PJ_SSL_SOCK_PROTO_SSL3,	    /**< SSLv3.0 protocol.		*/
+    PJ_SSL_SOCK_PROTO_SSL23,	    /**< SSLv3.0 but can roll back to 
+					 SSLv2.0.			*/
+    PJ_SSL_SOCK_PROTO_SSL2,	    /**< SSLv2.0 protocol.		*/
+    PJ_SSL_SOCK_PROTO_DTLS1	    /**< DTLSv1.0 protocol.		*/
+} pj_ssl_sock_proto;
+
+
+/**
+ * Definition of secure socket info structure.
+ */
+typedef struct pj_ssl_sock_info 
+{
+    /**
+     * Describes whether secure socket connection is established, i.e: TLS/SSL 
+     * handshaking has been done successfully.
+     */
+    pj_bool_t established;
+
+    /**
+     * Describes secure socket protocol being used.
+     */
+    pj_ssl_sock_proto proto;
+
+    /**
+     * Describes cipher suite being used, this will only be set when connection
+     * is established.
+     */
+    pj_ssl_cipher cipher;
+
+    /**
+     * Describes local address.
+     */
+    pj_sockaddr local_addr;
+
+    /**
+     * Describes remote address.
+     */
+    pj_sockaddr remote_addr;
+   
+    /**
+     * Describes active local certificate info.
+     */
+    pj_ssl_cert_info local_cert_info;
+   
+    /**
+     * Describes active remote certificate info.
+     */
+    pj_ssl_cert_info remote_cert_info;
+   
+} pj_ssl_sock_info;
+
+
+/**
+ * Definition of secure socket creation parameters.
+ */
+typedef struct pj_ssl_sock_param
+{
+    /**
+     * Specifies socket address family, either pj_AF_INET() and pj_AF_INET6().
+     *
+     * Default is pj_AF_INET().
+     */
+    int sock_af;
+
+    /**
+     * Specify socket type, either pj_SOCK_DGRAM() or pj_SOCK_STREAM().
+     *
+     * Default is pj_SOCK_STREAM().
+     */
+    int sock_type;
+
+    /**
+     * Specify the ioqueue to use. Secure socket uses the ioqueue to perform
+     * active socket operations, see \ref PJ_ACTIVESOCK for more detail.
+     */
+    pj_ioqueue_t *ioqueue;
+
+    /**
+     * Specify the timer heap to use. Secure socket uses the timer to provide
+     * auto cancelation on asynchronous operation when it takes longer time 
+     * than specified timeout period, e.g: security negotiation timeout.
+     */
+    pj_timer_heap_t *timer_heap;
+
+    /**
+     * Specify secure socket callbacks, see #pj_ssl_sock_cb.
+     */
+    pj_ssl_sock_cb cb;
+
+    /**
+     * Specify secure socket user data.
+     */
+    void *user_data;
+
+    /**
+     * Specify security protocol to use, see #pj_ssl_sock_proto.
+     *
+     * Default is PJ_SSL_SOCK_PROTO_DEFAULT.
+     */
+    pj_ssl_sock_proto proto;
+
+    /**
+     * Number of concurrent asynchronous operations that is to be supported
+     * by the secure socket. This value only affects socket receive and
+     * accept operations -- the secure socket will issue one or more 
+     * asynchronous read and accept operations based on the value of this
+     * field. Setting this field to more than one will allow more than one
+     * incoming data or incoming connections to be processed simultaneously
+     * on multiprocessor systems, when the ioqueue is polled by more than
+     * one threads.
+     *
+     * The default value is 1.
+     */
+    unsigned async_cnt;
+
+    /**
+     * The ioqueue concurrency to be forced on the socket when it is 
+     * registered to the ioqueue. See #pj_ioqueue_set_concurrency() for more
+     * info about ioqueue concurrency.
+     *
+     * When this value is -1, the concurrency setting will not be forced for
+     * this socket, and the socket will inherit the concurrency setting of 
+     * the ioqueue. When this value is zero, the secure socket will disable
+     * concurrency for the socket. When this value is +1, the secure socket
+     * will enable concurrency for the socket.
+     *
+     * The default value is -1.
+     */
+    int concurrency;
+
+    /**
+     * If this option is specified, the secure socket will make sure that
+     * asynchronous send operation with stream oriented socket will only
+     * call the callback after all data has been sent. This means that the
+     * secure socket will automatically resend the remaining data until
+     * all data has been sent.
+     *
+     * Please note that when this option is specified, it is possible that
+     * error is reported after partial data has been sent. Also setting
+     * this will disable the ioqueue concurrency for the socket.
+     *
+     * Default value is 1.
+     */
+    pj_bool_t whole_data;
+
+    /**
+     * Specify buffer size for sending operation. Buffering sending data
+     * is used for allowing application to perform multiple outstanding 
+     * send operations. Whenever application specifies this setting too
+     * small, sending operation may return PJ_ENOMEM.
+     *  
+     * Default value is 8192 bytes.
+     */
+    pj_size_t send_buffer_size;
+
+    /**
+     * Specify buffer size for receiving encrypted (and perhaps compressed)
+     * data on underlying socket. This setting is unused on Symbian, since 
+     * SSL/TLS Symbian backend, CSecureSocket, can use application buffer 
+     * directly.
+     *
+     * Default value is 1500.
+     */
+    pj_size_t read_buffer_size;
+
+    /**
+     * Number of ciphers contained in the specified cipher preference. 
+     * If this is set to zero, then default cipher list of the backend 
+     * will be used.
+     */
+    unsigned ciphers_num;
+
+    /**
+     * Ciphers and order preference. If empty, then default cipher list and
+     * its default order of the backend will be used.
+     */
+    pj_ssl_cipher *ciphers;
+
+    /**
+     * Security negotiation timeout. If this is set to zero (both sec and 
+     * msec), the negotiation doesn't have a timeout.
+     *
+     * Default value is zero.
+     */
+    pj_time_val	timeout;
+
+    /**
+     * Specify whether endpoint should verify peer certificate.
+     *
+     * Default value is PJ_FALSE.
+     */
+    pj_bool_t verify_peer;
+    
+    /**
+     * When secure socket is acting as server (handles incoming connection),
+     * it will require the client to provide certificate.
+     *
+     * Default value is PJ_FALSE.
+     */
+    pj_bool_t require_client_cert;
+
+    /**
+     * When secure socket is acting as client (perform outgoing connection)
+     * and it needs to verify server name (e.g: host or domain name) by
+     * matching it to the name specified in the server certificate. This 
+     * setting is useful when the server is hosting multiple domains for
+     * the same listening socket.
+     *
+     * Default value is zero/not-set.
+     */
+    pj_str_t server_name;
+
+    /**
+     * QoS traffic type to be set on this transport. When application wants
+     * to apply QoS tagging to the transport, it's preferable to set this
+     * field rather than \a qos_param fields since this is more portable.
+     *
+     * Default value is PJ_QOS_TYPE_BEST_EFFORT.
+     */
+    pj_qos_type qos_type;
+
+    /**
+     * Set the low level QoS parameters to the transport. This is a lower
+     * level operation than setting the \a qos_type field and may not be
+     * supported on all platforms.
+     *
+     * By default all settings in this structure are disabled.
+     */
+    pj_qos_params qos_params;
+
+    /**
+     * Specify if the transport should ignore any errors when setting the QoS
+     * traffic type/parameters.
+     *
+     * Default: PJ_TRUE
+     */
+    pj_bool_t qos_ignore_error;
+
+
+} pj_ssl_sock_param;
+
+
+/**
+ * Initialize the secure socket parameters for its creation with 
+ * the default values.
+ *
+ * @param param		The parameter to be initialized.
+ */
+PJ_DECL(void) pj_ssl_sock_param_default(pj_ssl_sock_param *param);
+
+
+/**
+ * Create secure socket instance.
+ *
+ * @param pool		The pool for allocating secure socket instance.
+ * @param param		The secure socket parameter, see #pj_ssl_sock_param.
+ * @param p_ssock	Pointer to secure socket instance to be created.
+ *
+ * @return		PJ_SUCCESS when successful.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_create(pj_pool_t *pool,
+					const pj_ssl_sock_param *param,
+					pj_ssl_sock_t **p_ssock);
+
+
+/**
+ * Set secure socket certificate or credentials. Credentials may include 
+ * certificate, private key and trusted Certification Authorities list. 
+ * Normally, server socket must provide certificate (and private key).
+ * Socket client may also need to provide certificate in case requested
+ * by the server.
+ *
+ * @param ssock		The secure socket instance.
+ * @param pool		The pool.
+ * @param cert		The endpoint certificate/credentials, see
+ *			#pj_ssl_cert_t.
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_set_certificate(
+					    pj_ssl_sock_t *ssock,
+					    pj_pool_t *pool,
+					    const pj_ssl_cert_t *cert);
+
+
+/**
+ * Close and destroy the secure socket.
+ *
+ * @param ssock		The secure socket.
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_close(pj_ssl_sock_t *ssock);
+
+
+/**
+ * Associate arbitrary data with the secure socket. Application may
+ * inspect this data in the callbacks and associate it with higher
+ * level processing.
+ *
+ * @param ssock		The secure socket.
+ * @param user_data	The user data to be associated with the secure
+ *			socket.
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_set_user_data(pj_ssl_sock_t *ssock,
+					       void *user_data);
+
+/**
+ * Retrieve the user data previously associated with this secure
+ * socket.
+ *
+ * @param ssock		The secure socket.
+ *
+ * @return		The user data.
+ */
+PJ_DECL(void*) pj_ssl_sock_get_user_data(pj_ssl_sock_t *ssock);
+
+
+/**
+ * Retrieve the local address and port used by specified secure socket.
+ *
+ * @param ssock		The secure socket.
+ * @param info		The info buffer to be set, see #pj_ssl_sock_info.
+ *
+ * @return		PJ_SUCCESS on successful.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_get_info(pj_ssl_sock_t *ssock,
+					  pj_ssl_sock_info *info);
+
+
+/**
+ * Starts read operation on this secure socket. This function will create
+ * \a async_cnt number of buffers (the \a async_cnt parameter was given
+ * in \a pj_ssl_sock_create() function) where each buffer is \a buff_size
+ * long. The buffers are allocated from the specified \a pool. Once the 
+ * buffers are created, it then issues \a async_cnt number of asynchronous
+ * \a recv() operations to the socket and returns back to caller. Incoming
+ * data on the socket will be reported back to application via the 
+ * \a on_data_read() callback.
+ *
+ * Application only needs to call this function once to initiate read
+ * operations. Further read operations will be done automatically by the
+ * secure socket when \a on_data_read() callback returns non-zero. 
+ *
+ * @param ssock		The secure socket.
+ * @param pool		Pool used to allocate buffers for incoming data.
+ * @param buff_size	The size of each buffer, in bytes.
+ * @param flags		Flags to be given to pj_ioqueue_recv().
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_read(pj_ssl_sock_t *ssock,
+					    pj_pool_t *pool,
+					    unsigned buff_size,
+					    pj_uint32_t flags);
+
+/**
+ * Same as #pj_ssl_sock_start_read(), except that the application
+ * supplies the buffers for the read operation so that the acive socket
+ * does not have to allocate the buffers.
+ *
+ * @param ssock		The secure socket.
+ * @param pool		Pool used to allocate buffers for incoming data.
+ * @param buff_size	The size of each buffer, in bytes.
+ * @param readbuf	Array of packet buffers, each has buff_size size.
+ * @param flags		Flags to be given to pj_ioqueue_recv().
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_read2(pj_ssl_sock_t *ssock,
+					     pj_pool_t *pool,
+					     unsigned buff_size,
+					     void *readbuf[],
+					     pj_uint32_t flags);
+
+/**
+ * Same as pj_ssl_sock_start_read(), except that this function is used
+ * only for datagram sockets, and it will trigger \a on_data_recvfrom()
+ * callback instead.
+ *
+ * @param ssock		The secure socket.
+ * @param pool		Pool used to allocate buffers for incoming data.
+ * @param buff_size	The size of each buffer, in bytes.
+ * @param flags		Flags to be given to pj_ioqueue_recvfrom().
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_recvfrom(pj_ssl_sock_t *ssock,
+						pj_pool_t *pool,
+						unsigned buff_size,
+						pj_uint32_t flags);
+
+/**
+ * Same as #pj_ssl_sock_start_recvfrom() except that the recvfrom() 
+ * operation takes the buffer from the argument rather than creating
+ * new ones.
+ *
+ * @param ssock		The secure socket.
+ * @param pool		Pool used to allocate buffers for incoming data.
+ * @param buff_size	The size of each buffer, in bytes.
+ * @param readbuf	Array of packet buffers, each has buff_size size.
+ * @param flags		Flags to be given to pj_ioqueue_recvfrom().
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_recvfrom2(pj_ssl_sock_t *ssock,
+						 pj_pool_t *pool,
+						 unsigned buff_size,
+						 void *readbuf[],
+						 pj_uint32_t flags);
+
+/**
+ * Send data using the socket.
+ *
+ * @param ssock		The secure socket.
+ * @param send_key	The operation key to send the data, which is useful
+ *			if application wants to submit multiple pending
+ *			send operations and want to track which exact data 
+ *			has been sent in the \a on_data_sent() callback.
+ * @param data		The data to be sent. This data must remain valid
+ *			until the data has been sent.
+ * @param size		The size of the data.
+ * @param flags		Flags to be given to pj_ioqueue_send().
+ *
+ * @return		PJ_SUCCESS if data has been sent immediately, or
+ *			PJ_EPENDING if data cannot be sent immediately or
+ *			PJ_ENOMEM when sending buffer could not handle all
+ *			queued data, see \a send_buffer_size. The callback
+ *			\a on_data_sent() will be called when data is actually
+ *			sent. Any other return value indicates error condition.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_send(pj_ssl_sock_t *ssock,
+				      pj_ioqueue_op_key_t *send_key,
+				      const void *data,
+				      pj_ssize_t *size,
+				      unsigned flags);
+
+/**
+ * Send datagram using the socket.
+ *
+ * @param ssock		The secure socket.
+ * @param send_key	The operation key to send the data, which is useful
+ *			if application wants to submit multiple pending
+ *			send operations and want to track which exact data 
+ *			has been sent in the \a on_data_sent() callback.
+ * @param data		The data to be sent. This data must remain valid
+ *			until the data has been sent.
+ * @param size		The size of the data.
+ * @param flags		Flags to be given to pj_ioqueue_send().
+ * @param addr		The destination address.
+ * @param addr_len	Length of buffer containing destination address.
+ *
+ * @return		PJ_SUCCESS if data has been sent immediately, or
+ *			PJ_EPENDING if data cannot be sent immediately. In
+ *			this case the \a on_data_sent() callback will be
+ *			called when data is actually sent. Any other return
+ *			value indicates error condition.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_sendto(pj_ssl_sock_t *ssock,
+					pj_ioqueue_op_key_t *send_key,
+					const void *data,
+					pj_ssize_t *size,
+					unsigned flags,
+					const pj_sockaddr_t *addr,
+					int addr_len);
+
+
+/**
+ * Starts asynchronous socket accept() operations on this secure socket. 
+ * This function will issue \a async_cnt number of asynchronous \a accept() 
+ * operations to the socket and returns back to caller. Incoming
+ * connection on the socket will be reported back to application via the
+ * \a on_accept_complete() callback.
+ *
+ * Application only needs to call this function once to initiate accept()
+ * operations. Further accept() operations will be done automatically by 
+ * the secure socket when \a on_accept_complete() callback returns non-zero.
+ *
+ * @param ssock		The secure socket.
+ * @param pool		Pool used to allocate some internal data for the
+ *			operation.
+ * @param localaddr	Local address to bind on.
+ * @param addr_len	Length of buffer containing local address.
+ *
+ * @return		PJ_SUCCESS if the operation has been successful,
+ *			or the appropriate error code on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_accept(pj_ssl_sock_t *ssock,
+					      pj_pool_t *pool,
+					      const pj_sockaddr_t *local_addr,
+					      int addr_len);
+
+
+/**
+ * Starts asynchronous socket connect() operation and SSL/TLS handshaking 
+ * for this socket. Once the connection is done (either successfully or not),
+ * the \a on_connect_complete() callback will be called.
+ *
+ * @param ssock		The secure socket.
+ * @param pool		The pool to allocate some internal data for the
+ *			operation.
+ * @param localaddr	Local address.
+ * @param remaddr	Remote address.
+ * @param addr_len	Length of buffer containing above addresses.
+ *
+ * @return		PJ_SUCCESS if connection can be established immediately
+ *			or PJ_EPENDING if connection cannot be established 
+ *			immediately. In this case the \a on_connect_complete()
+ *			callback will be called when connection is complete. 
+ *			Any other return value indicates error condition.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_connect(pj_ssl_sock_t *ssock,
+					       pj_pool_t *pool,
+					       const pj_sockaddr_t *localaddr,
+					       const pj_sockaddr_t *remaddr,
+					       int addr_len);
+
+
+/**
+ * Starts SSL/TLS renegotiation over an already established SSL connection
+ * for this socket. This operation is performed transparently, no callback 
+ * will be called once the renegotiation completed successfully. However, 
+ * when the renegotiation fails, the connection will be closed and callback
+ * \a on_data_read() will be invoked with non-PJ_SUCCESS status code.
+ *
+ * @param ssock		The secure socket.
+ *
+ * @return		PJ_SUCCESS if renegotiation is completed immediately,
+ *			or PJ_EPENDING if renegotiation has been started and
+ *			waiting for completion, or the appropriate error code 
+ *			on failure.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_renegotiate(pj_ssl_sock_t *ssock);
+
+
+/**
+ * @}
+ */
+
+PJ_END_DECL
+
+#endif	/* __PJ_SSL_SOCK_H__ */
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/timer.h b/sflphone-common/libs/pjproject/pjlib/include/pj/timer.h
index b0cbdb6ef1..dfb8bb4894 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/timer.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/timer.h
@@ -1,4 +1,4 @@
-/* $Id: timer.h 2512 2009-03-13 15:49:06Z bennylp $ */
+/* $Id: timer.h 3034 2009-12-16 13:30:34Z bennylp $ */
 /* 
  * 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
@@ -64,11 +64,7 @@ PJ_BEGIN_DECL
 /**
  * The type for internal timer ID.
  */
-#if defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0
-typedef void *pj_timer_id_t;
-#else
 typedef int pj_timer_id_t;
-#endif
 
 /** 
  * Forward declaration for pj_timer_entry. 
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pjlib.h b/sflphone-common/libs/pjproject/pjlib/include/pjlib.h
index acc12c426b..dcfa3bed96 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pjlib.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pjlib.h
@@ -1,4 +1,4 @@
-/* $Id: pjlib.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: pjlib.h 2970 2009-10-26 15:47:52Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -50,7 +50,9 @@
 #include <pj/rand.h>
 #include <pj/rbtree.h>
 #include <pj/sock.h>
+#include <pj/sock_qos.h>
 #include <pj/sock_select.h>
+#include <pj/ssl_sock.h>
 #include <pj/string.h>
 #include <pj/timer.h>
 #include <pj/unicode.h>
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/activesock.c b/sflphone-common/libs/pjproject/pjlib/src/pj/activesock.c
index 3d7451af7b..2c19fc9fc0 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/activesock.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/activesock.c
@@ -1,4 +1,4 @@
-/* $Id: activesock.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: activesock.c 2980 2009-11-03 12:58:54Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -458,8 +458,15 @@ static void ioqueue_on_read_complete(pj_ioqueue_key_t *key,
 		 * connection.
 		 * If there is no remainder data, set the packet to NULL.
 		 */
-		ret = (*asock->cb.on_data_read)(asock, (r->size? r->pkt:NULL),
-						r->size, status, &remainder);
+
+		/* Shouldn't set the packet to NULL, as there may be active 
+		 * socket user, such as SSL socket, that needs to have access
+		 * to the read buffer packet.
+		 */
+		//ret = (*asock->cb.on_data_read)(asock, (r->size? r->pkt:NULL),
+		//				r->size, status, &remainder);
+		ret = (*asock->cb.on_data_read)(asock, r->pkt, r->size,
+						status, &remainder);
 
 	    } else if (asock->read_type == TYPE_RECV_FROM && 
 		       asock->cb.on_data_recvfrom) 
@@ -711,12 +718,14 @@ static void ioqueue_on_accept_complete(pj_ioqueue_key_t *key,
     pj_activesock_t *asock = (pj_activesock_t*) pj_ioqueue_get_user_data(key);
     struct accept_op *accept_op = (struct accept_op*) op_key;
 
+    PJ_UNUSED_ARG(new_sock);
+
     do {
 	if (status==PJ_SUCCESS && asock->cb.on_accept_complete) {
 	    pj_bool_t ret;
 
 	    /* Notify callback */
-	    ret = (*asock->cb.on_accept_complete)(asock, new_sock,
+	    ret = (*asock->cb.on_accept_complete)(asock, accept_op->new_sock,
 						  &accept_op->rem_addr,
 						  accept_op->rem_addr_len);
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_sock.c b/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_sock.c
index bdce279ee3..3c3a946741 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_sock.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_sock.c
@@ -1,4 +1,4 @@
-/* $Id: addr_resolv_sock.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: addr_resolv_sock.c 3044 2010-01-04 16:54:50Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -73,18 +73,28 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
 
     /* Check if nodename is IP address */
     pj_bzero(&ai[0], sizeof(ai[0]));
-    ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
-    if (pj_inet_pton(af, nodename, pj_sockaddr_get_addr(&ai[0].ai_addr)) 
-	 == PJ_SUCCESS) 
-    {
-	pj_str_t tmp;
+    if (af == PJ_AF_UNSPEC) {
+	if (pj_inet_pton(PJ_AF_INET, nodename, 
+			 &ai[0].ai_addr.ipv4.sin_addr) == PJ_SUCCESS)
+	{
+	    af = PJ_AF_INET;
+	}
+	else if (pj_inet_pton(PJ_AF_INET6, nodename, 
+			      &ai[0].ai_addr.ipv6.sin6_addr) == PJ_SUCCESS)
+	{
+	    af = PJ_AF_INET6;
+	}
 
-	tmp.ptr = ai[0].ai_canonname;
-	pj_strncpy_with_null(&tmp, nodename, PJ_MAX_HOSTNAME);
-	ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
-	*count = 1;
+	if (af != PJ_AF_UNSPEC) {
+	    pj_str_t tmp;
 
-	return PJ_SUCCESS;
+	    tmp.ptr = ai[0].ai_canonname;
+	    pj_strncpy_with_null(&tmp, nodename, PJ_MAX_HOSTNAME);
+	    ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
+	    *count = 1;
+
+	    return PJ_SUCCESS;
+	}
     }
 
     /* Copy node name to null terminated string. */
@@ -121,6 +131,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
 	/* Store address */
 	PJ_ASSERT_ON_FAIL(res->ai_addrlen <= sizeof(pj_sockaddr), continue);
 	pj_memcpy(&ai[i].ai_addr, res->ai_addr, res->ai_addrlen);
+	PJ_SOCKADDR_RESET_LEN(&ai[i].ai_addr);
 
 	/* Next slot */
 	++i;
@@ -139,18 +150,28 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
 
     /* Check if nodename is IP address */
     pj_bzero(&ai[0], sizeof(ai[0]));
-    ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
-    if (pj_inet_pton(af, nodename, pj_sockaddr_get_addr(&ai[0].ai_addr)) 
-	 == PJ_SUCCESS) 
-    {
-	pj_str_t tmp;
+    if (af == PJ_AF_UNSPEC) {
+	if (pj_inet_pton(PJ_AF_INET, nodename, 
+			 &ai[0].ai_addr.ipv4.sin_addr) == PJ_SUCCESS)
+	{
+	    af = PJ_AF_INET;
+	}
+	else if (pj_inet_pton(PJ_AF_INET6, nodename, 
+			      &ai[0].ai_addr.ipv6.sin6_addr) == PJ_SUCCESS)
+	{
+	    af = PJ_AF_INET6;
+	}
 
-	tmp.ptr = ai[0].ai_canonname;
-	pj_strncpy_with_null(&tmp, nodename, PJ_MAX_HOSTNAME);
-	ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
-	*count = 1;
+	if (af != PJ_AF_UNSPEC) {
+	    pj_str_t tmp;
 
-	return PJ_SUCCESS;
+	    tmp.ptr = ai[0].ai_canonname;
+	    pj_strncpy_with_null(&tmp, nodename, PJ_MAX_HOSTNAME);
+	    ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
+	    *count = 1;
+
+	    return PJ_SUCCESS;
+	}
     }
 
     if (af == PJ_AF_INET || af == PJ_AF_UNSPEC) {
@@ -180,6 +201,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
 	    ai[*count].ai_addr.ipv4.sin_family = PJ_AF_INET;
 	    pj_memcpy(&ai[*count].ai_addr.ipv4.sin_addr,
 		      he.h_addr_list[i], he.h_length);
+	    PJ_SOCKADDR_RESET_LEN(&ai[*count].ai_addr);
 
 	    (*count)++;
 	}
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp
index 98833dbedb..a0f4453dce 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: addr_resolv_symbian.cpp 2888 2009-08-17 11:29:39Z nanang $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/addr_resolv.h>
 #include <pj/assert.h>
@@ -27,199 +27,175 @@
 #include <pj/unicode.h>
 
 #include "os_symbian.h"
-
+ 
 #define THIS_FILE 	"addr_resolv_symbian.cpp"
 #define TRACE_ME	0
 
 
 // PJLIB API: resolve hostname
-PJ_DEF (pj_status_t) pj_gethostbyname (const pj_str_t *name, pj_hostent *he)
+PJ_DEF(pj_status_t) pj_gethostbyname(const pj_str_t *name, pj_hostent *he)
 {
     static pj_addrinfo ai;
     static char *aliases[2];
     static char *addrlist[2];
     unsigned count = 1;
     pj_status_t status;
-
-    status = pj_getaddrinfo (PJ_AF_INET, name, &count, &ai);
-
+    
+    status = pj_getaddrinfo(PJ_AF_INET, name, &count, &ai);
     if (status != PJ_SUCCESS)
-        return status;
-
+    	return status;
+    
     aliases[0] = ai.ai_canonname;
-
     aliases[1] = NULL;
-
+    
     addrlist[0] = (char*) &ai.ai_addr.ipv4.sin_addr;
-
     addrlist[1] = NULL;
-
-    pj_bzero (he, sizeof (*he));
-
+    
+    pj_bzero(he, sizeof(*he));
     he->h_name = aliases[0];
-
     he->h_aliases = aliases;
-
     he->h_addrtype = PJ_AF_INET;
-
     he->h_length = 4;
-
     he->h_addr_list = addrlist;
-
+    
     return PJ_SUCCESS;
 }
 
 
 // Resolve for specific address family
-static pj_status_t getaddrinfo_by_af (int af, const pj_str_t *name,
-                                      unsigned *count, pj_addrinfo ai[])
+static pj_status_t getaddrinfo_by_af(int af, const pj_str_t *name,
+				     unsigned *count, pj_addrinfo ai[]) 
 {
     unsigned i;
     pj_status_t status;
-
-    PJ_ASSERT_RETURN (name && count && ai, PJ_EINVAL);
+    
+    PJ_ASSERT_RETURN(name && count && ai, PJ_EINVAL);
 
 #if !defined(PJ_HAS_IPV6) || !PJ_HAS_IPV6
-
     if (af == PJ_AF_INET6)
-        return PJ_EIPV6NOTSUP;
-
+    	return PJ_EIPV6NOTSUP;
 #endif
-
+	
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
     // Get resolver for the specified address family
-    RHostResolver &resv = PjSymbianOS::Instance()->GetResolver (af);
+    RHostResolver &resv = PjSymbianOS::Instance()->GetResolver(af);
 
     // Convert name to Unicode
     wchar_t name16[PJ_MAX_HOSTNAME];
-
-    pj_ansi_to_unicode (name->ptr, name->slen, name16, PJ_ARRAY_SIZE (name16));
-
-    TPtrC16 data ( (const TUint16*) name16);
+    pj_ansi_to_unicode(name->ptr, name->slen, name16, PJ_ARRAY_SIZE(name16));
+    TPtrC16 data((const TUint16*)name16);
 
     // Resolve!
     TNameEntry nameEntry;
-
     TRequestStatus reqStatus;
-
-    resv.GetByName (data, nameEntry, reqStatus);
-
-    User::WaitForRequest (reqStatus);
-
+    
+    resv.GetByName(data, nameEntry, reqStatus);
+    User::WaitForRequest(reqStatus);
+    
     // Iterate each result
     i = 0;
-
     while (reqStatus == KErrNone && i < *count) {
-
-        // Get the resolved TInetAddr
-        TInetAddr inetAddr (nameEntry().iAddr);
-        int addrlen;
+    	
+		// Get the resolved TInetAddr
+		TInetAddr inetAddr(nameEntry().iAddr);
+		int addrlen;
 
 #if TRACE_ME
-
-        if (1) {
-            pj_sockaddr a;
-            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-            int namelen;
-
-            namelen = sizeof (pj_sockaddr);
-
-            if (PjSymbianOS::Addr2pj (inetAddr, a, &namelen,
-                                      PJ_FALSE) == PJ_SUCCESS) {
-                PJ_LOG (5, (THIS_FILE, "resolve %.*s: %s",
-                            (int) name->slen, name->ptr,
-                            pj_sockaddr_print (&a, ipaddr, sizeof (ipaddr), 2)));
-            }
-        }
-
+		if (1) {
+			pj_sockaddr a;
+			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+			int namelen;
+			
+			namelen = sizeof(pj_sockaddr);
+			if (PjSymbianOS::Addr2pj(inetAddr, a, &namelen, 
+									 PJ_FALSE) == PJ_SUCCESS) 
+			{
+				PJ_LOG(5,(THIS_FILE, "resolve %.*s: %s", 
+						(int)name->slen, name->ptr,
+						pj_sockaddr_print(&a, ipaddr, sizeof(ipaddr), 2)));
+			}
+		}
 #endif
-
-        // Ignore if this is not the same address family
-        // Not a good idea, as Symbian mapps IPv4 to IPv6.
-        //fam = inetAddr.Family();
-        //if (fam != af) {
-        //    resv.Next(nameEntry, reqStatus);
-        //    User::WaitForRequest(reqStatus);
-        //    continue;
-        //}
-
-        // Convert IP address first to get IPv4 mapped address
-        addrlen = sizeof (ai[i].ai_addr);
-
-        status = PjSymbianOS::Addr2pj (inetAddr, ai[i].ai_addr,
-                                       &addrlen, PJ_TRUE);
-
-        if (status != PJ_SUCCESS)
-            return status;
-
-        // Ignore if address family doesn't match
-        if (ai[i].ai_addr.addr.sa_family != af) {
-            resv.Next (nameEntry, reqStatus);
-            User::WaitForRequest (reqStatus);
-            continue;
-        }
-
-        // Convert the official address to ANSI.
-        pj_unicode_to_ansi ( (const wchar_t*) nameEntry().iName.Ptr(),
-                             nameEntry().iName.Length(),
-                             ai[i].ai_canonname, sizeof (ai[i].ai_canonname));
-
-        // Next
-        ++i;
-
-        resv.Next (nameEntry, reqStatus);
-
-        User::WaitForRequest (reqStatus);
+		
+		// Ignore if this is not the same address family
+		// Not a good idea, as Symbian mapps IPv4 to IPv6.
+		//fam = inetAddr.Family();
+		//if (fam != af) {
+		//    resv.Next(nameEntry, reqStatus);
+		//    User::WaitForRequest(reqStatus);
+		//    continue;
+		//}
+		
+		// Convert IP address first to get IPv4 mapped address
+		addrlen = sizeof(ai[i].ai_addr);
+		status = PjSymbianOS::Addr2pj(inetAddr, ai[i].ai_addr, 
+									  &addrlen, PJ_TRUE);
+		if (status != PJ_SUCCESS)
+		    return status;
+		
+		// Ignore if address family doesn't match
+		if (ai[i].ai_addr.addr.sa_family != af) {
+		    resv.Next(nameEntry, reqStatus);
+		    User::WaitForRequest(reqStatus);
+		    continue;
+		}
+
+		// Convert the official address to ANSI.
+		pj_unicode_to_ansi((const wchar_t*)nameEntry().iName.Ptr(), 
+				   nameEntry().iName.Length(),
+			       	   ai[i].ai_canonname, sizeof(ai[i].ai_canonname));
+	
+		// Next
+		++i;
+		resv.Next(nameEntry, reqStatus);
+		User::WaitForRequest(reqStatus);
     }
 
     *count = i;
-
     return PJ_SUCCESS;
 }
 
 /* Resolve IPv4/IPv6 address */
-PJ_DEF (pj_status_t) pj_getaddrinfo (int af, const pj_str_t *nodename,
-                                     unsigned *count, pj_addrinfo ai[])
+PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
+				   unsigned *count, pj_addrinfo ai[]) 
 {
     unsigned start;
     pj_status_t status = PJ_EAFNOTSUP;
-
-    PJ_ASSERT_RETURN (af==PJ_AF_INET || af==PJ_AF_INET6 || af==PJ_AF_UNSPEC,
-                      PJ_EAFNOTSUP);
-    PJ_ASSERT_RETURN (nodename && count && *count && ai, PJ_EINVAL);
-
+    
+    PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6 || af==PJ_AF_UNSPEC,
+    		     PJ_EAFNOTSUP);
+    PJ_ASSERT_RETURN(nodename && count && *count && ai, PJ_EINVAL);
+    
     start = 0;
-
+    
     if (af==PJ_AF_INET6 || af==PJ_AF_UNSPEC) {
         unsigned max = *count;
-        status = getaddrinfo_by_af (PJ_AF_INET6, nodename,
-                                    &max, &ai[start]);
-
-        if (status == PJ_SUCCESS) {
-            (*count) -= max;
-            start += max;
-        }
+    	status = getaddrinfo_by_af(PJ_AF_INET6, nodename, 
+    				   &max, &ai[start]);
+    	if (status == PJ_SUCCESS) {
+    	    (*count) -= max;
+    	    start += max;
+    	}
     }
-
+    
     if (af==PJ_AF_INET || af==PJ_AF_UNSPEC) {
         unsigned max = *count;
-        status = getaddrinfo_by_af (PJ_AF_INET, nodename,
-                                    &max, &ai[start]);
-
-        if (status == PJ_SUCCESS) {
-            (*count) -= max;
-            start += max;
-        }
+    	status = getaddrinfo_by_af(PJ_AF_INET, nodename, 
+    				   &max, &ai[start]);
+    	if (status == PJ_SUCCESS) {
+    	    (*count) -= max;
+    	    start += max;
+    	}
     }
-
+    
     *count = start;
-
+    
     if (*count) {
-        return PJ_SUCCESS;
+    	return PJ_SUCCESS;
     } else {
-        return status!=PJ_SUCCESS ? status : PJ_ENOTFOUND;
+    	return status!=PJ_SUCCESS ? status : PJ_ENOTFOUND;
     }
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/config.c b/sflphone-common/libs/pjproject/pjlib/src/pj/config.c
index 92079b5b46..a8d3517444 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/config.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/config.c
@@ -1,4 +1,4 @@
-/* $Id: config.c 2900 2009-08-17 21:30:15Z bennylp $ */
+/* $Id: config.c 3054 2010-01-11 09:42:39Z ismangil $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -22,7 +22,7 @@
 #include <pj/ioqueue.h>
 
 static const char *id = "config.c";
-PJ_DEF_DATA(const char*) PJ_VERSION = "1.4";
+PJ_DEF_DATA(const char*) PJ_VERSION = "1.5.5";
 
 /*
  * Get PJLIB version string.
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/errno.c b/sflphone-common/libs/pjproject/pjlib/src/pj/errno.c
index 37a9cfb7ea..3d44f6e378 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/errno.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/errno.c
@@ -1,4 +1,4 @@
-/* $Id: errno.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: errno.c 2992 2009-11-09 04:09:13Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -18,8 +18,10 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/errno.h>
+#include <pj/log.h>
 #include <pj/string.h>
 #include <pj/compat/string.h>
+#include <pj/compat/stdarg.h>
 #include <pj/assert.h>
 
 /* Prototype for platform specific error message, which will be defined 
@@ -196,3 +198,113 @@ PJ_DEF(pj_str_t) pj_strerror( pj_status_t statcode,
     return errstr;
 }
 
+#if PJ_LOG_MAX_LEVEL >= 1
+static void invoke_log(const char *sender, int level, const char *format, ...)
+{
+    va_list arg;
+    va_start(arg, format);
+    pj_log(sender, level, format, arg);
+    va_end(arg);
+}
+
+static void pj_perror_imp(int log_level, const char *sender, 
+			  pj_status_t status,
+		          const char *title_fmt, va_list marker)
+{
+    char titlebuf[PJ_PERROR_TITLE_BUF_SIZE];
+    char errmsg[PJ_ERR_MSG_SIZE];
+    int len;
+
+    /* Build the title */
+    len = pj_ansi_vsnprintf(titlebuf, sizeof(titlebuf), title_fmt, marker);
+    if (len < 0 || len >= sizeof(titlebuf))
+	pj_ansi_strcpy(titlebuf, "Error");
+
+    /* Get the error */
+    pj_strerror(status, errmsg, sizeof(errmsg));
+
+    /* Send to log */
+    invoke_log(sender, log_level, "%s: %s", titlebuf, errmsg);
+}
+
+PJ_DEF(void) pj_perror(int log_level, const char *sender, pj_status_t status,
+		       const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(log_level, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+
+PJ_DEF(void) pj_perror_1(const char *sender, pj_status_t status,
+			 const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(1, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+
+#else /* #if PJ_LOG_MAX_LEVEL >= 1 */
+PJ_DEF(void) pj_perror(int log_level, const char *sender, pj_status_t status,
+		       const char *title_fmt, ...)
+{
+}
+#endif	/* #if PJ_LOG_MAX_LEVEL >= 1 */
+
+
+#if PJ_LOG_MAX_LEVEL >= 2
+PJ_DEF(void) pj_perror_2(const char *sender, pj_status_t status,
+			 const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(2, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+#endif
+
+#if PJ_LOG_MAX_LEVEL >= 3
+PJ_DEF(void) pj_perror_3(const char *sender, pj_status_t status,
+			 const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(3, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+#endif
+
+#if PJ_LOG_MAX_LEVEL >= 4
+PJ_DEF(void) pj_perror_4(const char *sender, pj_status_t status,
+			 const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(4, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+#endif
+
+#if PJ_LOG_MAX_LEVEL >= 5
+PJ_DEF(void) pj_perror_5(const char *sender, pj_status_t status,
+			 const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(5, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+#endif
+
+#if PJ_LOG_MAX_LEVEL >= 6
+PJ_DEF(void) pj_perror_6(const char *sender, pj_status_t status,
+			 const char *title_fmt, ...)
+{
+    va_list marker;
+    va_start(marker, title_fmt);
+    pj_perror_imp(6, sender, status, title_fmt, marker);
+    va_end(marker);
+}
+#endif
+
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp
index 14ded02ed9..e54cebddf9 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: exception_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/except.h>
 #include <pj/os.h>
@@ -25,19 +25,19 @@
 
 
 #if defined(PJ_HAS_EXCEPTION_NAMES) && PJ_HAS_EXCEPTION_NAMES != 0
-static const char *exception_id_names[PJ_MAX_EXCEPTION_ID];
+    static const char *exception_id_names[PJ_MAX_EXCEPTION_ID];
 #else
-/*
- * Start from 1 (not 0)!!!
- * Exception 0 is reserved for normal path of setjmp()!!!
- */
-static int last_exception_id = 1;
+    /*
+     * Start from 1 (not 0)!!!
+     * Exception 0 is reserved for normal path of setjmp()!!!
+     */
+    static int last_exception_id = 1;
 #endif  /* PJ_HAS_EXCEPTION_NAMES */
 
 
 #if defined(PJ_HAS_EXCEPTION_NAMES) && PJ_HAS_EXCEPTION_NAMES != 0
-PJ_DEF (pj_status_t) pj_exception_id_alloc (const char *name,
-        pj_exception_id_t *id)
+PJ_DEF(pj_status_t) pj_exception_id_alloc( const char *name,
+                                           pj_exception_id_t *id)
 {
     unsigned i;
 
@@ -47,7 +47,6 @@ PJ_DEF (pj_status_t) pj_exception_id_alloc (const char *name,
      * Start from 1 (not 0)!!!
      * Exception 0 is reserved for normal path of setjmp()!!!
      */
-
     for (i=1; i<PJ_MAX_EXCEPTION_ID; ++i) {
         if (exception_id_names[i] == NULL) {
             exception_id_names[i] = name;
@@ -58,18 +57,17 @@ PJ_DEF (pj_status_t) pj_exception_id_alloc (const char *name,
     }
 
     pj_leave_critical_section();
-
     return PJ_ETOOMANY;
 }
 
-PJ_DEF (pj_status_t) pj_exception_id_free (pj_exception_id_t id)
+PJ_DEF(pj_status_t) pj_exception_id_free( pj_exception_id_t id )
 {
     /*
      * Start from 1 (not 0)!!!
      * Exception 0 is reserved for normal path of setjmp()!!!
      */
-    PJ_ASSERT_RETURN (id>0 && id<PJ_MAX_EXCEPTION_ID, PJ_EINVAL);
-
+    PJ_ASSERT_RETURN(id>0 && id<PJ_MAX_EXCEPTION_ID, PJ_EINVAL);
+    
     pj_enter_critical_section();
     exception_id_names[id] = NULL;
     pj_leave_critical_section();
@@ -78,13 +76,13 @@ PJ_DEF (pj_status_t) pj_exception_id_free (pj_exception_id_t id)
 
 }
 
-PJ_DEF (const char*) pj_exception_id_name (pj_exception_id_t id)
+PJ_DEF(const char*) pj_exception_id_name(pj_exception_id_t id)
 {
     /*
      * Start from 1 (not 0)!!!
      * Exception 0 is reserved for normal path of setjmp()!!!
      */
-    PJ_ASSERT_RETURN (id>0 && id<PJ_MAX_EXCEPTION_ID, "<Invalid ID>");
+    PJ_ASSERT_RETURN(id>0 && id<PJ_MAX_EXCEPTION_ID, "<Invalid ID>");
 
     if (exception_id_names[id] == NULL)
         return "<Unallocated ID>";
@@ -93,21 +91,21 @@ PJ_DEF (const char*) pj_exception_id_name (pj_exception_id_t id)
 }
 
 #else   /* PJ_HAS_EXCEPTION_NAMES */
-PJ_DEF (pj_status_t) pj_exception_id_alloc (const char *name,
-        pj_exception_id_t *id)
+PJ_DEF(pj_status_t) pj_exception_id_alloc( const char *name,
+                                           pj_exception_id_t *id)
 {
-    PJ_ASSERT_RETURN (last_exception_id < PJ_MAX_EXCEPTION_ID-1, PJ_ETOOMANY);
+    PJ_ASSERT_RETURN(last_exception_id < PJ_MAX_EXCEPTION_ID-1, PJ_ETOOMANY);
 
     *id = last_exception_id++;
     return PJ_SUCCESS;
 }
 
-PJ_DEF (pj_status_t) pj_exception_id_free (pj_exception_id_t id)
+PJ_DEF(pj_status_t) pj_exception_id_free( pj_exception_id_t id )
 {
     return PJ_SUCCESS;
 }
 
-PJ_DEF (const char*) pj_exception_id_name (pj_exception_id_t id)
+PJ_DEF(const char*) pj_exception_id_name(pj_exception_id_t id)
 {
     return "";
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp
index 4acbd9619b..c436d4c458 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: ioqueue_symbian.cpp 2771 2009-06-17 13:31:13Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/ioqueue.h>
 #include <pj/assert.h>
@@ -32,8 +32,8 @@ class CIoqueueCallback;
 /*
  * IO Queue structure.
  */
-
-struct pj_ioqueue_t {
+struct pj_ioqueue_t
+{
     int		     eventCount;
 };
 
@@ -41,144 +41,148 @@ struct pj_ioqueue_t {
 /////////////////////////////////////////////////////////////////////////////
 // Class to encapsulate asynchronous socket operation.
 //
-
 class CIoqueueCallback : public CActive
 {
+public:
+    static CIoqueueCallback* NewL(pj_ioqueue_t *ioqueue,
+				  pj_ioqueue_key_t *key, 
+				  pj_sock_t sock, 
+				  const pj_ioqueue_callback *cb, 
+				  void *user_data);
+
+    //
+    // Start asynchronous recv() operation
+    //
+    pj_status_t StartRead(pj_ioqueue_op_key_t *op_key, 
+			  void *buf, pj_ssize_t *size, unsigned flags,
+			  pj_sockaddr_t *addr, int *addrlen);
+
+    //
+    // Start asynchronous accept() operation.
+    //
+    pj_status_t StartAccept(pj_ioqueue_op_key_t *op_key,
+			    pj_sock_t *new_sock,
+			    pj_sockaddr_t *local,
+			    pj_sockaddr_t *remote,
+			    int *addrlen );
+
+    //
+    // Completion callback.
+    //
+    void RunL();
+
+    //
+    // CActive's DoCancel()
+    //
+    void DoCancel();
+
+    //
+    // Cancel operation and call callback.
+    //
+    void CancelOperation(pj_ioqueue_op_key_t *op_key, 
+			 pj_ssize_t bytes_status);
+
+    //
+    // Accessors
+    //
+    void* get_user_data() const
+    {
+	return user_data_;
+    }
+    void set_user_data(void *user_data)
+    {
+	user_data_ = user_data;
+    }
+    pj_ioqueue_op_key_t *get_op_key() const
+    {
+	return pending_data_.common_.op_key_;
+    }
+    CPjSocket* get_pj_socket()
+    {
+	return sock_;
+    }
+
+private:
+    // Type of pending operation.
+    enum Type {
+	TYPE_NONE,
+	TYPE_READ,
+	TYPE_ACCEPT,
+    };
+
+    // Static data.
+    pj_ioqueue_t		*ioqueue_;
+    pj_ioqueue_key_t		*key_;
+    CPjSocket			*sock_;
+    pj_ioqueue_callback		 cb_;
+    void			*user_data_;
+
+    // Symbian data.
+    TPtr8			 aBufferPtr_;
+    TInetAddr			 aAddress_;
+
+    // Application data.
+    Type			 type_;
+
+    union Pending_Data
+    {
+	struct Common
+	{
+	    pj_ioqueue_op_key_t	*op_key_;
+	} common_;
+
+	struct Pending_Read
+	{
+	    pj_ioqueue_op_key_t	*op_key_;
+	    pj_sockaddr_t	*addr_;
+	    int			*addrlen_;
+	} read_;
+
+	struct Pending_Accept
+	{
+	    pj_ioqueue_op_key_t *op_key_;
+	    pj_sock_t		*new_sock_;
+	    pj_sockaddr_t	*local_;
+	    pj_sockaddr_t	*remote_;
+	    int			*addrlen_;
+	} accept_;
+    };
+
+    union Pending_Data		 pending_data_;
+    RSocket			blank_sock_;
+
+    CIoqueueCallback(pj_ioqueue_t *ioqueue,
+		     pj_ioqueue_key_t *key, pj_sock_t sock, 
+		     const pj_ioqueue_callback *cb, void *user_data)
+    : CActive(CActive::EPriorityStandard),
+	  ioqueue_(ioqueue), key_(key), sock_((CPjSocket*)sock), 
+	  user_data_(user_data), aBufferPtr_(NULL, 0), type_(TYPE_NONE)
+    {
+    	pj_memcpy(&cb_, cb, sizeof(*cb));
+    }
 
-    public:
-        static CIoqueueCallback* NewL (pj_ioqueue_t *ioqueue,
-                                       pj_ioqueue_key_t *key,
-                                       pj_sock_t sock,
-                                       const pj_ioqueue_callback *cb,
-                                       void *user_data);
-
-        //
-        // Start asynchronous recv() operation
-        //
-        pj_status_t StartRead (pj_ioqueue_op_key_t *op_key,
-                               void *buf, pj_ssize_t *size, unsigned flags,
-                               pj_sockaddr_t *addr, int *addrlen);
-
-        //
-        // Start asynchronous accept() operation.
-        //
-        pj_status_t StartAccept (pj_ioqueue_op_key_t *op_key,
-                                 pj_sock_t *new_sock,
-                                 pj_sockaddr_t *local,
-                                 pj_sockaddr_t *remote,
-                                 int *addrlen);
-
-        //
-        // Completion callback.
-        //
-        void RunL();
-
-        //
-        // CActive's DoCancel()
-        //
-        void DoCancel();
-
-        //
-        // Cancel operation and call callback.
-        //
-        void CancelOperation (pj_ioqueue_op_key_t *op_key,
-                              pj_ssize_t bytes_status);
-
-        //
-        // Accessors
-        //
-        void* get_user_data() const {
-            return user_data_;
-        }
-
-        void set_user_data (void *user_data) {
-            user_data_ = user_data;
-        }
-
-        pj_ioqueue_op_key_t *get_op_key() const {
-            return pending_data_.common_.op_key_;
-        }
-
-        CPjSocket* get_pj_socket() {
-            return sock_;
-        }
-
-    private:
-        // Type of pending operation.
-        enum Type {
-            TYPE_NONE,
-            TYPE_READ,
-            TYPE_ACCEPT,
-        };
-
-        // Static data.
-        pj_ioqueue_t		*ioqueue_;
-        pj_ioqueue_key_t		*key_;
-        CPjSocket			*sock_;
-        pj_ioqueue_callback		 cb_;
-        void			*user_data_;
-
-        // Symbian data.
-        TPtr8			 aBufferPtr_;
-        TInetAddr			 aAddress_;
-
-        // Application data.
-        Type			 type_;
-
-        union Pending_Data {
-
-            struct Common {
-                pj_ioqueue_op_key_t	*op_key_;
-            } common_;
-
-            struct Pending_Read {
-                pj_ioqueue_op_key_t	*op_key_;
-                pj_sockaddr_t	*addr_;
-                int			*addrlen_;
-            } read_;
-
-            struct Pending_Accept {
-                pj_ioqueue_op_key_t *op_key_;
-                pj_sock_t		*new_sock_;
-                pj_sockaddr_t	*local_;
-                pj_sockaddr_t	*remote_;
-                int			*addrlen_;
-            } accept_;
-        };
-
-        union Pending_Data		 pending_data_;
-        RSocket			blank_sock_;
-
-        CIoqueueCallback (pj_ioqueue_t *ioqueue,
-                          pj_ioqueue_key_t *key, pj_sock_t sock,
-                          const pj_ioqueue_callback *cb, void *user_data)
-                : CActive (CActive::EPriorityStandard),
-                ioqueue_ (ioqueue), key_ (key), sock_ ( (CPjSocket*) sock),
-                user_data_ (user_data), aBufferPtr_ (NULL, 0), type_ (TYPE_NONE) {
-            pj_memcpy (&cb_, cb, sizeof (*cb));
-        }
-
-
-        void ConstructL() {
-            CActiveScheduler::Add (this);
-        }
-
-        void HandleReadCompletion();
-        CPjSocket *HandleAcceptCompletion();
+
+    void ConstructL()
+    {
+	CActiveScheduler::Add(this);
+    }
+    
+    void HandleReadCompletion();
+    CPjSocket *HandleAcceptCompletion();
 };
 
 
-CIoqueueCallback* CIoqueueCallback::NewL (pj_ioqueue_t *ioqueue,
-        pj_ioqueue_key_t *key,
-        pj_sock_t sock,
-        const pj_ioqueue_callback *cb,
-        void *user_data)
+CIoqueueCallback* CIoqueueCallback::NewL(pj_ioqueue_t *ioqueue,
+					 pj_ioqueue_key_t *key, 
+					 pj_sock_t sock, 
+					 const pj_ioqueue_callback *cb, 
+					 void *user_data)
 {
-    CIoqueueCallback *self = new CIoqueueCallback (ioqueue, key, sock,
-            cb, user_data);
-    CleanupStack::PushL (self);
+    CIoqueueCallback *self = new CIoqueueCallback(ioqueue, key, sock, 
+						  cb, user_data);
+    CleanupStack::PushL(self);
     self->ConstructL();
-    CleanupStack::Pop (self);
+    CleanupStack::Pop(self);
 
     return self;
 }
@@ -187,13 +191,13 @@ CIoqueueCallback* CIoqueueCallback::NewL (pj_ioqueue_t *ioqueue,
 //
 // Start asynchronous recv() operation
 //
-pj_status_t CIoqueueCallback::StartRead (pj_ioqueue_op_key_t *op_key,
-        void *buf, pj_ssize_t *size,
-        unsigned flags,
-        pj_sockaddr_t *addr, int *addrlen)
+pj_status_t CIoqueueCallback::StartRead(pj_ioqueue_op_key_t *op_key, 
+					void *buf, pj_ssize_t *size, 
+					unsigned flags,
+					pj_sockaddr_t *addr, int *addrlen)
 {
-    PJ_ASSERT_RETURN (IsActive() ==false, PJ_EBUSY);
-    PJ_ASSERT_RETURN (pending_data_.common_.op_key_==NULL, PJ_EBUSY);
+    PJ_ASSERT_RETURN(IsActive()==false, PJ_EBUSY);
+    PJ_ASSERT_RETURN(pending_data_.common_.op_key_==NULL, PJ_EBUSY);
 
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
 
@@ -201,29 +205,27 @@ pj_status_t CIoqueueCallback::StartRead (pj_ioqueue_op_key_t *op_key,
     pending_data_.read_.addr_ = addr;
     pending_data_.read_.addrlen_ = addrlen;
 
-    aBufferPtr_.Set ( (TUint8*) buf, 0, (TInt) *size);
+    aBufferPtr_.Set((TUint8*)buf, 0, (TInt)*size);
 
     type_ = TYPE_READ;
-
     if (addr && addrlen) {
-        sock_->Socket().RecvFrom (aBufferPtr_, aAddress_, flags, iStatus);
+	sock_->Socket().RecvFrom(aBufferPtr_, aAddress_, flags, iStatus);
     } else {
-        aAddress_.SetAddress (0);
-        aAddress_.SetPort (0);
-
-        if (sock_->IsDatagram()) {
-            sock_->Socket().Recv (aBufferPtr_, flags, iStatus);
-        } else {
-            // Using static like this is not pretty, but we don't need to use
-            // the value anyway, hence doing it like this is probably most
-            // optimal.
-            static TSockXfrLength len;
-            sock_->Socket().RecvOneOrMore (aBufferPtr_, flags, iStatus, len);
-        }
+	aAddress_.SetAddress(0);
+	aAddress_.SetPort(0);
+
+	if (sock_->IsDatagram()) {
+	    sock_->Socket().Recv(aBufferPtr_, flags, iStatus);
+	} else {
+	    // Using static like this is not pretty, but we don't need to use
+	    // the value anyway, hence doing it like this is probably most
+	    // optimal.
+	    static TSockXfrLength len;
+	    sock_->Socket().RecvOneOrMore(aBufferPtr_, flags, iStatus, len);
+	}
     }
 
     SetActive();
-
     return PJ_EPENDING;
 }
 
@@ -231,19 +233,19 @@ pj_status_t CIoqueueCallback::StartRead (pj_ioqueue_op_key_t *op_key,
 //
 // Start asynchronous accept() operation.
 //
-pj_status_t CIoqueueCallback::StartAccept (pj_ioqueue_op_key_t *op_key,
-        pj_sock_t *new_sock,
-        pj_sockaddr_t *local,
-        pj_sockaddr_t *remote,
-        int *addrlen)
+pj_status_t CIoqueueCallback::StartAccept(pj_ioqueue_op_key_t *op_key,
+					  pj_sock_t *new_sock,
+					  pj_sockaddr_t *local,
+					  pj_sockaddr_t *remote,
+					  int *addrlen )
 {
-    PJ_ASSERT_RETURN (IsActive() ==false, PJ_EBUSY);
-    PJ_ASSERT_RETURN (pending_data_.common_.op_key_==NULL, PJ_EBUSY);
+    PJ_ASSERT_RETURN(IsActive()==false, PJ_EBUSY);
+    PJ_ASSERT_RETURN(pending_data_.common_.op_key_==NULL, PJ_EBUSY);
 
     // addrlen must be specified if local or remote is specified
-    PJ_ASSERT_RETURN ( (!local && !remote) ||
-                       (addrlen && *addrlen), PJ_EINVAL);
-
+    PJ_ASSERT_RETURN((!local && !remote) ||
+    		     (addrlen && *addrlen), PJ_EINVAL);
+    
     pending_data_.accept_.op_key_ = op_key;
     pending_data_.accept_.new_sock_ = new_sock;
     pending_data_.accept_.local_ = local;
@@ -251,10 +253,10 @@ pj_status_t CIoqueueCallback::StartAccept (pj_ioqueue_op_key_t *op_key,
     pending_data_.accept_.addrlen_ = addrlen;
 
     // Create blank socket
-    blank_sock_.Open (PjSymbianOS::Instance()->SocketServ());
+    blank_sock_.Open(PjSymbianOS::Instance()->SocketServ());
 
     type_ = TYPE_ACCEPT;
-    sock_->Socket().Accept (blank_sock_, iStatus);
+    sock_->Socket().Accept(blank_sock_, iStatus);
 
     SetActive();
     return PJ_EPENDING;
@@ -264,16 +266,16 @@ pj_status_t CIoqueueCallback::StartAccept (pj_ioqueue_op_key_t *op_key,
 //
 // Handle asynchronous RecvFrom() completion
 //
-void CIoqueueCallback::HandleReadCompletion()
+void CIoqueueCallback::HandleReadCompletion() 
 {
     if (pending_data_.read_.addr_ && pending_data_.read_.addrlen_) {
-        PjSymbianOS::Addr2pj (aAddress_,
-                              * (pj_sockaddr*) pending_data_.read_.addr_,
-                              pending_data_.read_.addrlen_);
-        pending_data_.read_.addr_ = NULL;
-        pending_data_.read_.addrlen_ = NULL;
+	PjSymbianOS::Addr2pj(aAddress_, 
+			     *(pj_sockaddr*)pending_data_.read_.addr_,
+			     pending_data_.read_.addrlen_);
+	pending_data_.read_.addr_ = NULL;
+	pending_data_.read_.addrlen_ = NULL;
     }
-
+	
     pending_data_.read_.op_key_ = NULL;
 }
 
@@ -281,57 +283,55 @@ void CIoqueueCallback::HandleReadCompletion()
 //
 // Handle asynchronous Accept() completion.
 //
-CPjSocket *CIoqueueCallback::HandleAcceptCompletion()
+CPjSocket *CIoqueueCallback::HandleAcceptCompletion() 
 {
-    CPjSocket *pjNewSock = new CPjSocket (get_pj_socket()->GetAf(),
-                                          get_pj_socket()->GetSockType(),
-                                          blank_sock_);
-    int addrlen = 0;
-
-    if (pending_data_.accept_.new_sock_) {
-        *pending_data_.accept_.new_sock_ = (pj_sock_t) pjNewSock;
-        pending_data_.accept_.new_sock_ = NULL;
-    }
-
-    if (pending_data_.accept_.local_) {
-        TInetAddr aAddr;
-        pj_sockaddr *ptr_sockaddr;
-
-        blank_sock_.LocalName (aAddr);
-        ptr_sockaddr = (pj_sockaddr*) pending_data_.accept_.local_;
-        addrlen = *pending_data_.accept_.addrlen_;
-        PjSymbianOS::Addr2pj (aAddr, *ptr_sockaddr, &addrlen);
-        pending_data_.accept_.local_ = NULL;
-    }
-
-    if (pending_data_.accept_.remote_) {
-        TInetAddr aAddr;
-        pj_sockaddr *ptr_sockaddr;
-
-        blank_sock_.RemoteName (aAddr);
-        ptr_sockaddr = (pj_sockaddr*) pending_data_.accept_.remote_;
-        addrlen = *pending_data_.accept_.addrlen_;
-        PjSymbianOS::Addr2pj (aAddr, *ptr_sockaddr, &addrlen);
-        pending_data_.accept_.remote_ = NULL;
-    }
-
-    if (pending_data_.accept_.addrlen_) {
-        if (addrlen == 0) {
-            if (pjNewSock->GetAf() == PJ_AF_INET)
-                addrlen = sizeof (pj_sockaddr_in);
-            else if (pjNewSock->GetAf() == PJ_AF_INET6)
-                addrlen = sizeof (pj_sockaddr_in6);
-            else {
-                pj_assert (!"Unsupported address family");
-            }
-        }
-
-        *pending_data_.accept_.addrlen_ = addrlen;
-
-        pending_data_.accept_.addrlen_ = NULL;
-    }
-
-    return pjNewSock;
+	CPjSocket *pjNewSock = new CPjSocket(get_pj_socket()->GetAf(), 
+					     get_pj_socket()->GetSockType(),
+					     blank_sock_);
+	int addrlen = 0;
+	
+	if (pending_data_.accept_.new_sock_) {
+	    *pending_data_.accept_.new_sock_ = (pj_sock_t)pjNewSock;
+	    pending_data_.accept_.new_sock_ = NULL;
+	}
+
+	if (pending_data_.accept_.local_) {
+	    TInetAddr aAddr;
+	    pj_sockaddr *ptr_sockaddr;
+	    
+	    blank_sock_.LocalName(aAddr);
+	    ptr_sockaddr = (pj_sockaddr*)pending_data_.accept_.local_;
+	    addrlen = *pending_data_.accept_.addrlen_;
+	    PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr, &addrlen);
+	    pending_data_.accept_.local_ = NULL;
+	}
+
+	if (pending_data_.accept_.remote_) {
+	    TInetAddr aAddr;
+	    pj_sockaddr *ptr_sockaddr;
+
+	    blank_sock_.RemoteName(aAddr);
+	    ptr_sockaddr = (pj_sockaddr*)pending_data_.accept_.remote_;
+	    addrlen = *pending_data_.accept_.addrlen_;
+	    PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr, &addrlen);
+	    pending_data_.accept_.remote_ = NULL;
+	}
+
+	if (pending_data_.accept_.addrlen_) {
+	    if (addrlen == 0) {
+	    	if (pjNewSock->GetAf() == PJ_AF_INET)
+	    	    addrlen = sizeof(pj_sockaddr_in);
+	    	else if (pjNewSock->GetAf() == PJ_AF_INET6)
+	    	    addrlen = sizeof(pj_sockaddr_in6);
+	    	else {
+	    	    pj_assert(!"Unsupported address family");
+	    	}
+	    }
+	    *pending_data_.accept_.addrlen_ = addrlen;
+	    pending_data_.accept_.addrlen_ = NULL;
+	}
+	
+	return pjNewSock;
 }
 
 
@@ -345,64 +345,58 @@ void CIoqueueCallback::RunL()
     type_ = TYPE_NONE;
 
     if (cur_type == TYPE_READ) {
-        //
-        // Completion of asynchronous RecvFrom()
-        //
-
-        /* Clear op_key (save it to temp variable first!) */
-        pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
-        pending_data_.read_.op_key_ = NULL;
-
-        // Handle failure condition
-
-        if (iStatus != KErrNone) {
-            if (cb_.on_read_complete) {
-                cb_.on_read_complete (key_, op_key,
-                                      -PJ_RETURN_OS_ERROR (iStatus.Int()));
-            }
-
-            return;
-        }
-
-        HandleReadCompletion();
-
-        /* Call callback */
-
-        if (cb_.on_read_complete) {
-            cb_.on_read_complete (key_, op_key, aBufferPtr_.Length());
-        }
+	//
+	// Completion of asynchronous RecvFrom()
+	//
+
+	/* Clear op_key (save it to temp variable first!) */
+	pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
+	pending_data_.read_.op_key_ = NULL;
+
+	// Handle failure condition
+	if (iStatus != KErrNone) {
+	    if (cb_.on_read_complete) {
+	    	cb_.on_read_complete( key_, op_key, 
+				      -PJ_RETURN_OS_ERROR(iStatus.Int()));
+	    }
+	    return;
+	}
+
+	HandleReadCompletion();
+
+	/* Call callback */
+	if (cb_.on_read_complete) {
+	    cb_.on_read_complete(key_, op_key, aBufferPtr_.Length());
+	}
 
     } else if (cur_type == TYPE_ACCEPT) {
-        //
-        // Completion of asynchronous Accept()
-        //
-
-        /* Clear op_key (save it to temp variable first!) */
-        pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
-        pending_data_.read_.op_key_ = NULL;
-
-        // Handle failure condition
-
-        if (iStatus != KErrNone) {
-            if (pending_data_.accept_.new_sock_)
-                *pending_data_.accept_.new_sock_ = PJ_INVALID_SOCKET;
-
-            if (cb_.on_accept_complete) {
-                cb_.on_accept_complete (key_, op_key, PJ_INVALID_SOCKET,
-                                        -PJ_RETURN_OS_ERROR (iStatus.Int()));
-            }
-
-            return;
-        }
-
-        CPjSocket *pjNewSock = HandleAcceptCompletion();
-
-        // Call callback.
-
-        if (cb_.on_accept_complete) {
-            cb_.on_accept_complete (key_, op_key, (pj_sock_t) pjNewSock,
-                                    PJ_SUCCESS);
-        }
+	//
+	// Completion of asynchronous Accept()
+	//
+	
+	/* Clear op_key (save it to temp variable first!) */
+	pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
+	pending_data_.read_.op_key_ = NULL;
+
+	// Handle failure condition
+	if (iStatus != KErrNone) {
+	    if (pending_data_.accept_.new_sock_)
+		*pending_data_.accept_.new_sock_ = PJ_INVALID_SOCKET;
+	    
+	    if (cb_.on_accept_complete) {
+	    	cb_.on_accept_complete( key_, op_key, PJ_INVALID_SOCKET,
+				        -PJ_RETURN_OS_ERROR(iStatus.Int()));
+	    }
+	    return;
+	}
+
+	CPjSocket *pjNewSock = HandleAcceptCompletion();
+	
+	// Call callback.
+	if (cb_.on_accept_complete) {
+	    cb_.on_accept_complete( key_, op_key, (pj_sock_t)pjNewSock, 
+				    PJ_SUCCESS);
+	}
     }
 
     ioqueue_->eventCount++;
@@ -414,32 +408,31 @@ void CIoqueueCallback::RunL()
 void CIoqueueCallback::DoCancel()
 {
     if (type_ == TYPE_READ)
-        sock_->Socket().CancelRecv();
+	sock_->Socket().CancelRecv();
     else if (type_ == TYPE_ACCEPT)
-        sock_->Socket().CancelAccept();
+	sock_->Socket().CancelAccept();
 
     type_ = TYPE_NONE;
-
     pending_data_.common_.op_key_ = NULL;
 }
 
 //
 // Cancel operation and call callback.
 //
-void CIoqueueCallback::CancelOperation (pj_ioqueue_op_key_t *op_key,
-                                        pj_ssize_t bytes_status)
+void CIoqueueCallback::CancelOperation(pj_ioqueue_op_key_t *op_key, 
+				       pj_ssize_t bytes_status)
 {
     Type cur_type = type_;
 
-    pj_assert (op_key == pending_data_.common_.op_key_);
+    pj_assert(op_key == pending_data_.common_.op_key_);
 
     Cancel();
 
     if (cur_type == TYPE_READ) {
-        if (cb_.on_read_complete)
-            cb_.on_read_complete (key_, op_key, bytes_status);
+    	if (cb_.on_read_complete)
+    	    cb_.on_read_complete(key_, op_key, bytes_status);
     } else if (cur_type == TYPE_ACCEPT)
-        ;
+	;    
 }
 
 
@@ -447,8 +440,8 @@ void CIoqueueCallback::CancelOperation (pj_ioqueue_op_key_t *op_key,
 /*
  * IO Queue key structure.
  */
-
-struct pj_ioqueue_key_t {
+struct pj_ioqueue_key_t
+{
     CIoqueueCallback	*cbObj;
 };
 
@@ -456,7 +449,7 @@ struct pj_ioqueue_key_t {
 /*
  * Return the name of the ioqueue implementation.
  */
-PJ_DEF (const char*) pj_ioqueue_name (void)
+PJ_DEF(const char*) pj_ioqueue_name(void)
 {
     return "ioqueue-symbian";
 }
@@ -465,15 +458,15 @@ PJ_DEF (const char*) pj_ioqueue_name (void)
 /*
  * Create a new I/O Queue framework.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_create (pj_pool_t *pool,
-                                        pj_size_t max_fd,
-                                        pj_ioqueue_t **p_ioqueue)
+PJ_DEF(pj_status_t) pj_ioqueue_create(	pj_pool_t *pool, 
+					pj_size_t max_fd,
+					pj_ioqueue_t **p_ioqueue)
 {
     pj_ioqueue_t *ioq;
 
-    PJ_UNUSED_ARG (max_fd);
+    PJ_UNUSED_ARG(max_fd);
 
-    ioq = PJ_POOL_ZALLOC_T (pool, pj_ioqueue_t);
+    ioq = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_t);
     *p_ioqueue = ioq;
     return PJ_SUCCESS;
 }
@@ -482,80 +475,79 @@ PJ_DEF (pj_status_t) pj_ioqueue_create (pj_pool_t *pool,
 /*
  * Destroy the I/O queue.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_destroy (pj_ioqueue_t *ioq)
+PJ_DEF(pj_status_t) pj_ioqueue_destroy( pj_ioqueue_t *ioq )
 {
-    PJ_UNUSED_ARG (ioq);
+    PJ_UNUSED_ARG(ioq);
     return PJ_SUCCESS;
 }
 
 
 /*
- * Set the lock object to be used by the I/O Queue.
+ * Set the lock object to be used by the I/O Queue. 
  */
-PJ_DEF (pj_status_t) pj_ioqueue_set_lock (pj_ioqueue_t *ioq,
-        pj_lock_t *lock,
-        pj_bool_t auto_delete)
+PJ_DEF(pj_status_t) pj_ioqueue_set_lock( pj_ioqueue_t *ioq, 
+					 pj_lock_t *lock,
+					 pj_bool_t auto_delete )
 {
     /* Don't really need lock for now */
-    PJ_UNUSED_ARG (ioq);
-
+    PJ_UNUSED_ARG(ioq);
+    
     if (auto_delete) {
-        pj_lock_destroy (lock);
+	pj_lock_destroy(lock);
     }
 
     return PJ_SUCCESS;
 }
 
-PJ_DEF (pj_status_t) pj_ioqueue_set_default_concurrency (pj_ioqueue_t *ioqueue,
-        pj_bool_t allow)
+PJ_DEF(pj_status_t) pj_ioqueue_set_default_concurrency(pj_ioqueue_t *ioqueue,
+													   pj_bool_t allow)
 {
-    /* Not supported, just return PJ_SUCCESS silently */
-    PJ_UNUSED_ARG (ioqueue);
-    PJ_UNUSED_ARG (allow);
-    return PJ_SUCCESS;
+	/* Not supported, just return PJ_SUCCESS silently */
+	PJ_UNUSED_ARG(ioqueue);
+	PJ_UNUSED_ARG(allow);
+	return PJ_SUCCESS;
 }
 
 /*
- * Register a socket to the I/O queue framework.
+ * Register a socket to the I/O queue framework. 
  */
-PJ_DEF (pj_status_t) pj_ioqueue_register_sock (pj_pool_t *pool,
-        pj_ioqueue_t *ioq,
-        pj_sock_t sock,
-        void *user_data,
-        const pj_ioqueue_callback *cb,
-        pj_ioqueue_key_t **p_key)
+PJ_DEF(pj_status_t) pj_ioqueue_register_sock( pj_pool_t *pool,
+					      pj_ioqueue_t *ioq,
+					      pj_sock_t sock,
+					      void *user_data,
+					      const pj_ioqueue_callback *cb,
+                                              pj_ioqueue_key_t **p_key )
 {
     pj_ioqueue_key_t *key;
 
-    key = PJ_POOL_ZALLOC_T (pool, pj_ioqueue_key_t);
-    key->cbObj = CIoqueueCallback::NewL (ioq, key, sock, cb, user_data);
+    key = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_key_t);
+    key->cbObj = CIoqueueCallback::NewL(ioq, key, sock, cb, user_data);
 
     *p_key = key;
     return PJ_SUCCESS;
 }
 
 /*
- * Unregister from the I/O Queue framework.
+ * Unregister from the I/O Queue framework. 
  */
-PJ_DEF (pj_status_t) pj_ioqueue_unregister (pj_ioqueue_key_t *key)
+PJ_DEF(pj_status_t) pj_ioqueue_unregister( pj_ioqueue_key_t *key )
 {
     if (key == NULL || key->cbObj == NULL)
-        return PJ_SUCCESS;
+	return PJ_SUCCESS;
 
     // Cancel pending async object
     if (key->cbObj) {
-        key->cbObj->Cancel();
+	key->cbObj->Cancel();
     }
 
     // Close socket.
     key->cbObj->get_pj_socket()->Socket().Close();
-
     delete key->cbObj->get_pj_socket();
 
     // Delete async object.
     if (key->cbObj) {
-        delete key->cbObj;
-        key->cbObj = NULL;
+	delete key->cbObj;
+	key->cbObj = NULL;
     }
 
     return PJ_SUCCESS;
@@ -565,7 +557,7 @@ PJ_DEF (pj_status_t) pj_ioqueue_unregister (pj_ioqueue_key_t *key)
 /*
  * Get user data associated with an ioqueue key.
  */
-PJ_DEF (void*) pj_ioqueue_get_user_data (pj_ioqueue_key_t *key)
+PJ_DEF(void*) pj_ioqueue_get_user_data( pj_ioqueue_key_t *key )
 {
     return key->cbObj->get_user_data();
 }
@@ -575,14 +567,13 @@ PJ_DEF (void*) pj_ioqueue_get_user_data (pj_ioqueue_key_t *key)
  * Set or change the user data to be associated with the file descriptor or
  * handle or socket descriptor.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_set_user_data (pj_ioqueue_key_t *key,
-        void *user_data,
-        void **old_data)
+PJ_DEF(pj_status_t) pj_ioqueue_set_user_data( pj_ioqueue_key_t *key,
+                                              void *user_data,
+                                              void **old_data)
 {
     if (old_data)
-        *old_data = key->cbObj->get_user_data();
-
-    key->cbObj->set_user_data (user_data);
+	*old_data = key->cbObj->get_user_data();
+    key->cbObj->set_user_data(user_data);
 
     return PJ_SUCCESS;
 }
@@ -591,91 +582,88 @@ PJ_DEF (pj_status_t) pj_ioqueue_set_user_data (pj_ioqueue_key_t *key,
 /*
  * Initialize operation key.
  */
-PJ_DEF (void) pj_ioqueue_op_key_init (pj_ioqueue_op_key_t *op_key,
-                                      pj_size_t size)
+PJ_DEF(void) pj_ioqueue_op_key_init( pj_ioqueue_op_key_t *op_key,
+				     pj_size_t size )
 {
-    pj_bzero (op_key, size);
+    pj_bzero(op_key, size);
 }
 
 
 /*
  * Check if operation is pending on the specified operation key.
  */
-PJ_DEF (pj_bool_t) pj_ioqueue_is_pending (pj_ioqueue_key_t *key,
-        pj_ioqueue_op_key_t *op_key)
+PJ_DEF(pj_bool_t) pj_ioqueue_is_pending( pj_ioqueue_key_t *key,
+                                         pj_ioqueue_op_key_t *op_key )
 {
-    return key->cbObj->get_op_key() ==op_key &&
-           key->cbObj->IsActive();
+    return key->cbObj->get_op_key()==op_key &&
+	   key->cbObj->IsActive();
 }
 
 
 /*
  * Post completion status to the specified operation key and call the
- * appropriate callback.
+ * appropriate callback. 
  */
-PJ_DEF (pj_status_t) pj_ioqueue_post_completion (pj_ioqueue_key_t *key,
-        pj_ioqueue_op_key_t *op_key,
-        pj_ssize_t bytes_status)
+PJ_DEF(pj_status_t) pj_ioqueue_post_completion( pj_ioqueue_key_t *key,
+                                                pj_ioqueue_op_key_t *op_key,
+                                                pj_ssize_t bytes_status )
 {
-    if (pj_ioqueue_is_pending (key, op_key)) {
-        key->cbObj->CancelOperation (op_key, bytes_status);
+    if (pj_ioqueue_is_pending(key, op_key)) {
+	key->cbObj->CancelOperation(op_key, bytes_status);
     }
-
     return PJ_SUCCESS;
 }
 
 
 #if defined(PJ_HAS_TCP) && PJ_HAS_TCP != 0
 /**
- * Instruct I/O Queue to accept incoming connection on the specified
+ * Instruct I/O Queue to accept incoming connection on the specified 
  * listening socket.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_accept (pj_ioqueue_key_t *key,
-                                        pj_ioqueue_op_key_t *op_key,
-                                        pj_sock_t *new_sock,
-                                        pj_sockaddr_t *local,
-                                        pj_sockaddr_t *remote,
-                                        int *addrlen)
+PJ_DEF(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
+                                       pj_ioqueue_op_key_t *op_key,
+				       pj_sock_t *new_sock,
+				       pj_sockaddr_t *local,
+				       pj_sockaddr_t *remote,
+				       int *addrlen )
 {
-
-    return key->cbObj->StartAccept (op_key, new_sock, local, remote, addrlen);
+    
+    return key->cbObj->StartAccept(op_key, new_sock, local, remote, addrlen);
 }
 
 
 /*
  * Initiate non-blocking socket connect.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_connect (pj_ioqueue_key_t *key,
-        const pj_sockaddr_t *addr,
-        int addrlen)
+PJ_DEF(pj_status_t) pj_ioqueue_connect( pj_ioqueue_key_t *key,
+					const pj_sockaddr_t *addr,
+					int addrlen )
 {
     pj_status_t status;
-
+    
     RSocket &rSock = key->cbObj->get_pj_socket()->Socket();
     TInetAddr inetAddr;
     TRequestStatus reqStatus;
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-
+    
     // Convert address
-    status = PjSymbianOS::pj2Addr (* (const pj_sockaddr*) addr, addrlen,
-                                   inetAddr);
-
+    status = PjSymbianOS::pj2Addr(*(const pj_sockaddr*)addr, addrlen, 
+    				  inetAddr);
     if (status != PJ_SUCCESS)
-        return status;
-
+    	return status;
+    
     // We don't support async connect for now.
-    PJ_TODO (IOQUEUE_SUPPORT_ASYNC_CONNECT);
+    PJ_TODO(IOQUEUE_SUPPORT_ASYNC_CONNECT);
 
-    rSock.Connect (inetAddr, reqStatus);
-
-    User::WaitForRequest (reqStatus);
+    rSock.Connect(inetAddr, reqStatus);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus == KErrNone)
-        return PJ_SUCCESS;
+	return PJ_SUCCESS;
 
-    return PJ_RETURN_OS_ERROR (reqStatus.Int());
+    return PJ_RETURN_OS_ERROR(reqStatus.Int());
 }
 
 
@@ -684,14 +672,14 @@ PJ_DEF (pj_status_t) pj_ioqueue_connect (pj_ioqueue_key_t *key,
 /*
  * Poll the I/O Queue for completed events.
  */
-PJ_DEF (int) pj_ioqueue_poll (pj_ioqueue_t *ioq,
-                              const pj_time_val *timeout)
+PJ_DEF(int) pj_ioqueue_poll( pj_ioqueue_t *ioq,
+			     const pj_time_val *timeout)
 {
     /* Polling is not necessary on Symbian, since all async activities
      * are registered to active scheduler.
      */
-    PJ_UNUSED_ARG (ioq);
-    PJ_UNUSED_ARG (timeout);
+    PJ_UNUSED_ARG(ioq);
+    PJ_UNUSED_ARG(timeout);
     return 0;
 }
 
@@ -699,20 +687,19 @@ PJ_DEF (int) pj_ioqueue_poll (pj_ioqueue_t *ioq,
 /*
  * Instruct the I/O Queue to read from the specified handle.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_recv (pj_ioqueue_key_t *key,
-                                      pj_ioqueue_op_key_t *op_key,
-                                      void *buffer,
-                                      pj_ssize_t *length,
-                                      pj_uint32_t flags)
+PJ_DEF(pj_status_t) pj_ioqueue_recv( pj_ioqueue_key_t *key,
+                                     pj_ioqueue_op_key_t *op_key,
+				     void *buffer,
+				     pj_ssize_t *length,
+				     pj_uint32_t flags )
 {
     // If socket has reader, delete it.
     if (key->cbObj->get_pj_socket()->Reader())
-        key->cbObj->get_pj_socket()->DestroyReader();
-
+    	key->cbObj->get_pj_socket()->DestroyReader();
+    
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
-
-    return key->cbObj->StartRead (op_key, buffer, length, flags, NULL, NULL);
+    return key->cbObj->StartRead(op_key, buffer, length, flags, NULL, NULL);
 }
 
 
@@ -721,60 +708,57 @@ PJ_DEF (pj_status_t) pj_ioqueue_recv (pj_ioqueue_key_t *key,
  * normally called for socket, and the remote address will also be returned
  * along with the data.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_recvfrom (pj_ioqueue_key_t *key,
-        pj_ioqueue_op_key_t *op_key,
-        void *buffer,
-        pj_ssize_t *length,
-        pj_uint32_t flags,
-        pj_sockaddr_t *addr,
-        int *addrlen)
+PJ_DEF(pj_status_t) pj_ioqueue_recvfrom( pj_ioqueue_key_t *key,
+                                         pj_ioqueue_op_key_t *op_key,
+					 void *buffer,
+					 pj_ssize_t *length,
+                                         pj_uint32_t flags,
+					 pj_sockaddr_t *addr,
+					 int *addrlen)
 {
     CPjSocket *sock = key->cbObj->get_pj_socket();
-
+    
     // If address is specified, check that the length match the
     // address family
-
     if (addr || addrlen) {
-        PJ_ASSERT_RETURN (addr && addrlen && *addrlen, PJ_EINVAL);
-
-        if (sock->GetAf() == PJ_AF_INET) {
-            PJ_ASSERT_RETURN (*addrlen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
-        } else if (sock->GetAf() == PJ_AF_INET6) {
-            PJ_ASSERT_RETURN (*addrlen>= (int) sizeof (pj_sockaddr_in6), PJ_EINVAL);
-        }
+    	PJ_ASSERT_RETURN(addr && addrlen && *addrlen, PJ_EINVAL);
+    	if (sock->GetAf() == PJ_AF_INET) {
+    	    PJ_ASSERT_RETURN(*addrlen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
+    	} else if (sock->GetAf() == PJ_AF_INET6) {
+    	    PJ_ASSERT_RETURN(*addrlen>=(int)sizeof(pj_sockaddr_in6), PJ_EINVAL);
+    	}
     }
-
+    
     // If socket has reader, delete it.
     if (sock->Reader())
-        sock->DestroyReader();
-
+    	sock->DestroyReader();
+    
     if (key->cbObj->IsActive())
-        return PJ_EBUSY;
+	return PJ_EBUSY;
 
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
-
-    return key->cbObj->StartRead (op_key, buffer, length, flags, addr, addrlen);
+    return key->cbObj->StartRead(op_key, buffer, length, flags, addr, addrlen);
 }
 
 
 /*
  * Instruct the I/O Queue to write to the handle.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_send (pj_ioqueue_key_t *key,
-                                      pj_ioqueue_op_key_t *op_key,
-                                      const void *data,
-                                      pj_ssize_t *length,
-                                      pj_uint32_t flags)
+PJ_DEF(pj_status_t) pj_ioqueue_send( pj_ioqueue_key_t *key,
+                                     pj_ioqueue_op_key_t *op_key,
+				     const void *data,
+				     pj_ssize_t *length,
+				     pj_uint32_t flags )
 {
     TRequestStatus reqStatus;
-    TPtrC8 aBuffer ( (const TUint8*) data, (TInt) *length);
+    TPtrC8 aBuffer((const TUint8*)data, (TInt)*length);
     TSockXfrLength aLen;
-
-    PJ_UNUSED_ARG (op_key);
+    
+    PJ_UNUSED_ARG(op_key);
 
     // Forcing pending operation is not supported.
-    PJ_ASSERT_RETURN ( (flags & PJ_IOQUEUE_ALWAYS_ASYNC) ==0, PJ_EINVAL);
+    PJ_ASSERT_RETURN((flags & PJ_IOQUEUE_ALWAYS_ASYNC)==0, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
@@ -782,11 +766,11 @@ PJ_DEF (pj_status_t) pj_ioqueue_send (pj_ioqueue_key_t *key,
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
 
-    key->cbObj->get_pj_socket()->Socket().Send (aBuffer, flags, reqStatus, aLen);
-    User::WaitForRequest (reqStatus);
+    key->cbObj->get_pj_socket()->Socket().Send(aBuffer, flags, reqStatus, aLen);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus.Int() != KErrNone)
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
 
     //At least in UIQ Emulator, aLen.Length() reports incorrect length
     //for UDP (some newlc.com users seem to have reported this too).
@@ -798,48 +782,45 @@ PJ_DEF (pj_status_t) pj_ioqueue_send (pj_ioqueue_key_t *key,
 /*
  * Instruct the I/O Queue to write to the handle.
  */
-PJ_DEF (pj_status_t) pj_ioqueue_sendto (pj_ioqueue_key_t *key,
-                                        pj_ioqueue_op_key_t *op_key,
-                                        const void *data,
-                                        pj_ssize_t *length,
-                                        pj_uint32_t flags,
-                                        const pj_sockaddr_t *addr,
-                                        int addrlen)
+PJ_DEF(pj_status_t) pj_ioqueue_sendto( pj_ioqueue_key_t *key,
+                                       pj_ioqueue_op_key_t *op_key,
+				       const void *data,
+				       pj_ssize_t *length,
+                                       pj_uint32_t flags,
+				       const pj_sockaddr_t *addr,
+				       int addrlen)
 {
     TRequestStatus reqStatus;
     TPtrC8 aBuffer;
     TInetAddr inetAddr;
     TSockXfrLength aLen;
     pj_status_t status;
-
-    PJ_UNUSED_ARG (op_key);
+    
+    PJ_UNUSED_ARG(op_key);
 
     // Forcing pending operation is not supported.
-    PJ_ASSERT_RETURN ( (flags & PJ_IOQUEUE_ALWAYS_ASYNC) ==0, PJ_EINVAL);
+    PJ_ASSERT_RETURN((flags & PJ_IOQUEUE_ALWAYS_ASYNC)==0, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
     // Convert address
-    status = PjSymbianOS::pj2Addr (* (const pj_sockaddr*) addr, addrlen,
-                                   inetAddr);
-
+    status = PjSymbianOS::pj2Addr(*(const pj_sockaddr*)addr, addrlen, 
+    				  inetAddr);
     if (status != PJ_SUCCESS)
-        return status;
-
+    	return status;
+    
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
 
-    aBuffer.Set ( (const TUint8*) data, (TInt) *length);
-
+    aBuffer.Set((const TUint8*)data, (TInt)*length);
     CPjSocket *pjSock = key->cbObj->get_pj_socket();
 
-    pjSock->Socket().SendTo (aBuffer, inetAddr, flags, reqStatus, aLen);
-
-    User::WaitForRequest (reqStatus);
+    pjSock->Socket().SendTo(aBuffer, inetAddr, flags, reqStatus, aLen);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus.Int() != KErrNone)
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
 
     //At least in UIQ Emulator, aLen.Length() reports incorrect length
     //for UDP (some newlc.com users seem to have reported this too).
@@ -847,25 +828,25 @@ PJ_DEF (pj_status_t) pj_ioqueue_sendto (pj_ioqueue_key_t *key,
     return PJ_SUCCESS;
 }
 
-PJ_DEF (pj_status_t) pj_ioqueue_set_concurrency (pj_ioqueue_key_t *key,
-        pj_bool_t allow)
+PJ_DEF(pj_status_t) pj_ioqueue_set_concurrency(pj_ioqueue_key_t *key,
+											   pj_bool_t allow)
 {
-    /* Not supported, just return PJ_SUCCESS silently */
-    PJ_UNUSED_ARG (key);
-    PJ_UNUSED_ARG (allow);
-    return PJ_SUCCESS;
+	/* Not supported, just return PJ_SUCCESS silently */
+	PJ_UNUSED_ARG(key);
+	PJ_UNUSED_ARG(allow);
+	return PJ_SUCCESS;
 }
 
-PJ_DEF (pj_status_t) pj_ioqueue_lock_key (pj_ioqueue_key_t *key)
+PJ_DEF(pj_status_t) pj_ioqueue_lock_key(pj_ioqueue_key_t *key)
 {
-    /* Not supported, just return PJ_SUCCESS silently */
-    PJ_UNUSED_ARG (key);
-    return PJ_SUCCESS;
+	/* Not supported, just return PJ_SUCCESS silently */
+	PJ_UNUSED_ARG(key);
+	return PJ_SUCCESS;
 }
 
-PJ_DEF (pj_status_t) pj_ioqueue_unlock_key (pj_ioqueue_key_t *key)
+PJ_DEF(pj_status_t) pj_ioqueue_unlock_key(pj_ioqueue_key_t *key)
 {
-    /* Not supported, just return PJ_SUCCESS silently */
-    PJ_UNUSED_ARG (key);
-    return PJ_SUCCESS;
+	/* Not supported, just return PJ_SUCCESS silently */
+	PJ_UNUSED_ARG(key);
+	return PJ_SUCCESS;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_winnt.c b/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_winnt.c
index 1d0e7e06fd..f9bd1a60dd 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_winnt.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_winnt.c
@@ -1,4 +1,4 @@
-/* $Id: ioqueue_winnt.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: ioqueue_winnt.c 3051 2010-01-08 13:08:05Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -167,14 +167,27 @@ static void scan_closing_keys(pj_ioqueue_t *ioqueue);
 /*
  * Process the socket when the overlapped accept() completed.
  */
-static void ioqueue_on_accept_complete(ioqueue_accept_rec *accept_overlapped)
+static void ioqueue_on_accept_complete(pj_ioqueue_key_t *key,
+                                       ioqueue_accept_rec *accept_overlapped)
 {
     struct sockaddr *local;
     struct sockaddr *remote;
     int locallen, remotelen;
+    pj_status_t status;
 
     PJ_CHECK_STACK();
 
+    /* On WinXP or later, use SO_UPDATE_ACCEPT_CONTEXT so that socket 
+     * addresses can be obtained with getsockname() and getpeername().
+     */
+    status = setsockopt(accept_overlapped->newsock, SOL_SOCKET,
+                        SO_UPDATE_ACCEPT_CONTEXT, 
+                        (char*)&key->hnd, 
+                        sizeof(SOCKET));
+    /* SO_UPDATE_ACCEPT_CONTEXT is for WinXP or later.
+     * So ignore the error status.
+     */
+
     /* Operation complete immediately. */
     if (accept_overlapped->addrlen) {
 	GetAcceptExSockaddrs( accept_overlapped->accept_buf,
@@ -706,7 +719,7 @@ static pj_bool_t poll_iocp( HANDLE hIocp, DWORD dwTimeout,
 #if PJ_HAS_TCP
 	case PJ_IOQUEUE_OP_ACCEPT:
 	    /* special case for accept. */
-	    ioqueue_on_accept_complete((ioqueue_accept_rec*)pOv);
+	    ioqueue_on_accept_complete(key, (ioqueue_accept_rec*)pOv);
             if (key->cb.on_accept_complete) {
                 ioqueue_accept_rec *accept_rec = (ioqueue_accept_rec*)pOv;
 		pj_status_t status = PJ_SUCCESS;
@@ -1208,14 +1221,25 @@ PJ_DEF(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
     sock = WSAAccept((SOCKET)key->hnd, remote, addrlen, NULL, 0);
     if (sock != INVALID_SOCKET) {
         /* Yes! New socket is available! */
-        int status;
-
-        status = getsockname(sock, local, addrlen);
-        if (status != 0) {
-            DWORD dwError = WSAGetLastError();
-            closesocket(sock);
-            return PJ_RETURN_OS_ERROR(dwError);
-        }
+	if (local && addrlen) {
+	    int status;
+
+	    /* On WinXP or later, use SO_UPDATE_ACCEPT_CONTEXT so that socket 
+	     * addresses can be obtained with getsockname() and getpeername().
+	     */
+	    status = setsockopt(sock, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT,
+				(char*)&key->hnd, sizeof(SOCKET));
+	    /* SO_UPDATE_ACCEPT_CONTEXT is for WinXP or later.
+	     * So ignore the error status.
+	     */
+
+	    status = getsockname(sock, local, addrlen);
+	    if (status != 0) {
+		DWORD dwError = WSAGetLastError();
+		closesocket(sock);
+		return PJ_RETURN_OS_ERROR(dwError);
+	    }
+	}
 
         *new_sock = sock;
         return PJ_SUCCESS;
@@ -1238,16 +1262,6 @@ PJ_DEF(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
     if (status != PJ_SUCCESS)
 	return status;
 
-    /* On WinXP or later, use SO_UPDATE_ACCEPT_CONTEXT so that socket 
-     * addresses can be obtained with getsockname() and getpeername().
-     */
-    status = setsockopt(op_key_rec->accept.newsock, SOL_SOCKET,
-                        SO_UPDATE_ACCEPT_CONTEXT, 
-                        (char*)&key->hnd, sizeof(SOCKET));
-    /* SO_UPDATE_ACCEPT_CONTEXT is for WinXP or later.
-     * So ignore the error status.
-     */
-
     op_key_rec->accept.operation = PJ_IOQUEUE_OP_ACCEPT;
     op_key_rec->accept.addrlen = addrlen;
     op_key_rec->accept.local = local;
@@ -1263,7 +1277,7 @@ PJ_DEF(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
 		   &op_key_rec->accept.overlapped );
 
     if (rc == TRUE) {
-	ioqueue_on_accept_complete(&op_key_rec->accept);
+	ioqueue_on_accept_complete(key, &op_key_rec->accept);
 	return PJ_SUCCESS;
     } else {
 	DWORD dwStatus = WSAGetLastError();
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_generic.c b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_generic.c
index ea67e5d9a0..d9f98694f7 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_generic.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_generic.c
@@ -1,4 +1,4 @@
-/* $Id: ip_helper_generic.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: ip_helper_generic.c 3044 2010-01-04 16:54:50Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -121,6 +121,7 @@ static pj_status_t if_enum_by_af(int af,
 
 	pj_bzero(&ifs[*p_cnt], sizeof(ifs[0]));
 	pj_memcpy(&ifs[*p_cnt], ad, pj_sockaddr_get_len(ad));
+	PJ_SOCKADDR_RESET_LEN(&ifs[*p_cnt]);
 	(*p_cnt)++;
     }
 
@@ -215,6 +216,7 @@ static pj_status_t if_enum_by_af(int af,
 
 	pj_bzero(&ifs[*p_cnt], sizeof(ifs[0]));
 	pj_memcpy(&ifs[*p_cnt], ad, pj_sockaddr_get_len(ad));
+	PJ_SOCKADDR_RESET_LEN(&ifs[*p_cnt]);
 	(*p_cnt)++;
     }
 
@@ -305,6 +307,7 @@ static pj_status_t if_enum_by_af(int af, unsigned *p_cnt, pj_sockaddr ifs[])
 
 	pj_bzero(&ifs[*p_cnt], sizeof(ifs[0]));
 	pj_memcpy(&ifs[*p_cnt], ad, pj_sockaddr_get_len(ad));
+	PJ_SOCKADDR_RESET_LEN(&ifs[*p_cnt]);
 	(*p_cnt)++;
     }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp
index 3cf3845870..9f634a0b8b 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: ip_helper_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/ip_helper.h>
 #include <pj/addr_resolv.h>
@@ -31,123 +31,119 @@
 #define THIS_FILE	"ip_helper_symbian.cpp"
 #define TRACE_ME	0
 
-static pj_status_t rsock_enum_interface (int af,
-        unsigned *p_cnt,
-        pj_sockaddr ifs[])
+static pj_status_t rsock_enum_interface(int af,
+					unsigned *p_cnt,
+					pj_sockaddr ifs[]) 
 {
     TInt rc;
     RSocket rSock;
     TPckgBuf<TSoInetInterfaceInfo> info;
     unsigned i;
-
+    
     if (PjSymbianOS::Instance()->Connection()) {
-
-        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
-                         af, PJ_SOCK_DGRAM, KProtocolInetUdp,
-                         *PjSymbianOS::Instance()->Connection());
+    	
+    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
+    			af, PJ_SOCK_DGRAM, KProtocolInetUdp,
+    			*PjSymbianOS::Instance()->Connection());
     } else {
-
-        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
-                         af, PJ_SOCK_DGRAM, KProtocolInetUdp);
-
+    	
+    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
+    			af, PJ_SOCK_DGRAM, KProtocolInetUdp);
+    			
     }
-
+        
     if (rc != KErrNone)
-        return PJ_RETURN_OS_ERROR (rc);
-
-    rSock.SetOpt (KSoInetEnumInterfaces, KSolInetIfCtrl);
-
+	return PJ_RETURN_OS_ERROR(rc);
+    
+    rSock.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl);
+    
     for (i=0; i<*p_cnt &&
-            rSock.GetOpt (KSoInetNextInterface, KSolInetIfCtrl,
-                          info) == KErrNone;) {
-        TInetAddr &iAddress = info().iAddress;
-        int namelen;
+    		rSock.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, 
+    		             info) == KErrNone; ) 
+    {
+    	TInetAddr &iAddress = info().iAddress;
+    	int namelen;
 
 #if TRACE_ME
-
-        if (1) {
-            pj_sockaddr a;
-            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-
-            namelen = sizeof (pj_sockaddr);
-
-            if (PjSymbianOS::Addr2pj (iAddress, a, &namelen,
-                                      PJ_FALSE) == PJ_SUCCESS) {
-                PJ_LOG (5, (THIS_FILE, "Enum: found address %s",
-                            pj_sockaddr_print (&a, ipaddr, sizeof (ipaddr), 2)));
-            }
-        }
-
+		if (1) {
+			pj_sockaddr a;
+			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+			
+			namelen = sizeof(pj_sockaddr);
+			if (PjSymbianOS::Addr2pj(iAddress, a, &namelen, 
+									 PJ_FALSE) == PJ_SUCCESS) 
+			{
+				PJ_LOG(5,(THIS_FILE, "Enum: found address %s", 
+						pj_sockaddr_print(&a, ipaddr, sizeof(ipaddr), 2)));
+			}
+		}
 #endif
-
-        namelen = sizeof (ifs[i]);
-
-        if (PjSymbianOS::Addr2pj (iAddress, ifs[i], &namelen,
-                                  PJ_TRUE) != PJ_SUCCESS) {
-            continue;
-        }
-
-        if (ifs[i].addr.sa_family != af)
-            continue;
-
-        ++i;
+    	
+    	namelen = sizeof(ifs[i]);
+    	if (PjSymbianOS::Addr2pj(iAddress, ifs[i], &namelen, 
+    							 PJ_TRUE) != PJ_SUCCESS)
+    	{
+    	    continue;
+    	}
+
+    	if (ifs[i].addr.sa_family != af)
+		    continue;
+    	
+    	++i;
     }
-
+    
     rSock.Close();
-
+    
     // Done
     *p_cnt = i;
-
+    
     return PJ_SUCCESS;
 }
-
+					
 /*
  * Enumerate the local IP interface currently active in the host.
  */
-PJ_DEF (pj_status_t) pj_enum_ip_interface (int af,
-        unsigned *p_cnt,
-        pj_sockaddr ifs[])
+PJ_DEF(pj_status_t) pj_enum_ip_interface(int af,
+					 unsigned *p_cnt,
+					 pj_sockaddr ifs[])
 {
     unsigned start;
     pj_status_t status = PJ_SUCCESS;
 
     start = 0;
-
+    	    
     /* Get IPv6 interface first. */
-
     if (af==PJ_AF_INET6 || af==PJ_AF_UNSPEC) {
-        unsigned max = *p_cnt;
-        status = rsock_enum_interface (PJ_AF_INET6, &max, &ifs[start]);
-
-        if (status == PJ_SUCCESS) {
-            (*p_cnt) -= max;
-            start += max;
-        }
+    	unsigned max = *p_cnt;
+    	status = rsock_enum_interface(PJ_AF_INET6, &max, &ifs[start]);
+    	if (status == PJ_SUCCESS) {
+    	    (*p_cnt) -= max;
+    	    start += max;
+    	}
     }
-
+    
     /* Get IPv4 interface. */
     if (af==PJ_AF_INET || af==PJ_AF_UNSPEC) {
-        unsigned max = *p_cnt;
-        status = rsock_enum_interface (PJ_AF_INET, &max, &ifs[start]);
-
-        if (status == PJ_SUCCESS) {
-            (*p_cnt) -= max;
-            start += max;
-        }
+    	unsigned max = *p_cnt;
+    	status = rsock_enum_interface(PJ_AF_INET, &max, &ifs[start]);
+    	if (status == PJ_SUCCESS) {
+    	    (*p_cnt) -= max;
+    	    start += max;
+    	}
     }
-
+    
     *p_cnt = start;
-
+    
     return start ? PJ_SUCCESS : PJ_ENOTFOUND;
 }
 
 /*
  * Enumerate the IP routing table for this host.
  */
-PJ_DEF (pj_status_t) pj_enum_ip_route (unsigned *p_cnt,
-                                       pj_ip_route_entry routes[])
+PJ_DEF(pj_status_t) pj_enum_ip_route(unsigned *p_cnt,
+				     pj_ip_route_entry routes[])
 {
-    PJ_ASSERT_RETURN (p_cnt && *p_cnt > 0 && routes, PJ_EINVAL);
+    PJ_ASSERT_RETURN(p_cnt && *p_cnt > 0 && routes, PJ_EINVAL);
     *p_cnt = 0;
     return PJ_ENOTSUP;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_win32.c b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_win32.c
index e02b6027e9..67168791ef 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_win32.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_win32.c
@@ -1,4 +1,4 @@
-/* $Id: ip_helper_win32.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: ip_helper_win32.c 3040 2009-12-30 08:39:14Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -41,16 +41,53 @@
 #include <pj/errno.h>
 #include <pj/string.h>
 
+/* Dealing with Unicode quirks:
+
+ There seems to be a difference with GetProcAddress() API signature between
+ Windows (i.e. Win32) and Windows CE (e.g. Windows Mobile). On Windows, the
+ API is declared as:
+
+   FARPROC GetProcAddress(
+     HMODULE hModule,
+     LPCSTR lpProcName);
+ 
+ while on Windows CE:
+
+   FARPROC GetProcAddress(
+     HMODULE hModule,
+     LPCWSTR lpProcName);
+
+ Notice the difference with lpProcName argument type. This means that on 
+ Windows, even on Unicode Windows, the lpProcName always takes ANSI format, 
+ while on Windows CE, the argument follows the UNICODE setting.
+
+ Because of this, we use a different Unicode treatment here than the usual
+ PJ_NATIVE_STRING_IS_UNICODE PJLIB setting (<pj/unicode.h>):
+   - GPA_TEXT macro: convert literal string to platform's native literal 
+         string
+   - gpa_char: the platform native character type
+
+ Note that "GPA" and "gpa" are abbreviations for GetProcAddress.
+*/
+#if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE!=0
+    /* on CE, follow the PJLIB Unicode setting */
+#   define GPA_TEXT(x)	PJ_T(x)
+#   define gpa_char	pj_char_t
+#else
+    /* on non-CE, always use ANSI format */
+#   define GPA_TEXT(x)	x
+#   define gpa_char	char
+#endif
+
+
 typedef DWORD (WINAPI *PFN_GetIpAddrTable)(PMIB_IPADDRTABLE pIpAddrTable, 
 					   PULONG pdwSize, 
 					   BOOL bOrder);
-#if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
 typedef DWORD (WINAPI *PFN_GetAdapterAddresses)(ULONG Family,
 					        ULONG Flags,
 					        PVOID Reserved,
 					        PIP_ADAPTER_ADDRESSES AdapterAddresses,
 					        PULONG SizePointer);
-#endif	/* PJ_HAS_IPV6 */
 typedef DWORD (WINAPI *PFN_GetIpForwardTable)(PMIB_IPFORWARDTABLE pIpForwardTable,
 					      PULONG pdwSize, 
 					      BOOL bOrder);
@@ -58,9 +95,7 @@ typedef DWORD (WINAPI *PFN_GetIfEntry)(PMIB_IFROW pIfRow);
 
 static HANDLE s_hDLL;
 static PFN_GetIpAddrTable s_pfnGetIpAddrTable;
-#if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
-    static PFN_GetAdapterAddresses s_pfnGetAdapterAddresses;
-#endif	/* PJ_HAS_IPV6 */
+static PFN_GetAdapterAddresses s_pfnGetAdapterAddresses;
 static PFN_GetIpForwardTable s_pfnGetIpForwardTable;
 static PFN_GetIfEntry s_pfnGetIfEntry;
 
@@ -72,12 +107,10 @@ static void unload_iphlp_module(void)
     s_pfnGetIpAddrTable = NULL;
     s_pfnGetIpForwardTable = NULL;
     s_pfnGetIfEntry = NULL;
-#if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
     s_pfnGetAdapterAddresses = NULL;
-#endif
 }
 
-static FARPROC GetIpHlpApiProc(pj_char_t *lpProcName)
+static FARPROC GetIpHlpApiProc(gpa_char *lpProcName)
 {
     if(NULL == s_hDLL) {
 	s_hDLL = LoadLibrary(PJ_T("IpHlpApi"));
@@ -98,7 +131,7 @@ static DWORD MyGetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable,
 {
     if(NULL == s_pfnGetIpAddrTable) {
 	s_pfnGetIpAddrTable = (PFN_GetIpAddrTable) 
-	    GetIpHlpApiProc(PJ_T("GetIpAddrTable"));
+	    GetIpHlpApiProc(GPA_TEXT("GetIpAddrTable"));
     }
     
     if(NULL != s_pfnGetIpAddrTable) {
@@ -108,7 +141,6 @@ static DWORD MyGetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable,
     return ERROR_NOT_SUPPORTED;
 }
 
-#if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
 static DWORD MyGetAdapterAddresses(ULONG Family,
 				   ULONG Flags,
 				   PVOID Reserved,
@@ -117,7 +149,7 @@ static DWORD MyGetAdapterAddresses(ULONG Family,
 {
     if(NULL == s_pfnGetAdapterAddresses) {
 	s_pfnGetAdapterAddresses = (PFN_GetAdapterAddresses) 
-	    GetIpHlpApiProc(PJ_T("GetAdapterAddresses"));
+	    GetIpHlpApiProc(GPA_TEXT("GetAdaptersAddresses"));
     }
     
     if(NULL != s_pfnGetAdapterAddresses) {
@@ -127,14 +159,13 @@ static DWORD MyGetAdapterAddresses(ULONG Family,
     
     return ERROR_NOT_SUPPORTED;
 }
-#endif	/* PJ_HAS_IPV6 */
 
 #if PJ_IP_HELPER_IGNORE_LOOPBACK_IF
 static DWORD MyGetIfEntry(MIB_IFROW *pIfRow)
 {
     if(NULL == s_pfnGetIfEntry) {
 	s_pfnGetIfEntry = (PFN_GetIfEntry) 
-	    GetIpHlpApiProc(PJ_T("GetIfEntry"));
+	    GetIpHlpApiProc(GPA_TEXT("GetIfEntry"));
     }
     
     if(NULL != s_pfnGetIfEntry) {
@@ -152,7 +183,7 @@ static DWORD MyGetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable,
 {
     if(NULL == s_pfnGetIpForwardTable) {
 	s_pfnGetIpForwardTable = (PFN_GetIpForwardTable) 
-	    GetIpHlpApiProc(PJ_T("GetIpForwardTable"));
+	    GetIpHlpApiProc(GPA_TEXT("GetIpForwardTable"));
     }
     
     if(NULL != s_pfnGetIpForwardTable) {
@@ -168,25 +199,30 @@ static DWORD MyGetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable,
 static pj_status_t enum_ipv4_interface(unsigned *p_cnt,
 				       pj_sockaddr ifs[])
 {
-    /* Provide enough buffer or otherwise it will fail with 
-     * error 22 ("Not Enough Buffer") error.
-     */
-    char ipTabBuff[1024];
-    MIB_IPADDRTABLE *pTab;
-    ULONG tabSize;
+    char ipTabBuff[512];
+    MIB_IPADDRTABLE *pTab = (MIB_IPADDRTABLE*)ipTabBuff;
+    ULONG tabSize = sizeof(ipTabBuff);
     unsigned i, count;
     DWORD rc = NO_ERROR;
 
     PJ_ASSERT_RETURN(p_cnt && ifs, PJ_EINVAL);
 
-    pTab = (MIB_IPADDRTABLE*)ipTabBuff;
-
     /* Get IP address table */
-    tabSize = sizeof(ipTabBuff);
-
     rc = MyGetIpAddrTable(pTab, &tabSize, FALSE);
-    if (rc != NO_ERROR)
-	return PJ_RETURN_OS_ERROR(rc);
+    if (rc != NO_ERROR) {
+	if (rc == ERROR_INSUFFICIENT_BUFFER) {
+	    /* Retry with larger buffer */
+	    pTab = (MIB_IPADDRTABLE*)malloc(tabSize);
+	    if (pTab)
+		rc = MyGetIpAddrTable(pTab, &tabSize, FALSE);
+	}
+
+	if (rc != NO_ERROR) {
+	    if (pTab != (MIB_IPADDRTABLE*)ipTabBuff)
+		free(pTab);
+	    return PJ_RETURN_OS_ERROR(rc);
+	}
+    }
 
     /* Reset result */
     pj_bzero(ifs, sizeof(ifs[0]) * (*p_cnt));
@@ -223,37 +259,103 @@ static pj_status_t enum_ipv4_interface(unsigned *p_cnt,
 	(*p_cnt)++;
     }
 
+    if (pTab != (MIB_IPADDRTABLE*)ipTabBuff)
+	free(pTab);
+
     return (*p_cnt) ? PJ_SUCCESS : PJ_ENOTFOUND;
 }
 
-
 /* Enumerate local IP interface using GetAdapterAddresses(),
  * which works for both IPv4 and IPv6.
  */
-#if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
 static pj_status_t enum_ipv4_ipv6_interface(int af,
 					    unsigned *p_cnt,
 					    pj_sockaddr ifs[])
 {
-    pj_uint8_t buffer[1024];
+    pj_uint8_t buffer[600];
     IP_ADAPTER_ADDRESSES *adapter = (IP_ADAPTER_ADDRESSES*)buffer;
     ULONG size = sizeof(buffer);
+    ULONG flags;
     unsigned i;
     DWORD rc;
 
-    rc = MyGetAdapterAddresses(af, 0, NULL, adapter, &size);
-    if (rc != ERROR_SUCCESS)
-	return PJ_RETURN_OS_ERROR(rc);
+    flags = GAA_FLAG_SKIP_FRIENDLY_NAME |
+	    GAA_FLAG_SKIP_DNS_SERVER |
+	    GAA_FLAG_SKIP_MULTICAST;
+
+    rc = MyGetAdapterAddresses(af, flags, NULL, adapter, &size);
+    if (rc != ERROR_SUCCESS) {
+	if (rc == ERROR_BUFFER_OVERFLOW) {
+	    /* Retry with larger memory size */
+	    adapter = (IP_ADAPTER_ADDRESSES*) malloc(size);
+	    if (adapter != NULL)
+		rc = MyGetAdapterAddresses(af, flags, NULL, adapter, &size);
+	} 
+
+	if (rc != ERROR_SUCCESS) {
+	    if (adapter != (IP_ADAPTER_ADDRESSES*)buffer)
+		free(adapter);
+	    return PJ_RETURN_OS_ERROR(rc);
+	}
+    }
+
+    /* Reset result */
+    pj_bzero(ifs, sizeof(ifs[0]) * (*p_cnt));
+
+    /* Enumerate interface */
+    for (i=0; i<*p_cnt && adapter; adapter = adapter->Next) {
+	if (adapter->FirstUnicastAddress) {
+	    SOCKET_ADDRESS *pAddr = &adapter->FirstUnicastAddress->Address;
+
+	    /* Ignore address family which we didn't request, just in case */
+	    if (pAddr->lpSockaddr->sa_family != PJ_AF_INET &&
+		pAddr->lpSockaddr->sa_family != PJ_AF_INET6)
+	    {
+		continue;
+	    }
+
+	    /* Apply some filtering to known IPv4 unusable addresses */
+	    if (pAddr->lpSockaddr->sa_family == PJ_AF_INET) {
+		const pj_sockaddr_in *addr_in = 
+		    (const pj_sockaddr_in*)pAddr->lpSockaddr;
+
+		/* Ignore 0.0.0.0 address (interface is down?) */
+		if (addr_in->sin_addr.s_addr == 0)
+		    continue;
+
+		/* Ignore 0.0.0.0/8 address. This is a special address
+		 * which doesn't seem to have practical use.
+		 */
+		if ((pj_ntohl(addr_in->sin_addr.s_addr) >> 24) == 0)
+		    continue;
+	    }
+
+#if PJ_IP_HELPER_IGNORE_LOOPBACK_IF
+	    /* Ignore loopback interfaces */
+	    /* This should have been IF_TYPE_SOFTWARE_LOOPBACK according to
+	     * MSDN, and this macro should have been declared in Ipifcons.h, 
+	     * but some SDK versions don't have it.
+	     */
+	    if (adapter->IfType == MIB_IF_TYPE_LOOPBACK)
+		continue;
+#endif
+
+	    /* Ignore down interface */
+	    if (adapter->OperStatus != IfOperStatusUp)
+		continue;
 
-    for (i=0; i<*p_cnt && adapter; ++i, adapter = adapter->Next) {
-	SOCKET_ADDRESS *pAddr = &adapter->FirstUnicastAddress->Address;
-	ifs[i].addr.sa_family = pAddr->lpSockaddr->sa_family;
-	pj_memcpy(&ifs[i], pAddr->lpSockaddr, pAddr->iSockaddrLength);
+	    ifs[i].addr.sa_family = pAddr->lpSockaddr->sa_family;
+	    pj_memcpy(&ifs[i], pAddr->lpSockaddr, pAddr->iSockaddrLength);
+	    ++i;
+	}
     }
 
-    return PJ_SUCCESS;
+    if (adapter != (IP_ADAPTER_ADDRESSES*)buffer)
+	free(adapter);
+
+    *p_cnt = i;
+    return (*p_cnt) ? PJ_SUCCESS : PJ_ENOTFOUND;
 }
-#endif
 
 
 /*
@@ -269,20 +371,10 @@ PJ_DEF(pj_status_t) pj_enum_ip_interface(int af,
     PJ_ASSERT_RETURN(af==PJ_AF_UNSPEC || af==PJ_AF_INET || af==PJ_AF_INET6,
 		     PJ_EAFNOTSUP);
 
-#if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
     status = enum_ipv4_ipv6_interface(af, p_cnt, ifs);
     if (status != PJ_SUCCESS && (af==PJ_AF_INET || af==PJ_AF_UNSPEC))
 	status = enum_ipv4_interface(p_cnt, ifs);
     return status;
-#else
-    if (af==PJ_AF_INET6)
-	return PJ_EIPV6NOTSUP;
-    else if (af != PJ_AF_INET && af != PJ_AF_UNSPEC)
-	return PJ_EAFNOTSUP;
-
-    status = enum_ipv4_interface(p_cnt, ifs);
-    return status;
-#endif
 }
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp
index 34d4a40254..8f627cf149 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp
@@ -1,5 +1,5 @@
 /* $Id: log_writer_symbian_console.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/log.h>
 #include <pj/os.h>
@@ -24,21 +24,21 @@
 #include "os_symbian.h"
 #include <e32cons.h>
 
-PJ_DEF (void) pj_log_write (int level, const char *buffer, int len)
+PJ_DEF(void) pj_log_write(int level, const char *buffer, int len)
 {
 #if 0
     wchar_t wbuffer[PJ_LOG_MAX_SIZE];
     CConsoleBase *cons = PjSymbianOS::Instance->Console();
 
-    pj_ansi_to_unicode (buffer, len, wbuffer, PJ_ARRAY_SIZE (wbuffer));
+    pj_ansi_to_unicode(buffer, len, wbuffer, PJ_ARRAY_SIZE(wbuffer));
 
-
-    TPtrC16 aPtr ( (TUint16*) wbuffer, len);
-    console->Write (aPtr);
+    
+    TPtrC16 aPtr((TUint16*)wbuffer, len);
+    console->Write(aPtr);
 #else
-    PJ_UNUSED_ARG (level);
-    PJ_UNUSED_ARG (buffer);
-    PJ_UNUSED_ARG (len);
+    PJ_UNUSED_ARG(level);
+    PJ_UNUSED_ARG(buffer);
+    PJ_UNUSED_ARG(len);
 #endif
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp
index 96478ec4ed..8b03615218 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: os_core_symbian.cpp 2853 2009-08-05 10:58:02Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 #include <pj/os.h>
@@ -35,14 +35,15 @@
 #define DUMMY_MUTEX	    ((pj_mutex_t*)101)
 #define DUMMY_SEMAPHORE	    ((pj_sem_t*)102)
 #define THIS_FILE	    "os_core_symbian.c"
-
+ 
 /*
  * Note:
  *
  * The Symbian implementation does not support threading!
- */
+ */ 
 
-struct pj_thread_t {
+struct pj_thread_t
+{
     char	    obj_name[PJ_MAX_OBJ_NAME];
     void	   *tls_values[PJ_MAX_TLS];
 
@@ -56,11 +57,13 @@ struct pj_thread_t {
 
 } main_thread;
 
-struct pj_atomic_t {
+struct pj_atomic_t
+{
     pj_atomic_value_t	value;
 };
 
-struct pj_sem_t {
+struct pj_sem_t
+{
     int value;
     int max;
 };
@@ -70,7 +73,7 @@ static int tls_vars[PJ_MAX_TLS];
 
 /* atexit handlers */
 static unsigned atexit_count;
-static void (*atexit_func[32]) (void);
+static void (*atexit_func[32])(void);
 
 
 
@@ -81,7 +84,7 @@ static void (*atexit_func[32]) (void);
 //
 
 CPjTimeoutTimer::CPjTimeoutTimer()
-        : CActive (PJ_SYMBIAN_TIMER_PRIORITY), hasTimedOut_ (PJ_FALSE)
+: CActive(PJ_SYMBIAN_TIMER_PRIORITY), hasTimedOut_(PJ_FALSE)
 {
 }
 
@@ -95,27 +98,27 @@ void CPjTimeoutTimer::ConstructL()
 {
     hasTimedOut_ = PJ_FALSE;
     timer_.CreateLocal();
-    CActiveScheduler::Add (this);
+    CActiveScheduler::Add(this);
 }
 
 CPjTimeoutTimer *CPjTimeoutTimer::NewL()
 {
     CPjTimeoutTimer *self = new CPjTimeoutTimer;
-    CleanupStack::PushL (self);
+    CleanupStack::PushL(self);
 
     self->ConstructL();
 
-    CleanupStack::Pop (self);
+    CleanupStack::Pop(self);
     return self;
 
 }
 
-void CPjTimeoutTimer::StartTimer (TUint miliSeconds)
+void CPjTimeoutTimer::StartTimer(TUint miliSeconds)
 {
     Cancel();
 
     hasTimedOut_ = PJ_FALSE;
-    timer_.After (iStatus, miliSeconds * 1000);
+    timer_.After(iStatus, miliSeconds * 1000);
     SetActive();
 }
 
@@ -134,9 +137,9 @@ void CPjTimeoutTimer::DoCancel()
     timer_.Cancel();
 }
 
-TInt CPjTimeoutTimer::RunError (TInt aError)
+TInt CPjTimeoutTimer::RunError(TInt aError)
 {
-    PJ_UNUSED_ARG (aError);
+    PJ_UNUSED_ARG(aError);
     return KErrNone;
 }
 
@@ -148,16 +151,16 @@ TInt CPjTimeoutTimer::RunError (TInt aError)
 //
 
 PjSymbianOS::PjSymbianOS()
-        : isConnectionUp_ (false),
-        isSocketServInitialized_ (false), isResolverInitialized_ (false),
-        console_ (NULL), selectTimeoutTimer_ (NULL),
-        appSocketServ_ (NULL), appConnection_ (NULL), appHostResolver_ (NULL),
-        appHostResolver6_ (NULL)
+: isConnectionUp_(false),
+  isSocketServInitialized_(false), isResolverInitialized_(false),
+  console_(NULL), selectTimeoutTimer_(NULL),
+  appSocketServ_(NULL), appConnection_(NULL), appHostResolver_(NULL),
+  appHostResolver6_(NULL)
 {
 }
 
 // Set parameters
-void PjSymbianOS::SetParameters (pj_symbianos_params *params)
+void PjSymbianOS::SetParameters(pj_symbianos_params *params) 
 {
     appSocketServ_ = (RSocketServ*) params->rsocketserv;
     appConnection_ = (RConnection*) params->rconnection;
@@ -181,57 +184,54 @@ TInt PjSymbianOS::Initialize()
     selectTimeoutTimer_ = CPjTimeoutTimer::NewL();
 
 #if 0
-    pj_assert (console_ == NULL);
-    TRAPD (err, console_ = Console::NewL (_L ("PJLIB"),
-                                          TSize (KConsFullScreen,KConsFullScreen)));
+    pj_assert(console_ == NULL);
+    TRAPD(err, console_ = Console::NewL(_L("PJLIB"), 
+				        TSize(KConsFullScreen,KConsFullScreen)));
     return err;
 #endif
 
     /* Only create RSocketServ if application doesn't specify it
      * in the parameters
      */
-
     if (!isSocketServInitialized_ && appSocketServ_ == NULL) {
-        err = socketServ_.Connect();
-
-        if (err != KErrNone)
-            goto on_error;
+	err = socketServ_.Connect();
+	if (err != KErrNone)
+	    goto on_error;
 
-        isSocketServInitialized_ = true;
+	isSocketServInitialized_ = true;
     }
 
     if (!isResolverInitialized_) {
-        if (appHostResolver_ == NULL) {
-            if (Connection())
-                err = hostResolver_.Open (SocketServ(), KAfInet, KSockStream,
-                                          *Connection());
-            else
-                err = hostResolver_.Open (SocketServ(), KAfInet, KSockStream);
-
-            if (err != KErrNone)
-                goto on_error;
-        }
-
+    	if (appHostResolver_ == NULL) {
+    	    if (Connection())
+    	    	err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream,
+    	    			     	 *Connection());
+    	    else
+	    	err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream);
+    	
+	    if (err != KErrNone)
+	    	goto on_error;
+    	}
+    	
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
-        if (appHostResolver6_ == NULL) {
-            if (Connection())
-                err = hostResolver6_.Open (SocketServ(), KAfInet6, KSockStream,
-                                           *Connection());
-            else
-                err = hostResolver6_.Open (SocketServ(), KAfInet6, KSockStream);
-
-            if (err != KErrNone)
-                goto on_error;
-        }
-
+    	if (appHostResolver6_ == NULL) {
+    	    if (Connection())
+    	    	err = hostResolver6_.Open(SocketServ(), KAfInet6, KSockStream,
+    	    			     	  *Connection());
+    	    else
+	    	err = hostResolver6_.Open(SocketServ(), KAfInet6, KSockStream);
+    	
+	    if (err != KErrNone)
+	    	goto on_error;
+    	}
 #endif
-
-
-        isResolverInitialized_ = true;
+    	
+    	
+	isResolverInitialized_ = true;
     }
 
     isConnectionUp_ = true;
-
+    
     return KErrNone;
 
 on_error:
@@ -243,27 +243,26 @@ on_error:
 void PjSymbianOS::Shutdown()
 {
     isConnectionUp_ = false;
-
+    
     if (isResolverInitialized_) {
-        hostResolver_.Close();
+		hostResolver_.Close();
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
-        hostResolver6_.Close();
+    	hostResolver6_.Close();
 #endif
-        isResolverInitialized_ = false;
+    	isResolverInitialized_ = false;
     }
 
     if (isSocketServInitialized_) {
-        socketServ_.Close();
-        isSocketServInitialized_ = false;
+	socketServ_.Close();
+	isSocketServInitialized_ = false;
     }
 
     delete console_;
-
     console_ = NULL;
 
     delete selectTimeoutTimer_;
     selectTimeoutTimer_ = NULL;
-
+    
     appSocketServ_ = NULL;
     appConnection_ = NULL;
     appHostResolver_ = NULL;
@@ -271,24 +270,24 @@ void PjSymbianOS::Shutdown()
 }
 
 // Convert to Unicode
-TInt PjSymbianOS::ConvertToUnicode (TDes16 &aUnicode, const TDesC8 &aForeign)
+TInt PjSymbianOS::ConvertToUnicode(TDes16 &aUnicode, const TDesC8 &aForeign)
 {
 #if 0
-    pj_assert (conv_ != NULL);
-    return conv_->ConvertToUnicode (aUnicode, aForeign, convToUnicodeState_);
+    pj_assert(conv_ != NULL);
+    return conv_->ConvertToUnicode(aUnicode, aForeign, convToUnicodeState_);
 #else
-    return CnvUtfConverter::ConvertToUnicodeFromUtf8 (aUnicode, aForeign);
+    return CnvUtfConverter::ConvertToUnicodeFromUtf8(aUnicode, aForeign);
 #endif
 }
 
 // Convert from Unicode
-TInt PjSymbianOS::ConvertFromUnicode (TDes8 &aForeign, const TDesC16 &aUnicode)
+TInt PjSymbianOS::ConvertFromUnicode(TDes8 &aForeign, const TDesC16 &aUnicode)
 {
 #if 0
-    pj_assert (conv_ != NULL);
-    return conv_->ConvertFromUnicode (aForeign, aUnicode, convToAnsiState_);
+    pj_assert(conv_ != NULL);
+    return conv_->ConvertFromUnicode(aForeign, aUnicode, convToAnsiState_);
 #else
-    return CnvUtfConverter::ConvertFromUnicodeToUtf8 (aForeign, aUnicode);
+    return CnvUtfConverter::ConvertFromUnicodeToUtf8(aForeign, aUnicode);
 #endif
 }
 
@@ -298,25 +297,25 @@ TInt PjSymbianOS::ConvertFromUnicode (TDes8 &aForeign, const TDesC16 &aUnicode)
 // PJLIB os.h implementation
 //
 
-PJ_DEF (pj_uint32_t) pj_getpid (void)
+PJ_DEF(pj_uint32_t) pj_getpid(void)
 {
     return 0;
 }
 
 
 /* Set Symbian specific parameters */
-PJ_DEF (pj_status_t) pj_symbianos_set_params (pj_symbianos_params *prm)
+PJ_DEF(pj_status_t) pj_symbianos_set_params(pj_symbianos_params *prm) 
 {
-    PJ_ASSERT_RETURN (prm != NULL, PJ_EINVAL);
-    PjSymbianOS::Instance()->SetParameters (prm);
+    PJ_ASSERT_RETURN(prm != NULL, PJ_EINVAL);
+    PjSymbianOS::Instance()->SetParameters(prm);
     return PJ_SUCCESS;
 }
 
 
 /* Set connection status */
-PJ_DEF (void) pj_symbianos_set_connection_status (pj_bool_t up)
+PJ_DEF(void) pj_symbianos_set_connection_status(pj_bool_t up)
 {
-    PjSymbianOS::Instance()->SetConnectionStatus (up != 0);
+    PjSymbianOS::Instance()->SetConnectionStatus(up != 0);
 }
 
 
@@ -324,180 +323,169 @@ PJ_DEF (void) pj_symbianos_set_connection_status (pj_bool_t up)
  * pj_init(void).
  * Init PJLIB!
  */
-PJ_DEF (pj_status_t) pj_init (void)
+PJ_DEF(pj_status_t) pj_init(void)
 {
-    char stack_ptr;
+	char stack_ptr;
     pj_status_t status;
-
-    pj_ansi_strcpy (main_thread.obj_name, "pjthread");
+    
+    pj_ansi_strcpy(main_thread.obj_name, "pjthread");
 
     // Init main thread
-    pj_memset (&main_thread, 0, sizeof (main_thread));
+    pj_memset(&main_thread, 0, sizeof(main_thread));
 
     // Initialize PjSymbianOS instance
     PjSymbianOS *os = PjSymbianOS::Instance();
 
-    PJ_LOG (4, (THIS_FILE, "Initializing PJLIB for Symbian OS.."));
+    PJ_LOG(4,(THIS_FILE, "Initializing PJLIB for Symbian OS.."));
 
-    TInt err;
+    TInt err; 
     err = os->Initialize();
-
     if (err != KErrNone)
-        return PJ_RETURN_OS_ERROR (err);
+    	return PJ_RETURN_OS_ERROR(err);
 
     /* Init logging */
     pj_log_init();
 
-    /* Initialize exception ID for the pool.
+    /* Initialize exception ID for the pool. 
      * Must do so after critical section is configured.
-     */
-    status = pj_exception_id_alloc ("PJLIB/No memory", &PJ_NO_MEMORY_EXCEPTION);
-
+     */ 
+    status = pj_exception_id_alloc("PJLIB/No memory", &PJ_NO_MEMORY_EXCEPTION);
     if (status != PJ_SUCCESS)
         goto on_error;
 
 #if defined(PJ_OS_HAS_CHECK_STACK) && PJ_OS_HAS_CHECK_STACK!=0
     main_thread.stk_start = &stack_ptr;
-
     main_thread.stk_size = 0xFFFFFFFFUL;
-
     main_thread.stk_max_usage = 0;
-
 #else
     stack_ptr = '\0';
-
 #endif
 
-    PJ_LOG (5, (THIS_FILE, "PJLIB initialized."));
-
+    PJ_LOG(5,(THIS_FILE, "PJLIB initialized."));
     return PJ_SUCCESS;
 
 on_error:
     pj_shutdown();
-
-    return PJ_RETURN_OS_ERROR (err);
+    return PJ_RETURN_OS_ERROR(err);
 }
 
 
-PJ_DEF (pj_status_t) pj_atexit (pj_exit_callback func)
+PJ_DEF(pj_status_t) pj_atexit(pj_exit_callback func)
 {
-    if (atexit_count >= PJ_ARRAY_SIZE (atexit_func))
-        return PJ_ETOOMANY;
+    if (atexit_count >= PJ_ARRAY_SIZE(atexit_func))
+	return PJ_ETOOMANY;
 
     atexit_func[atexit_count++] = func;
-
     return PJ_SUCCESS;
 }
 
 
 
-PJ_DEF (void) pj_shutdown (void)
+PJ_DEF(void) pj_shutdown(void)
 {
     /* Call atexit() functions */
     while (atexit_count > 0) {
-        (*atexit_func[atexit_count-1]) ();
-        --atexit_count;
+	(*atexit_func[atexit_count-1])();
+	--atexit_count;
     }
 
     /* Free exception ID */
     if (PJ_NO_MEMORY_EXCEPTION != -1) {
-        pj_exception_id_free (PJ_NO_MEMORY_EXCEPTION);
-        PJ_NO_MEMORY_EXCEPTION = -1;
+	pj_exception_id_free(PJ_NO_MEMORY_EXCEPTION);
+	PJ_NO_MEMORY_EXCEPTION = -1;
     }
 
     /* Clear static variables */
     pj_errno_clear_handlers();
 
     PjSymbianOS *os = PjSymbianOS::Instance();
-
     os->Shutdown();
 }
 
 /////////////////////////////////////////////////////////////////////////////
 
-class CPollTimeoutTimer : public CActive
+class CPollTimeoutTimer : public CActive 
 {
+public:
+    static CPollTimeoutTimer* NewL(int msec, TInt prio);
+    ~CPollTimeoutTimer();
+    
+    virtual void RunL();
+    virtual void DoCancel();
 
-    public:
-        static CPollTimeoutTimer* NewL (int msec, TInt prio);
-        ~CPollTimeoutTimer();
-
-        virtual void RunL();
-        virtual void DoCancel();
-
-    private:
-        RTimer	     rtimer_;
-
-        explicit CPollTimeoutTimer (TInt prio);
-        void ConstructL (int msec);
+private:	
+    RTimer	     rtimer_;
+    
+    explicit CPollTimeoutTimer(TInt prio);
+    void ConstructL(int msec);
 };
 
-CPollTimeoutTimer::CPollTimeoutTimer (TInt prio)
-        : CActive (prio)
+CPollTimeoutTimer::CPollTimeoutTimer(TInt prio)
+: CActive(prio)
 {
 }
 
 
-CPollTimeoutTimer::~CPollTimeoutTimer()
+CPollTimeoutTimer::~CPollTimeoutTimer() 
 {
     rtimer_.Close();
 }
 
-void CPollTimeoutTimer::ConstructL (int msec)
+void CPollTimeoutTimer::ConstructL(int msec) 
 {
     rtimer_.CreateLocal();
-    CActiveScheduler::Add (this);
-    rtimer_.After (iStatus, msec*1000);
+    CActiveScheduler::Add(this);
+    rtimer_.After(iStatus, msec*1000);
     SetActive();
 }
 
-CPollTimeoutTimer* CPollTimeoutTimer::NewL (int msec, TInt prio)
+CPollTimeoutTimer* CPollTimeoutTimer::NewL(int msec, TInt prio) 
 {
-    CPollTimeoutTimer *self = new CPollTimeoutTimer (prio);
-    CleanupStack::PushL (self);
-    self->ConstructL (msec);
-    CleanupStack::Pop (self);
+    CPollTimeoutTimer *self = new CPollTimeoutTimer(prio);
+    CleanupStack::PushL(self);
+    self->ConstructL(msec);    
+    CleanupStack::Pop(self);
 
     return self;
 }
 
-void CPollTimeoutTimer::RunL()
+void CPollTimeoutTimer::RunL() 
 {
 }
 
-void CPollTimeoutTimer::DoCancel()
+void CPollTimeoutTimer::DoCancel() 
 {
-    rtimer_.Cancel();
+     rtimer_.Cancel();
 }
 
 
 /*
- * Wait the completion of any Symbian active objects.
+ * Wait the completion of any Symbian active objects. 
  */
-PJ_DEF (pj_bool_t) pj_symbianos_poll (int priority, int ms_timeout)
+PJ_DEF(pj_bool_t) pj_symbianos_poll(int priority, int ms_timeout)
 {
     CPollTimeoutTimer *timer = NULL;
-
+    
     if (priority==-1)
-        priority = EPriorityNull;
-
+    	priority = EPriorityNull;
+    
     if (ms_timeout >= 0) {
-        timer = CPollTimeoutTimer::NewL (ms_timeout, priority);
+    	timer = CPollTimeoutTimer::NewL(ms_timeout, priority);
     }
-
-    PjSymbianOS::Instance()->WaitForActiveObjects (priority);
-
+    
+    PjSymbianOS::Instance()->WaitForActiveObjects(priority);
+    
     if (timer) {
         bool timer_is_active = timer->IsActive();
-
-        timer->Cancel();
-
+    
+	timer->Cancel();
+        
         delete timer;
-
-        return timer_is_active ? PJ_TRUE : PJ_FALSE;
-
+        
+    	return timer_is_active ? PJ_TRUE : PJ_FALSE;
+    	
     } else {
-        return PJ_TRUE;
+    	return PJ_TRUE;
     }
 }
 
@@ -505,7 +493,7 @@ PJ_DEF (pj_bool_t) pj_symbianos_poll (int priority, int ms_timeout)
 /*
  * pj_thread_is_registered()
  */
-PJ_DEF (pj_bool_t) pj_thread_is_registered (void)
+PJ_DEF(pj_bool_t) pj_thread_is_registered(void)
 {
     return PJ_FALSE;
 }
@@ -514,9 +502,9 @@ PJ_DEF (pj_bool_t) pj_thread_is_registered (void)
 /*
  * Get thread priority value for the thread.
  */
-PJ_DEF (int) pj_thread_get_prio (pj_thread_t *thread)
+PJ_DEF(int) pj_thread_get_prio(pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG (thread);
+    PJ_UNUSED_ARG(thread);
     return 1;
 }
 
@@ -524,10 +512,10 @@ PJ_DEF (int) pj_thread_get_prio (pj_thread_t *thread)
 /*
  * Set the thread priority.
  */
-PJ_DEF (pj_status_t) pj_thread_set_prio (pj_thread_t *thread,  int prio)
+PJ_DEF(pj_status_t) pj_thread_set_prio(pj_thread_t *thread,  int prio)
 {
-    PJ_UNUSED_ARG (thread);
-    PJ_UNUSED_ARG (prio);
+    PJ_UNUSED_ARG(thread);
+    PJ_UNUSED_ARG(prio);
     return PJ_SUCCESS;
 }
 
@@ -535,9 +523,9 @@ PJ_DEF (pj_status_t) pj_thread_set_prio (pj_thread_t *thread,  int prio)
 /*
  * Get the lowest priority value available on this system.
  */
-PJ_DEF (int) pj_thread_get_prio_min (pj_thread_t *thread)
+PJ_DEF(int) pj_thread_get_prio_min(pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG (thread);
+    PJ_UNUSED_ARG(thread);
     return 1;
 }
 
@@ -545,9 +533,9 @@ PJ_DEF (int) pj_thread_get_prio_min (pj_thread_t *thread)
 /*
  * Get the highest priority value available on this system.
  */
-PJ_DEF (int) pj_thread_get_prio_max (pj_thread_t *thread)
+PJ_DEF(int) pj_thread_get_prio_max(pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG (thread);
+    PJ_UNUSED_ARG(thread);
     return 1;
 }
 
@@ -555,22 +543,22 @@ PJ_DEF (int) pj_thread_get_prio_max (pj_thread_t *thread)
 /*
  * pj_thread_get_os_handle()
  */
-PJ_DEF (void*) pj_thread_get_os_handle (pj_thread_t *thread)
+PJ_DEF(void*) pj_thread_get_os_handle(pj_thread_t *thread) 
 {
-    PJ_UNUSED_ARG (thread);
+    PJ_UNUSED_ARG(thread);
     return NULL;
 }
 
 /*
  * pj_thread_register(..)
  */
-PJ_DEF (pj_status_t) pj_thread_register (const char *cstr_thread_name,
-        pj_thread_desc desc,
-        pj_thread_t **thread_ptr)
+PJ_DEF(pj_status_t) pj_thread_register ( const char *cstr_thread_name,
+					 pj_thread_desc desc,
+                                         pj_thread_t **thread_ptr)
 {
-    PJ_UNUSED_ARG (cstr_thread_name);
-    PJ_UNUSED_ARG (desc);
-    PJ_UNUSED_ARG (thread_ptr);
+    PJ_UNUSED_ARG(cstr_thread_name);
+    PJ_UNUSED_ARG(desc);
+    PJ_UNUSED_ARG(thread_ptr);
     return PJ_EINVALIDOP;
 }
 
@@ -578,21 +566,21 @@ PJ_DEF (pj_status_t) pj_thread_register (const char *cstr_thread_name,
 /*
  * pj_thread_create(...)
  */
-PJ_DEF (pj_status_t) pj_thread_create (pj_pool_t *pool,
-                                       const char *thread_name,
-                                       pj_thread_proc *proc,
-                                       void *arg,
-                                       pj_size_t stack_size,
-                                       unsigned flags,
-                                       pj_thread_t **ptr_thread)
-{
-    PJ_UNUSED_ARG (pool);
-    PJ_UNUSED_ARG (thread_name);
-    PJ_UNUSED_ARG (proc);
-    PJ_UNUSED_ARG (arg);
-    PJ_UNUSED_ARG (stack_size);
-    PJ_UNUSED_ARG (flags);
-    PJ_UNUSED_ARG (ptr_thread);
+PJ_DEF(pj_status_t) pj_thread_create( pj_pool_t *pool, 
+				      const char *thread_name,
+				      pj_thread_proc *proc, 
+				      void *arg,
+				      pj_size_t stack_size, 
+				      unsigned flags,
+				      pj_thread_t **ptr_thread)
+{
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(thread_name);
+    PJ_UNUSED_ARG(proc);
+    PJ_UNUSED_ARG(arg);
+    PJ_UNUSED_ARG(stack_size);
+    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG(ptr_thread);
 
     /* Sorry mate, we don't support threading */
     return PJ_ENOTSUP;
@@ -601,25 +589,25 @@ PJ_DEF (pj_status_t) pj_thread_create (pj_pool_t *pool,
 /*
  * pj_thread-get_name()
  */
-PJ_DEF (const char*) pj_thread_get_name (pj_thread_t *p)
+PJ_DEF(const char*) pj_thread_get_name(pj_thread_t *p)
 {
-    pj_assert (p == &main_thread);
+    pj_assert(p == &main_thread);
     return p->obj_name;
 }
 
 /*
  * pj_thread_resume()
  */
-PJ_DEF (pj_status_t) pj_thread_resume (pj_thread_t *p)
+PJ_DEF(pj_status_t) pj_thread_resume(pj_thread_t *p)
 {
-    PJ_UNUSED_ARG (p);
+    PJ_UNUSED_ARG(p);
     return PJ_EINVALIDOP;
 }
 
 /*
  * pj_thread_this()
  */
-PJ_DEF (pj_thread_t*) pj_thread_this (void)
+PJ_DEF(pj_thread_t*) pj_thread_this(void)
 {
     return &main_thread;
 }
@@ -627,27 +615,27 @@ PJ_DEF (pj_thread_t*) pj_thread_this (void)
 /*
  * pj_thread_join()
  */
-PJ_DEF (pj_status_t) pj_thread_join (pj_thread_t *rec)
+PJ_DEF(pj_status_t) pj_thread_join(pj_thread_t *rec)
 {
-    PJ_UNUSED_ARG (rec);
+    PJ_UNUSED_ARG(rec);
     return PJ_EINVALIDOP;
 }
 
 /*
  * pj_thread_destroy()
  */
-PJ_DEF (pj_status_t) pj_thread_destroy (pj_thread_t *rec)
+PJ_DEF(pj_status_t) pj_thread_destroy(pj_thread_t *rec)
 {
-    PJ_UNUSED_ARG (rec);
+    PJ_UNUSED_ARG(rec);
     return PJ_EINVALIDOP;
 }
 
 /*
  * pj_thread_sleep()
  */
-PJ_DEF (pj_status_t) pj_thread_sleep (unsigned msec)
+PJ_DEF(pj_status_t) pj_thread_sleep(unsigned msec)
 {
-    User::After (msec*1000);
+    User::After(msec*1000);
 
     return PJ_SUCCESS;
 }
@@ -658,22 +646,20 @@ PJ_DEF (pj_status_t) pj_thread_sleep (unsigned msec)
  * pj_thread_local_alloc()
  */
 
-PJ_DEF (pj_status_t) pj_thread_local_alloc (long *index)
+PJ_DEF(pj_status_t) pj_thread_local_alloc(long *index)
 {
     unsigned i;
 
     /* Find unused TLS variable */
-
-    for (i=0; i<PJ_ARRAY_SIZE (tls_vars); ++i) {
-        if (tls_vars[i] == 0)
-            break;
+    for (i=0; i<PJ_ARRAY_SIZE(tls_vars); ++i) {
+	if (tls_vars[i] == 0)
+	    break;
     }
 
-    if (i == PJ_ARRAY_SIZE (tls_vars))
-        return PJ_ETOOMANY;
+    if (i == PJ_ARRAY_SIZE(tls_vars))
+	return PJ_ETOOMANY;
 
     tls_vars[i] = 1;
-
     *index = i;
 
     return PJ_SUCCESS;
@@ -682,10 +668,10 @@ PJ_DEF (pj_status_t) pj_thread_local_alloc (long *index)
 /*
  * pj_thread_local_free()
  */
-PJ_DEF (void) pj_thread_local_free (long index)
+PJ_DEF(void) pj_thread_local_free(long index)
 {
-    PJ_ASSERT_ON_FAIL (index >= 0 && index < (int) PJ_ARRAY_SIZE (tls_vars) &&
-                       tls_vars[index] != 0, return);
+    PJ_ASSERT_ON_FAIL(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
+		     tls_vars[index] != 0, return);
 
     tls_vars[index] = 0;
 }
@@ -694,12 +680,12 @@ PJ_DEF (void) pj_thread_local_free (long index)
 /*
  * pj_thread_local_set()
  */
-PJ_DEF (pj_status_t) pj_thread_local_set (long index, void *value)
+PJ_DEF(pj_status_t) pj_thread_local_set(long index, void *value)
 {
     pj_thread_t *rec = pj_thread_this();
 
-    PJ_ASSERT_RETURN (index >= 0 && index < (int) PJ_ARRAY_SIZE (tls_vars) &&
-                      tls_vars[index] != 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
+		     tls_vars[index] != 0, PJ_EINVAL);
 
     rec->tls_values[index] = value;
     return PJ_SUCCESS;
@@ -708,12 +694,12 @@ PJ_DEF (pj_status_t) pj_thread_local_set (long index, void *value)
 /*
  * pj_thread_local_get()
  */
-PJ_DEF (void*) pj_thread_local_get (long index)
+PJ_DEF(void*) pj_thread_local_get(long index)
 {
     pj_thread_t *rec = pj_thread_this();
 
-    PJ_ASSERT_RETURN (index >= 0 && index < (int) PJ_ARRAY_SIZE (tls_vars) &&
-                      tls_vars[index] != 0, NULL);
+    PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
+		     tls_vars[index] != 0, NULL);
 
     return rec->tls_values[index];
 }
@@ -723,11 +709,11 @@ PJ_DEF (void*) pj_thread_local_get (long index)
 /*
  * Create atomic variable.
  */
-PJ_DEF (pj_status_t) pj_atomic_create (pj_pool_t *pool,
-                                       pj_atomic_value_t initial,
-                                       pj_atomic_t **atomic)
+PJ_DEF(pj_status_t) pj_atomic_create( pj_pool_t *pool, 
+				      pj_atomic_value_t initial,
+				      pj_atomic_t **atomic )
 {
-    *atomic = (pj_atomic_t*) pj_pool_alloc (pool, sizeof (struct pj_atomic_t));
+    *atomic = (pj_atomic_t*)pj_pool_alloc(pool, sizeof(struct pj_atomic_t));
     (*atomic)->value = initial;
     return PJ_SUCCESS;
 }
@@ -736,9 +722,9 @@ PJ_DEF (pj_status_t) pj_atomic_create (pj_pool_t *pool,
 /*
  * Destroy atomic variable.
  */
-PJ_DEF (pj_status_t) pj_atomic_destroy (pj_atomic_t *atomic_var)
+PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *atomic_var )
 {
-    PJ_UNUSED_ARG (atomic_var);
+    PJ_UNUSED_ARG(atomic_var);
     return PJ_SUCCESS;
 }
 
@@ -746,8 +732,8 @@ PJ_DEF (pj_status_t) pj_atomic_destroy (pj_atomic_t *atomic_var)
 /*
  * Set the value of an atomic type, and return the previous value.
  */
-PJ_DEF (void) pj_atomic_set (pj_atomic_t *atomic_var,
-                             pj_atomic_value_t value)
+PJ_DEF(void) pj_atomic_set( pj_atomic_t *atomic_var, 
+			    pj_atomic_value_t value)
 {
     atomic_var->value = value;
 }
@@ -756,7 +742,7 @@ PJ_DEF (void) pj_atomic_set (pj_atomic_t *atomic_var,
 /*
  * Get the value of an atomic type.
  */
-PJ_DEF (pj_atomic_value_t) pj_atomic_get (pj_atomic_t *atomic_var)
+PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var)
 {
     return atomic_var->value;
 }
@@ -765,7 +751,7 @@ PJ_DEF (pj_atomic_value_t) pj_atomic_get (pj_atomic_t *atomic_var)
 /*
  * Increment the value of an atomic type.
  */
-PJ_DEF (void) pj_atomic_inc (pj_atomic_t *atomic_var)
+PJ_DEF(void) pj_atomic_inc(pj_atomic_t *atomic_var)
 {
     ++atomic_var->value;
 }
@@ -774,7 +760,7 @@ PJ_DEF (void) pj_atomic_inc (pj_atomic_t *atomic_var)
 /*
  * Increment the value of an atomic type and get the result.
  */
-PJ_DEF (pj_atomic_value_t) pj_atomic_inc_and_get (pj_atomic_t *atomic_var)
+PJ_DEF(pj_atomic_value_t) pj_atomic_inc_and_get(pj_atomic_t *atomic_var)
 {
     return ++atomic_var->value;
 }
@@ -783,16 +769,16 @@ PJ_DEF (pj_atomic_value_t) pj_atomic_inc_and_get (pj_atomic_t *atomic_var)
 /*
  * Decrement the value of an atomic type.
  */
-PJ_DEF (void) pj_atomic_dec (pj_atomic_t *atomic_var)
+PJ_DEF(void) pj_atomic_dec(pj_atomic_t *atomic_var)
 {
     --atomic_var->value;
-}
+}	
 
 
 /*
  * Decrement the value of an atomic type and get the result.
  */
-PJ_DEF (pj_atomic_value_t) pj_atomic_dec_and_get (pj_atomic_t *atomic_var)
+PJ_DEF(pj_atomic_value_t) pj_atomic_dec_and_get(pj_atomic_t *atomic_var)
 {
     return --atomic_var->value;
 }
@@ -801,8 +787,8 @@ PJ_DEF (pj_atomic_value_t) pj_atomic_dec_and_get (pj_atomic_t *atomic_var)
 /*
  * Add a value to an atomic type.
  */
-PJ_DEF (void) pj_atomic_add (pj_atomic_t *atomic_var,
-                             pj_atomic_value_t value)
+PJ_DEF(void) pj_atomic_add( pj_atomic_t *atomic_var,
+			    pj_atomic_value_t value)
 {
     atomic_var->value += value;
 }
@@ -811,8 +797,8 @@ PJ_DEF (void) pj_atomic_add (pj_atomic_t *atomic_var,
 /*
  * Add a value to an atomic type and get the result.
  */
-PJ_DEF (pj_atomic_value_t) pj_atomic_add_and_get (pj_atomic_t *atomic_var,
-        pj_atomic_value_t value)
+PJ_DEF(pj_atomic_value_t) pj_atomic_add_and_get( pj_atomic_t *atomic_var,
+			                         pj_atomic_value_t value)
 {
     atomic_var->value += value;
     return atomic_var->value;
@@ -822,14 +808,14 @@ PJ_DEF (pj_atomic_value_t) pj_atomic_add_and_get (pj_atomic_t *atomic_var,
 
 /////////////////////////////////////////////////////////////////////////////
 
-PJ_DEF (pj_status_t) pj_mutex_create (pj_pool_t *pool,
-                                      const char *name,
-                                      int type,
-                                      pj_mutex_t **mutex)
+PJ_DEF(pj_status_t) pj_mutex_create( pj_pool_t *pool, 
+                                     const char *name,
+				     int type, 
+                                     pj_mutex_t **mutex)
 {
-    PJ_UNUSED_ARG (pool);
-    PJ_UNUSED_ARG (name);
-    PJ_UNUSED_ARG (type);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(name);
+    PJ_UNUSED_ARG(type);
 
     *mutex = DUMMY_MUTEX;
     return PJ_SUCCESS;
@@ -838,55 +824,55 @@ PJ_DEF (pj_status_t) pj_mutex_create (pj_pool_t *pool,
 /*
  * pj_mutex_create_simple()
  */
-PJ_DEF (pj_status_t) pj_mutex_create_simple (pj_pool_t *pool,
-        const char *name,
-        pj_mutex_t **mutex)
+PJ_DEF(pj_status_t) pj_mutex_create_simple( pj_pool_t *pool, 
+                                            const char *name,
+					    pj_mutex_t **mutex )
 {
-    return pj_mutex_create (pool, name, PJ_MUTEX_SIMPLE, mutex);
+    return pj_mutex_create(pool, name, PJ_MUTEX_SIMPLE, mutex);
 }
 
 
-PJ_DEF (pj_status_t) pj_mutex_create_recursive (pj_pool_t *pool,
-        const char *name,
-        pj_mutex_t **mutex)
+PJ_DEF(pj_status_t) pj_mutex_create_recursive( pj_pool_t *pool,
+					       const char *name,
+					       pj_mutex_t **mutex )
 {
-    return pj_mutex_create (pool, name, PJ_MUTEX_RECURSE, mutex);
+    return pj_mutex_create(pool, name, PJ_MUTEX_RECURSE, mutex);
 }
 
 
 /*
  * pj_mutex_lock()
  */
-PJ_DEF (pj_status_t) pj_mutex_lock (pj_mutex_t *mutex)
+PJ_DEF(pj_status_t) pj_mutex_lock(pj_mutex_t *mutex)
 {
-    pj_assert (mutex == DUMMY_MUTEX);
+    pj_assert(mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
 /*
  * pj_mutex_trylock()
  */
-PJ_DEF (pj_status_t) pj_mutex_trylock (pj_mutex_t *mutex)
+PJ_DEF(pj_status_t) pj_mutex_trylock(pj_mutex_t *mutex)
 {
-    pj_assert (mutex == DUMMY_MUTEX);
+    pj_assert(mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
 /*
  * pj_mutex_unlock()
  */
-PJ_DEF (pj_status_t) pj_mutex_unlock (pj_mutex_t *mutex)
+PJ_DEF(pj_status_t) pj_mutex_unlock(pj_mutex_t *mutex)
 {
-    pj_assert (mutex == DUMMY_MUTEX);
+    pj_assert(mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
 /*
  * pj_mutex_destroy()
  */
-PJ_DEF (pj_status_t) pj_mutex_destroy (pj_mutex_t *mutex)
+PJ_DEF(pj_status_t) pj_mutex_destroy(pj_mutex_t *mutex)
 {
-    pj_assert (mutex == DUMMY_MUTEX);
+    pj_assert(mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
@@ -903,7 +889,7 @@ PJ_DEF (pj_status_t) pj_mutex_destroy (pj_mutex_t *mutex)
 /*
  * Enter critical section.
  */
-PJ_DEF (void) pj_enter_critical_section (void)
+PJ_DEF(void) pj_enter_critical_section(void)
 {
     /* Nothing to do */
 }
@@ -912,7 +898,7 @@ PJ_DEF (void) pj_enter_critical_section (void)
 /*
  * Leave critical section.
  */
-PJ_DEF (void) pj_leave_critical_section (void)
+PJ_DEF(void) pj_leave_critical_section(void)
 {
     /* Nothing to do */
 }
@@ -923,17 +909,17 @@ PJ_DEF (void) pj_leave_critical_section (void)
 /*
  * Create semaphore.
  */
-PJ_DEF (pj_status_t) pj_sem_create (pj_pool_t *pool,
-                                    const char *name,
-                                    unsigned initial,
-                                    unsigned max,
-                                    pj_sem_t **p_sem)
+PJ_DEF(pj_status_t) pj_sem_create( pj_pool_t *pool, 
+                                   const char *name,
+				   unsigned initial, 
+                                   unsigned max,
+				   pj_sem_t **p_sem)
 {
     pj_sem_t *sem;
+ 
+    PJ_UNUSED_ARG(name);
 
-    PJ_UNUSED_ARG (name);
-
-    sem = (pj_sem_t*) pj_pool_zalloc (pool, sizeof (pj_sem_t));
+    sem = (pj_sem_t*) pj_pool_zalloc(pool, sizeof(pj_sem_t));
     sem->value = initial;
     sem->max = max;
 
@@ -946,14 +932,14 @@ PJ_DEF (pj_status_t) pj_sem_create (pj_pool_t *pool,
 /*
  * Wait for semaphore.
  */
-PJ_DEF (pj_status_t) pj_sem_wait (pj_sem_t *sem)
+PJ_DEF(pj_status_t) pj_sem_wait(pj_sem_t *sem)
 {
     if (sem->value > 0) {
-        sem->value--;
-        return PJ_SUCCESS;
+	sem->value--;
+	return PJ_SUCCESS;
     } else {
-        pj_assert (!"Unexpected!");
-        return PJ_EINVALIDOP;
+	pj_assert(!"Unexpected!");
+	return PJ_EINVALIDOP;
     }
 }
 
@@ -961,14 +947,14 @@ PJ_DEF (pj_status_t) pj_sem_wait (pj_sem_t *sem)
 /*
  * Try wait for semaphore.
  */
-PJ_DEF (pj_status_t) pj_sem_trywait (pj_sem_t *sem)
+PJ_DEF(pj_status_t) pj_sem_trywait(pj_sem_t *sem)
 {
     if (sem->value > 0) {
-        sem->value--;
-        return PJ_SUCCESS;
+	sem->value--;
+	return PJ_SUCCESS;
     } else {
-        pj_assert (!"Unexpected!");
-        return PJ_EINVALIDOP;
+	pj_assert(!"Unexpected!");
+	return PJ_EINVALIDOP;
     }
 }
 
@@ -976,7 +962,7 @@ PJ_DEF (pj_status_t) pj_sem_trywait (pj_sem_t *sem)
 /*
  * Release semaphore.
  */
-PJ_DEF (pj_status_t) pj_sem_post (pj_sem_t *sem)
+PJ_DEF(pj_status_t) pj_sem_post(pj_sem_t *sem)
 {
     sem->value++;
     return PJ_SUCCESS;
@@ -986,57 +972,56 @@ PJ_DEF (pj_status_t) pj_sem_post (pj_sem_t *sem)
 /*
  * Destroy semaphore.
  */
-PJ_DEF (pj_status_t) pj_sem_destroy (pj_sem_t *sem)
+PJ_DEF(pj_status_t) pj_sem_destroy(pj_sem_t *sem)
 {
-    PJ_UNUSED_ARG (sem);
+    PJ_UNUSED_ARG(sem);
     return PJ_SUCCESS;
 }
 
 
 #if defined(PJ_OS_HAS_CHECK_STACK) && PJ_OS_HAS_CHECK_STACK != 0
 /*
- * The implementation of stack checking.
+ * The implementation of stack checking. 
  */
-PJ_DEF (void) pj_thread_check_stack (const char *file, int line)
+PJ_DEF(void) pj_thread_check_stack(const char *file, int line)
 {
     char stk_ptr;
     pj_uint32_t usage;
     pj_thread_t *thread = pj_thread_this();
 
-    pj_assert (thread);
+    pj_assert(thread);
 
     /* Calculate current usage. */
     usage = (&stk_ptr > thread->stk_start) ? &stk_ptr - thread->stk_start :
-            thread->stk_start - &stk_ptr;
+		thread->stk_start - &stk_ptr;
 
     /* Assert if stack usage is dangerously high. */
-    pj_assert ("STACK OVERFLOW!! " && (usage <= thread->stk_size - 128));
+    pj_assert("STACK OVERFLOW!! " && (usage <= thread->stk_size - 128));
 
     /* Keep statistic. */
-
     if (usage > thread->stk_max_usage) {
-        thread->stk_max_usage = usage;
-        thread->caller_file = file;
-        thread->caller_line = line;
+	thread->stk_max_usage = usage;
+	thread->caller_file = file;
+	thread->caller_line = line;
     }
 }
 
 /*
- * Get maximum stack usage statistic.
+ * Get maximum stack usage statistic. 
  */
-PJ_DEF (pj_uint32_t) pj_thread_get_stack_max_usage (pj_thread_t *thread)
+PJ_DEF(pj_uint32_t) pj_thread_get_stack_max_usage(pj_thread_t *thread)
 {
     return thread->stk_max_usage;
 }
 
 /*
- * Dump thread stack status.
+ * Dump thread stack status. 
  */
-PJ_DEF (pj_status_t) pj_thread_get_stack_info (pj_thread_t *thread,
-        const char **file,
-        int *line)
+PJ_DEF(pj_status_t) pj_thread_get_stack_info(pj_thread_t *thread,
+					     const char **file,
+					     int *line)
 {
-    pj_assert (thread);
+    pj_assert(thread);
 
     *file = thread->caller_file;
     *line = thread->caller_line;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_win32.c b/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_win32.c
index 5dc3b394a1..51af335105 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_win32.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_win32.c
@@ -1,4 +1,4 @@
-/* $Id: os_core_win32.c 2853 2009-08-05 10:58:02Z bennylp $ */
+/* $Id: os_core_win32.c 3023 2009-11-23 15:04:18Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -1037,6 +1037,7 @@ PJ_DEF(pj_bool_t) pj_mutex_is_locked(pj_mutex_t *mutex)
 #if PJ_DEBUG
     return mutex->owner == pj_thread_this();
 #else
+    PJ_UNUSED_ARG(mutex);
     pj_assert(!"PJ_DEBUG is not set!");
     return 1;
 #endif
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp
index bb57cd9663..31707b97c3 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: os_error_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/errno.h>
 #include <pj/assert.h>
@@ -28,70 +28,68 @@
 
 
 #if defined(PJ_HAS_ERROR_STRING) && (PJ_HAS_ERROR_STRING!=0)
-
 static const struct {
     pj_os_err_type code;
     const char *msg;
 } gaErrorList[] = {
-
     /*
      * Generic error -1 to -46
      */
-    PJ_BUILD_ERR (KErrNotFound,	    "Unable to find the specified object"),
-    PJ_BUILD_ERR (KErrGeneral,	    "General (unspecified) error"),
-    PJ_BUILD_ERR (KErrCancel,	    "The operation was cancelled"),
-    PJ_BUILD_ERR (KErrNoMemory,	    "Not enough memory"),
-    PJ_BUILD_ERR (KErrNotSupported, "The operation requested is not supported"),
-    PJ_BUILD_ERR (KErrArgument,	    "Bad request"),
-    PJ_BUILD_ERR (KErrTotalLossOfPrecision, "Total loss of precision"),
-    PJ_BUILD_ERR (KErrBadHandle,    "Bad object"),
-    PJ_BUILD_ERR (KErrOverflow,	    "Overflow"),
-    PJ_BUILD_ERR (KErrUnderflow,    "Underflow"),
-    PJ_BUILD_ERR (KErrAlreadyExists,"Already exists"),
-    PJ_BUILD_ERR (KErrPathNotFound, "Unable to find the specified folder"),
-    PJ_BUILD_ERR (KErrDied,	    "Closed"),
-    PJ_BUILD_ERR (KErrInUse,	    "The specified object is currently in use by another program"),
-    PJ_BUILD_ERR (KErrServerTerminated,	    "Server has closed"),
-    PJ_BUILD_ERR (KErrServerBusy,   "Server busy"),
-    PJ_BUILD_ERR (KErrCompletion,   "Completion error"),
-    PJ_BUILD_ERR (KErrNotReady,	    "Not ready"),
-    PJ_BUILD_ERR (KErrUnknown,	    "Unknown error"),
-    PJ_BUILD_ERR (KErrCorrupt,	    "Corrupt"),
-    PJ_BUILD_ERR (KErrAccessDenied, "Access denied"),
-    PJ_BUILD_ERR (KErrLocked,	    "Locked"),
-    PJ_BUILD_ERR (KErrWrite,	    "Failed to write"),
-    PJ_BUILD_ERR (KErrDisMounted,   "Wrong disk present"),
-    PJ_BUILD_ERR (KErrEof,	    "Unexpected end of file"),
-    PJ_BUILD_ERR (KErrDiskFull,	    "Disk full"),
-    PJ_BUILD_ERR (KErrBadDriver,    "Bad device driver"),
-    PJ_BUILD_ERR (KErrBadName,	    "Bad name"),
-    PJ_BUILD_ERR (KErrCommsLineFail,"Comms line failed"),
-    PJ_BUILD_ERR (KErrCommsFrame,   "Comms frame error"),
-    PJ_BUILD_ERR (KErrCommsOverrun, "Comms overrun error"),
-    PJ_BUILD_ERR (KErrCommsParity,  "Comms parity error"),
-    PJ_BUILD_ERR (KErrTimedOut,	    "Timed out"),
-    PJ_BUILD_ERR (KErrCouldNotConnect, "Failed to connect"),
-    PJ_BUILD_ERR (KErrCouldNotDisconnect, "Failed to disconnect"),
-    PJ_BUILD_ERR (KErrDisconnected, "Disconnected"),
-    PJ_BUILD_ERR (KErrBadLibraryEntryPoint, "Bad library entry point"),
-    PJ_BUILD_ERR (KErrBadDescriptor,"Bad descriptor"),
-    PJ_BUILD_ERR (KErrAbort,	    "Interrupted"),
-    PJ_BUILD_ERR (KErrTooBig,	    "Too big"),
-    PJ_BUILD_ERR (KErrDivideByZero, "Divide by zero"),
-    PJ_BUILD_ERR (KErrBadPower,	    "Batteries too low"),
-    PJ_BUILD_ERR (KErrDirFull,	    "Folder full"),
-    PJ_BUILD_ERR (KErrHardwareNotAvailable, ""),
-    PJ_BUILD_ERR (KErrSessionClosed,	    ""),
-    PJ_BUILD_ERR (KErrPermissionDenied,     ""),
+    PJ_BUILD_ERR( KErrNotFound,	    "Unable to find the specified object"),
+    PJ_BUILD_ERR( KErrGeneral,	    "General (unspecified) error"),
+    PJ_BUILD_ERR( KErrCancel,	    "The operation was cancelled"),
+    PJ_BUILD_ERR( KErrNoMemory,	    "Not enough memory"),
+    PJ_BUILD_ERR( KErrNotSupported, "The operation requested is not supported"),
+    PJ_BUILD_ERR( KErrArgument,	    "Bad request"),
+    PJ_BUILD_ERR( KErrTotalLossOfPrecision, "Total loss of precision"),
+    PJ_BUILD_ERR( KErrBadHandle,    "Bad object"),
+    PJ_BUILD_ERR( KErrOverflow,	    "Overflow"),
+    PJ_BUILD_ERR( KErrUnderflow,    "Underflow"),
+    PJ_BUILD_ERR( KErrAlreadyExists,"Already exists"),
+    PJ_BUILD_ERR( KErrPathNotFound, "Unable to find the specified folder"),
+    PJ_BUILD_ERR( KErrDied,	    "Closed"),
+    PJ_BUILD_ERR( KErrInUse,	    "The specified object is currently in use by another program"),
+    PJ_BUILD_ERR( KErrServerTerminated,	    "Server has closed"),
+    PJ_BUILD_ERR( KErrServerBusy,   "Server busy"),
+    PJ_BUILD_ERR( KErrCompletion,   "Completion error"),
+    PJ_BUILD_ERR( KErrNotReady,	    "Not ready"),
+    PJ_BUILD_ERR( KErrUnknown,	    "Unknown error"),
+    PJ_BUILD_ERR( KErrCorrupt,	    "Corrupt"),
+    PJ_BUILD_ERR( KErrAccessDenied, "Access denied"),
+    PJ_BUILD_ERR( KErrLocked,	    "Locked"),
+    PJ_BUILD_ERR( KErrWrite,	    "Failed to write"),
+    PJ_BUILD_ERR( KErrDisMounted,   "Wrong disk present"),
+    PJ_BUILD_ERR( KErrEof,	    "Unexpected end of file"),
+    PJ_BUILD_ERR( KErrDiskFull,	    "Disk full"),
+    PJ_BUILD_ERR( KErrBadDriver,    "Bad device driver"),
+    PJ_BUILD_ERR( KErrBadName,	    "Bad name"),
+    PJ_BUILD_ERR( KErrCommsLineFail,"Comms line failed"),
+    PJ_BUILD_ERR( KErrCommsFrame,   "Comms frame error"),
+    PJ_BUILD_ERR( KErrCommsOverrun, "Comms overrun error"),
+    PJ_BUILD_ERR( KErrCommsParity,  "Comms parity error"),
+    PJ_BUILD_ERR( KErrTimedOut,	    "Timed out"),
+    PJ_BUILD_ERR( KErrCouldNotConnect, "Failed to connect"),
+    PJ_BUILD_ERR( KErrCouldNotDisconnect, "Failed to disconnect"),
+    PJ_BUILD_ERR( KErrDisconnected, "Disconnected"),
+    PJ_BUILD_ERR( KErrBadLibraryEntryPoint, "Bad library entry point"),
+    PJ_BUILD_ERR( KErrBadDescriptor,"Bad descriptor"),
+    PJ_BUILD_ERR( KErrAbort,	    "Interrupted"),
+    PJ_BUILD_ERR( KErrTooBig,	    "Too big"),
+    PJ_BUILD_ERR( KErrDivideByZero, "Divide by zero"),
+    PJ_BUILD_ERR( KErrBadPower,	    "Batteries too low"),
+    PJ_BUILD_ERR( KErrDirFull,	    "Folder full"),
+    PJ_BUILD_ERR( KErrHardwareNotAvailable, ""),
+    PJ_BUILD_ERR( KErrSessionClosed,	    ""),
+    PJ_BUILD_ERR( KErrPermissionDenied,     ""),
 
     /*
      * Socket errors (-190 - -1000)
      */
-    PJ_BUILD_ERR (KErrNetUnreach,   "Could not connect to the network. Currently unreachable"),
-    PJ_BUILD_ERR (KErrHostUnreach,  "Could not connect to the specified server"),
-    PJ_BUILD_ERR (KErrNoProtocolOpt,"The specified server refuses the selected protocol"),
-    PJ_BUILD_ERR (KErrUrgentData,   ""),
-    PJ_BUILD_ERR (KErrWouldBlock,   "Conflicts with KErrExtended, but cannot occur in practice"),
+    PJ_BUILD_ERR( KErrNetUnreach,   "Could not connect to the network. Currently unreachable"),
+    PJ_BUILD_ERR( KErrHostUnreach,  "Could not connect to the specified server"),
+    PJ_BUILD_ERR( KErrNoProtocolOpt,"The specified server refuses the selected protocol"),
+    PJ_BUILD_ERR( KErrUrgentData,   ""),
+    PJ_BUILD_ERR( KErrWouldBlock,   "Conflicts with KErrExtended, but cannot occur in practice"),
 
     {0, NULL}
 };
@@ -99,45 +97,45 @@ static const struct {
 #endif	/* PJ_HAS_ERROR_STRING */
 
 
-PJ_DEF (pj_status_t) pj_get_os_error (void)
+PJ_DEF(pj_status_t) pj_get_os_error(void)
 {
     return -1;
 }
 
-PJ_DEF (void) pj_set_os_error (pj_status_t code)
+PJ_DEF(void) pj_set_os_error(pj_status_t code)
 {
-    PJ_UNUSED_ARG (code);
+    PJ_UNUSED_ARG(code);
 }
 
-PJ_DEF (pj_status_t) pj_get_netos_error (void)
+PJ_DEF(pj_status_t) pj_get_netos_error(void)
 {
     return -1;
 }
 
-PJ_DEF (void) pj_set_netos_error (pj_status_t code)
+PJ_DEF(void) pj_set_netos_error(pj_status_t code)
 {
-    PJ_UNUSED_ARG (code);
+    PJ_UNUSED_ARG(code);
 }
 
 PJ_BEGIN_DECL
 
-PJ_DECL (int) platform_strerror (pj_os_err_type os_errcode,
-                                 char *buf, pj_size_t bufsize);
+    PJ_DECL(int) platform_strerror( pj_os_err_type os_errcode, 
+                       		    char *buf, pj_size_t bufsize);
 PJ_END_DECL
 
-/*
+/* 
  * platform_strerror()
  *
- * Platform specific error message. This file is called by pj_strerror()
- * in errno.c
+ * Platform specific error message. This file is called by pj_strerror() 
+ * in errno.c 
  */
-PJ_DEF (int) platform_strerror (pj_os_err_type os_errcode,
-                                char *buf, pj_size_t bufsize)
+PJ_DEF(int) platform_strerror( pj_os_err_type os_errcode, 
+			       char *buf, pj_size_t bufsize)
 {
     int len = 0;
 
-    pj_assert (buf != NULL);
-    pj_assert (bufsize >= 0);
+    pj_assert(buf != NULL);
+    pj_assert(bufsize >= 0);
 
     /*
      * MUST NOT check stack here.
@@ -147,31 +145,26 @@ PJ_DEF (int) platform_strerror (pj_os_err_type os_errcode,
 
     if (!len) {
 #if defined(PJ_HAS_ERROR_STRING) && (PJ_HAS_ERROR_STRING!=0)
-        int i;
-
+	int i;
         for (i = 0; gaErrorList[i].msg; ++i) {
             if (gaErrorList[i].code == os_errcode) {
-                len = strlen (gaErrorList[i].msg);
-
-                if ( (pj_size_t) len >= bufsize) {
-                    len = bufsize-1;
-                }
-
-                pj_memcpy (buf, gaErrorList[i].msg, len);
-
-                buf[len] = '\0';
+                len = strlen(gaErrorList[i].msg);
+		if ((pj_size_t)len >= bufsize) {
+		    len = bufsize-1;
+		}
+		pj_memcpy(buf, gaErrorList[i].msg, len);
+		buf[len] = '\0';
                 break;
             }
         }
-
 #endif	/* PJ_HAS_ERROR_STRING */
 
     }
 
     if (!len) {
-        len = pj_ansi_snprintf (buf, bufsize, "Symbian native error %d",
-                                os_errcode);
-        buf[len] = '\0';
+	len = pj_ansi_snprintf( buf, bufsize, "Symbian native error %d", 
+				os_errcode);
+	buf[len] = '\0';
     }
 
     return len;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/pool.c b/sflphone-common/libs/pjproject/pjlib/src/pj/pool.c
index 7c1e5564b2..2ab100caad 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/pool.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/pool.c
@@ -1,4 +1,4 @@
-/* $Id: pool.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: pool.c 2963 2009-10-24 02:06:40Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -66,10 +66,15 @@ static pj_pool_block *pj_pool_create_block( pj_pool_t *pool, pj_size_t size)
     /* Add capacity. */
     pool->capacity += size;
 
-    /* Set block attribytes. */
-    block->cur = block->buf = ((unsigned char*)block) + sizeof(pj_pool_block);
+    /* Set start and end of buffer. */
+    block->buf = ((unsigned char*)block) + sizeof(pj_pool_block);
     block->end = ((unsigned char*)block) + size;
 
+    /* Set the start pointer, aligning it as needed */
+    block->cur = (unsigned char*)
+                 (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) & 
+                  ~(PJ_POOL_ALIGNMENT - 1));
+
     /* Insert in the front of the list. */
     pj_list_insert_after(&pool->block_list, block);
 
@@ -111,11 +116,15 @@ PJ_DEF(void*) pj_pool_allocate_find(pj_pool_t *pool, unsigned size)
 
     /* If pool is configured to expand, but the increment size
      * is less than the required size, expand the pool by multiple
-     * increment size
+     * increment size. Also count the size wasted due to aligning
+     * the block.
      */
-    if (pool->increment_size < size + sizeof(pj_pool_block)) {
+    if (pool->increment_size < 
+	    size + sizeof(pj_pool_block) + PJ_POOL_ALIGNMENT) 
+    {
         unsigned count;
-        count = (size + pool->increment_size + sizeof(pj_pool_block)) / 
+        count = (size + pool->increment_size + sizeof(pj_pool_block) +
+                 PJ_POOL_ALIGNMENT) / 
                 pool->increment_size;
         block_size = count * pool->increment_size;
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp
index 6f99c068c3..e22040a2f4 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp
@@ -1,5 +1,5 @@
 /* $Id: pool_policy_new.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/pool.h>
 #include <pj/except.h>
@@ -27,78 +27,76 @@
  * This file contains pool default policy definition and implementation.
  */
 #include "pool_signature.h"
+ 
 
-
-static void *operator_new (pj_pool_factory *factory, pj_size_t size)
+static void *operator_new(pj_pool_factory *factory, pj_size_t size)
 {
     void *mem;
 
     PJ_CHECK_STACK();
 
     if (factory->on_block_alloc) {
-        int rc;
-        rc = factory->on_block_alloc (factory, size);
-
-        if (!rc)
-            return NULL;
+		int rc;
+		rc = factory->on_block_alloc(factory, size);
+		if (!rc)
+		    return NULL;
     }
-
-    mem = (void*) new char[size+ (SIG_SIZE << 1) ];
-
+    
+    mem = (void*) new char[size+(SIG_SIZE << 1)];
+    
     /* Exception for new operator may be disabled, so.. */
-
     if (mem) {
-        /* Apply signature when PJ_SAFE_POOL is set. It will move
-         * "mem" pointer forward.
-         */
-        APPLY_SIG (mem, size);
+	/* Apply signature when PJ_SAFE_POOL is set. It will move
+	 * "mem" pointer forward.
+	 */
+	APPLY_SIG(mem, size);
     }
 
     return mem;
 }
 
-static void operator_delete (pj_pool_factory *factory, void *mem, pj_size_t size)
+static void operator_delete(pj_pool_factory *factory, void *mem, pj_size_t size)
 {
     PJ_CHECK_STACK();
 
-    if (factory->on_block_free)
-        factory->on_block_free (factory, size);
-
+    if (factory->on_block_free) 
+        factory->on_block_free(factory, size);
+    
     /* Check and remove signature when PJ_SAFE_POOL is set. It will
      * move "mem" pointer backward.
      */
-    REMOVE_SIG (mem, size);
+    REMOVE_SIG(mem, size);
 
     /* Note that when PJ_SAFE_POOL is set, the actual size of the block
      * is size + SIG_SIZE*2.
      */
 
-    char *p = (char*) mem;
-
+    char *p = (char*)mem;
     delete [] p;
 }
 
-static void default_pool_callback (pj_pool_t *pool, pj_size_t size)
+static void default_pool_callback(pj_pool_t *pool, pj_size_t size)
 {
     PJ_CHECK_STACK();
-    PJ_UNUSED_ARG (pool);
-    PJ_UNUSED_ARG (size);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(size);
 
-    PJ_THROW (PJ_NO_MEMORY_EXCEPTION);
+    PJ_THROW(PJ_NO_MEMORY_EXCEPTION);
 }
 
-PJ_DEF_DATA (pj_pool_factory_policy) pj_pool_factory_default_policy = {
+PJ_DEF_DATA(pj_pool_factory_policy) pj_pool_factory_default_policy = 
+{
     &operator_new,
     &operator_delete,
     &default_pool_callback,
     0
 };
 
-PJ_DEF (const pj_pool_factory_policy*) pj_pool_factory_get_default_policy (void)
+PJ_DEF(const pj_pool_factory_policy*) pj_pool_factory_get_default_policy(void)
 {
     return &pj_pool_factory_default_policy;
 }
 
-
+ 
 #endif	/* PJ_HAS_POOL_ALT_API */
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_bsd.c b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_bsd.c
index 93f2511a2a..f7d69a7f44 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_bsd.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_bsd.c
@@ -1,4 +1,4 @@
-/* $Id: sock_bsd.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sock_bsd.c 2966 2009-10-25 09:02:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -60,26 +60,43 @@ const pj_uint16_t PJ_SOCK_RDM	= SOCK_RDM;
 const pj_uint16_t PJ_SOL_SOCKET	= SOL_SOCKET;
 #ifdef SOL_IP
 const pj_uint16_t PJ_SOL_IP	= SOL_IP;
+#elif defined(PJ_WIN32) && PJ_WIN32
+const pj_uint16_t PJ_SOL_IP	= IPPROTO_IP;
 #else
-const pj_uint16_t PJ_SOL_IP	= 0xFFFF;
+const pj_uint16_t PJ_SOL_IP	= 0;
 #endif /* SOL_IP */
+
 #if defined(SOL_TCP)
 const pj_uint16_t PJ_SOL_TCP	= SOL_TCP;
 #elif defined(IPPROTO_TCP)
 const pj_uint16_t PJ_SOL_TCP	= IPPROTO_TCP;
+#elif defined(PJ_WIN32) && PJ_WIN32
+const pj_uint16_t PJ_SOL_TCP	= IPPROTO_TCP;
 #else
-const pj_uint16_t PJ_SOL_TCP	= 0xFFFF;
+const pj_uint16_t PJ_SOL_TCP	= 6;
 #endif /* SOL_TCP */
+
 #ifdef SOL_UDP
 const pj_uint16_t PJ_SOL_UDP	= SOL_UDP;
+#elif defined(IPPROTO_UDP)
+const pj_uint16_t PJ_SOL_UDP	= IPPROTO_UDP;
+#elif defined(PJ_WIN32) && PJ_WIN32
+const pj_uint16_t PJ_SOL_UDP	= IPPROTO_UDP;
 #else
-const pj_uint16_t PJ_SOL_UDP	= 0xFFFF;
-#endif
+const pj_uint16_t PJ_SOL_UDP	= 17;
+#endif /* SOL_UDP */
+
 #ifdef SOL_IPV6
 const pj_uint16_t PJ_SOL_IPV6	= SOL_IPV6;
+#elif defined(PJ_WIN32) && PJ_WIN32
+#   if defined(IPPROTO_IPV6) || (_WIN32_WINNT >= 0x0501)
+	const pj_uint16_t PJ_SOL_IPV6	= IPPROTO_IPV6;
+#   else
+	const pj_uint16_t PJ_SOL_IPV6	= 41;
+#   endif
 #else
-const pj_uint16_t PJ_SOL_IPV6	= 0xFFFF;
-#endif
+const pj_uint16_t PJ_SOL_IPV6	= 41;
+#endif /* SOL_IPV6 */
 
 /* IP_TOS */
 #ifdef IP_TOS
@@ -116,6 +133,15 @@ const pj_uint16_t PJ_IPTOS_MINCOST	= 0x02;
 const pj_uint16_t PJ_SO_TYPE    = SO_TYPE;
 const pj_uint16_t PJ_SO_RCVBUF  = SO_RCVBUF;
 const pj_uint16_t PJ_SO_SNDBUF  = SO_SNDBUF;
+const pj_uint16_t PJ_TCP_NODELAY= TCP_NODELAY;
+const pj_uint16_t PJ_SO_REUSEADDR= SO_REUSEADDR;
+#if defined(SO_PRIORITY)
+const pj_uint16_t PJ_SO_PRIORITY = SO_PRIORITY;
+#else
+/* This is from Linux, YMMV */
+const pj_uint16_t PJ_SO_PRIORITY = 12;
+#endif
+
 /* Multicasting is not supported e.g. in PocketPC 2003 SDK */
 #ifdef IP_MULTICAST_IF
 const pj_uint16_t PJ_IP_MULTICAST_IF    = IP_MULTICAST_IF;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_common.c b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_common.c
index 84fdb71d00..f4442cfa16 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_common.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_common.c
@@ -1,4 +1,4 @@
-/* $Id: sock_common.c 2886 2009-08-17 10:10:31Z bennylp $ */
+/* $Id: sock_common.c 3037 2009-12-29 16:53:33Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -338,7 +338,7 @@ PJ_DEF(pj_bool_t) pj_sockaddr_has_addr(const pj_sockaddr_t *addr)
      * This may break some parts of upper layer libraries.
      */
     //PJ_ASSERT_RETURN(a->addr.sa_family == PJ_AF_INET ||
-    //		     a->addr.sa_family == PJ_AF_INET6, PJ_EAFNOTSUP);
+    //		     a->addr.sa_family == PJ_AF_INET6, PJ_FALSE);
 
     if (a->addr.sa_family!=PJ_AF_INET && a->addr.sa_family!=PJ_AF_INET6) {
 	return PJ_FALSE;
@@ -372,7 +372,7 @@ PJ_DEF(unsigned) pj_sockaddr_get_addr_len(const pj_sockaddr_t *addr)
 {
     const pj_sockaddr *a = (const pj_sockaddr*) addr;
     PJ_ASSERT_RETURN(a->addr.sa_family == PJ_AF_INET ||
-		     a->addr.sa_family == PJ_AF_INET6, PJ_EAFNOTSUP);
+		     a->addr.sa_family == PJ_AF_INET6, 0);
     return a->addr.sa_family == PJ_AF_INET6 ?
 	    sizeof(pj_in6_addr) : sizeof(pj_in_addr);
 }
@@ -384,7 +384,7 @@ PJ_DEF(unsigned) pj_sockaddr_get_len(const pj_sockaddr_t *addr)
 {
     const pj_sockaddr *a = (const pj_sockaddr*) addr;
     PJ_ASSERT_RETURN(a->addr.sa_family == PJ_AF_INET ||
-		     a->addr.sa_family == PJ_AF_INET6, PJ_EAFNOTSUP);
+		     a->addr.sa_family == PJ_AF_INET6, 0);
     return a->addr.sa_family == PJ_AF_INET6 ?
 	    sizeof(pj_sockaddr_in6) : sizeof(pj_sockaddr_in);
 }
@@ -1062,6 +1062,21 @@ PJ_DEF(pj_uint16_t) pj_SO_SNDBUF(void)
     return PJ_SO_SNDBUF;
 }
 
+PJ_DEF(pj_uint16_t) pj_TCP_NODELAY(void)
+{
+    return PJ_TCP_NODELAY;
+}
+
+PJ_DEF(pj_uint16_t) pj_SO_REUSEADDR(void)
+{
+    return PJ_SO_REUSEADDR;
+}
+
+PJ_DEF(pj_uint16_t) pj_SO_PRIORITY(void)
+{
+    return PJ_SO_PRIORITY;
+}
+
 PJ_DEF(pj_uint16_t) pj_IP_MULTICAST_IF(void)
 {
     return PJ_IP_MULTICAST_IF;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_bsd.c b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_bsd.c
new file mode 100644
index 0000000000..59bfc9faf6
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_bsd.c
@@ -0,0 +1,132 @@
+/* $Id: sock_qos_bsd.c 2967 2009-10-25 10:50:17Z bennylp $ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/sock_qos.h>
+#include <pj/assert.h>
+#include <pj/errno.h>
+#include <pj/string.h>
+
+/* This is the implementation of QoS with BSD socket's setsockopt(),
+ * using IP_TOS and SO_PRIORITY
+ */ 
+#if !defined(PJ_QOS_IMPLEMENTATION) || PJ_QOS_IMPLEMENTATION==PJ_QOS_BSD
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
+					   pj_qos_params *param)
+{
+    pj_status_t last_err = PJ_ENOTSUP;
+    pj_status_t status;
+
+    /* No op? */
+    if (!param->flags)
+	return PJ_SUCCESS;
+
+    /* Clear WMM field since we don't support it */
+    param->flags &= ~(PJ_QOS_PARAM_HAS_WMM);
+
+    /* Set TOS/DSCP */
+    if (param->flags & PJ_QOS_PARAM_HAS_DSCP) {
+	/* Value is dscp_val << 2 */
+	int val = (param->dscp_val << 2);
+	status = pj_sock_setsockopt(sock, pj_SOL_IP(), pj_IP_TOS(), 
+				    &val, sizeof(val));
+	if (status != PJ_SUCCESS) {
+	    param->flags &= ~(PJ_QOS_PARAM_HAS_DSCP);
+	    last_err = status;
+	}
+    }
+
+    /* Set SO_PRIORITY */
+    if (param->flags & PJ_QOS_PARAM_HAS_SO_PRIO) {
+	int val = param->so_prio;
+	status = pj_sock_setsockopt(sock, pj_SOL_SOCKET(), pj_SO_PRIORITY(),
+				    &val, sizeof(val));
+	if (status != PJ_SUCCESS) {
+	    param->flags &= ~(PJ_QOS_PARAM_HAS_SO_PRIO);
+	    last_err = status;
+	}
+    }
+
+    return param->flags ? PJ_SUCCESS : last_err;
+}
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
+					 pj_qos_type type)
+{
+    pj_qos_params param;
+    pj_status_t status;
+
+    status = pj_qos_get_params(type, &param);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    return pj_sock_set_qos_params(sock, &param);
+}
+
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
+					   pj_qos_params *p_param)
+{
+    pj_status_t last_err = PJ_ENOTSUP;
+    int val, optlen;
+    pj_status_t status;
+
+    pj_bzero(p_param, sizeof(*p_param));
+
+    /* Get DSCP/TOS value */
+    optlen = sizeof(val);
+    status = pj_sock_getsockopt(sock, pj_SOL_IP(), pj_IP_TOS(), 
+				&val, &optlen);
+    if (status == PJ_SUCCESS) {
+	p_param->flags |= PJ_QOS_PARAM_HAS_DSCP;
+	p_param->dscp_val = (pj_uint8_t)(val >> 2);
+    } else {
+	last_err = status;
+    }
+
+    /* Get SO_PRIORITY */
+    optlen = sizeof(val);
+    status = pj_sock_getsockopt(sock, pj_SOL_SOCKET(), pj_SO_PRIORITY(),
+				&val, &optlen);
+    if (status == PJ_SUCCESS) {
+	p_param->flags |= PJ_QOS_PARAM_HAS_SO_PRIO;
+	p_param->so_prio = (pj_uint8_t)val;
+    } else {
+	last_err = status;
+    }
+
+    /* WMM is not supported */
+
+    return p_param->flags ? PJ_SUCCESS : last_err;
+}
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
+					 pj_qos_type *p_type)
+{
+    pj_qos_params param;
+    pj_status_t status;
+
+    status = pj_sock_get_qos_params(sock, &param);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    return pj_qos_get_type(&param, p_type);
+}
+
+#endif	/* PJ_QOS_IMPLEMENTATION */
+
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_common.c b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_common.c
new file mode 100644
index 0000000000..80711c5413
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_common.c
@@ -0,0 +1,151 @@
+/* $Id: sock_qos_common.c 2993 2009-11-09 04:32:33Z bennylp $ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/sock_qos.h>
+#include <pj/assert.h>
+#include <pj/errno.h>
+#include <pj/log.h>
+#include <pj/string.h>
+
+#define THIS_FILE   "sock_qos_common.c"
+#define ALL_FLAGS   (PJ_QOS_PARAM_HAS_DSCP | PJ_QOS_PARAM_HAS_SO_PRIO | \
+                     PJ_QOS_PARAM_HAS_WMM)
+
+/* "Standard" mapping between traffic type and QoS params */
+static const pj_qos_params qos_map[] = 
+{
+    /* flags	dscp  prio wmm_prio */
+    {ALL_FLAGS, 0x00, 0,    PJ_QOS_WMM_PRIO_BULK_EFFORT},   /* BE */
+    {ALL_FLAGS, 0x08, 2,    PJ_QOS_WMM_PRIO_BULK},	    /* BK */
+    {ALL_FLAGS, 0x28, 5,    PJ_QOS_WMM_PRIO_VIDEO},	    /* VI */
+    {ALL_FLAGS, 0x30, 6,    PJ_QOS_WMM_PRIO_VOICE},	    /* VO */
+    {ALL_FLAGS, 0x38, 7,    PJ_QOS_WMM_PRIO_VOICE}	    /* CO */
+};
+
+
+/* Retrieve the mapping for the specified type */
+PJ_DEF(pj_status_t) pj_qos_get_params(pj_qos_type type, 
+				      pj_qos_params *p_param)
+{
+    PJ_ASSERT_RETURN(type<=PJ_QOS_TYPE_CONTROL && p_param, PJ_EINVAL);
+    pj_memcpy(p_param, &qos_map[type], sizeof(*p_param));
+    return PJ_SUCCESS;
+}
+
+/* Get the matching traffic type */
+PJ_DEF(pj_status_t) pj_qos_get_type( const pj_qos_params *param,
+				     pj_qos_type *p_type)
+{
+    unsigned dscp_type = PJ_QOS_TYPE_BEST_EFFORT,
+	     prio_type = PJ_QOS_TYPE_BEST_EFFORT,
+	     wmm_type = PJ_QOS_TYPE_BEST_EFFORT;
+    unsigned i, count=0;
+
+    PJ_ASSERT_RETURN(param && p_type, PJ_EINVAL);
+
+    if (param->flags & PJ_QOS_PARAM_HAS_DSCP)  {
+	for (i=0; i<=PJ_QOS_TYPE_CONTROL; ++i) {
+	    if (param->dscp_val >= qos_map[i].dscp_val)
+		dscp_type = (pj_qos_type)i;
+	}
+	++count;
+    }
+
+    if (param->flags & PJ_QOS_PARAM_HAS_SO_PRIO) {
+	for (i=0; i<=PJ_QOS_TYPE_CONTROL; ++i) {
+	    if (param->so_prio >= qos_map[i].so_prio)
+		prio_type = (pj_qos_type)i;
+	}
+	++count;
+    }
+
+    if (param->flags & PJ_QOS_PARAM_HAS_WMM) {
+	for (i=0; i<=PJ_QOS_TYPE_CONTROL; ++i) {
+	    if (param->wmm_prio >= qos_map[i].wmm_prio)
+		wmm_type = (pj_qos_type)i;
+	}
+	++count;
+    }
+
+    if (count)
+	*p_type = (pj_qos_type)((dscp_type + prio_type + wmm_type) / count);
+    else
+	*p_type = PJ_QOS_TYPE_BEST_EFFORT;
+
+    return PJ_SUCCESS;
+}
+
+/* Apply QoS */
+PJ_DEF(pj_status_t) pj_sock_apply_qos( pj_sock_t sock,
+				       pj_qos_type qos_type,
+				       pj_qos_params *qos_params,
+				       unsigned log_level,
+				       const char *log_sender,
+				       const char *sock_name)
+{
+    pj_status_t qos_type_rc = PJ_SUCCESS,
+		qos_params_rc = PJ_SUCCESS;
+
+    if (!log_sender)
+	log_sender = THIS_FILE;
+    if (!sock_name)
+	sock_name = "socket";
+
+    if (qos_type != PJ_QOS_TYPE_BEST_EFFORT) {
+	qos_type_rc = pj_sock_set_qos_type(sock, qos_type);
+
+	if (qos_type_rc != PJ_SUCCESS) {
+	    pj_perror(log_level, log_sender,  qos_type_rc, 
+		      "Error setting QoS type %d to %s", 
+		      qos_type, sock_name);
+	}
+    }
+
+    if (qos_params && qos_params->flags) {
+	qos_params_rc = pj_sock_set_qos_params(sock, qos_params);
+	if (qos_params_rc != PJ_SUCCESS) {
+	    pj_perror(log_level, log_sender,  qos_params_rc, 
+		      "Error setting QoS params (flags=%d) to %s", 
+		      qos_params->flags, sock_name);
+	    if (qos_type_rc != PJ_SUCCESS)
+		return qos_params_rc;
+	}
+    } else if (qos_type_rc != PJ_SUCCESS)
+	return qos_type_rc;
+
+    return PJ_SUCCESS;
+}
+
+
+PJ_DEF(pj_status_t) pj_sock_apply_qos2( pj_sock_t sock,
+ 				        pj_qos_type qos_type,
+				        const pj_qos_params *qos_params,
+				        unsigned log_level,
+				        const char *log_sender,
+				        const char *sock_name)
+{
+    pj_qos_params qos_params_buf, *qos_params_copy = NULL;
+
+    if (qos_params) {
+	pj_memcpy(&qos_params_buf, qos_params, sizeof(*qos_params));
+	qos_params_copy = &qos_params_buf;
+    }
+
+    return pj_sock_apply_qos(sock, qos_type, qos_params_copy,
+			     log_level, log_sender, sock_name);
+}
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_dummy.c b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_dummy.c
new file mode 100644
index 0000000000..200d53b9ae
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_dummy.c
@@ -0,0 +1,76 @@
+/* $Id: sock_qos_dummy.c 2966 2009-10-25 09:02:07Z bennylp $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/sock_qos.h>
+#include <pj/errno.h>
+#include <pj/log.h>
+
+/* Dummy implementation of QoS API. 
+ * (this is controlled by pjlib's config.h)
+ */
+#if defined(PJ_QOS_IMPLEMENTATION) && PJ_QOS_IMPLEMENTATION==PJ_QOS_DUMMY
+
+#define THIS_FILE   "sock_qos_dummy.c"
+
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
+					   pj_qos_params *param)
+{
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(param);
+
+    PJ_LOG(4,(THIS_FILE, "pj_sock_set_qos_params() is not implemented "
+			 "for this platform"));
+    return PJ_ENOTSUP;
+}
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
+					 pj_qos_type type)
+{
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(type);
+
+    PJ_LOG(4,(THIS_FILE, "pj_sock_set_qos_type() is not implemented "
+			 "for this platform"));
+    return PJ_ENOTSUP;
+}
+
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
+					   pj_qos_params *p_param)
+{
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(p_param);
+
+    PJ_LOG(4,(THIS_FILE, "pj_sock_get_qos_params() is not implemented "
+			 "for this platform"));
+    return PJ_ENOTSUP;
+}
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
+					 pj_qos_type *p_type)
+{
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(p_type);
+
+    PJ_LOG(4,(THIS_FILE, "pj_sock_get_qos_type() is not implemented "
+			 "for this platform"));
+    return PJ_ENOTSUP;
+}
+
+#endif	/* PJ_QOS_DUMMY */
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp
new file mode 100644
index 0000000000..55a4109754
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp
@@ -0,0 +1,95 @@
+/* $Id: sock_qos_symbian.cpp 2998 2009-11-09 08:51:34Z bennylp $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/sock_qos.h>
+#include "os_symbian.h"
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
+					   pj_qos_params *param)
+{
+    PJ_ASSERT_RETURN(sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL);
+    
+    CPjSocket *pjsock = (CPjSocket*)sock;
+    RSocket & rsock = pjsock->Socket();
+    pj_status_t last_err = PJ_ENOTSUP;
+    
+    /* SO_PRIORITY and WMM are not supported */
+    param->flags &= ~(PJ_QOS_PARAM_HAS_SO_PRIO | PJ_QOS_PARAM_HAS_WMM);
+    
+    if (param->flags & PJ_QOS_PARAM_HAS_DSCP) {
+	TInt err;
+	
+	err = rsock.SetOpt(KSoIpTOS, KProtocolInetIp,
+		           (param->dscp_val << 2));
+	if (err != KErrNone) {
+	    last_err = PJ_RETURN_OS_ERROR(err);
+	    param->flags &= ~(PJ_QOS_PARAM_HAS_DSCP);
+	}
+    }
+    
+    return param->flags ? PJ_SUCCESS : last_err;
+}
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
+					 pj_qos_type type)
+{
+    pj_qos_params param;
+    pj_status_t status;
+    
+    status = pj_qos_get_params(type, &param);
+    if (status != PJ_SUCCESS)
+	return status;
+    
+    return pj_sock_set_qos_params(sock, &param);
+}
+
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
+					   pj_qos_params *p_param)
+{
+    PJ_ASSERT_RETURN(sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL);
+    
+    CPjSocket *pjsock = (CPjSocket*)sock;
+    RSocket & rsock = pjsock->Socket();
+    TInt err, dscp;
+    
+    pj_bzero(p_param, sizeof(*p_param));
+
+    err = rsock.GetOpt(KSoIpTOS, KProtocolInetIp, dscp);
+    if (err == KErrNone) {
+	p_param->flags |= PJ_QOS_PARAM_HAS_DSCP;
+	p_param->dscp_val = (dscp >> 2);
+	return PJ_SUCCESS;
+    } else {
+	return PJ_RETURN_OS_ERROR(err);
+    }
+}
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
+					 pj_qos_type *p_type)
+{
+    pj_qos_params param;
+    pj_status_t status;
+    
+    status = pj_sock_get_qos_params(sock, &param);
+    if (status != PJ_SUCCESS)
+	return status;
+    
+    return pj_qos_get_type(&param, p_type);
+}
+
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_wm.c b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_wm.c
new file mode 100644
index 0000000000..895d74f342
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_wm.c
@@ -0,0 +1,103 @@
+/* $Id: sock_qos_wm.c 2966 2009-10-25 09:02:07Z bennylp $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/sock_qos.h>
+#include <pj/assert.h>
+#include <pj/errno.h>
+#include <pj/log.h>
+
+#include <winsock.h>
+
+/* QoS implementation for Windows Mobile 6, must be enabled explicitly
+ * (this is controlled by pjlib's config.h)
+ */
+#if defined(PJ_QOS_IMPLEMENTATION) && PJ_QOS_IMPLEMENTATION==PJ_QOS_WM
+
+#define THIS_FILE   "sock_qos_wm.c"
+
+/* Mapping between our traffic type and WM's DSCP traffic types */
+static const int dscp_map[] = 
+{
+    DSCPBestEffort,
+    DSCPBackground,
+    DSCPVideo,
+    DSCPAudio,
+    DSCPControl
+};
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
+					   pj_qos_params *param)
+{
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(param);
+
+    PJ_LOG(4,(THIS_FILE, "pj_sock_set_qos_params() is not implemented "
+			 "for this platform"));
+    return PJ_ENOTSUP;
+}
+
+PJ_DEF(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
+					 pj_qos_type type)
+{
+    int value;
+
+    PJ_ASSERT_RETURN(type < PJ_ARRAY_SIZE(dscp_map), PJ_EINVAL);
+
+    value = dscp_map[type];
+    return pj_sock_setsockopt(sock, IPPROTO_IP, IP_DSCP_TRAFFIC_TYPE,
+			      &value, sizeof(value));
+}
+
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
+					   pj_qos_params *p_param)
+{
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(p_param);
+
+    PJ_LOG(4,(THIS_FILE, "pj_sock_get_qos_params() is not implemented "
+			 "for this platform"));
+    return PJ_ENOTSUP;
+}
+
+PJ_DEF(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
+					 pj_qos_type *p_type)
+{
+    pj_status_t status;
+    int value, optlen;
+    unsigned i;
+
+    optlen = sizeof(value);
+    value = 0;
+    status = pj_sock_getsockopt(sock, IPPROTO_IP, IP_DSCP_TRAFFIC_TYPE,
+			        &value, &optlen);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    *p_type = PJ_QOS_TYPE_BEST_EFFORT;
+    for (i=0; i<PJ_ARRAY_SIZE(dscp_map); ++i) {
+	if (value == dscp_map[i]) {
+	    *p_type = (pj_qos_type)i;
+	    break;
+	}
+    }
+
+    return PJ_SUCCESS;
+}
+
+#endif	/* PJ_QOS_IMPLEMENTATION */
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp
index 48170ff6d0..727bcfdf8b 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: sock_select_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/sock_select.h>
 #include <pj/array.h>
@@ -23,143 +23,140 @@
 #include <pj/os.h>
 #include "os_symbian.h"
 
-
-struct symbian_fd_set {
+ 
+struct symbian_fd_set
+{
     unsigned	 count;
     CPjSocket	*sock[PJ_IOQUEUE_MAX_HANDLES];
 };
 
 
-PJ_DEF (void) PJ_FD_ZERO (pj_fd_set_t *fdsetp)
+PJ_DEF(void) PJ_FD_ZERO(pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
     fds->count = 0;
 }
 
 
-PJ_DEF (void) PJ_FD_SET (pj_sock_t fd, pj_fd_set_t *fdsetp)
+PJ_DEF(void) PJ_FD_SET(pj_sock_t fd, pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
 
-    PJ_ASSERT_ON_FAIL (fds->count < PJ_IOQUEUE_MAX_HANDLES, return);
-    fds->sock[fds->count++] = (CPjSocket*) fd;
+    PJ_ASSERT_ON_FAIL(fds->count < PJ_IOQUEUE_MAX_HANDLES, return);
+    fds->sock[fds->count++] = (CPjSocket*)fd;
 }
 
 
-PJ_DEF (void) PJ_FD_CLR (pj_sock_t fd, pj_fd_set_t *fdsetp)
+PJ_DEF(void) PJ_FD_CLR(pj_sock_t fd, pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
     unsigned i;
-
+    
     for (i=0; i<fds->count; ++i) {
-        if (fds->sock[i] == (CPjSocket*) fd) {
-            pj_array_erase (fds->sock, sizeof (fds->sock[0]), fds->count, i);
-            --fds->count;
-            return;
-        }
+	if (fds->sock[i] == (CPjSocket*)fd) {
+	    pj_array_erase(fds->sock, sizeof(fds->sock[0]), fds->count, i);
+	    --fds->count;
+	    return;
+	}
     }
 }
 
 
-PJ_DEF (pj_bool_t) PJ_FD_ISSET (pj_sock_t fd, const pj_fd_set_t *fdsetp)
+PJ_DEF(pj_bool_t) PJ_FD_ISSET(pj_sock_t fd, const pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
     unsigned i;
-
+    
     for (i=0; i<fds->count; ++i) {
-        if (fds->sock[i] == (CPjSocket*) fd) {
-            return PJ_TRUE;
-        }
+	if (fds->sock[i] == (CPjSocket*)fd) {
+	    return PJ_TRUE;
+	}
     }
 
     return PJ_FALSE;
 }
 
-PJ_DEF (pj_size_t) PJ_FD_COUNT (const pj_fd_set_t *fdsetp)
+PJ_DEF(pj_size_t) PJ_FD_COUNT(const pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
     return fds->count;
 }
 
 
-PJ_DEF (int) pj_sock_select (int n,
-                             pj_fd_set_t *readfds,
-                             pj_fd_set_t *writefds,
-                             pj_fd_set_t *exceptfds,
-                             const pj_time_val *timeout)
+PJ_DEF(int) pj_sock_select( int n, 
+			    pj_fd_set_t *readfds, 
+			    pj_fd_set_t *writefds,
+			    pj_fd_set_t *exceptfds, 
+			    const pj_time_val *timeout)
 {
     CPjTimeoutTimer *pjTimer;
     unsigned i;
 
-    PJ_UNUSED_ARG (n);
-    PJ_UNUSED_ARG (writefds);
-    PJ_UNUSED_ARG (exceptfds);
+    PJ_UNUSED_ARG(n);
+    PJ_UNUSED_ARG(writefds);
+    PJ_UNUSED_ARG(exceptfds);
 
     if (timeout) {
-        pjTimer = PjSymbianOS::Instance()->SelectTimeoutTimer();
-        pjTimer->StartTimer (timeout->sec*1000 + timeout->msec);
+	pjTimer = PjSymbianOS::Instance()->SelectTimeoutTimer();
+	pjTimer->StartTimer(timeout->sec*1000 + timeout->msec);
 
     } else {
-        pjTimer = NULL;
+	pjTimer = NULL;
     }
 
     /* Scan for readable sockets */
 
     if (readfds) {
-        symbian_fd_set *fds = (symbian_fd_set *) readfds;
+	symbian_fd_set *fds = (symbian_fd_set *)readfds;
 
-        do {
-            /* Scan sockets for readily available data */
-            for (i=0; i<fds->count; ++i) {
-                CPjSocket *pjsock = fds->sock[i];
+	do {
+	    /* Scan sockets for readily available data */
+	    for (i=0; i<fds->count; ++i) {
+		CPjSocket *pjsock = fds->sock[i];
 
-                if (pjsock->Reader()) {
-                    if (pjsock->Reader()->HasData() && !pjsock->Reader()->IsActive()) {
+		if (pjsock->Reader()) {
+		    if (pjsock->Reader()->HasData() && !pjsock->Reader()->IsActive()) {
 
-                        /* Found socket with data ready */
-                        PJ_FD_ZERO (readfds);
-                        PJ_FD_SET ( (pj_sock_t) pjsock, readfds);
+			/* Found socket with data ready */
+			PJ_FD_ZERO(readfds);
+			PJ_FD_SET((pj_sock_t)pjsock, readfds);
 
-                        /* Cancel timer, if any */
+			/* Cancel timer, if any */
+			if (pjTimer) {
+			    pjTimer->Cancel();
+			}
 
-                        if (pjTimer) {
-                            pjTimer->Cancel();
-                        }
+			/* Clear writable and exception fd_set */
+			if (writefds)
+			    PJ_FD_ZERO(writefds);
+			if (exceptfds)
+			    PJ_FD_ZERO(exceptfds);
 
-                        /* Clear writable and exception fd_set */
-                        if (writefds)
-                            PJ_FD_ZERO (writefds);
+			return 1;
 
-                        if (exceptfds)
-                            PJ_FD_ZERO (exceptfds);
+		    } else if (!pjsock->Reader()->IsActive())
+			pjsock->Reader()->StartRecvFrom();
 
-                        return 1;
+		} else {
+		    pjsock->CreateReader();
+		    pjsock->Reader()->StartRecvFrom();
+		}
+	    }
 
-                    } else if (!pjsock->Reader()->IsActive())
-                        pjsock->Reader()->StartRecvFrom();
+	    PjSymbianOS::Instance()->WaitForActiveObjects();
 
-                } else {
-                    pjsock->CreateReader();
-                    pjsock->Reader()->StartRecvFrom();
-                }
-            }
-
-            PjSymbianOS::Instance()->WaitForActiveObjects();
-
-        } while (pjTimer==NULL || !pjTimer->HasTimedOut());
+	} while (pjTimer==NULL || !pjTimer->HasTimedOut());
     }
 
 
     /* Timeout */
 
     if (readfds)
-        PJ_FD_ZERO (readfds);
-
+	PJ_FD_ZERO(readfds);
     if (writefds)
-        PJ_FD_ZERO (writefds);
-
+	PJ_FD_ZERO(writefds);
     if (exceptfds)
-        PJ_FD_ZERO (exceptfds);
+	PJ_FD_ZERO(exceptfds);
 
     return 0;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp
index af174cc855..b1c725c149 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp
@@ -1,5 +1,5 @@
-/* $Id: sock_symbian.cpp 2771 2009-06-17 13:31:13Z bennylp $ */
-/*
+/* $Id: sock_symbian.cpp 2966 2009-10-25 09:02:07Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/sock.h>
 #include <pj/addr_resolv.h>
@@ -47,7 +47,7 @@ const pj_uint16_t PJ_SOCK_DGRAM	= KSockDatagram;
 const pj_uint16_t PJ_SOCK_RAW	= 0xFFFF;
 const pj_uint16_t PJ_SOCK_RDM	= 0xFFFF;
 
-/* setsockop() is not really supported. */
+/* we don't support setsockopt(), these are just dummy values */
 const pj_uint16_t PJ_SOL_SOCKET	= 0xFFFF;
 const pj_uint16_t PJ_SOL_IP	= 0xFFFF;
 const pj_uint16_t PJ_SOL_TCP	= 0xFFFF;
@@ -61,6 +61,11 @@ const pj_uint16_t PJ_IPTOS_THROUGHPUT	= 0;
 const pj_uint16_t PJ_IPTOS_RELIABILITY	= 0;
 const pj_uint16_t PJ_IPTOS_MINCOST	= 0;
 
+/* Misc */
+const pj_uint16_t PJ_TCP_NODELAY = 0xFFFF;
+const pj_uint16_t PJ_SO_REUSEADDR = 0xFFFF;
+const pj_uint16_t PJ_SO_PRIORITY = 0xFFFF;
+
 /* ioctl() is also not supported. */
 const pj_uint16_t PJ_SO_TYPE    = 0xFFFF;
 const pj_uint16_t PJ_SO_RCVBUF  = 0xFFFF;
@@ -92,19 +97,19 @@ CPjSocket::~CPjSocket()
 
 
 // Create socket reader.
-CPjSocketReader *CPjSocket::CreateReader (unsigned max_len)
+CPjSocketReader *CPjSocket::CreateReader(unsigned max_len)
 {
-    pj_assert (sockReader_ == NULL);
-    return sockReader_ = CPjSocketReader::NewL (*this, max_len);
+    pj_assert(sockReader_ == NULL);
+    return sockReader_ = CPjSocketReader::NewL(*this, max_len);
 }
 
 // Delete socket reader when it's not wanted.
-void CPjSocket::DestroyReader()
+void CPjSocket::DestroyReader() 
 {
     if (sockReader_) {
-        sockReader_->Cancel();
-        delete sockReader_;
-        sockReader_ = NULL;
+	sockReader_->Cancel();
+	delete sockReader_;
+	sockReader_ = NULL;
     }
 }
 
@@ -116,28 +121,28 @@ void CPjSocket::DestroyReader()
 //
 
 
-CPjSocketReader::CPjSocketReader (CPjSocket &sock)
-        : CActive (EPriorityStandard),
-        sock_ (sock), buffer_ (NULL, 0), readCb_ (NULL), key_ (NULL)
+CPjSocketReader::CPjSocketReader(CPjSocket &sock)
+: CActive(EPriorityStandard), 
+  sock_(sock), buffer_(NULL, 0), readCb_(NULL), key_(NULL)
 {
 }
 
 
-void CPjSocketReader::ConstructL (unsigned max_len)
+void CPjSocketReader::ConstructL(unsigned max_len)
 {
     isDatagram_ = sock_.IsDatagram();
 
     TUint8 *ptr = new TUint8[max_len];
-    buffer_.Set (ptr, 0, (TInt) max_len);
-    CActiveScheduler::Add (this);
+    buffer_.Set(ptr, 0, (TInt)max_len);
+    CActiveScheduler::Add(this);
 }
 
-CPjSocketReader *CPjSocketReader::NewL (CPjSocket &sock, unsigned max_len)
+CPjSocketReader *CPjSocketReader::NewL(CPjSocket &sock, unsigned max_len)
 {
-    CPjSocketReader *self = new (ELeave) CPjSocketReader (sock);
-    CleanupStack::PushL (self);
-    self->ConstructL (max_len);
-    CleanupStack::Pop (self);
+    CPjSocketReader *self = new (ELeave) CPjSocketReader(sock);
+    CleanupStack::PushL(self);
+    self->ConstructL(max_len);
+    CleanupStack::Pop(self);
 
     return self;
 }
@@ -149,29 +154,27 @@ CPjSocketReader::~CPjSocketReader()
     delete [] data;
 }
 
-void CPjSocketReader::StartRecv (void (*cb) (void *key),
-                                 void *key,
-                                 TDes8 *aDesc,
-                                 TUint flags)
+void CPjSocketReader::StartRecv(void (*cb)(void *key), 
+			        void *key, 
+			        TDes8 *aDesc,
+			        TUint flags)
 {
-    StartRecvFrom (cb, key, aDesc, flags, NULL);
+    StartRecvFrom(cb, key, aDesc, flags, NULL);
 }
 
-void CPjSocketReader::StartRecvFrom (void (*cb) (void *key),
-                                     void *key,
-                                     TDes8 *aDesc,
-                                     TUint flags,
-                                     TSockAddr *fromAddr)
+void CPjSocketReader::StartRecvFrom(void (*cb)(void *key), 
+				    void *key, 
+				    TDes8 *aDesc,
+				    TUint flags,
+				    TSockAddr *fromAddr)
 {
     readCb_ = cb;
     key_ = key;
 
     if (aDesc == NULL) aDesc = &buffer_;
-
     if (fromAddr == NULL) fromAddr = &recvAddr_;
 
-    sock_.Socket().RecvFrom (*aDesc, *fromAddr, flags, iStatus);
-
+    sock_.Socket().RecvFrom(*aDesc, *fromAddr, flags, iStatus);
     SetActive();
 }
 
@@ -182,41 +185,40 @@ void CPjSocketReader::DoCancel()
 
 void CPjSocketReader::RunL()
 {
-    void (*old_cb) (void *key) = readCb_;
+    void (*old_cb)(void *key) = readCb_;
     void *old_key = key_;
 
     readCb_ = NULL;
     key_ = NULL;
 
     if (old_cb) {
-        (*old_cb) (old_key);
+	(*old_cb)(old_key);
     }
 }
 
 // Append data to aDesc, up to aDesc's maximum size.
 // If socket is datagram based, buffer_ will be clared.
-void CPjSocketReader::ReadData (TDes8 &aDesc, TInetAddr *addr)
+void CPjSocketReader::ReadData(TDes8 &aDesc, TInetAddr *addr)
 {
     if (isDatagram_)
-        aDesc.Zero();
+	aDesc.Zero();
 
     if (buffer_.Length() == 0)
-        return;
+	return;
 
     TInt size_to_copy = aDesc.MaxLength() - aDesc.Length();
-
     if (size_to_copy > buffer_.Length())
-        size_to_copy = buffer_.Length();
+	size_to_copy = buffer_.Length();
 
-    aDesc.Append (buffer_.Ptr(), size_to_copy);
+    aDesc.Append(buffer_.Ptr(), size_to_copy);
 
     if (isDatagram_)
-        buffer_.Zero();
+	buffer_.Zero();
     else
-        buffer_.Delete (0, size_to_copy);
+	buffer_.Delete(0, size_to_copy);
 
     if (addr)
-        *addr = recvAddr_;
+	*addr = recvAddr_;
 }
 
 
@@ -229,10 +231,10 @@ void CPjSocketReader::ReadData (TDes8 &aDesc, TInetAddr *addr)
 /*
  * Convert 16-bit value from network byte order to host byte order.
  */
-PJ_DEF (pj_uint16_t) pj_ntohs (pj_uint16_t netshort)
+PJ_DEF(pj_uint16_t) pj_ntohs(pj_uint16_t netshort)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap16 (netshort);
+    return pj_swap16(netshort);
 #else
     return netshort;
 #endif
@@ -241,10 +243,10 @@ PJ_DEF (pj_uint16_t) pj_ntohs (pj_uint16_t netshort)
 /*
  * Convert 16-bit value from host byte order to network byte order.
  */
-PJ_DEF (pj_uint16_t) pj_htons (pj_uint16_t hostshort)
+PJ_DEF(pj_uint16_t) pj_htons(pj_uint16_t hostshort)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap16 (hostshort);
+    return pj_swap16(hostshort);
 #else
     return hostshort;
 #endif
@@ -253,10 +255,10 @@ PJ_DEF (pj_uint16_t) pj_htons (pj_uint16_t hostshort)
 /*
  * Convert 32-bit value from network byte order to host byte order.
  */
-PJ_DEF (pj_uint32_t) pj_ntohl (pj_uint32_t netlong)
+PJ_DEF(pj_uint32_t) pj_ntohl(pj_uint32_t netlong)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap32 (netlong);
+    return pj_swap32(netlong);
 #else
     return netlong;
 #endif
@@ -265,10 +267,10 @@ PJ_DEF (pj_uint32_t) pj_ntohl (pj_uint32_t netlong)
 /*
  * Convert 32-bit value from host byte order to network byte order.
  */
-PJ_DEF (pj_uint32_t) pj_htonl (pj_uint32_t hostlong)
+PJ_DEF(pj_uint32_t) pj_htonl(pj_uint32_t hostlong)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap32 (hostlong);
+    return pj_swap32(hostlong);
 #else
     return netlong;
 #endif
@@ -278,25 +280,25 @@ PJ_DEF (pj_uint32_t) pj_htonl (pj_uint32_t hostlong)
  * Convert an Internet host address given in network byte order
  * to string in standard numbers and dots notation.
  */
-PJ_DEF (char*) pj_inet_ntoa (pj_in_addr inaddr)
+PJ_DEF(char*) pj_inet_ntoa(pj_in_addr inaddr)
 {
-    static char str8[PJ_INET_ADDRSTRLEN];
-    TBuf<PJ_INET_ADDRSTRLEN> str16 (0);
+	static char str8[PJ_INET_ADDRSTRLEN];
+    TBuf<PJ_INET_ADDRSTRLEN> str16(0);
 
     /* (Symbian IP address is in host byte order) */
-    TInetAddr temp_addr ( (TUint32) pj_ntohl (inaddr.s_addr), (TUint) 0);
-    temp_addr.Output (str16);
-
-    return pj_unicode_to_ansi ( (const wchar_t*) str16.PtrZ(), str16.Length(),
-                                str8, sizeof (str8));
+    TInetAddr temp_addr((TUint32)pj_ntohl(inaddr.s_addr), (TUint)0);
+    temp_addr.Output(str16);
+ 
+    return pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
+			      str8, sizeof(str8));
 }
 
 /*
  * This function converts the Internet host address cp from the standard
  * numbers-and-dots notation into binary data and stores it in the structure
- * that inp points to.
+ * that inp points to. 
  */
-PJ_DEF (int) pj_inet_aton (const pj_str_t *cp, struct pj_in_addr *inp)
+PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp)
 {
     enum { MAXIPLEN = PJ_INET_ADDRSTRLEN };
 
@@ -310,52 +312,48 @@ PJ_DEF (int) pj_inet_aton (const pj_str_t *cp, struct pj_in_addr *inp)
      *	this function might be called with cp->slen >= 16
      *  (i.e. when called with hostname to check if it's an IP addr).
      */
-    PJ_ASSERT_RETURN (cp && cp->slen && inp, 0);
-
+    PJ_ASSERT_RETURN(cp && cp->slen && inp, 0);
     if (cp->slen >= 16) {
-        return 0;
+	return 0;
     }
 
     char tempaddr8[MAXIPLEN];
-
-    pj_memcpy (tempaddr8, cp->ptr, cp->slen);
+    pj_memcpy(tempaddr8, cp->ptr, cp->slen);
     tempaddr8[cp->slen] = '\0';
 
     wchar_t tempaddr16[MAXIPLEN];
-    pj_ansi_to_unicode (tempaddr8, pj_ansi_strlen (tempaddr8),
-                        tempaddr16, sizeof (tempaddr16));
+    pj_ansi_to_unicode(tempaddr8, pj_ansi_strlen(tempaddr8),
+		       tempaddr16, sizeof(tempaddr16));
 
-    TBuf<MAXIPLEN> ip_addr ( (const TText*) tempaddr16);
+    TBuf<MAXIPLEN> ip_addr((const TText*)tempaddr16);
 
     TInetAddr addr;
-    addr.Init (KAfInet);
-
-    if (addr.Input (ip_addr) == KErrNone) {
-        /* Success (Symbian IP address is in host byte order) */
-        inp->s_addr = pj_htonl (addr.Address());
-        return 1;
+    addr.Init(KAfInet);
+    if (addr.Input(ip_addr) == KErrNone) {
+	/* Success (Symbian IP address is in host byte order) */
+	inp->s_addr = pj_htonl(addr.Address());
+	return 1;
     } else {
-        /* Error */
-        return 0;
+	/* Error */
+	return 0;
     }
 }
 
 /*
  * Convert text to IPv4/IPv6 address.
  */
-PJ_DEF (pj_status_t) pj_inet_pton (int af, const pj_str_t *src, void *dst)
+PJ_DEF(pj_status_t) pj_inet_pton(int af, const pj_str_t *src, void *dst)
 {
     char tempaddr[PJ_INET6_ADDRSTRLEN];
 
-    PJ_ASSERT_RETURN (af==PJ_AF_INET || af==PJ_AF_INET6, PJ_EINVAL);
-    PJ_ASSERT_RETURN (src && src->slen && dst, PJ_EINVAL);
+    PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6, PJ_EINVAL);
+    PJ_ASSERT_RETURN(src && src->slen && dst, PJ_EINVAL);
 
-    /* Initialize output with PJ_IN_ADDR_NONE for IPv4 (to be
+    /* Initialize output with PJ_IN_ADDR_NONE for IPv4 (to be 
      * compatible with pj_inet_aton()
      */
-
     if (af==PJ_AF_INET) {
-        ( (pj_in_addr*) dst)->s_addr = PJ_INADDR_NONE;
+	((pj_in_addr*)dst)->s_addr = PJ_INADDR_NONE;
     }
 
     /* Caution:
@@ -363,96 +361,88 @@ PJ_DEF (pj_status_t) pj_inet_pton (int af, const pj_str_t *src, void *dst)
      *  (i.e. when called with hostname to check if it's an IP addr).
      */
     if (src->slen >= PJ_INET6_ADDRSTRLEN) {
-        return PJ_ENAMETOOLONG;
+	return PJ_ENAMETOOLONG;
     }
 
-    pj_memcpy (tempaddr, src->ptr, src->slen);
-
+    pj_memcpy(tempaddr, src->ptr, src->slen);
     tempaddr[src->slen] = '\0';
 
 
     wchar_t tempaddr16[PJ_INET6_ADDRSTRLEN];
-    pj_ansi_to_unicode (tempaddr, pj_ansi_strlen (tempaddr),
-                        tempaddr16, sizeof (tempaddr16));
+    pj_ansi_to_unicode(tempaddr, pj_ansi_strlen(tempaddr),
+		       tempaddr16, sizeof(tempaddr16));
 
-    TBuf<PJ_INET6_ADDRSTRLEN> ip_addr ( (const TText*) tempaddr16);
+    TBuf<PJ_INET6_ADDRSTRLEN> ip_addr((const TText*)tempaddr16);
 
     TInetAddr addr;
-    addr.Init (KAfInet6);
-
-    if (addr.Input (ip_addr) == KErrNone) {
-        if (af==PJ_AF_INET) {
-            /* Success (Symbian IP address is in host byte order) */
-            pj_uint32_t ip = pj_htonl (addr.Address());
-            pj_memcpy (dst, &ip, 4);
-        } else if (af==PJ_AF_INET6) {
-            const TIp6Addr & ip6 = addr.Ip6Address();
-            pj_memcpy (dst, ip6.u.iAddr8, 16);
-        } else {
-            pj_assert (!"Unexpected!");
-            return PJ_EBUG;
-        }
-
-        return PJ_SUCCESS;
+    addr.Init(KAfInet6);
+    if (addr.Input(ip_addr) == KErrNone) {
+	if (af==PJ_AF_INET) {
+	    /* Success (Symbian IP address is in host byte order) */
+	    pj_uint32_t ip = pj_htonl(addr.Address());
+	    pj_memcpy(dst, &ip, 4);
+	} else if (af==PJ_AF_INET6) {
+	    const TIp6Addr & ip6 = addr.Ip6Address();
+	    pj_memcpy(dst, ip6.u.iAddr8, 16);
+	} else {
+	    pj_assert(!"Unexpected!");
+	    return PJ_EBUG;
+	}
+	return PJ_SUCCESS;
     } else {
-        /* Error */
-        return PJ_EINVAL;
+	/* Error */
+	return PJ_EINVAL;
     }
 }
 
 /*
  * Convert IPv4/IPv6 address to text.
  */
-PJ_DEF (pj_status_t) pj_inet_ntop (int af, const void *src,
-                                   char *dst, int size)
+PJ_DEF(pj_status_t) pj_inet_ntop(int af, const void *src,
+				 char *dst, int size)
 
 {
-    PJ_ASSERT_RETURN (src && dst && size, PJ_EINVAL);
+    PJ_ASSERT_RETURN(src && dst && size, PJ_EINVAL);
 
     *dst = '\0';
 
     if (af==PJ_AF_INET) {
 
-        TBuf<PJ_INET_ADDRSTRLEN> str16;
-        pj_in_addr inaddr;
-
-        if (size < PJ_INET_ADDRSTRLEN)
-            return PJ_ETOOSMALL;
+	TBuf<PJ_INET_ADDRSTRLEN> str16;
+	pj_in_addr inaddr;
 
-        pj_memcpy (&inaddr, src, 4);
+	if (size < PJ_INET_ADDRSTRLEN)
+	    return PJ_ETOOSMALL;
 
-        /* Symbian IP address is in host byte order */
-        TInetAddr temp_addr ( (TUint32) pj_ntohl (inaddr.s_addr), (TUint) 0);
+	pj_memcpy(&inaddr, src, 4);
 
-        temp_addr.Output (str16);
-
-        pj_unicode_to_ansi ( (const wchar_t*) str16.PtrZ(), str16.Length(),
-                             dst, size);
-
-        return PJ_SUCCESS;
+	/* Symbian IP address is in host byte order */
+	TInetAddr temp_addr((TUint32)pj_ntohl(inaddr.s_addr), (TUint)0);
+	temp_addr.Output(str16);
+ 
+	pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
+			   dst, size);
+	return PJ_SUCCESS;
 
     } else if (af==PJ_AF_INET6) {
-        TBuf<PJ_INET6_ADDRSTRLEN> str16;
-
-        if (size < PJ_INET6_ADDRSTRLEN)
-            return PJ_ETOOSMALL;
-
-        TIp6Addr ip6;
-
-        pj_memcpy (ip6.u.iAddr8, src, 16);
-
-        TInetAddr temp_addr (ip6, (TUint) 0);
+	TBuf<PJ_INET6_ADDRSTRLEN> str16;
 
-        temp_addr.Output (str16);
+	if (size < PJ_INET6_ADDRSTRLEN)
+	    return PJ_ETOOSMALL;
 
-        pj_unicode_to_ansi ( (const wchar_t*) str16.PtrZ(), str16.Length(),
-                             dst, size);
+	TIp6Addr ip6;
+	pj_memcpy(ip6.u.iAddr8, src, 16);
 
-        return PJ_SUCCESS;
+	TInetAddr temp_addr(ip6, (TUint)0);
+	temp_addr.Output(str16);
+ 
+	pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
+			   dst, size);
+	return PJ_SUCCESS;
 
     } else {
-        pj_assert (!"Unsupport address family");
-        return PJ_EINVAL;
+	pj_assert(!"Unsupport address family");
+	return PJ_EINVAL;
     }
 
 }
@@ -460,7 +450,7 @@ PJ_DEF (pj_status_t) pj_inet_ntop (int af, const void *src,
 /*
  * Get hostname.
  */
-PJ_DEF (const pj_str_t*) pj_gethostname (void)
+PJ_DEF(const pj_str_t*) pj_gethostname(void)
 {
     static char buf[PJ_MAX_HOSTNAME];
     static pj_str_t hostname;
@@ -468,70 +458,66 @@ PJ_DEF (const pj_str_t*) pj_gethostname (void)
     PJ_CHECK_STACK();
 
     if (hostname.ptr == NULL) {
-        RHostResolver &resv = PjSymbianOS::Instance()->GetResolver (PJ_AF_INET);
-        TRequestStatus reqStatus;
-        THostName tmpName;
+	RHostResolver &resv = PjSymbianOS::Instance()->GetResolver(PJ_AF_INET);
+	TRequestStatus reqStatus;
+	THostName tmpName;
 
-        // Return empty hostname if access point is marked as down by app.
-        PJ_SYMBIAN_CHECK_CONNECTION2 (&hostname);
+	// Return empty hostname if access point is marked as down by app.
+	PJ_SYMBIAN_CHECK_CONNECTION2(&hostname);
 
-        resv.GetHostName (tmpName, reqStatus);
-        User::WaitForRequest (reqStatus);
+	resv.GetHostName(tmpName, reqStatus);
+	User::WaitForRequest(reqStatus);
 
-        hostname.ptr = pj_unicode_to_ansi ( (const wchar_t*) tmpName.Ptr(), tmpName.Length(),
-                                            buf, sizeof (buf));
-        hostname.slen = tmpName.Length();
+	hostname.ptr = pj_unicode_to_ansi((const wchar_t*)tmpName.Ptr(), tmpName.Length(),
+					  buf, sizeof(buf));
+	hostname.slen = tmpName.Length();
     }
-
     return &hostname;
 }
 
 /*
  * Create new socket/endpoint for communication and returns a descriptor.
  */
-PJ_DEF (pj_status_t) pj_sock_socket (int af,
-                                     int type,
-                                     int proto,
-                                     pj_sock_t *p_sock)
+PJ_DEF(pj_status_t) pj_sock_socket(int af, 
+				   int type, 
+				   int proto,
+				   pj_sock_t *p_sock)
 {
     TInt rc;
 
     PJ_CHECK_STACK();
 
     /* Sanity checks. */
-    PJ_ASSERT_RETURN (p_sock!=NULL, PJ_EINVAL);
+    PJ_ASSERT_RETURN(p_sock!=NULL, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-
+    
     /* Set proto if none is specified. */
-
     if (proto == 0) {
-        if (type == pj_SOCK_STREAM())
-            proto = KProtocolInetTcp;
-        else if (type == pj_SOCK_DGRAM())
-            proto = KProtocolInetUdp;
+	if (type == pj_SOCK_STREAM())
+	    proto = KProtocolInetTcp;
+	else if (type == pj_SOCK_DGRAM())
+	    proto = KProtocolInetUdp;
     }
 
     /* Create Symbian RSocket */
     RSocket rSock;
-
     if (PjSymbianOS::Instance()->Connection())
-        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
-                         af, type, proto,
-                         *PjSymbianOS::Instance()->Connection());
+    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
+    			af, type, proto,
+    			*PjSymbianOS::Instance()->Connection());
     else
-        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
-                         af, type, proto);
-
+    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
+    			af, type, proto);
+        
     if (rc != KErrNone)
-        return PJ_RETURN_OS_ERROR (rc);
+	return PJ_RETURN_OS_ERROR(rc);
 
 
     /* Wrap Symbian RSocket into PJLIB's CPjSocket, and return to caller */
-    CPjSocket *pjSock = new CPjSocket (af, type, rSock);
-
-    *p_sock = (pj_sock_t) pjSock;
+    CPjSocket *pjSock = new CPjSocket(af, type, rSock);
+    *p_sock = (pj_sock_t)pjSock;
 
     return PJ_SUCCESS;
 }
@@ -540,65 +526,64 @@ PJ_DEF (pj_status_t) pj_sock_socket (int af,
 /*
  * Bind socket.
  */
-PJ_DEF (pj_status_t) pj_sock_bind (pj_sock_t sock,
-                                   const pj_sockaddr_t *addr,
-                                   int len)
+PJ_DEF(pj_status_t) pj_sock_bind( pj_sock_t sock, 
+				  const pj_sockaddr_t *addr,
+				  int len)
 {
     pj_status_t status;
     TInt rc;
 
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock != 0, PJ_EINVAL);
-    PJ_ASSERT_RETURN (addr && len>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock != 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN(addr && len>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
     // Convert PJLIB's pj_sockaddr into Symbian's TInetAddr
     TInetAddr inetAddr;
-    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) addr, len, inetAddr);
-
+    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)addr, len, inetAddr);
     if (status != PJ_SUCCESS)
-        return status;
+    	return status;
 
     // Get the RSocket instance
-    RSocket &rSock = ( (CPjSocket*) sock)->Socket();
+    RSocket &rSock = ((CPjSocket*)sock)->Socket();
 
     // Bind
-    rc = rSock.Bind (inetAddr);
+    rc = rSock.Bind(inetAddr);
 
-    return (rc==KErrNone) ? PJ_SUCCESS : PJ_RETURN_OS_ERROR (rc);
+    return (rc==KErrNone) ? PJ_SUCCESS : PJ_RETURN_OS_ERROR(rc);
 }
 
 
 /*
  * Bind socket.
  */
-PJ_DEF (pj_status_t) pj_sock_bind_in (pj_sock_t sock,
-                                      pj_uint32_t addr32,
-                                      pj_uint16_t port)
+PJ_DEF(pj_status_t) pj_sock_bind_in( pj_sock_t sock, 
+				     pj_uint32_t addr32,
+				     pj_uint16_t port)
 {
     pj_sockaddr_in addr;
 
     PJ_CHECK_STACK();
 
-    pj_bzero (&addr, sizeof (addr));
+    pj_bzero(&addr, sizeof(addr));
     addr.sin_family = PJ_AF_INET;
-    addr.sin_addr.s_addr = pj_htonl (addr32);
-    addr.sin_port = pj_htons (port);
+    addr.sin_addr.s_addr = pj_htonl(addr32);
+    addr.sin_port = pj_htons(port);
 
-    return pj_sock_bind (sock, &addr, sizeof (pj_sockaddr_in));
+    return pj_sock_bind(sock, &addr, sizeof(pj_sockaddr_in));
 }
 
 
 /*
  * Close socket.
  */
-PJ_DEF (pj_status_t) pj_sock_close (pj_sock_t sock)
+PJ_DEF(pj_status_t) pj_sock_close(pj_sock_t sock)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock != 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock != 0, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
 
     // This will close the socket.
     delete pjSock;
@@ -609,334 +594,325 @@ PJ_DEF (pj_status_t) pj_sock_close (pj_sock_t sock)
 /*
  * Get remote's name.
  */
-PJ_DEF (pj_status_t) pj_sock_getpeername (pj_sock_t sock,
-        pj_sockaddr_t *addr,
-        int *namelen)
+PJ_DEF(pj_status_t) pj_sock_getpeername( pj_sock_t sock,
+					 pj_sockaddr_t *addr,
+					 int *namelen)
 {
     PJ_CHECK_STACK();
+    
+    PJ_ASSERT_RETURN(sock && addr && namelen && 
+		     *namelen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
-    PJ_ASSERT_RETURN (sock && addr && namelen &&
-                      *namelen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
-
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     // Socket must be connected.
-    PJ_ASSERT_RETURN (pjSock->IsConnected(), PJ_EINVALIDOP);
+    PJ_ASSERT_RETURN(pjSock->IsConnected(), PJ_EINVALIDOP);
 
     TInetAddr inetAddr;
-    rSock.RemoteName (inetAddr);
+    rSock.RemoteName(inetAddr);
 
-    return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) addr, namelen);
+    return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)addr, namelen);
 }
 
 /*
  * Get socket name.
  */
-PJ_DEF (pj_status_t) pj_sock_getsockname (pj_sock_t sock,
-        pj_sockaddr_t *addr,
-        int *namelen)
+PJ_DEF(pj_status_t) pj_sock_getsockname( pj_sock_t sock,
+					 pj_sockaddr_t *addr,
+					 int *namelen)
 {
     PJ_CHECK_STACK();
+    
+    PJ_ASSERT_RETURN(sock && addr && namelen && 
+		     *namelen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
-    PJ_ASSERT_RETURN (sock && addr && namelen &&
-                      *namelen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
-
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     TInetAddr inetAddr;
-    rSock.LocalName (inetAddr);
+    rSock.LocalName(inetAddr);
 
-    return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) addr, namelen);
+    return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)addr, namelen);
 }
 
 /*
  * Send data
  */
-PJ_DEF (pj_status_t) pj_sock_send (pj_sock_t sock,
-                                   const void *buf,
-                                   pj_ssize_t *len,
-                                   unsigned flags)
+PJ_DEF(pj_status_t) pj_sock_send(pj_sock_t sock,
+				 const void *buf,
+				 pj_ssize_t *len,
+				 unsigned flags)
 {
     PJ_CHECK_STACK();
-    PJ_ASSERT_RETURN (sock && buf && len, PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     // send() should only be called to connected socket
-    PJ_ASSERT_RETURN (pjSock->IsConnected(), PJ_EINVALIDOP);
+    PJ_ASSERT_RETURN(pjSock->IsConnected(), PJ_EINVALIDOP);
 
-    TPtrC8 data ( (const TUint8*) buf, (TInt) *len);
+    TPtrC8 data((const TUint8*)buf, (TInt)*len);
     TRequestStatus reqStatus;
     TSockXfrLength sentLen;
 
-    rSock.Send (data, flags, reqStatus, sentLen);
-    User::WaitForRequest (reqStatus);
+    rSock.Send(data, flags, reqStatus, sentLen);
+    User::WaitForRequest(reqStatus);
 
-    if (reqStatus.Int() ==KErrNone) {
-        //*len = (TInt) sentLen.Length();
-        return PJ_SUCCESS;
+    if (reqStatus.Int()==KErrNone) {
+	//*len = (TInt) sentLen.Length();
+	return PJ_SUCCESS;
     } else
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
 }
 
 
 /*
  * Send data.
  */
-PJ_DEF (pj_status_t) pj_sock_sendto (pj_sock_t sock,
-                                     const void *buf,
-                                     pj_ssize_t *len,
-                                     unsigned flags,
-                                     const pj_sockaddr_t *to,
-                                     int tolen)
+PJ_DEF(pj_status_t) pj_sock_sendto(pj_sock_t sock,
+				   const void *buf,
+				   pj_ssize_t *len,
+				   unsigned flags,
+				   const pj_sockaddr_t *to,
+				   int tolen)
 {
     pj_status_t status;
-
+    
     PJ_CHECK_STACK();
-    PJ_ASSERT_RETURN (sock && buf && len, PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     // Only supports AF_INET for now
-    PJ_ASSERT_RETURN (tolen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN(tolen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
     TInetAddr inetAddr;
-    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) to, tolen, inetAddr);
-
+    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)to, tolen, inetAddr);
     if (status != PJ_SUCCESS)
-        return status;
-
-    TPtrC8 data ( (const TUint8*) buf, (TInt) *len);
+    	return status;
 
+    TPtrC8 data((const TUint8*)buf, (TInt)*len);
     TRequestStatus reqStatus;
-
     TSockXfrLength sentLen;
 
-    rSock.SendTo (data, inetAddr, flags, reqStatus, sentLen);
-
-    User::WaitForRequest (reqStatus);
+    rSock.SendTo(data, inetAddr, flags, reqStatus, sentLen);
+    User::WaitForRequest(reqStatus);
 
-    if (reqStatus.Int() ==KErrNone) {
-        //For some reason TSockXfrLength is not returning correctly!
-        //*len = (TInt) sentLen.Length();
-        return PJ_SUCCESS;
-    } else
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+    if (reqStatus.Int()==KErrNone) {
+	//For some reason TSockXfrLength is not returning correctly!
+	//*len = (TInt) sentLen.Length();
+	return PJ_SUCCESS;
+    } else 
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
 }
 
 /*
  * Receive data.
  */
-PJ_DEF (pj_status_t) pj_sock_recv (pj_sock_t sock,
-                                   void *buf,
-                                   pj_ssize_t *len,
-                                   unsigned flags)
+PJ_DEF(pj_status_t) pj_sock_recv(pj_sock_t sock,
+				 void *buf,
+				 pj_ssize_t *len,
+				 unsigned flags)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock && buf && len, PJ_EINVAL);
-    PJ_ASSERT_RETURN (*len > 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL);
+    PJ_ASSERT_RETURN(*len > 0, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
 
     if (pjSock->Reader()) {
-        CPjSocketReader *reader = pjSock->Reader();
+	CPjSocketReader *reader = pjSock->Reader();
 
-        while (reader->IsActive() && !reader->HasData()) {
-            User::WaitForAnyRequest();
-        }
+	while (reader->IsActive() && !reader->HasData()) {
+	    User::WaitForAnyRequest();
+	}
 
-        if (reader->HasData()) {
-            TPtr8 data ( (TUint8*) buf, (TInt) *len);
-            TInetAddr inetAddr;
+	if (reader->HasData()) {
+	    TPtr8 data((TUint8*)buf, (TInt)*len);
+	    TInetAddr inetAddr;
 
-            reader->ReadData (data, &inetAddr);
+	    reader->ReadData(data, &inetAddr);
 
-            *len = data.Length();
-            return PJ_SUCCESS;
-        }
+	    *len = data.Length();
+	    return PJ_SUCCESS;
+	}
     }
 
     TRequestStatus reqStatus;
-
     TSockXfrLength recvLen;
-    TPtr8 data ( (TUint8*) buf, (TInt) *len, (TInt) *len);
+    TPtr8 data((TUint8*)buf, (TInt)*len, (TInt)*len);
 
     if (pjSock->IsDatagram()) {
-        pjSock->Socket().Recv (data, flags, reqStatus);
+	pjSock->Socket().Recv(data, flags, reqStatus);
     } else {
-        // Using static like this is not pretty, but we don't need to use
-        // the value anyway, hence doing it like this is probably most
-        // optimal.
-        static TSockXfrLength len;
-        pjSock->Socket().RecvOneOrMore (data, flags, reqStatus, len);
+	// Using static like this is not pretty, but we don't need to use
+	// the value anyway, hence doing it like this is probably most
+	// optimal.
+	static TSockXfrLength len;
+	pjSock->Socket().RecvOneOrMore(data, flags, reqStatus, len);
     }
-
-    User::WaitForRequest (reqStatus);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus == KErrNone) {
-        //*len = (TInt)recvLen.Length();
-        *len = data.Length();
-        return PJ_SUCCESS;
+	//*len = (TInt)recvLen.Length();
+	*len = data.Length();
+	return PJ_SUCCESS;
     } else {
-        *len = -1;
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	*len = -1;
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
     }
 }
 
 /*
  * Receive data.
  */
-PJ_DEF (pj_status_t) pj_sock_recvfrom (pj_sock_t sock,
-                                       void *buf,
-                                       pj_ssize_t *len,
-                                       unsigned flags,
-                                       pj_sockaddr_t *from,
-                                       int *fromlen)
+PJ_DEF(pj_status_t) pj_sock_recvfrom(pj_sock_t sock,
+				     void *buf,
+				     pj_ssize_t *len,
+				     unsigned flags,
+				     pj_sockaddr_t *from,
+				     int *fromlen)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock && buf && len && from && fromlen, PJ_EINVAL);
-    PJ_ASSERT_RETURN (*len > 0, PJ_EINVAL);
-    PJ_ASSERT_RETURN (*fromlen >= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock && buf && len && from && fromlen, PJ_EINVAL);
+    PJ_ASSERT_RETURN(*len > 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN(*fromlen >= (int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     if (pjSock->Reader()) {
-        CPjSocketReader *reader = pjSock->Reader();
+	CPjSocketReader *reader = pjSock->Reader();
 
-        while (reader->IsActive() && !reader->HasData()) {
-            User::WaitForAnyRequest();
-        }
+	while (reader->IsActive() && !reader->HasData()) {
+	    User::WaitForAnyRequest();
+	}
 
-        if (reader->HasData()) {
-            TPtr8 data ( (TUint8*) buf, (TInt) *len);
-            TInetAddr inetAddr;
+	if (reader->HasData()) {
+	    TPtr8 data((TUint8*)buf, (TInt)*len);
+	    TInetAddr inetAddr;
 
-            reader->ReadData (data, &inetAddr);
+	    reader->ReadData(data, &inetAddr);
 
-            *len = data.Length();
+	    *len = data.Length();
 
-            if (from && fromlen) {
-                return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) from,
-                                             fromlen);
-            } else {
-                return PJ_SUCCESS;
-            }
-        }
+	    if (from && fromlen) {
+		return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)from, 
+					    fromlen);
+	    } else {
+	    	return PJ_SUCCESS;
+	    }
+	}
     }
 
     TInetAddr inetAddr;
-
     TRequestStatus reqStatus;
     TSockXfrLength recvLen;
-    TPtr8 data ( (TUint8*) buf, (TInt) *len, (TInt) *len);
+    TPtr8 data((TUint8*)buf, (TInt)*len, (TInt)*len);
 
-    rSock.RecvFrom (data, inetAddr, flags, reqStatus, recvLen);
-    User::WaitForRequest (reqStatus);
+    rSock.RecvFrom(data, inetAddr, flags, reqStatus, recvLen);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus == KErrNone) {
-        //*len = (TInt)recvLen.Length();
-        *len = data.Length();
-        return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) from, fromlen);
+	//*len = (TInt)recvLen.Length();
+	*len = data.Length();
+	return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)from, fromlen);
     } else {
-        *len = -1;
-        *fromlen = -1;
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	*len = -1;
+	*fromlen = -1;
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
     }
 }
 
 /*
  * Get socket option.
  */
-PJ_DEF (pj_status_t) pj_sock_getsockopt (pj_sock_t sock,
-        pj_uint16_t level,
-        pj_uint16_t optname,
-        void *optval,
-        int *optlen)
+PJ_DEF(pj_status_t) pj_sock_getsockopt( pj_sock_t sock,
+					pj_uint16_t level,
+					pj_uint16_t optname,
+					void *optval,
+					int *optlen)
 {
     // Not supported for now.
-    PJ_UNUSED_ARG (sock);
-    PJ_UNUSED_ARG (level);
-    PJ_UNUSED_ARG (optname);
-    PJ_UNUSED_ARG (optval);
-    PJ_UNUSED_ARG (optlen);
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(level);
+    PJ_UNUSED_ARG(optname);
+    PJ_UNUSED_ARG(optval);
+    PJ_UNUSED_ARG(optlen);
     return PJ_EINVALIDOP;
 }
 
 /*
  * Set socket option.
  */
-PJ_DEF (pj_status_t) pj_sock_setsockopt (pj_sock_t sock,
-        pj_uint16_t level,
-        pj_uint16_t optname,
-        const void *optval,
-        int optlen)
+PJ_DEF(pj_status_t) pj_sock_setsockopt( pj_sock_t sock,
+					pj_uint16_t level,
+					pj_uint16_t optname,
+					const void *optval,
+					int optlen)
 {
     // Not supported for now.
-    PJ_UNUSED_ARG (sock);
-    PJ_UNUSED_ARG (level);
-    PJ_UNUSED_ARG (optname);
-    PJ_UNUSED_ARG (optval);
-    PJ_UNUSED_ARG (optlen);
+    PJ_UNUSED_ARG(sock);
+    PJ_UNUSED_ARG(level);
+    PJ_UNUSED_ARG(optname);
+    PJ_UNUSED_ARG(optval);
+    PJ_UNUSED_ARG(optlen);
     return PJ_EINVALIDOP;
 }
 
 /*
  * Connect socket.
  */
-PJ_DEF (pj_status_t) pj_sock_connect (pj_sock_t sock,
-                                      const pj_sockaddr_t *addr,
-                                      int namelen)
+PJ_DEF(pj_status_t) pj_sock_connect( pj_sock_t sock,
+				     const pj_sockaddr_t *addr,
+				     int namelen)
 {
     pj_status_t status;
-
+    
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock && addr && namelen, PJ_EINVAL);
-    PJ_ASSERT_RETURN ( ( (pj_sockaddr*) addr)->addr.sa_family == PJ_AF_INET,
-                       PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock && addr && namelen, PJ_EINVAL);
+    PJ_ASSERT_RETURN(((pj_sockaddr*)addr)->addr.sa_family == PJ_AF_INET, 
+		     PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     TInetAddr inetAddr;
     TRequestStatus reqStatus;
 
-    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) addr, namelen, inetAddr);
-
+    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)addr, namelen, inetAddr);
     if (status != PJ_SUCCESS)
-        return status;
+    	return status;
 
-    rSock.Connect (inetAddr, reqStatus);
-
-    User::WaitForRequest (reqStatus);
+    rSock.Connect(inetAddr, reqStatus);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus == KErrNone) {
-        pjSock->SetConnected (true);
-        return PJ_SUCCESS;
+	pjSock->SetConnected(true);
+	return PJ_SUCCESS;
     } else {
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
     }
 }
 
@@ -945,104 +921,100 @@ PJ_DEF (pj_status_t) pj_sock_connect (pj_sock_t sock,
  * Shutdown socket.
  */
 #if PJ_HAS_TCP
-PJ_DEF (pj_status_t) pj_sock_shutdown (pj_sock_t sock,
-                                       int how)
+PJ_DEF(pj_status_t) pj_sock_shutdown( pj_sock_t sock,
+				      int how)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock, PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
     RSocket::TShutdown aHow;
-
     if (how == PJ_SD_RECEIVE)
-        aHow = RSocket::EStopInput;
+	aHow = RSocket::EStopInput;
     else if (how == PJ_SHUT_WR)
-        aHow = RSocket::EStopOutput;
+	aHow = RSocket::EStopOutput;
     else
-        aHow = RSocket::ENormal;
+	aHow = RSocket::ENormal;
 
     TRequestStatus reqStatus;
 
-    rSock.Shutdown (aHow, reqStatus);
-
-    User::WaitForRequest (reqStatus);
+    rSock.Shutdown(aHow, reqStatus);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus == KErrNone) {
-        return PJ_SUCCESS;
+	return PJ_SUCCESS;
     } else {
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
     }
 }
 
 /*
  * Start listening to incoming connections.
  */
-PJ_DEF (pj_status_t) pj_sock_listen (pj_sock_t sock,
-                                     int backlog)
+PJ_DEF(pj_status_t) pj_sock_listen( pj_sock_t sock,
+				    int backlog)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (sock && backlog, PJ_EINVAL);
+    PJ_ASSERT_RETURN(sock && backlog, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*) sock;
+    CPjSocket *pjSock = (CPjSocket*)sock;
     RSocket &rSock = pjSock->Socket();
 
-    TInt rc = rSock.Listen ( (TUint) backlog);
+    TInt rc = rSock.Listen((TUint)backlog);
 
     if (rc == KErrNone) {
-        return PJ_SUCCESS;
+	return PJ_SUCCESS;
     } else {
-        return PJ_RETURN_OS_ERROR (rc);
+	return PJ_RETURN_OS_ERROR(rc);
     }
 }
 
 /*
  * Accept incoming connections
  */
-PJ_DEF (pj_status_t) pj_sock_accept (pj_sock_t serverfd,
-                                     pj_sock_t *newsock,
-                                     pj_sockaddr_t *addr,
-                                     int *addrlen)
+PJ_DEF(pj_status_t) pj_sock_accept( pj_sock_t serverfd,
+				    pj_sock_t *newsock,
+				    pj_sockaddr_t *addr,
+				    int *addrlen)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN (serverfd && newsock, PJ_EINVAL);
+    PJ_ASSERT_RETURN(serverfd && newsock, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*) serverfd;
+    CPjSocket *pjSock = (CPjSocket*)serverfd;
     RSocket &rSock = pjSock->Socket();
 
     // Create a 'blank' socket
     RSocket newSock;
-    newSock.Open (PjSymbianOS::Instance()->SocketServ());
+    newSock.Open(PjSymbianOS::Instance()->SocketServ());
 
     // Call Accept()
     TRequestStatus reqStatus;
 
-    rSock.Accept (newSock, reqStatus);
-    User::WaitForRequest (reqStatus);
+    rSock.Accept(newSock, reqStatus);
+    User::WaitForRequest(reqStatus);
 
     if (reqStatus != KErrNone) {
-        return PJ_RETURN_OS_ERROR (reqStatus.Int());
+	return PJ_RETURN_OS_ERROR(reqStatus.Int());
     }
 
     // Create PJ socket
-    CPjSocket *newPjSock = new CPjSocket (pjSock->GetAf(), pjSock->GetSockType(),
-                                          newSock);
-
-    newPjSock->SetConnected (true);
+    CPjSocket *newPjSock = new CPjSocket(pjSock->GetAf(), pjSock->GetSockType(),
+					 newSock);
+    newPjSock->SetConnected(true);
 
     *newsock = (pj_sock_t) newPjSock;
 
     if (addr && addrlen) {
-        return pj_sock_getpeername (*newsock, addr, addrlen);
+	return pj_sock_getpeername(*newsock, addr, addrlen);
     }
 
     return PJ_SUCCESS;
 }
-
 #endif	/* PJ_HAS_TCP */
 
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_common.c b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_common.c
new file mode 100644
index 0000000000..8a983fc6f8
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_common.c
@@ -0,0 +1,142 @@
+/* $Id: ssl_sock_common.c 2998 2009-11-09 08:51:34Z bennylp $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/ssl_sock.h>
+#include <pj/errno.h>
+#include <pj/string.h>
+
+/* Cipher name structure */
+typedef struct cipher_name_t {
+    pj_ssl_cipher    cipher;
+    const char	    *name;
+} cipher_name_t;
+
+/* Cipher name constants */
+static cipher_name_t cipher_names[] =
+{
+    {TLS_NULL_WITH_NULL_NULL,               "NULL"},
+
+    /* TLS/SSLv3 */
+    {TLS_RSA_WITH_NULL_MD5,                 "TLS_RSA_WITH_NULL_MD5"},
+    {TLS_RSA_WITH_NULL_SHA,                 "TLS_RSA_WITH_NULL_SHA"},
+    {TLS_RSA_WITH_NULL_SHA256,              "TLS_RSA_WITH_NULL_SHA256"},
+    {TLS_RSA_WITH_RC4_128_MD5,              "TLS_RSA_WITH_RC4_128_MD5"},
+    {TLS_RSA_WITH_RC4_128_SHA,              "TLS_RSA_WITH_RC4_128_SHA"},
+    {TLS_RSA_WITH_3DES_EDE_CBC_SHA,         "TLS_RSA_WITH_3DES_EDE_CBC_SHA"},
+    {TLS_RSA_WITH_AES_128_CBC_SHA,          "TLS_RSA_WITH_AES_128_CBC_SHA"},
+    {TLS_RSA_WITH_AES_256_CBC_SHA,          "TLS_RSA_WITH_AES_256_CBC_SHA"},
+    {TLS_RSA_WITH_AES_128_CBC_SHA256,       "TLS_RSA_WITH_AES_128_CBC_SHA256"},
+    {TLS_RSA_WITH_AES_256_CBC_SHA256,       "TLS_RSA_WITH_AES_256_CBC_SHA256"},
+    {TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA,      "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"},
+    {TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,      "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"},
+    {TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,     "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"},
+    {TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,     "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"},
+    {TLS_DH_DSS_WITH_AES_128_CBC_SHA,       "TLS_DH_DSS_WITH_AES_128_CBC_SHA"},
+    {TLS_DH_RSA_WITH_AES_128_CBC_SHA,       "TLS_DH_RSA_WITH_AES_128_CBC_SHA"},
+    {TLS_DHE_DSS_WITH_AES_128_CBC_SHA,      "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"},
+    {TLS_DHE_RSA_WITH_AES_128_CBC_SHA,      "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"},
+    {TLS_DH_DSS_WITH_AES_256_CBC_SHA,       "TLS_DH_DSS_WITH_AES_256_CBC_SHA"},
+    {TLS_DH_RSA_WITH_AES_256_CBC_SHA,       "TLS_DH_RSA_WITH_AES_256_CBC_SHA"},
+    {TLS_DHE_DSS_WITH_AES_256_CBC_SHA,      "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"},
+    {TLS_DHE_RSA_WITH_AES_256_CBC_SHA,      "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"},
+    {TLS_DH_DSS_WITH_AES_128_CBC_SHA256,    "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"},
+    {TLS_DH_RSA_WITH_AES_128_CBC_SHA256,    "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"},
+    {TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,   "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"},
+    {TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,   "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"},
+    {TLS_DH_DSS_WITH_AES_256_CBC_SHA256,    "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"},
+    {TLS_DH_RSA_WITH_AES_256_CBC_SHA256,    "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"},
+    {TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,   "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"},
+    {TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,   "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"},
+    {TLS_DH_anon_WITH_RC4_128_MD5,          "TLS_DH_anon_WITH_RC4_128_MD5"},
+    {TLS_DH_anon_WITH_3DES_EDE_CBC_SHA,     "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"},
+    {TLS_DH_anon_WITH_AES_128_CBC_SHA,      "TLS_DH_anon_WITH_AES_128_CBC_SHA"},
+    {TLS_DH_anon_WITH_AES_256_CBC_SHA,      "TLS_DH_anon_WITH_AES_256_CBC_SHA"},
+    {TLS_DH_anon_WITH_AES_128_CBC_SHA256,   "TLS_DH_anon_WITH_AES_128_CBC_SHA256"},
+    {TLS_DH_anon_WITH_AES_256_CBC_SHA256,   "TLS_DH_anon_WITH_AES_256_CBC_SHA256"},
+
+    /* TLS (deprecated) */
+    {TLS_RSA_EXPORT_WITH_RC4_40_MD5,        "TLS_RSA_EXPORT_WITH_RC4_40_MD5"},
+    {TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,    "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"},
+    {TLS_RSA_WITH_IDEA_CBC_SHA,             "TLS_RSA_WITH_IDEA_CBC_SHA"},
+    {TLS_RSA_EXPORT_WITH_DES40_CBC_SHA,     "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+    {TLS_RSA_WITH_DES_CBC_SHA,              "TLS_RSA_WITH_DES_CBC_SHA"},
+    {TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,  "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"},
+    {TLS_DH_DSS_WITH_DES_CBC_SHA,           "TLS_DH_DSS_WITH_DES_CBC_SHA"},
+    {TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA,  "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+    {TLS_DH_RSA_WITH_DES_CBC_SHA,           "TLS_DH_RSA_WITH_DES_CBC_SHA"},
+    {TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"},
+    {TLS_DHE_DSS_WITH_DES_CBC_SHA,          "TLS_DHE_DSS_WITH_DES_CBC_SHA"},
+    {TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+    {TLS_DHE_RSA_WITH_DES_CBC_SHA,          "TLS_DHE_RSA_WITH_DES_CBC_SHA"},
+    {TLS_DH_anon_EXPORT_WITH_RC4_40_MD5,    "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"},
+    {TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"},
+    {TLS_DH_anon_WITH_DES_CBC_SHA,          "TLS_DH_anon_WITH_DES_CBC_SHA"},
+
+    /* SSLv3 */
+    {SSL_FORTEZZA_KEA_WITH_NULL_SHA,        "SSL_FORTEZZA_KEA_WITH_NULL_SHA"},
+    {SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA,"SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"},
+    {SSL_FORTEZZA_KEA_WITH_RC4_128_SHA,     "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"},
+
+    /* SSLv2 */
+    {SSL_CK_RC4_128_WITH_MD5,               "SSL_CK_RC4_128_WITH_MD5"},
+    {SSL_CK_RC4_128_EXPORT40_WITH_MD5,      "SSL_CK_RC4_128_EXPORT40_WITH_MD5"},
+    {SSL_CK_RC2_128_CBC_WITH_MD5,           "SSL_CK_RC2_128_CBC_WITH_MD5"},
+    {SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,  "SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5"},
+    {SSL_CK_IDEA_128_CBC_WITH_MD5,          "SSL_CK_IDEA_128_CBC_WITH_MD5"},
+    {SSL_CK_DES_64_CBC_WITH_MD5,            "SSL_CK_DES_64_CBC_WITH_MD5"},
+    {SSL_CK_DES_192_EDE3_CBC_WITH_MD5,      "SSL_CK_DES_192_EDE3_CBC_WITH_MD5"}
+};
+
+
+/*
+ * Initialize the SSL socket configuration with the default values.
+ */
+PJ_DEF(void) pj_ssl_sock_param_default(pj_ssl_sock_param *param)
+{
+    pj_bzero(param, sizeof(*param));
+
+    /* Socket config */
+    param->sock_af = PJ_AF_INET;
+    param->sock_type = pj_SOCK_STREAM();
+    param->async_cnt = 1;
+    param->concurrency = -1;
+    param->whole_data = PJ_TRUE;
+    param->send_buffer_size = 8192;
+#if !defined(PJ_SYMBIAN) || PJ_SYMBIAN==0
+    param->read_buffer_size = 1500;
+#endif
+    param->qos_type = PJ_QOS_TYPE_BEST_EFFORT;
+    param->qos_ignore_error = PJ_TRUE;
+
+    /* Security config */
+    param->proto = PJ_SSL_SOCK_PROTO_DEFAULT;
+}
+
+
+PJ_DEF(const char*) pj_ssl_cipher_name(pj_ssl_cipher cipher)
+{
+    unsigned i, n;
+
+    n = PJ_ARRAY_SIZE(cipher_names);
+    for (i = 0; i < n; ++i) {
+	if (cipher == cipher_names[i].cipher)
+	    return cipher_names[i].name;
+    }
+
+    return NULL;
+}
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_ossl.c b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_ossl.c
new file mode 100644
index 0000000000..d97305a20d
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_ossl.c
@@ -0,0 +1,2137 @@
+/* $Id: ssl_sock_ossl.c 3020 2009-11-20 07:48:41Z nanang $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/ssl_sock.h>
+#include <pj/activesock.h>
+#include <pj/compat/socket.h>
+#include <pj/assert.h>
+#include <pj/errno.h>
+#include <pj/list.h>
+#include <pj/lock.h>
+#include <pj/log.h>
+#include <pj/math.h>
+#include <pj/os.h>
+#include <pj/pool.h>
+#include <pj/string.h>
+#include <pj/timer.h>
+
+
+/* Only build when PJ_HAS_SSL_SOCK is enabled */
+#if defined(PJ_HAS_SSL_SOCK) && PJ_HAS_SSL_SOCK!=0
+
+#define THIS_FILE		"ssl_sock_ossl.c"
+
+/* Workaround for ticket #985 */
+#define DELAYED_CLOSE_TIMEOUT	200
+
+/* 
+ * Include OpenSSL headers 
+ */
+#include <openssl/bio.h>
+#include <openssl/ssl.h>
+#include <openssl/err.h>
+
+
+#ifdef _MSC_VER
+# ifdef _DEBUG
+#  pragma comment( lib, "libeay32MTd")
+#  pragma comment( lib, "ssleay32MTd")
+#else
+#  pragma comment( lib, "libeay32MT")
+#  pragma comment( lib, "ssleay32MT")
+# endif
+#endif
+
+
+/*
+ * SSL/TLS state enumeration.
+ */
+enum ssl_state {
+    SSL_STATE_NULL,
+    SSL_STATE_HANDSHAKING,
+    SSL_STATE_ESTABLISHED
+};
+
+/*
+ * Internal timer types.
+ */
+enum timer_id
+{
+    TIMER_NONE,
+    TIMER_HANDSHAKE_TIMEOUT,
+    TIMER_CLOSE
+};
+
+/*
+ * Structure of SSL socket read buffer.
+ */
+typedef struct read_data_t
+{
+    void		 *data;
+    pj_size_t		  len;
+} read_data_t;
+
+/*
+ * Get the offset of pointer to read-buffer of SSL socket from read-buffer
+ * of active socket. Note that both SSL socket and active socket employ 
+ * different but correlated read-buffers (as much as async_cnt for each),
+ * and to make it easier/faster to find corresponding SSL socket's read-buffer
+ * from known active socket's read-buffer, the pointer of corresponding 
+ * SSL socket's read-buffer is stored right after the end of active socket's
+ * read-buffer.
+ */
+#define OFFSET_OF_READ_DATA_PTR(ssock, asock_rbuf) \
+					(read_data_t**) \
+					((pj_int8_t*)(asock_rbuf) + \
+					ssock->param.read_buffer_size)
+
+/*
+ * Structure of SSL socket write buffer.
+ */
+typedef struct write_data_t {
+    pj_ioqueue_op_key_t	 key;
+    pj_size_t 	 	 record_len;
+    pj_ioqueue_op_key_t	*app_key;
+    pj_size_t 	 	 plain_data_len;
+    pj_size_t 	 	 data_len;
+    union {
+	char		 content[1];
+	const char	*ptr;
+    } data;
+    unsigned		 flags;
+} write_data_t;
+
+/*
+ * Structure of SSL socket write state.
+ */
+typedef struct write_state_t {
+    char		*buf;
+    pj_size_t		 max_len;    
+    char		*start;
+    pj_size_t		 len;
+    write_data_t	*last_data;
+} write_state_t;
+
+/*
+ * Structure of write data pending.
+ */
+typedef struct write_pending_t {
+    PJ_DECL_LIST_MEMBER(struct write_pending_t);
+    write_data_t	 data;
+} write_pending_t;
+
+/*
+ * Secure socket structure definition.
+ */
+struct pj_ssl_sock_t
+{
+    pj_pool_t		 *pool;
+    pj_ssl_sock_t	 *parent;
+    pj_ssl_sock_param	  param;
+    pj_ssl_cert_t	 *cert;
+    
+    pj_ssl_cert_info	  local_cert_info;
+    pj_ssl_cert_info	  remote_cert_info;
+
+    pj_bool_t		  is_server;
+    enum ssl_state	  ssl_state;
+    pj_ioqueue_op_key_t	  handshake_op_key;
+    pj_timer_entry	  timer;
+
+    pj_sock_t		  sock;
+    pj_activesock_t	 *asock;
+
+    pj_sockaddr		  local_addr;
+    pj_sockaddr		  rem_addr;
+    int			  addr_len;
+    
+    pj_bool_t		  read_started;
+    pj_size_t		  read_size;
+    pj_uint32_t		  read_flags;
+    void		**asock_rbuf;
+    read_data_t		 *ssock_rbuf;
+
+    write_state_t	  write_state;
+    write_pending_t	  write_pending;
+    write_pending_t	  write_pending_empty;
+    pj_lock_t		 *write_mutex; /* protect write BIO and write_state */
+
+    SSL_CTX		 *ossl_ctx;
+    SSL			 *ossl_ssl;
+    BIO			 *ossl_rbio;
+    BIO			 *ossl_wbio;
+};
+
+
+/*
+ * Certificate/credential structure definition.
+ */
+struct pj_ssl_cert_t
+{
+    pj_str_t CA_file;
+    pj_str_t cert_file;
+    pj_str_t privkey_file;
+    pj_str_t privkey_pass;
+};
+
+
+static pj_status_t flush_delayed_send(pj_ssl_sock_t *ssock);
+
+/*
+ *******************************************************************
+ * Static/internal functions.
+ *******************************************************************
+ */
+
+/**
+ * Mapping from OpenSSL error codes to pjlib error space.
+ */
+
+#define PJ_SSL_ERRNO_START		(PJ_ERRNO_START_USER + \
+					 PJ_ERRNO_SPACE_SIZE*6)
+
+#define PJ_SSL_ERRNO_SPACE_SIZE		PJ_ERRNO_SPACE_SIZE
+
+#define GET_SSL_STATUS(status) { \
+    unsigned long e = ERR_get_error();\
+    status = ERR_GET_LIB(e)*300 + ERR_GET_REASON(e);\
+    pj_assert(status < PJ_SSL_ERRNO_SPACE_SIZE);\
+    if (status) status += PJ_SSL_ERRNO_START;\
+}
+
+/*
+ * Get error string of OpenSSL.
+ */
+static pj_str_t ssl_strerror(pj_status_t status, 
+			     char *buf, pj_size_t bufsize)
+{
+    pj_str_t errstr;
+    unsigned long ssl_err = status;
+
+    if (ssl_err) {
+	unsigned long l, r;
+	ssl_err -= PJ_SSL_ERRNO_START;
+	l = ssl_err/300;
+	r = ssl_err%300;
+	ssl_err = ERR_PACK(l, 0, r);
+    }
+
+#if defined(PJ_HAS_ERROR_STRING) && (PJ_HAS_ERROR_STRING != 0)
+
+    {
+	const char *tmp = NULL;
+	tmp = ERR_reason_error_string(ssl_err);
+
+	if (tmp) {
+	    pj_ansi_strncpy(buf, tmp, bufsize);
+	    errstr = pj_str(buf);
+	    return errstr;
+	}
+    }
+
+#endif	/* PJ_HAS_ERROR_STRING */
+
+    errstr.ptr = buf;
+    errstr.slen = pj_ansi_snprintf(buf, bufsize, 
+				   "Unknown OpenSSL error %lu",
+				   ssl_err);
+
+    return errstr;
+}
+
+
+/* OpenSSL library initialization counter */
+static int openssl_init_count;
+static int openssl_reg_strerr;
+
+/* OpenSSL available ciphers */
+static pj_ssl_cipher openssl_ciphers[100];
+static unsigned openssl_cipher_num;
+
+
+/* Initialize OpenSSL */
+static pj_status_t init_openssl(void)
+{
+    if (openssl_init_count)
+	return PJ_SUCCESS;
+
+    openssl_init_count = 1;
+
+    /* Register error subsystem */
+    if (!openssl_reg_strerr) {
+	pj_status_t status;
+
+	openssl_reg_strerr = 1;
+	status = pj_register_strerror(PJ_SSL_ERRNO_START, 
+				      PJ_SSL_ERRNO_SPACE_SIZE, 
+				      &ssl_strerror);
+	pj_assert(status == PJ_SUCCESS);
+    }
+
+    /* Init OpenSSL lib */
+    SSL_library_init();
+    SSL_load_error_strings();
+    OpenSSL_add_all_algorithms();
+
+    /* Init available ciphers */
+    if (openssl_cipher_num == 0) {
+	SSL_METHOD *meth = NULL;
+	SSL_CTX *ctx;
+	SSL *ssl;
+	STACK_OF(SSL_CIPHER) *sk_cipher;
+	unsigned i, n;
+
+	meth = (SSL_METHOD*)SSLv23_server_method();
+	if (!meth)
+	    meth = (SSL_METHOD*)TLSv1_server_method();
+	if (!meth)
+	    meth = (SSL_METHOD*)SSLv3_server_method();
+	if (!meth)
+	    meth = (SSL_METHOD*)SSLv2_server_method();
+	pj_assert(meth);
+
+	ctx=SSL_CTX_new(meth);
+	SSL_CTX_set_cipher_list(ctx, "ALL");
+
+	ssl = SSL_new(ctx);
+	sk_cipher = SSL_get_ciphers(ssl);
+
+	n = sk_SSL_CIPHER_num(sk_cipher);
+	if (n > PJ_ARRAY_SIZE(openssl_ciphers))
+	    n = PJ_ARRAY_SIZE(openssl_ciphers);
+
+	for (i = 0; i < n; ++i) {
+	    SSL_CIPHER *c;
+	    c = sk_SSL_CIPHER_value(sk_cipher,i);
+	    openssl_ciphers[i] = (pj_ssl_cipher)
+				 (pj_uint32_t)c->id & 0x00FFFFFF;
+	    //printf("%3u: %08x=%s\n", i+1, c->id, SSL_CIPHER_get_name(c));
+	}
+
+	SSL_free(ssl);
+	SSL_CTX_free(ctx);
+
+	openssl_cipher_num = n;
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/* Shutdown OpenSSL */
+static void shutdown_openssl(void)
+{
+    PJ_UNUSED_ARG(openssl_init_count);
+}
+
+
+/* SSL password callback. */
+static int password_cb(char *buf, int num, int rwflag, void *user_data)
+{
+    pj_ssl_cert_t *cert = (pj_ssl_cert_t*) user_data;
+
+    PJ_UNUSED_ARG(rwflag);
+
+    if(num < cert->privkey_pass.slen)
+	return 0;
+    
+    pj_memcpy(buf, cert->privkey_pass.ptr, cert->privkey_pass.slen);
+    return cert->privkey_pass.slen;
+}
+
+
+/* Create and initialize new SSL context */
+static pj_status_t create_ssl_ctx(pj_ssl_sock_t *ssock, SSL_CTX **p_ctx)
+{
+    SSL_METHOD *ssl_method;
+    SSL_CTX *ctx;
+    pj_ssl_cert_t *cert;
+    int mode, rc;
+    pj_status_t status;
+        
+    pj_assert(ssock && p_ctx);
+
+    cert = ssock->cert;
+
+    /* Make sure OpenSSL library has been initialized */
+    init_openssl();
+
+    /* Determine SSL method to use */
+    switch (ssock->param.proto) {
+    case PJ_SSL_SOCK_PROTO_DEFAULT:
+    case PJ_SSL_SOCK_PROTO_TLS1:
+	ssl_method = (SSL_METHOD*)TLSv1_method();
+	break;
+    case PJ_SSL_SOCK_PROTO_SSL2:
+	ssl_method = (SSL_METHOD*)SSLv2_method();
+	break;
+    case PJ_SSL_SOCK_PROTO_SSL3:
+	ssl_method = (SSL_METHOD*)SSLv3_method();
+	break;
+    case PJ_SSL_SOCK_PROTO_SSL23:
+	ssl_method = (SSL_METHOD*)SSLv23_method();
+	break;
+    //case PJ_SSL_SOCK_PROTO_DTLS1:
+	//ssl_method = (SSL_METHOD*)DTLSv1_method();
+	//break;
+    default:
+	return PJ_EINVAL;
+    }
+
+    /* Create SSL context for the listener */
+    ctx = SSL_CTX_new(ssl_method);
+    if (ctx == NULL) {
+	GET_SSL_STATUS(status);
+	return status;
+    }
+
+    /* Apply credentials */
+    if (cert) {
+	/* Load CA list if one is specified. */
+	if (cert->CA_file.slen) {
+
+	    rc = SSL_CTX_load_verify_locations(ctx, cert->CA_file.ptr, NULL);
+
+	    if (rc != 1) {
+		GET_SSL_STATUS(status);
+		PJ_LOG(1,(ssock->pool->obj_name, "Error loading CA list file "
+			  "'%s'", cert->CA_file.ptr));
+		SSL_CTX_free(ctx);
+		return status;
+	    }
+	}
+    
+	/* Set password callback */
+	if (cert->privkey_pass.slen) {
+	    SSL_CTX_set_default_passwd_cb(ctx, password_cb);
+	    SSL_CTX_set_default_passwd_cb_userdata(ctx, cert);
+	}
+
+
+	/* Load certificate if one is specified */
+	if (cert->cert_file.slen) {
+
+	    /* Load certificate chain from file into ctx */
+	    rc = SSL_CTX_use_certificate_chain_file(ctx, cert->cert_file.ptr);
+
+	    if(rc != 1) {
+		GET_SSL_STATUS(status);
+		PJ_LOG(1,(ssock->pool->obj_name, "Error loading certificate "
+			  "chain file '%s'", cert->cert_file.ptr));
+		SSL_CTX_free(ctx);
+		return status;
+	    }
+	}
+
+
+	/* Load private key if one is specified */
+	if (cert->privkey_file.slen) {
+	    /* Adds the first private key found in file to ctx */
+	    rc = SSL_CTX_use_PrivateKey_file(ctx, cert->privkey_file.ptr, 
+					     SSL_FILETYPE_PEM);
+
+	    if(rc != 1) {
+		GET_SSL_STATUS(status);
+		PJ_LOG(1,(ssock->pool->obj_name, "Error adding private key "
+			  "from '%s'", cert->privkey_file.ptr));
+		SSL_CTX_free(ctx);
+		return status;
+	    }
+	}
+    }
+
+
+    /* SSL verification options */
+    if (ssock->param.verify_peer) {
+	mode = SSL_VERIFY_PEER;
+    } else {
+	mode = SSL_VERIFY_NONE;
+    }
+
+    if (ssock->is_server && ssock->param.require_client_cert)
+	mode |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT | SSL_VERIFY_PEER;
+
+    SSL_CTX_set_verify(ctx, mode, NULL);
+
+    *p_ctx = ctx;
+
+    return PJ_SUCCESS;
+}
+
+
+/* Destroy SSL context */
+static void destroy_ssl_ctx(SSL_CTX *ctx)
+{
+    SSL_CTX_free(ctx);
+
+    /* Potentially shutdown OpenSSL library if this is the last
+     * context exists.
+     */
+    shutdown_openssl();
+}
+
+
+/* Reset SSL socket state */
+static void reset_ssl_sock_state(pj_ssl_sock_t *ssock)
+{
+    ssock->ssl_state = SSL_STATE_NULL;
+
+    if (ssock->ossl_ssl) {
+	SSL_shutdown(ssock->ossl_ssl);
+	SSL_free(ssock->ossl_ssl); /* this will also close BIOs */
+	ssock->ossl_ssl = NULL;
+    }
+    if (ssock->ossl_ctx) {
+	destroy_ssl_ctx(ssock->ossl_ctx);
+	ssock->ossl_ctx = NULL;
+    }
+    if (ssock->asock) {
+	pj_activesock_close(ssock->asock);
+	ssock->asock = NULL;
+	ssock->sock = PJ_INVALID_SOCKET;
+    }
+    if (ssock->sock != PJ_INVALID_SOCKET) {
+	pj_sock_close(ssock->sock);
+	ssock->sock = PJ_INVALID_SOCKET;
+    }
+
+    /* Upon error, OpenSSL may leave any error description in the thread 
+     * error queue, which sometime may cause next call to SSL API returning
+     * false error alarm, e.g: in Linux, SSL_CTX_use_certificate_chain_file()
+     * returning false error after a handshake error (in different SSL_CTX!).
+     * For now, just clear thread error queue here.
+     */
+    ERR_clear_error();
+}
+
+
+/* Generate cipher list with user preference order in OpenSSL format */
+static pj_status_t set_cipher_list(pj_ssl_sock_t *ssock)
+{
+    char buf[1024];
+    pj_str_t cipher_list;
+    STACK_OF(SSL_CIPHER) *sk_cipher;
+    unsigned i;
+    int j, ret;
+
+    if (ssock->param.ciphers_num == 0)
+	return PJ_SUCCESS;
+
+    pj_strset(&cipher_list, buf, 0);
+
+    /* Set SSL with ALL available ciphers */
+    SSL_set_cipher_list(ssock->ossl_ssl, "ALL");
+
+    /* Generate user specified cipher list in OpenSSL format */
+    sk_cipher = SSL_get_ciphers(ssock->ossl_ssl);
+    for (i = 0; i < ssock->param.ciphers_num; ++i) {
+	for (j = 0; j < sk_SSL_CIPHER_num(sk_cipher); ++j) {
+	    SSL_CIPHER *c;
+	    c = sk_SSL_CIPHER_value(sk_cipher, j);
+	    if (ssock->param.ciphers[i] == (pj_ssl_cipher)
+					   ((pj_uint32_t)c->id & 0x00FFFFFF))
+	    {
+		const char *c_name;
+
+		c_name = SSL_CIPHER_get_name(c);
+
+		/* Check buffer size */
+		if (cipher_list.slen + pj_ansi_strlen(c_name) + 2 > sizeof(buf)) {
+		    pj_assert(!"Insufficient temporary buffer for cipher");
+		    return PJ_ETOOMANY;
+		}
+
+		/* Add colon separator */
+		if (cipher_list.slen)
+		    pj_strcat2(&cipher_list, ":");
+
+		/* Add the cipher */
+		pj_strcat2(&cipher_list, c_name);
+		break;
+	    }
+	}
+    }
+
+    /* Put NULL termination in the generated cipher list */
+    cipher_list.ptr[cipher_list.slen] = '\0';
+
+    /* Finally, set chosen cipher list */
+    ret = SSL_set_cipher_list(ssock->ossl_ssl, buf);
+    if (ret < 1) {
+	pj_status_t status;
+	GET_SSL_STATUS(status);
+	return status;
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/* Parse OpenSSL ASN1_TIME to pj_time_val and GMT info */
+static pj_bool_t parse_ossl_asn1_time(pj_time_val *tv, pj_bool_t *gmt,
+				      const ASN1_TIME *tm)
+{
+    unsigned long parts[7] = {0};
+    char *p, *end;
+    unsigned len;
+    pj_bool_t utc;
+    pj_parsed_time pt;
+    int i;
+
+    utc = tm->type == V_ASN1_UTCTIME;
+    p = (char*)tm->data;
+    len = tm->length;
+    end = p + len - 1;
+
+    /* GMT */
+    *gmt = (*end == 'Z');
+
+    /* parse parts */
+    for (i = 0; i < 7 && p < end; ++i) {
+	pj_str_t st;
+
+	if (i==0 && !utc) {
+	    /* 4 digits year part for non-UTC time format */
+	    st.slen = 4;
+	} else if (i==6) {
+	    /* fraction of seconds */
+	    if (*p == '.') ++p;
+	    st.slen = end - p + 1;
+	} else {
+	    /* other parts always 2 digits length */
+	    st.slen = 2;
+	}
+	st.ptr = p;
+
+	parts[i] = pj_strtoul(&st);
+	p += st.slen;
+    }
+
+    /* encode parts to pj_time_val */
+    pt.year = parts[0];
+    if (utc)
+	pt.year += (pt.year < 50)? 2000:1900;
+    pt.mon = parts[1] - 1;
+    pt.day = parts[2];
+    pt.hour = parts[3];
+    pt.min = parts[4];
+    pt.sec = parts[5];
+    pt.msec = parts[6];
+
+    pj_time_encode(&pt, tv);
+
+    return PJ_TRUE;
+}
+
+
+/* Get certificate info from OpenSSL X509 */
+static void get_cert_info(pj_pool_t *pool, pj_ssl_cert_info *ci, X509 *x)
+{
+    pj_ssl_cert_info info;
+    char buf1[256];
+    char buf2[256];
+
+    pj_assert(pool && ci);
+
+    if (!x) {
+	pj_bzero(ci, sizeof(pj_ssl_cert_info));
+	return;
+    }
+
+    pj_bzero(&info, sizeof(info));
+
+    /* Populate cert info */
+    info.subject = pj_str(X509_NAME_oneline(X509_get_subject_name(x),buf1,
+					    sizeof(buf1)));
+    info.issuer = pj_str(X509_NAME_oneline(X509_get_issuer_name(x), buf2,
+					   sizeof(buf2)));
+    info.version = X509_get_version(x) + 1;
+    parse_ossl_asn1_time(&info.validity_start, &info.validity_use_gmt,
+			 X509_get_notBefore(x));
+    parse_ossl_asn1_time(&info.validity_end, &info.validity_use_gmt,
+			 X509_get_notAfter(x));
+
+    /* Update certificate info */
+    if (pj_strcmp(&ci->subject, &info.subject))
+	pj_strdup(pool, &ci->subject, &info.subject);
+    if (pj_strcmp(&ci->issuer, &info.issuer))
+	pj_strdup(pool, &ci->issuer, &info.issuer);
+    ci->version = info.version;
+    ci->validity_start = info.validity_start;
+    ci->validity_end = info.validity_end;
+    ci->validity_use_gmt = info.validity_use_gmt;
+}
+
+
+/* Update local & remote certificates info. This function should be
+ * called after handshake or renegotiation successfully completed.
+ */
+static void update_certs_info(pj_ssl_sock_t *ssock)
+{
+    X509 *x;
+
+    pj_assert(ssock->ssl_state == SSL_STATE_ESTABLISHED);
+
+    /* Active local certificate */
+    x = SSL_get_certificate(ssock->ossl_ssl);
+    get_cert_info(ssock->pool, &ssock->local_cert_info, x);
+    /* Don't free local's X509! */
+
+    /* Active remote certificate */
+    x = SSL_get_peer_certificate(ssock->ossl_ssl);
+    get_cert_info(ssock->pool, &ssock->remote_cert_info, x);
+    /* Free peer's X509 */
+    X509_free(x);
+}
+
+
+/* When handshake completed:
+ * - notify application
+ * - if handshake failed, reset SSL state
+ * - return PJ_FALSE when SSL socket instance is destroyed by application.
+ */
+static pj_bool_t on_handshake_complete(pj_ssl_sock_t *ssock, 
+				       pj_status_t status)
+{
+    /* Cancel handshake timer */
+    if (ssock->timer.id == TIMER_HANDSHAKE_TIMEOUT) {
+	pj_timer_heap_cancel(ssock->param.timer_heap, &ssock->timer);
+	ssock->timer.id = TIMER_NONE;
+    }
+
+    /* Update certificates info on successful handshake */
+    if (status == PJ_SUCCESS)
+	update_certs_info(ssock);
+
+    /* Accepting */
+    if (ssock->is_server) {
+	if (status != PJ_SUCCESS) {
+	    /* Handshake failed in accepting, destroy our self silently. */
+
+	    char errmsg[PJ_ERR_MSG_SIZE];
+	    char buf[PJ_INET6_ADDRSTRLEN+10];
+
+	    pj_strerror(status, errmsg, sizeof(errmsg));
+	    PJ_LOG(3,(ssock->pool->obj_name, "Handshake failed in accepting "
+		      "%s: %s",
+		      pj_sockaddr_print(&ssock->rem_addr, buf, sizeof(buf), 3),
+		      errmsg));
+
+	    /* Workaround for ticket #985 */
+#if defined(PJ_WIN32) && PJ_WIN32!=0
+	    if (ssock->param.timer_heap) {
+		pj_time_val interval = {0, DELAYED_CLOSE_TIMEOUT};
+
+		reset_ssl_sock_state(ssock);
+
+		ssock->timer.id = TIMER_CLOSE;
+		pj_time_val_normalize(&interval);
+		if (pj_timer_heap_schedule(ssock->param.timer_heap, 
+					   &ssock->timer, &interval) != 0)
+		{
+		    ssock->timer.id = TIMER_NONE;
+		    pj_ssl_sock_close(ssock);
+		}
+	    } else 
+#endif	/* PJ_WIN32 */
+	    {
+		pj_ssl_sock_close(ssock);
+	    }
+	    return PJ_FALSE;
+	}
+	/* Notify application the newly accepted SSL socket */
+	if (ssock->param.cb.on_accept_complete) {
+	    pj_bool_t ret;
+	    ret = (*ssock->param.cb.on_accept_complete)
+		      (ssock->parent, ssock, (pj_sockaddr_t*)&ssock->rem_addr,
+		       pj_sockaddr_get_len((pj_sockaddr_t*)&ssock->rem_addr));
+	    if (ret == PJ_FALSE)
+		return PJ_FALSE;
+	}
+    }
+
+    /* Connecting */
+    else {
+	/* On failure, reset SSL socket state first, as app may try to 
+	 * reconnect in the callback.
+	 */
+	if (status != PJ_SUCCESS) {
+	    reset_ssl_sock_state(ssock);
+	}
+	if (ssock->param.cb.on_connect_complete) {
+	    pj_bool_t ret;
+	    ret = (*ssock->param.cb.on_connect_complete)(ssock, status);
+	    if (ret == PJ_FALSE)
+		return PJ_FALSE;
+	}
+    }
+
+    return PJ_TRUE;
+}
+
+/* Flush write BIO to network socket. Note that any access to write BIO
+ * MUST be serialized, so mutex protection must cover any call to OpenSSL
+ * API (that possibly generate data for write BIO) along with the call to
+ * this function (flushing all data in write BIO generated by above 
+ * OpenSSL API call).
+ */
+static pj_status_t flush_write_bio(pj_ssl_sock_t *ssock, 
+				   pj_ioqueue_op_key_t *send_key,
+				   pj_size_t orig_len,
+				   unsigned flags)
+{
+    char *data;
+    pj_ssize_t len;
+
+    write_state_t *write_st = &ssock->write_state;
+    write_data_t *wdata;
+    pj_size_t avail_len, needed_len, skipped_len = 0;
+    pj_status_t status;
+
+    /* Check if there is data in write BIO, flush it if any */
+    if (!BIO_pending(ssock->ossl_wbio))
+	return PJ_SUCCESS;
+
+    /* Get data and its length */
+    len = BIO_get_mem_data(ssock->ossl_wbio, &data);
+    if (len == 0)
+	return PJ_SUCCESS;
+
+    /* Calculate buffer size needed, and align it to 8 */
+    needed_len = len + sizeof(write_data_t);
+    needed_len = ((needed_len + 7) >> 3) << 3;
+
+    /* Check buffer availability */
+    avail_len = write_st->max_len - write_st->len;
+    if (avail_len < needed_len)
+	return PJ_ENOMEM;
+
+    /* More buffer availability check, note that the write data must be in
+     * a contigue buffer.
+     */
+    if (write_st->len == 0) {
+
+	write_st->start = write_st->buf;
+	wdata = (write_data_t*)write_st->start;
+
+    } else {
+
+	char *reg1, *reg2;
+	pj_size_t reg1_len, reg2_len;
+
+	/* Unused slots may be wrapped/splitted into two regions, so let's
+	 * analyze them if any region can hold the write data.
+	 */
+	reg1 = write_st->start + write_st->len;
+	if (reg1 >= write_st->buf + write_st->max_len)
+	    reg1 -= write_st->max_len;
+	reg1_len = write_st->max_len - write_st->len;
+	if (reg1 + reg1_len > write_st->buf + write_st->max_len) {
+	    reg1_len = write_st->buf + write_st->max_len - reg1;
+	    reg2 = write_st->buf;
+	    reg2_len = write_st->start - write_st->buf;
+	} else {
+	    reg2 = NULL;
+	    reg2_len = 0;
+	}
+	avail_len = PJ_MAX(reg1_len, reg2_len);
+	if (avail_len < needed_len)
+	    return PJ_ENOMEM;
+
+	/* Get write data pointer and update buffer length */
+	if (reg1_len >= needed_len) {
+	    wdata = (write_data_t*)reg1;
+	} else {
+	    wdata = (write_data_t*)reg2;
+	    /* Unused slot in region 1 is skipped as current write data
+	     * doesn't fit it.
+	     */
+	    skipped_len = reg1_len;
+	}
+    }
+
+    /* Copy the data and set its properties into the buffer */
+    pj_bzero(wdata, sizeof(write_data_t));
+    wdata->app_key = send_key;
+    wdata->record_len = needed_len;
+    wdata->data_len = len;
+    wdata->plain_data_len = orig_len;
+    wdata->flags = flags;
+    pj_memcpy(&wdata->data, data, len);
+
+    /* Send it */
+    if (ssock->param.sock_type == pj_SOCK_STREAM()) {
+	status = pj_activesock_send(ssock->asock, &wdata->key, 
+				    wdata->data.content, &len,
+				    flags);
+    } else {
+	status = pj_activesock_sendto(ssock->asock, &wdata->key, 
+				      wdata->data.content, &len,
+				      flags,
+				      (pj_sockaddr_t*)&ssock->rem_addr,
+				      ssock->addr_len);
+    }
+
+    /* Oh no, EWOULDBLOCK! */
+    if (status == PJ_STATUS_FROM_OS(OSERR_EWOULDBLOCK)) {
+	/* Just return PJ_SUCCESS here, the pending data will be sent in next
+	 * call of this function since the data is still stored in write BIO.
+	 */
+	return PJ_SUCCESS;
+    }
+
+    /* Reset write BIO after flushed */
+    BIO_reset(ssock->ossl_wbio);
+
+    if (status == PJ_EPENDING) {
+	/* Update write state */
+	pj_assert(skipped_len==0 || write_st->last_data);
+	write_st->len += needed_len + skipped_len;
+	if (write_st->last_data)
+	    write_st->last_data->record_len += skipped_len;
+	write_st->last_data = wdata;
+    }
+
+    return status;
+}
+
+
+static void on_timer(pj_timer_heap_t *th, struct pj_timer_entry *te)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)te->user_data;
+    int timer_id = te->id;
+
+    te->id = TIMER_NONE;
+
+    PJ_UNUSED_ARG(th);
+
+    switch (timer_id) {
+    case TIMER_HANDSHAKE_TIMEOUT:
+	PJ_LOG(1,(ssock->pool->obj_name, "SSL handshake timeout after %d.%ds",
+		  ssock->param.timeout.sec, ssock->param.timeout.msec));
+
+	on_handshake_complete(ssock, PJ_ETIMEDOUT);
+	break;
+    case TIMER_CLOSE:
+	pj_ssl_sock_close(ssock);
+	break;
+    default:
+	pj_assert(!"Unknown timer");
+	break;
+    }
+}
+
+
+/* Asynchronouse handshake */
+static pj_status_t do_handshake(pj_ssl_sock_t *ssock)
+{
+    pj_status_t status;
+    int err;
+
+    pj_lock_acquire(ssock->write_mutex);
+
+    /* Perform SSL handshake */
+    err = SSL_do_handshake(ssock->ossl_ssl);
+    if (err < 0) {
+	err = SSL_get_error(ssock->ossl_ssl, err);
+	if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ) 
+	{
+	    /* Handshake fails */
+	    GET_SSL_STATUS(status);
+	    pj_lock_release(ssock->write_mutex);
+	    return status;
+	}
+    }
+
+    /* SSL_do_handshake() may put some pending data into SSL write BIO, 
+     * flush it if any.
+     */
+    status = flush_write_bio(ssock, &ssock->handshake_op_key, 0, 0);
+    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	pj_lock_release(ssock->write_mutex);
+	return status;
+    }
+
+    pj_lock_release(ssock->write_mutex);
+
+    /* Check if handshake has been completed */
+    if (SSL_is_init_finished(ssock->ossl_ssl)) {
+	ssock->ssl_state = SSL_STATE_ESTABLISHED;
+	return PJ_SUCCESS;
+    }
+
+    return PJ_EPENDING;
+}
+
+
+/*
+ *******************************************************************
+ * Active socket callbacks.
+ *******************************************************************
+ */
+
+static pj_bool_t asock_on_data_read (pj_activesock_t *asock,
+				     void *data,
+				     pj_size_t size,
+				     pj_status_t status,
+				     pj_size_t *remainder)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)
+			   pj_activesock_get_user_data(asock);
+    pj_size_t nwritten;
+
+    /* Socket error or closed */
+    if (data && size > 0) {
+	/* Consume the whole data */
+	nwritten = BIO_write(ssock->ossl_rbio, data, size);
+	if (nwritten < size) {
+	    GET_SSL_STATUS(status);
+	    goto on_error;
+	}
+    }
+
+    /* Check if SSL handshake hasn't finished yet */
+    if (ssock->ssl_state == SSL_STATE_HANDSHAKING) {
+	pj_bool_t ret = PJ_TRUE;
+
+	if (status == PJ_SUCCESS)
+	    status = do_handshake(ssock);
+
+	/* Not pending is either success or failed */
+	if (status != PJ_EPENDING)
+	    ret = on_handshake_complete(ssock, status);
+
+	return ret;
+    }
+
+    /* See if there is any decrypted data for the application */
+    if (ssock->read_started) {
+	do {
+	    read_data_t *buf = *(OFFSET_OF_READ_DATA_PTR(ssock, data));
+	    void *data_ = (pj_int8_t*)buf->data + buf->len;
+	    int size_ = ssock->read_size - buf->len;
+
+	    /* SSL_read() may write some data to BIO write when re-negotiation
+	     * is on progress, so let's protect it with write mutex.
+	     */
+	    pj_lock_acquire(ssock->write_mutex);
+	    size_ = SSL_read(ssock->ossl_ssl, data_, size_);
+	    pj_lock_release(ssock->write_mutex);
+
+	    if (size_ > 0 || status != PJ_SUCCESS) {
+		if (ssock->param.cb.on_data_read) {
+		    pj_bool_t ret;
+		    pj_size_t remainder_ = 0;
+
+		    if (size_ > 0)
+			buf->len += size_;
+    		
+		    ret = (*ssock->param.cb.on_data_read)(ssock, buf->data,
+							  buf->len, status,
+							  &remainder_);
+		    if (!ret) {
+			/* We've been destroyed */
+			return PJ_FALSE;
+		    }
+
+		    /* Application may have left some data to be consumed 
+		     * later.
+		     */
+		    buf->len = remainder_;
+		}
+
+		/* Active socket signalled connection closed/error, this has
+		 * been signalled to the application along with any remaining
+		 * buffer. So, let's just reset SSL socket now.
+		 */
+		if (status != PJ_SUCCESS) {
+		    reset_ssl_sock_state(ssock);
+		    return PJ_FALSE;
+		}
+
+	    } else {
+
+		int err = SSL_get_error(ssock->ossl_ssl, size);
+		
+		/* SSL might just return SSL_ERROR_WANT_READ in 
+		 * re-negotiation.
+		 */
+		if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ)
+		{
+		    /* Reset SSL socket state, then return PJ_FALSE */
+		    GET_SSL_STATUS(status);
+		    reset_ssl_sock_state(ssock);
+		    goto on_error;
+		}
+
+		status = do_handshake(ssock);
+		if (status == PJ_SUCCESS) {
+		    /* Renegotiation completed */
+
+		    /* Update certificates */
+		    update_certs_info(ssock);
+
+		    pj_lock_acquire(ssock->write_mutex);
+		    status = flush_delayed_send(ssock);
+		    pj_lock_release(ssock->write_mutex);
+
+		    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+			PJ_PERROR(1,(ssock->pool->obj_name, status, 
+				     "Failed to flush delayed send"));
+			goto on_error;
+		    }
+		} else if (status != PJ_EPENDING) {
+		    PJ_PERROR(1,(ssock->pool->obj_name, status, 
+			         "Renegotiation failed"));
+		    goto on_error;
+		}
+
+		break;
+	    }
+	} while (1);
+    }
+
+    return PJ_TRUE;
+
+on_error:
+    if (ssock->ssl_state == SSL_STATE_HANDSHAKING)
+	return on_handshake_complete(ssock, status);
+
+    if (ssock->read_started && ssock->param.cb.on_data_read) {
+	pj_bool_t ret;
+	ret = (*ssock->param.cb.on_data_read)(ssock, NULL, 0, status,
+					      remainder);
+	if (!ret) {
+	    /* We've been destroyed */
+	    return PJ_FALSE;
+	}
+    }
+
+    reset_ssl_sock_state(ssock);
+    return PJ_FALSE;
+}
+
+
+static pj_bool_t asock_on_data_sent (pj_activesock_t *asock,
+				     pj_ioqueue_op_key_t *send_key,
+				     pj_ssize_t sent)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)
+			   pj_activesock_get_user_data(asock);
+
+    PJ_UNUSED_ARG(send_key);
+    PJ_UNUSED_ARG(sent);
+
+    if (ssock->ssl_state == SSL_STATE_HANDSHAKING) {
+	/* Initial handshaking */
+	pj_status_t status;
+	
+	status = do_handshake(ssock);
+	/* Not pending is either success or failed */
+	if (status != PJ_EPENDING)
+	    return on_handshake_complete(ssock, status);
+
+    } else if (send_key != &ssock->handshake_op_key) {
+	/* Some data has been sent, notify application */
+	write_data_t *wdata = (write_data_t*)send_key;
+	if (ssock->param.cb.on_data_sent) {
+	    pj_bool_t ret;
+	    ret = (*ssock->param.cb.on_data_sent)(ssock, wdata->app_key, 
+						  wdata->plain_data_len);
+	    if (!ret) {
+		/* We've been destroyed */
+		return PJ_FALSE;
+	    }
+	}
+
+	/* Update write buffer state */
+	pj_lock_acquire(ssock->write_mutex);
+	ssock->write_state.start += wdata->record_len;
+	ssock->write_state.len -= wdata->record_len;
+	if (ssock->write_state.last_data == wdata) {
+	    pj_assert(ssock->write_state.len == 0);
+	    ssock->write_state.last_data = NULL;
+	}
+	pj_lock_release(ssock->write_mutex);
+
+    } else {
+	/* SSL re-negotiation is on-progress, just do nothing */
+    }
+
+    return PJ_TRUE;
+}
+
+
+static pj_bool_t asock_on_accept_complete (pj_activesock_t *asock,
+					   pj_sock_t newsock,
+					   const pj_sockaddr_t *src_addr,
+					   int src_addr_len)
+{
+    pj_ssl_sock_t *ssock_parent = (pj_ssl_sock_t*)
+				  pj_activesock_get_user_data(asock);
+    pj_ssl_sock_t *ssock;
+    pj_activesock_cb asock_cb;
+    pj_activesock_cfg asock_cfg;
+    unsigned i;
+    pj_status_t status;
+
+    PJ_UNUSED_ARG(src_addr_len);
+
+    /* Create new SSL socket instance */
+    status = pj_ssl_sock_create(ssock_parent->pool, &ssock_parent->param,
+				&ssock);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Update new SSL socket attributes */
+    ssock->sock = newsock;
+    ssock->parent = ssock_parent;
+    ssock->is_server = PJ_TRUE;
+    if (ssock_parent->cert) {
+	status = pj_ssl_sock_set_certificate(ssock, ssock->pool, 
+					     ssock_parent->cert);
+	if (status != PJ_SUCCESS)
+	    goto on_return;
+    }
+
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(ssock->sock, ssock->param.qos_type,
+				&ssock->param.qos_params, 1, 
+				ssock->pool->obj_name, NULL);
+    if (status != PJ_SUCCESS && !ssock->param.qos_ignore_error)
+	goto on_return;
+
+    /* Update local address */
+    ssock->addr_len = src_addr_len;
+    status = pj_sock_getsockname(ssock->sock, &ssock->local_addr, 
+				 &ssock->addr_len);
+    if (status != PJ_SUCCESS) {
+	/* This fails on few envs, e.g: win IOCP, just tolerate this and
+	 * use parent local address instead.
+	 */
+	pj_sockaddr_cp(&ssock->local_addr, &ssock_parent->local_addr);
+    }
+
+    /* Set remote address */
+    pj_sockaddr_cp(&ssock->rem_addr, src_addr);
+
+    /* Create SSL context */
+    status = create_ssl_ctx(ssock, &ssock->ossl_ctx);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Create SSL instance */
+    ssock->ossl_ssl = SSL_new(ssock->ossl_ctx);
+    if (ssock->ossl_ssl == NULL) {
+	GET_SSL_STATUS(status);
+	goto on_return;
+    }
+
+    /* Set cipher list */
+    status = set_cipher_list(ssock);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Setup SSL BIOs */
+    ssock->ossl_rbio = BIO_new(BIO_s_mem());
+    ssock->ossl_wbio = BIO_new(BIO_s_mem());
+    BIO_set_close(ssock->ossl_rbio, BIO_CLOSE);
+    BIO_set_close(ssock->ossl_wbio, BIO_CLOSE);
+    SSL_set_bio(ssock->ossl_ssl, ssock->ossl_rbio, ssock->ossl_wbio);
+
+    /* Prepare read buffer */
+    ssock->asock_rbuf = (void**)pj_pool_calloc(ssock->pool, 
+					       ssock->param.async_cnt,
+					       sizeof(void*));
+    for (i = 0; i<ssock->param.async_cnt; ++i) {
+	ssock->asock_rbuf[i] = (void*) pj_pool_alloc(
+					    ssock->pool, 
+					    ssock->param.read_buffer_size + 
+					    sizeof(read_data_t*));
+    }
+
+    /* Create active socket */
+    pj_activesock_cfg_default(&asock_cfg);
+    asock_cfg.async_cnt = ssock->param.async_cnt;
+    asock_cfg.concurrency = ssock->param.concurrency;
+    asock_cfg.whole_data = PJ_TRUE;
+
+    pj_bzero(&asock_cb, sizeof(asock_cb));
+    asock_cb.on_data_read = asock_on_data_read;
+    asock_cb.on_data_sent = asock_on_data_sent;
+
+    status = pj_activesock_create(ssock->pool,
+				  ssock->sock, 
+				  ssock->param.sock_type,
+				  &asock_cfg,
+				  ssock->param.ioqueue, 
+				  &asock_cb,
+				  ssock,
+				  &ssock->asock);
+
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Start read */
+    status = pj_activesock_start_read2(ssock->asock, ssock->pool, 
+				       ssock->param.read_buffer_size,
+				       ssock->asock_rbuf,
+				       PJ_IOQUEUE_ALWAYS_ASYNC);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Prepare write/send state */
+    pj_assert(ssock->write_state.max_len == 0);
+    ssock->write_state.buf = (char*)
+			     pj_pool_alloc(ssock->pool, 
+					   ssock->param.send_buffer_size);
+    ssock->write_state.max_len = ssock->param.send_buffer_size;
+    ssock->write_state.start = ssock->write_state.buf;
+    ssock->write_state.len = 0;
+
+    /* Start handshake timer */
+    if (ssock->param.timer_heap && (ssock->param.timeout.sec != 0 ||
+	ssock->param.timeout.msec != 0))
+    {
+	pj_assert(ssock->timer.id == TIMER_NONE);
+	ssock->timer.id = TIMER_HANDSHAKE_TIMEOUT;
+	status = pj_timer_heap_schedule(ssock->param.timer_heap, 
+				        &ssock->timer,
+					&ssock->param.timeout);
+	if (status != PJ_SUCCESS)
+	    ssock->timer.id = TIMER_NONE;
+    }
+
+    /* Start SSL handshake */
+    ssock->ssl_state = SSL_STATE_HANDSHAKING;
+    SSL_set_accept_state(ssock->ossl_ssl);
+    status = do_handshake(ssock);
+
+on_return:
+    if (ssock && status != PJ_EPENDING)
+	on_handshake_complete(ssock, status);
+
+    /* Must return PJ_TRUE whatever happened, as active socket must 
+     * continue listening.
+     */
+    return PJ_TRUE;
+}
+
+
+static pj_bool_t asock_on_connect_complete (pj_activesock_t *asock,
+					    pj_status_t status)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)
+			   pj_activesock_get_user_data(asock);
+    unsigned i;
+
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Update local address */
+    ssock->addr_len = sizeof(pj_sockaddr);
+    status = pj_sock_getsockname(ssock->sock, &ssock->local_addr, 
+				 &ssock->addr_len);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Create SSL context */
+    status = create_ssl_ctx(ssock, &ssock->ossl_ctx);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Create SSL instance */
+    ssock->ossl_ssl = SSL_new(ssock->ossl_ctx);
+    if (ssock->ossl_ssl == NULL) {
+	GET_SSL_STATUS(status);
+	goto on_return;
+    }
+
+    /* Set cipher list */
+    status = set_cipher_list(ssock);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Setup SSL BIOs */
+    ssock->ossl_rbio = BIO_new(BIO_s_mem());
+    ssock->ossl_wbio = BIO_new(BIO_s_mem());
+    BIO_set_close(ssock->ossl_rbio, BIO_CLOSE);
+    BIO_set_close(ssock->ossl_wbio, BIO_CLOSE);
+    SSL_set_bio(ssock->ossl_ssl, ssock->ossl_rbio, ssock->ossl_wbio);
+
+    /* Prepare read buffer */
+    ssock->asock_rbuf = (void**)pj_pool_calloc(ssock->pool, 
+					       ssock->param.async_cnt,
+					       sizeof(void*));
+    for (i = 0; i<ssock->param.async_cnt; ++i) {
+	ssock->asock_rbuf[i] = (void*) pj_pool_alloc(
+					    ssock->pool, 
+					    ssock->param.read_buffer_size + 
+					    sizeof(read_data_t*));
+    }
+
+    /* Start read */
+    status = pj_activesock_start_read2(ssock->asock, ssock->pool, 
+				       ssock->param.read_buffer_size,
+				       ssock->asock_rbuf,
+				       PJ_IOQUEUE_ALWAYS_ASYNC);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Prepare write/send state */
+    pj_assert(ssock->write_state.max_len == 0);
+    ssock->write_state.buf = (char*)
+			     pj_pool_alloc(ssock->pool, 
+					   ssock->param.send_buffer_size);
+    ssock->write_state.max_len = ssock->param.send_buffer_size;
+    ssock->write_state.start = ssock->write_state.buf;
+    ssock->write_state.len = 0;
+
+    /* Start handshake timer */
+    if (ssock->param.timer_heap && (ssock->param.timeout.sec != 0 ||
+	ssock->param.timeout.msec != 0))
+    {
+	pj_assert(ssock->timer.id == TIMER_NONE);
+	ssock->timer.id = TIMER_HANDSHAKE_TIMEOUT;
+	status = pj_timer_heap_schedule(ssock->param.timer_heap,
+					&ssock->timer,
+				        &ssock->param.timeout);
+	if (status != PJ_SUCCESS)
+	    ssock->timer.id = TIMER_NONE;
+    }
+
+#ifdef SSL_set_tlsext_host_name
+    /* Set server name to connect */
+    if (ssock->param.server_name.slen) {
+	/* Server name is null terminated already */
+	if (!SSL_set_tlsext_host_name(ssock->ossl_ssl, 
+				      ssock->param.server_name.ptr))
+	{
+	    char err_str[PJ_ERR_MSG_SIZE];
+
+	    ERR_error_string_n(ERR_get_error(), err_str, sizeof(err_str));
+	    PJ_LOG(3,(ssock->pool->obj_name, "SSL_set_tlsext_host_name() "
+		"failed: %s", err_str));
+	}
+    }
+#endif
+
+    /* Start SSL handshake */
+    ssock->ssl_state = SSL_STATE_HANDSHAKING;
+    SSL_set_connect_state(ssock->ossl_ssl);
+
+    status = do_handshake(ssock);
+    if (status != PJ_EPENDING)
+	goto on_return;
+
+    return PJ_TRUE;
+
+on_return:
+    return on_handshake_complete(ssock, status);
+}
+
+
+
+/*
+ *******************************************************************
+ * API
+ *******************************************************************
+ */
+
+/* Load credentials from files. */
+PJ_DEF(pj_status_t) pj_ssl_cert_load_from_files (pj_pool_t *pool,
+						 const pj_str_t *CA_file,
+						 const pj_str_t *cert_file,
+						 const pj_str_t *privkey_file,
+						 const pj_str_t *privkey_pass,
+						 pj_ssl_cert_t **p_cert)
+{
+    pj_ssl_cert_t *cert;
+
+    PJ_ASSERT_RETURN(pool && CA_file && cert_file && privkey_file, PJ_EINVAL);
+
+    cert = PJ_POOL_ZALLOC_T(pool, pj_ssl_cert_t);
+    pj_strdup_with_null(pool, &cert->CA_file, CA_file);
+    pj_strdup_with_null(pool, &cert->cert_file, cert_file);
+    pj_strdup_with_null(pool, &cert->privkey_file, privkey_file);
+    pj_strdup_with_null(pool, &cert->privkey_pass, privkey_pass);
+
+    *p_cert = cert;
+
+    return PJ_SUCCESS;
+}
+
+
+/* Set SSL socket credentials. */
+PJ_DECL(pj_status_t) pj_ssl_sock_set_certificate(
+					    pj_ssl_sock_t *ssock,
+					    pj_pool_t *pool,
+					    const pj_ssl_cert_t *cert)
+{
+    pj_ssl_cert_t *cert_;
+
+    PJ_ASSERT_RETURN(ssock && pool && cert, PJ_EINVAL);
+
+    cert_ = PJ_POOL_ZALLOC_T(pool, pj_ssl_cert_t);
+    pj_memcpy(cert_, cert, sizeof(cert));
+    pj_strdup_with_null(pool, &cert_->CA_file, &cert->CA_file);
+    pj_strdup_with_null(pool, &cert_->cert_file, &cert->cert_file);
+    pj_strdup_with_null(pool, &cert_->privkey_file, &cert->privkey_file);
+    pj_strdup_with_null(pool, &cert_->privkey_pass, &cert->privkey_pass);
+
+    ssock->cert = cert_;
+
+    return PJ_SUCCESS;
+}
+
+
+/* Get available ciphers. */
+PJ_DEF(pj_status_t) pj_ssl_cipher_get_availables(pj_ssl_cipher ciphers[],
+					         unsigned *cipher_num)
+{
+    unsigned i;
+
+    PJ_ASSERT_RETURN(ciphers && cipher_num, PJ_EINVAL);
+
+    if (openssl_cipher_num == 0) {
+	init_openssl();
+	shutdown_openssl();
+    }
+
+    if (openssl_cipher_num == 0)
+	return PJ_ENOTFOUND;
+
+    *cipher_num = PJ_MIN(*cipher_num, openssl_cipher_num);
+
+    for (i = 0; i < *cipher_num; ++i)
+	ciphers[i] = openssl_ciphers[i];
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Create SSL socket instance. 
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_create (pj_pool_t *pool,
+					const pj_ssl_sock_param *param,
+					pj_ssl_sock_t **p_ssock)
+{
+    pj_ssl_sock_t *ssock;
+    pj_status_t status;
+
+    PJ_ASSERT_RETURN(pool && param && p_ssock, PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->sock_type == pj_SOCK_STREAM(), PJ_ENOTSUP);
+
+    pool = pj_pool_create(pool->factory, "ssl%p", 512, 512, NULL);
+
+    /* Create secure socket */
+    ssock = PJ_POOL_ZALLOC_T(pool, pj_ssl_sock_t);
+    ssock->pool = pool;
+    ssock->sock = PJ_INVALID_SOCKET;
+    ssock->ssl_state = SSL_STATE_NULL;
+    pj_list_init(&ssock->write_pending);
+    pj_list_init(&ssock->write_pending_empty);
+    pj_timer_entry_init(&ssock->timer, 0, ssock, &on_timer);
+
+    /* Create secure socket mutex */
+    status = pj_lock_create_recursive_mutex(pool, pool->obj_name,
+					    &ssock->write_mutex);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    /* Init secure socket param */
+    ssock->param = *param;
+    ssock->param.read_buffer_size = ((ssock->param.read_buffer_size+7)>>3)<<3;
+    if (param->ciphers_num > 0) {
+	unsigned i;
+	ssock->param.ciphers = (pj_ssl_cipher*)
+			       pj_pool_calloc(pool, param->ciphers_num, 
+					      sizeof(pj_ssl_cipher));
+	for (i = 0; i < param->ciphers_num; ++i)
+	    ssock->param.ciphers[i] = param->ciphers[i];
+    }
+
+    /* Server name must be null-terminated */
+    pj_strdup_with_null(pool, &ssock->param.server_name, 
+			&param->server_name);
+
+    /* Finally */
+    *p_ssock = ssock;
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Close the secure socket. This will unregister the socket from the
+ * ioqueue and ultimately close the socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_close(pj_ssl_sock_t *ssock)
+{
+    pj_pool_t *pool;
+
+    PJ_ASSERT_RETURN(ssock, PJ_EINVAL);
+
+    if (!ssock->pool)
+	return PJ_SUCCESS;
+
+    if (ssock->timer.id != TIMER_NONE) {
+	pj_timer_heap_cancel(ssock->param.timer_heap, &ssock->timer);
+	ssock->timer.id = TIMER_NONE;
+    }
+
+    reset_ssl_sock_state(ssock);
+    pj_lock_destroy(ssock->write_mutex);
+    
+    pool = ssock->pool;
+    ssock->pool = NULL;
+    if (pool)
+	pj_pool_release(pool);
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Associate arbitrary data with the secure socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_set_user_data(pj_ssl_sock_t *ssock,
+					      void *user_data)
+{
+    PJ_ASSERT_RETURN(ssock, PJ_EINVAL);
+
+    ssock->param.user_data = user_data;
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Retrieve the user data previously associated with this secure
+ * socket.
+ */
+PJ_DEF(void*) pj_ssl_sock_get_user_data(pj_ssl_sock_t *ssock)
+{
+    PJ_ASSERT_RETURN(ssock, NULL);
+
+    return ssock->param.user_data;
+}
+
+
+/*
+ * Retrieve the local address and port used by specified SSL socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_get_info (pj_ssl_sock_t *ssock,
+					  pj_ssl_sock_info *info)
+{
+    pj_bzero(info, sizeof(*info));
+
+    /* Established flag */
+    info->established = (ssock->ssl_state == SSL_STATE_ESTABLISHED);
+
+    /* Protocol */
+    info->proto = ssock->param.proto;
+
+    /* Local address */
+    pj_sockaddr_cp(&info->local_addr, &ssock->local_addr);
+    
+    if (info->established) {
+	/* Current cipher */
+	const SSL_CIPHER *cipher;
+
+	cipher = SSL_get_current_cipher(ssock->ossl_ssl);
+	info->cipher = (cipher->id & 0x00FFFFFF);
+
+	/* Remote address */
+	pj_sockaddr_cp(&info->remote_addr, &ssock->rem_addr);
+
+	/* Certificates info */
+	info->local_cert_info = ssock->local_cert_info;
+	info->remote_cert_info = ssock->remote_cert_info;
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Starts read operation on this secure socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_read (pj_ssl_sock_t *ssock,
+					    pj_pool_t *pool,
+					    unsigned buff_size,
+					    pj_uint32_t flags)
+{
+    void **readbuf;
+    unsigned i;
+
+    PJ_ASSERT_RETURN(ssock && pool && buff_size, PJ_EINVAL);
+    PJ_ASSERT_RETURN(ssock->ssl_state==SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
+
+    readbuf = (void**) pj_pool_calloc(pool, ssock->param.async_cnt, 
+				      sizeof(void*));
+
+    for (i=0; i<ssock->param.async_cnt; ++i) {
+	readbuf[i] = pj_pool_alloc(pool, buff_size);
+    }
+
+    return pj_ssl_sock_start_read2(ssock, pool, buff_size, 
+				   readbuf, flags);
+}
+
+
+/*
+ * Same as #pj_ssl_sock_start_read(), except that the application
+ * supplies the buffers for the read operation so that the acive socket
+ * does not have to allocate the buffers.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_read2 (pj_ssl_sock_t *ssock,
+					     pj_pool_t *pool,
+					     unsigned buff_size,
+					     void *readbuf[],
+					     pj_uint32_t flags)
+{
+    unsigned i;
+
+    PJ_ASSERT_RETURN(ssock && pool && buff_size && readbuf, PJ_EINVAL);
+    PJ_ASSERT_RETURN(ssock->ssl_state==SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
+
+    /* Create SSL socket read buffer */
+    ssock->ssock_rbuf = (read_data_t*)pj_pool_calloc(pool, 
+					       ssock->param.async_cnt,
+					       sizeof(read_data_t));
+
+    /* Store SSL socket read buffer pointer in the activesock read buffer */
+    for (i=0; i<ssock->param.async_cnt; ++i) {
+	read_data_t **p_ssock_rbuf = 
+			OFFSET_OF_READ_DATA_PTR(ssock, ssock->asock_rbuf[i]);
+
+	ssock->ssock_rbuf[i].data = readbuf[i];
+	ssock->ssock_rbuf[i].len = 0;
+
+	*p_ssock_rbuf = &ssock->ssock_rbuf[i];
+    }
+
+    ssock->read_size = buff_size;
+    ssock->read_started = PJ_TRUE;
+    ssock->read_flags = flags;
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Same as pj_ssl_sock_start_read(), except that this function is used
+ * only for datagram sockets, and it will trigger \a on_data_recvfrom()
+ * callback instead.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_recvfrom (pj_ssl_sock_t *ssock,
+						pj_pool_t *pool,
+						unsigned buff_size,
+						pj_uint32_t flags)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(buff_size);
+    PJ_UNUSED_ARG(flags);
+
+    return PJ_ENOTSUP;
+}
+
+
+/*
+ * Same as #pj_ssl_sock_start_recvfrom() except that the recvfrom() 
+ * operation takes the buffer from the argument rather than creating
+ * new ones.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_recvfrom2 (pj_ssl_sock_t *ssock,
+						 pj_pool_t *pool,
+						 unsigned buff_size,
+						 void *readbuf[],
+						 pj_uint32_t flags)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(buff_size);
+    PJ_UNUSED_ARG(readbuf);
+    PJ_UNUSED_ARG(flags);
+
+    return PJ_ENOTSUP;
+}
+
+/* Write plain data to SSL and flush write BIO. Note that accessing
+ * write BIO must be serialized, so a call to this function must be
+ * protected by write mutex of SSL socket.
+ */
+static pj_status_t ssl_write(pj_ssl_sock_t *ssock, 
+			     pj_ioqueue_op_key_t *send_key,
+			     const void *data,
+			     pj_ssize_t size,
+			     unsigned flags)
+{
+    pj_status_t status;
+    int nwritten;
+
+    /* Write the plain data to SSL, after SSL encrypts it, write BIO will
+     * contain the secured data to be sent via socket. Note that re-
+     * negotitation may be on progress, so sending data should be delayed
+     * until re-negotiation is completed.
+     */
+    nwritten = SSL_write(ssock->ossl_ssl, data, size);
+    
+    if (nwritten == size) {
+	/* All data written, flush write BIO to network socket */
+	status = flush_write_bio(ssock, send_key, size, flags);
+    } else if (nwritten <= 0) {
+	/* SSL failed to process the data, it may just that re-negotiation
+	 * is on progress.
+	 */
+	int err;
+	err = SSL_get_error(ssock->ossl_ssl, nwritten);
+	if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_NONE) {
+	    /* Re-negotiation is on progress, flush re-negotiation data */
+	    status = flush_write_bio(ssock, &ssock->handshake_op_key, 0, 0);
+	    if (status == PJ_SUCCESS || status == PJ_EPENDING)
+		/* Just return PJ_EBUSY when re-negotiation is on progress */
+		status = PJ_EBUSY;
+	} else {
+	    /* Some problem occured */
+	    GET_SSL_STATUS(status);
+	}
+    } else {
+	/* nwritten < *size, shouldn't happen, unless write BIO cannot hold 
+	 * the whole secured data, perhaps because of insufficient memory.
+	 */
+	status = PJ_ENOMEM;
+    }
+
+    return status;
+}
+
+/* Flush delayed data sending in the write pending list. Note that accessing
+ * write pending list must be serialized, so a call to this function must be
+ * protected by write mutex of SSL socket.
+ */
+static pj_status_t flush_delayed_send(pj_ssl_sock_t *ssock)
+{
+    while (!pj_list_empty(&ssock->write_pending)) {
+        write_pending_t *wp;
+	pj_status_t status;
+
+	wp = ssock->write_pending.next;
+
+	status = ssl_write(ssock, &wp->data.key, wp->data.data.ptr, 
+			   wp->data.plain_data_len, wp->data.flags);
+	if (status != PJ_SUCCESS)
+	    return status;
+
+	pj_list_erase(wp);
+	pj_list_push_back(&ssock->write_pending_empty, wp);
+    }
+
+    return PJ_SUCCESS;
+}
+
+/* Sending is delayed, push back the sending data into pending list. Note that
+ * accessing write pending list must be serialized, so a call to this function
+ * must be protected by write mutex of SSL socket.
+ */
+static pj_status_t delay_send (pj_ssl_sock_t *ssock,
+			       pj_ioqueue_op_key_t *send_key,
+			       const void *data,
+			       pj_ssize_t size,
+			       unsigned flags)
+{
+    write_pending_t *wp;
+
+    /* Init write pending instance */
+    if (!pj_list_empty(&ssock->write_pending_empty)) {
+	wp = ssock->write_pending_empty.next;
+	pj_list_erase(wp);
+    } else {
+	wp = PJ_POOL_ZALLOC_T(ssock->pool, write_pending_t);
+    }
+
+    wp->data.app_key = send_key;
+    wp->data.plain_data_len = size;
+    wp->data.data.ptr = data;
+    wp->data.flags = flags;
+
+    pj_list_push_back(&ssock->write_pending, wp);
+
+    /* Must return PJ_EPENDING */
+    return PJ_EPENDING;
+}
+
+/**
+ * Send data using the socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_send (pj_ssl_sock_t *ssock,
+				      pj_ioqueue_op_key_t *send_key,
+				      const void *data,
+				      pj_ssize_t *size,
+				      unsigned flags)
+{
+    pj_status_t status;
+
+    PJ_ASSERT_RETURN(ssock && data && size && (*size>0), PJ_EINVAL);
+    PJ_ASSERT_RETURN(ssock->ssl_state==SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
+
+    pj_lock_acquire(ssock->write_mutex);
+
+    /* Flush delayed send first. Sending data might be delayed when 
+     * re-negotiation is on-progress.
+     */
+    status = flush_delayed_send(ssock);
+    if (status == PJ_EBUSY) {
+	/* Re-negotiation is on progress, delay sending */
+	status = delay_send(ssock, send_key, data, *size, flags);
+	goto on_return;
+    } else if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Write data to SSL */
+    status = ssl_write(ssock, send_key, data, *size, flags);
+    if (status == PJ_EBUSY) {
+	/* Re-negotiation is on progress, delay sending */
+	status = delay_send(ssock, send_key, data, *size, flags);
+    }
+
+on_return:
+    pj_lock_release(ssock->write_mutex);
+    return status;
+}
+
+
+/**
+ * Send datagram using the socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_sendto (pj_ssl_sock_t *ssock,
+					pj_ioqueue_op_key_t *send_key,
+					const void *data,
+					pj_ssize_t *size,
+					unsigned flags,
+					const pj_sockaddr_t *addr,
+					int addr_len)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(send_key);
+    PJ_UNUSED_ARG(data);
+    PJ_UNUSED_ARG(size);
+    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG(addr);
+    PJ_UNUSED_ARG(addr_len);
+
+    return PJ_ENOTSUP;
+}
+
+
+/**
+ * Starts asynchronous socket accept() operations on this secure socket. 
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_accept (pj_ssl_sock_t *ssock,
+					      pj_pool_t *pool,
+					      const pj_sockaddr_t *localaddr,
+					      int addr_len)
+{
+    pj_activesock_cb asock_cb;
+    pj_activesock_cfg asock_cfg;
+    pj_status_t status;
+
+    PJ_ASSERT_RETURN(ssock && pool && localaddr && addr_len, PJ_EINVAL);
+
+    /* Create socket */
+    status = pj_sock_socket(ssock->param.sock_af, ssock->param.sock_type, 0, 
+			    &ssock->sock);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(ssock->sock, ssock->param.qos_type,
+				&ssock->param.qos_params, 2, 
+				ssock->pool->obj_name, NULL);
+    if (status != PJ_SUCCESS && !ssock->param.qos_ignore_error)
+	goto on_error;
+
+    /* Bind socket */
+    status = pj_sock_bind(ssock->sock, localaddr, addr_len);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Start listening to the address */
+    status = pj_sock_listen(ssock->sock, PJ_SOMAXCONN);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Create active socket */
+    pj_activesock_cfg_default(&asock_cfg);
+    asock_cfg.async_cnt = ssock->param.async_cnt;
+    asock_cfg.concurrency = ssock->param.concurrency;
+    asock_cfg.whole_data = PJ_TRUE;
+
+    pj_bzero(&asock_cb, sizeof(asock_cb));
+    asock_cb.on_accept_complete = asock_on_accept_complete;
+
+    status = pj_activesock_create(pool,
+				  ssock->sock, 
+				  ssock->param.sock_type,
+				  &asock_cfg,
+				  ssock->param.ioqueue, 
+				  &asock_cb,
+				  ssock,
+				  &ssock->asock);
+
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Start accepting */
+    status = pj_activesock_start_accept(ssock->asock, pool);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Update local address */
+    ssock->addr_len = addr_len;
+    status = pj_sock_getsockname(ssock->sock, &ssock->local_addr, 
+				 &ssock->addr_len);
+    if (status != PJ_SUCCESS)
+	pj_sockaddr_cp(&ssock->local_addr, localaddr);
+
+    ssock->is_server = PJ_TRUE;
+
+    return PJ_SUCCESS;
+
+on_error:
+    reset_ssl_sock_state(ssock);
+    return status;
+}
+
+
+/**
+ * Starts asynchronous socket connect() operation.
+ */
+PJ_DECL(pj_status_t) pj_ssl_sock_start_connect(pj_ssl_sock_t *ssock,
+					       pj_pool_t *pool,
+					       const pj_sockaddr_t *localaddr,
+					       const pj_sockaddr_t *remaddr,
+					       int addr_len)
+{
+    pj_activesock_cb asock_cb;
+    pj_activesock_cfg asock_cfg;
+    pj_status_t status;
+
+    PJ_ASSERT_RETURN(ssock && pool && localaddr && remaddr && addr_len,
+		     PJ_EINVAL);
+
+    /* Create socket */
+    status = pj_sock_socket(ssock->param.sock_af, ssock->param.sock_type, 0, 
+			    &ssock->sock);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(ssock->sock, ssock->param.qos_type,
+				&ssock->param.qos_params, 2, 
+				ssock->pool->obj_name, NULL);
+    if (status != PJ_SUCCESS && !ssock->param.qos_ignore_error)
+	goto on_error;
+
+    /* Bind socket */
+    status = pj_sock_bind(ssock->sock, localaddr, addr_len);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Create active socket */
+    pj_activesock_cfg_default(&asock_cfg);
+    asock_cfg.async_cnt = ssock->param.async_cnt;
+    asock_cfg.concurrency = ssock->param.concurrency;
+    asock_cfg.whole_data = PJ_TRUE;
+
+    pj_bzero(&asock_cb, sizeof(asock_cb));
+    asock_cb.on_connect_complete = asock_on_connect_complete;
+    asock_cb.on_data_read = asock_on_data_read;
+    asock_cb.on_data_sent = asock_on_data_sent;
+
+    status = pj_activesock_create(pool,
+				  ssock->sock, 
+				  ssock->param.sock_type,
+				  &asock_cfg,
+				  ssock->param.ioqueue, 
+				  &asock_cb,
+				  ssock,
+				  &ssock->asock);
+
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    /* Save remote address */
+    pj_sockaddr_cp(&ssock->rem_addr, remaddr);
+
+    status = pj_activesock_start_connect(ssock->asock, pool, remaddr,
+					 addr_len);
+
+    if (status == PJ_SUCCESS)
+	asock_on_connect_complete(ssock->asock, PJ_SUCCESS);
+    else if (status != PJ_EPENDING)
+	goto on_error;
+
+    /* Update local address */
+    ssock->addr_len = addr_len;
+    status = pj_sock_getsockname(ssock->sock, &ssock->local_addr,
+				 &ssock->addr_len);
+    /* Note that we may not get an IP address here. This can
+     * happen for example on Windows, where getsockname()
+     * would return 0.0.0.0 if socket has just started the
+     * async connect. In this case, just leave the local
+     * address with 0.0.0.0 for now; it will be updated
+     * once the socket is established.
+     */
+
+    /* Update SSL state */
+    ssock->is_server = PJ_FALSE;
+
+    return PJ_EPENDING;
+
+on_error:
+    reset_ssl_sock_state(ssock);
+    return status;
+}
+
+
+PJ_DEF(pj_status_t) pj_ssl_sock_renegotiate(pj_ssl_sock_t *ssock)
+{
+    int ret;
+    pj_status_t status;
+
+    PJ_ASSERT_RETURN(ssock->ssl_state == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
+
+    if (SSL_renegotiate_pending(ssock->ossl_ssl))
+	return PJ_EPENDING;
+
+    ret = SSL_renegotiate(ssock->ossl_ssl);
+    if (ret <= 0) {
+	GET_SSL_STATUS(status);
+    } else {
+	status = do_handshake(ssock);
+    }
+
+    return status;
+}
+
+#endif  /* PJ_HAS_SSL_SOCK */
+
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp
new file mode 100644
index 0000000000..684b2470cf
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp
@@ -0,0 +1,1117 @@
+/* $Id: ssl_sock_symbian.cpp 2998 2009-11-09 08:51:34Z bennylp $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pj/ssl_sock.h>
+#include <pj/compat/socket.h>
+#include <pj/assert.h>
+#include <pj/errno.h>
+#include <pj/math.h>
+#include <pj/pool.h>
+#include <pj/sock.h>
+#include <pj/string.h>
+
+#include "os_symbian.h"
+#include <securesocket.h>
+#include <x509cert.h>
+#include <e32des8.h>
+
+#define THIS_FILE "ssl_sock_symbian.cpp"
+
+typedef void (*CPjSSLSocket_cb)(int err, void *key);
+
+class CPjSSLSocketReader : public CActive
+{
+public:
+    static CPjSSLSocketReader *NewL(CSecureSocket &sock) 
+    {
+	CPjSSLSocketReader *self = new (ELeave) 
+				   CPjSSLSocketReader(sock);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+    ~CPjSSLSocketReader() {
+	Cancel();
+    }
+
+    /* Asynchronous read from the socket. */
+    int Read(CPjSSLSocket_cb cb, void *key, TPtr8 &data, TUint flags)
+    {
+	PJ_ASSERT_RETURN(!IsActive(), PJ_EBUSY);
+	
+	cb_ = cb;
+	key_ = key;
+	sock_.RecvOneOrMore(data, iStatus, len_received_);
+	SetActive();
+	
+	return PJ_EPENDING;
+    }
+
+private:
+    CSecureSocket  	&sock_;
+    CPjSSLSocket_cb	 cb_;
+    void		*key_;
+    TSockXfrLength  	 len_received_; /* not really useful? */
+
+    void DoCancel() {
+	sock_.CancelAll();
+    }
+    
+    void RunL() {
+	(*cb_)(iStatus.Int(), key_);
+    }
+
+    CPjSSLSocketReader(CSecureSocket &sock) : 
+	CActive(0), sock_(sock), cb_(NULL), key_(NULL) 
+    {}
+    
+    void ConstructL() {
+	CActiveScheduler::Add(this);
+    }
+};
+
+class CPjSSLSocket : public CActive
+{
+public:
+    enum ssl_state {
+	SSL_STATE_NULL,
+	SSL_STATE_CONNECTING,
+	SSL_STATE_HANDSHAKING,
+	SSL_STATE_ESTABLISHED
+    };
+    
+    static CPjSSLSocket *NewL(const TDesC8 &ssl_proto,
+			      pj_qos_type qos_type,
+			      const pj_qos_params &qos_params) 
+    {
+	CPjSSLSocket *self = new (ELeave) CPjSSLSocket(qos_type, qos_params);
+	CleanupStack::PushL(self);
+	self->ConstructL(ssl_proto);
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+    ~CPjSSLSocket() {
+	Cancel();
+	CleanupSubObjects();
+    }
+
+    int Connect(CPjSSLSocket_cb cb, void *key, const TInetAddr &local_addr, 
+		const TInetAddr &rem_addr, 
+		const TDesC8 &servername = TPtrC8(NULL,0));
+    int Send(CPjSSLSocket_cb cb, void *key, const TDesC8 &aDesc, TUint flags);
+    int SendSync(const TDesC8 &aDesc, TUint flags);
+
+    CPjSSLSocketReader* GetReader();
+    enum ssl_state GetState() const { return state_; }
+    const TInetAddr* GetLocalAddr() const { return &local_addr_; }
+    int GetCipher(TDes8 &cipher) const {
+	if (securesock_)
+	    return securesock_->CurrentCipherSuite(cipher);
+	return KErrNotFound;
+    }
+
+private:
+    enum ssl_state	 state_;
+    pj_sock_t	    	 sock_;
+    CSecureSocket  	*securesock_;
+    bool	    	 is_connected_;
+    
+    pj_qos_type 	 qos_type_;
+    pj_qos_params 	 qos_params_;
+    			      
+    CPjSSLSocketReader  *reader_;
+    TBuf<32> 	    	 ssl_proto_;
+    TInetAddr       	 rem_addr_;
+    TPtrC8		 servername_;
+    TInetAddr       	 local_addr_;
+    TSockXfrLength 	 sent_len_;
+
+    CPjSSLSocket_cb 	 cb_;
+    void 	   	*key_;
+    
+    void DoCancel();
+    void RunL();
+
+    CPjSSLSocket(pj_qos_type qos_type, const pj_qos_params &qos_params) :
+	CActive(0), state_(SSL_STATE_NULL), sock_(PJ_INVALID_SOCKET), 
+	securesock_(NULL), is_connected_(false),
+	qos_type_(qos_type), qos_params_(qos_params),
+	reader_(NULL), 	cb_(NULL), key_(NULL)
+    {}
+    
+    void ConstructL(const TDesC8 &ssl_proto) {
+	ssl_proto_.Copy(ssl_proto);
+	CActiveScheduler::Add(this);
+    }
+
+    void CleanupSubObjects() {
+	delete reader_;
+	reader_ = NULL;
+	if (securesock_) {
+	    securesock_->Close();
+	    delete securesock_;
+	    securesock_ = NULL;
+	}
+	if (sock_ != PJ_INVALID_SOCKET) {
+	    pj_sock_close(sock_);
+	    sock_ = PJ_INVALID_SOCKET;
+	}	    
+    }
+};
+
+int CPjSSLSocket::Connect(CPjSSLSocket_cb cb, void *key, 
+			  const TInetAddr &local_addr, 
+			  const TInetAddr &rem_addr,
+			  const TDesC8 &servername)
+{
+    pj_status_t status;
+    
+    PJ_ASSERT_RETURN(state_ == SSL_STATE_NULL, PJ_EINVALIDOP);
+    
+    status = pj_sock_socket(rem_addr.Family(), pj_SOCK_STREAM(), 0, &sock_);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    // Apply QoS
+    status = pj_sock_apply_qos2(sock_, qos_type_, &qos_params_, 
+    				2,  THIS_FILE, NULL);
+    
+    RSocket &rSock = ((CPjSocket*)sock_)->Socket();
+
+    local_addr_ = local_addr;
+    
+    if (!local_addr_.IsUnspecified()) {
+	TInt err = rSock.Bind(local_addr_);
+	if (err != KErrNone)
+	    return PJ_RETURN_OS_ERROR(err);
+    }
+    
+    cb_ = cb;
+    key_ = key;
+    rem_addr_ = rem_addr;
+    servername_.Set(servername);
+    state_ = SSL_STATE_CONNECTING;
+
+    rSock.Connect(rem_addr_, iStatus);
+    SetActive();
+    
+    rSock.LocalName(local_addr_);
+
+    return PJ_EPENDING;
+}
+
+int CPjSSLSocket::Send(CPjSSLSocket_cb cb, void *key, const TDesC8 &aDesc, 
+		       TUint flags)
+{
+    PJ_UNUSED_ARG(flags);
+
+    PJ_ASSERT_RETURN(state_ == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
+    
+    if (IsActive())
+	return PJ_EBUSY;
+    
+    cb_ = cb;
+    key_ = key;
+    
+    securesock_->Send(aDesc, iStatus, sent_len_);
+    SetActive();
+    
+    return PJ_EPENDING;
+}
+
+int CPjSSLSocket::SendSync(const TDesC8 &aDesc, TUint flags)
+{
+    PJ_UNUSED_ARG(flags);
+
+    PJ_ASSERT_RETURN(state_ == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
+    
+    TRequestStatus reqStatus;
+    securesock_->Send(aDesc, reqStatus, sent_len_);
+    User::WaitForRequest(reqStatus);
+    
+    return PJ_RETURN_OS_ERROR(reqStatus.Int());
+}
+
+CPjSSLSocketReader* CPjSSLSocket::GetReader()
+{
+    PJ_ASSERT_RETURN(state_ == SSL_STATE_ESTABLISHED, NULL);
+    
+    if (reader_)
+	return reader_;
+    
+    TRAPD(err,	reader_ = CPjSSLSocketReader::NewL(*securesock_));
+    if (err != KErrNone)
+	return NULL;
+    
+    return reader_;
+}
+
+void CPjSSLSocket::DoCancel()
+{
+    /* Operation to be cancelled depends on current state */
+    switch (state_) {
+    case SSL_STATE_CONNECTING:
+	{
+	    RSocket &rSock = ((CPjSocket*)sock_)->Socket();
+	    rSock.CancelConnect();
+	    
+	    CleanupSubObjects();
+
+	    state_ = SSL_STATE_NULL;
+	}
+	break;
+    case SSL_STATE_HANDSHAKING:
+	{
+	    securesock_->CancelHandshake();
+	    securesock_->Close();
+	    
+	    CleanupSubObjects();
+	    
+	    state_ = SSL_STATE_NULL;
+	}
+	break;
+    case SSL_STATE_ESTABLISHED:
+	securesock_->CancelSend();
+	break;
+    default:
+	break;
+    }
+}
+
+void CPjSSLSocket::RunL()
+{
+    switch (state_) {
+    case SSL_STATE_CONNECTING:
+	if (iStatus != KErrNone) {
+	    CleanupSubObjects();
+	    state_ = SSL_STATE_NULL;
+	    /* Dispatch connect failure notification */
+	    if (cb_) (*cb_)(iStatus.Int(), key_);
+	} else {
+	    RSocket &rSock = ((CPjSocket*)sock_)->Socket();
+
+	    /* Get local addr */
+	    rSock.LocalName(local_addr_);
+	    
+	    /* Prepare and start handshake */
+	    securesock_ = CSecureSocket::NewL(rSock, ssl_proto_);
+	    securesock_->SetDialogMode(EDialogModeAttended);
+	    if (servername_.Length() > 0)
+		securesock_->SetOpt(KSoSSLDomainName, KSolInetSSL,
+				    servername_);
+	    securesock_->FlushSessionCache();
+	    securesock_->StartClientHandshake(iStatus);
+	    SetActive();
+	    state_ = SSL_STATE_HANDSHAKING;
+	}
+	break;
+    case SSL_STATE_HANDSHAKING:
+	if (iStatus == KErrNone) {
+	    state_ = SSL_STATE_ESTABLISHED;
+	} else {
+	    state_ = SSL_STATE_NULL;
+	    CleanupSubObjects();
+	}
+	/* Dispatch connect status notification */
+	if (cb_) (*cb_)(iStatus.Int(), key_);
+	break;
+    case SSL_STATE_ESTABLISHED:
+	/* Dispatch data sent notification */
+	if (cb_) (*cb_)(iStatus.Int(), key_);
+	break;
+    default:
+	pj_assert(0);
+	break;
+    }
+}
+
+typedef void (*CPjTimer_cb)(void *user_data);
+
+class CPjTimer : public CActive 
+{
+public:
+    CPjTimer(const pj_time_val *delay, CPjTimer_cb cb, void *user_data) : 
+	CActive(0), cb_(cb), user_data_(user_data)
+    {
+	CActiveScheduler::Add(this);
+
+	rtimer_.CreateLocal();
+	pj_int32_t interval = PJ_TIME_VAL_MSEC(*delay) * 1000;
+	if (interval < 0) {
+	    interval = 0;
+	}
+	rtimer_.After(iStatus, interval);
+	SetActive();
+    }
+    
+    ~CPjTimer() { Cancel(); }
+    
+private:	
+    RTimer		 rtimer_;
+    CPjTimer_cb		 cb_;
+    void		*user_data_;
+    
+    void RunL() { if (cb_) (*cb_)(user_data_); }
+    void DoCancel() { rtimer_.Cancel(); }
+};
+
+/*
+ * Structure of recv/read state.
+ */
+typedef struct read_state_t {
+    TPtr8		*read_buf;
+    TPtr8		*orig_buf;
+    pj_uint32_t		 flags;    
+} read_state_t;
+
+/*
+ * Structure of send/write data.
+ */
+typedef struct write_data_t {
+    pj_size_t 	 	 len;
+    pj_ioqueue_op_key_t	*key;
+    pj_size_t 	 	 data_len;
+    char		 data[1];
+} write_data_t;
+
+/*
+ * Structure of send/write state.
+ */
+typedef struct write_state_t {
+    char		*buf;
+    pj_size_t		 max_len;    
+    char		*start;
+    pj_size_t		 len;
+    write_data_t	*current_data;
+    TPtrC8		 send_ptr;
+} write_state_t;
+
+/*
+ * Secure socket structure definition.
+ */
+struct pj_ssl_sock_t
+{
+    pj_ssl_sock_cb	 cb;
+    void		*user_data;
+    
+    pj_bool_t		 established;
+    write_state_t	 write_state;
+    read_state_t	 read_state;
+    CPjTimer		*connect_timer;
+
+    CPjSSLSocket   	*sock;
+    int			 sock_af;
+    int			 sock_type;
+    pj_sockaddr		 local_addr;
+    pj_sockaddr		 rem_addr;
+
+    /* QoS settings */
+    pj_qos_type		 qos_type;
+    pj_qos_params	 qos_params;
+    pj_bool_t		 qos_ignore_error;
+
+
+    pj_ssl_sock_proto	 proto;
+    pj_time_val		 timeout;
+    unsigned		 ciphers_num;
+    pj_ssl_cipher	*ciphers;
+    pj_str_t		 servername;
+};
+
+
+/*
+ * Get cipher list supported by SSL/TLS backend.
+ */
+PJ_DEF(pj_status_t) pj_ssl_cipher_get_availables (pj_ssl_cipher ciphers[],
+					          unsigned *cipher_num)
+{
+    /* Available ciphers */
+    static pj_ssl_cipher ciphers_[64];
+    static unsigned ciphers_num_ = 0;
+    unsigned i;
+
+    PJ_ASSERT_RETURN(ciphers && cipher_num, PJ_EINVAL);
+    
+    if (ciphers_num_ == 0) {
+        RSocket sock;
+        CSecureSocket *secure_sock;
+        TPtrC16 proto(_L16("TLS1.0"));
+
+        secure_sock = CSecureSocket::NewL(sock, proto);
+        if (secure_sock) {
+            TBuf8<128> ciphers_buf(0);
+            secure_sock->AvailableCipherSuites(ciphers_buf);
+            
+            ciphers_num_ = ciphers_buf.Length() / 2;
+            if (ciphers_num_ > PJ_ARRAY_SIZE(ciphers_))
+        	ciphers_num_ = PJ_ARRAY_SIZE(ciphers_);
+            for (i = 0; i < ciphers_num_; ++i)
+                ciphers_[i] = (pj_ssl_cipher)(ciphers_buf[i*2]*10 + 
+					      ciphers_buf[i*2+1]);
+        }
+        
+        delete secure_sock;
+    }
+    
+    if (ciphers_num_ == 0) {
+	return PJ_ENOTFOUND;
+    }
+    
+    *cipher_num = PJ_MIN(*cipher_num, ciphers_num_);
+    for (i = 0; i < *cipher_num; ++i)
+        ciphers[i] = ciphers_[i];
+    
+    return PJ_SUCCESS;
+}
+
+/*
+ * Create SSL socket instance. 
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_create (pj_pool_t *pool,
+					const pj_ssl_sock_param *param,
+					pj_ssl_sock_t **p_ssock)
+{
+    pj_ssl_sock_t *ssock;
+
+    PJ_ASSERT_RETURN(param->async_cnt == 1, PJ_EINVAL);
+    PJ_ASSERT_RETURN(pool && param && p_ssock, PJ_EINVAL);
+
+    /* Allocate secure socket */
+    ssock = PJ_POOL_ZALLOC_T(pool, pj_ssl_sock_t);
+    
+    /* Allocate write buffer */
+    ssock->write_state.buf = (char*)pj_pool_alloc(pool, 
+						  param->send_buffer_size);
+    ssock->write_state.max_len = param->send_buffer_size;
+    ssock->write_state.start = ssock->write_state.buf;
+    
+    /* Init secure socket */
+    ssock->sock_af = param->sock_af;
+    ssock->sock_type = param->sock_type;
+    ssock->cb = param->cb;
+    ssock->user_data = param->user_data;
+    ssock->ciphers_num = param->ciphers_num;
+    if (param->ciphers_num > 0) {
+	unsigned i;
+	ssock->ciphers = (pj_ssl_cipher*)
+			 pj_pool_calloc(pool, param->ciphers_num, 
+					sizeof(pj_ssl_cipher));
+	for (i = 0; i < param->ciphers_num; ++i)
+	    ssock->ciphers[i] = param->ciphers[i];
+    }
+    pj_strdup_with_null(pool, &ssock->servername, &param->server_name);
+
+    ssock->qos_type = param->qos_type;
+    ssock->qos_ignore_error = param->qos_ignore_error;
+    pj_memcpy(&ssock->qos_params, &param->qos_params,
+	      sizeof(param->qos_params));
+
+    /* Finally */
+    *p_ssock = ssock;
+
+    return PJ_SUCCESS;
+}
+
+
+PJ_DEF(pj_status_t) pj_ssl_cert_load_from_files(pj_pool_t *pool,
+                                        	const pj_str_t *CA_file,
+                                        	const pj_str_t *cert_file,
+                                        	const pj_str_t *privkey_file,
+                                        	const pj_str_t *privkey_pass,
+                                        	pj_ssl_cert_t **p_cert)
+{
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(CA_file);
+    PJ_UNUSED_ARG(cert_file);
+    PJ_UNUSED_ARG(privkey_file);
+    PJ_UNUSED_ARG(privkey_pass);
+    PJ_UNUSED_ARG(p_cert);
+    return PJ_ENOTSUP;
+}
+
+/*
+ * Set SSL socket credential.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_set_certificate(
+					    pj_ssl_sock_t *ssock,
+					    pj_pool_t *pool,
+					    const pj_ssl_cert_t *cert)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(cert);
+    return PJ_ENOTSUP;
+}
+
+/*
+ * Close the SSL socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_close(pj_ssl_sock_t *ssock)
+{
+    PJ_ASSERT_RETURN(ssock, PJ_EINVAL);
+    
+    delete ssock->connect_timer;
+    ssock->connect_timer = NULL;
+    
+    delete ssock->sock;
+    ssock->sock = NULL;
+
+    delete ssock->read_state.read_buf;
+    delete ssock->read_state.orig_buf;
+    ssock->read_state.read_buf = NULL;
+    ssock->read_state.orig_buf = NULL;
+    
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Associate arbitrary data with the SSL socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_set_user_data (pj_ssl_sock_t *ssock,
+					       void *user_data)
+{
+    PJ_ASSERT_RETURN(ssock, PJ_EINVAL);
+    
+    ssock->user_data = user_data;
+    
+    return PJ_SUCCESS;
+}
+					       
+
+/*
+ * Retrieve the user data previously associated with this SSL
+ * socket.
+ */
+PJ_DEF(void*) pj_ssl_sock_get_user_data(pj_ssl_sock_t *ssock)
+{
+    PJ_ASSERT_RETURN(ssock, NULL);
+    
+    return ssock->user_data;
+}
+
+
+/*
+ * Retrieve the local address and port used by specified SSL socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_get_info (pj_ssl_sock_t *ssock,
+					  pj_ssl_sock_info *info)
+{
+    PJ_ASSERT_RETURN(ssock && info, PJ_EINVAL);
+    
+    pj_bzero(info, sizeof(*info));
+    
+    info->established = ssock->established;
+    
+    /* Local address */
+    if (ssock->sock) {
+	const TInetAddr* local_addr_ = ssock->sock->GetLocalAddr();
+	int addrlen = sizeof(pj_sockaddr);
+	pj_status_t status;
+	
+	status = PjSymbianOS::Addr2pj(*local_addr_, info->local_addr, &addrlen);
+	if (status != PJ_SUCCESS)
+	    return status;
+    } else {
+	pj_sockaddr_cp(&info->local_addr, &ssock->local_addr);
+    }
+
+    if (info->established) {
+	/* Cipher suite */
+	TBuf8<4> cipher;
+	if (ssock->sock->GetCipher(cipher) == KErrNone) {
+	    info->cipher = (pj_ssl_cipher)cipher[1]; 
+	}
+
+	/* Remote address */
+        pj_sockaddr_cp((pj_sockaddr_t*)&info->remote_addr, 
+    		   (pj_sockaddr_t*)&ssock->rem_addr);
+    }
+
+    /* Protocol */
+    info->proto = ssock->proto;
+    
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Starts read operation on this SSL socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_read (pj_ssl_sock_t *ssock,
+					    pj_pool_t *pool,
+					    unsigned buff_size,
+					    pj_uint32_t flags)
+{
+    PJ_ASSERT_RETURN(ssock && pool && buff_size, PJ_EINVAL);
+    PJ_ASSERT_RETURN(ssock->established, PJ_EINVALIDOP);
+
+    /* Reading is already started */
+    if (ssock->read_state.orig_buf) {
+	return PJ_SUCCESS;
+    }
+
+    void *readbuf[1];
+    readbuf[0] = pj_pool_alloc(pool, buff_size);
+    return pj_ssl_sock_start_read2(ssock, pool, buff_size, readbuf, flags);
+}
+
+static void read_cb(int err, void *key)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)key;
+    pj_status_t status;
+
+    status = (err == KErrNone)? PJ_SUCCESS : PJ_RETURN_OS_ERROR(err);
+
+    /* Check connection status */
+    if (err == KErrEof || !PjSymbianOS::Instance()->IsConnectionUp() ||
+	!ssock->established) 
+    {
+	status = PJ_EEOF;
+    }
+    
+    /* Notify data arrival */
+    if (ssock->cb.on_data_read) {
+	pj_size_t remainder = 0;
+	char *data = (char*)ssock->read_state.orig_buf->Ptr();
+	pj_size_t data_len = ssock->read_state.read_buf->Length() + 
+			     ssock->read_state.read_buf->Ptr() -
+			     ssock->read_state.orig_buf->Ptr();
+	
+	if (data_len > 0) {
+	    /* Notify received data */
+	    pj_bool_t ret = (*ssock->cb.on_data_read)(ssock, data, data_len, 
+						      status, &remainder);
+	    if (!ret) {
+		/* We've been destroyed */
+		return;
+	    }
+	    
+	    /* Calculate available data for next READ operation */
+	    if (remainder > 0) {
+		pj_size_t data_maxlen = ssock->read_state.orig_buf->MaxLength();
+		
+		/* There is some data left unconsumed by application, we give
+		 * smaller buffer for next READ operation.
+		 */
+		ssock->read_state.read_buf->Set((TUint8*)data+remainder, 0, 
+					        data_maxlen - remainder);
+	    } else {
+		/* Give all buffer for next READ operation. 
+		 */
+		ssock->read_state.read_buf->Set(*ssock->read_state.orig_buf);
+	    }
+	}
+    }
+
+    if (status == PJ_SUCCESS) {
+	/* Perform the "next" READ operation */
+	CPjSSLSocketReader *reader = ssock->sock->GetReader(); 
+	ssock->read_state.read_buf->SetLength(0);
+	status = reader->Read(&read_cb, ssock, *ssock->read_state.read_buf, 
+			      ssock->read_state.flags);
+	if (status != PJ_EPENDING) {
+	    /* Notify error */
+	    (*ssock->cb.on_data_read)(ssock, NULL, 0, status, NULL);
+	}
+    }
+    
+    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	/* Connection closed or something goes wrong */
+	delete ssock->read_state.read_buf;
+	delete ssock->read_state.orig_buf;
+	ssock->read_state.read_buf = NULL;
+	ssock->read_state.orig_buf = NULL;
+	ssock->established = PJ_FALSE;
+    }
+}
+
+/*
+ * Same as #pj_ssl_sock_start_read(), except that the application
+ * supplies the buffers for the read operation so that the acive socket
+ * does not have to allocate the buffers.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_read2 (pj_ssl_sock_t *ssock,
+					     pj_pool_t *pool,
+					     unsigned buff_size,
+					     void *readbuf[],
+					     pj_uint32_t flags)
+{
+    PJ_ASSERT_RETURN(ssock && buff_size && readbuf, PJ_EINVAL);
+    PJ_ASSERT_RETURN(ssock->established, PJ_EINVALIDOP);
+    
+    /* Return failure if access point is marked as down by app. */
+    PJ_SYMBIAN_CHECK_CONNECTION();
+    
+    /* Reading is already started */
+    if (ssock->read_state.orig_buf) {
+	return PJ_SUCCESS;
+    }
+    
+    PJ_UNUSED_ARG(pool);
+
+    /* Get reader instance */
+    CPjSSLSocketReader *reader = ssock->sock->GetReader();
+    if (!reader)
+	return PJ_ENOMEM;
+    
+    /* We manage two buffer pointers here:
+     * 1. orig_buf keeps the orginal buffer address (and its max length).
+     * 2. read_buf provides buffer for READ operation, mind that there may be
+     *    some remainder data left by application.
+     */
+    ssock->read_state.read_buf = new TPtr8((TUint8*)readbuf[0], 0, buff_size);
+    ssock->read_state.orig_buf = new TPtr8((TUint8*)readbuf[0], 0, buff_size);
+    ssock->read_state.flags = flags;
+    
+    pj_status_t status;
+    status = reader->Read(&read_cb, ssock, *ssock->read_state.read_buf, 
+			  ssock->read_state.flags);
+    
+    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	delete ssock->read_state.read_buf;
+	delete ssock->read_state.orig_buf;
+	ssock->read_state.read_buf = NULL;
+	ssock->read_state.orig_buf = NULL;
+	
+	return status;
+    }
+    
+    return PJ_SUCCESS;
+}
+
+/*
+ * Same as pj_ssl_sock_start_read(), except that this function is used
+ * only for datagram sockets, and it will trigger \a on_data_recvfrom()
+ * callback instead.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_recvfrom (pj_ssl_sock_t *ssock,
+						pj_pool_t *pool,
+						unsigned buff_size,
+						pj_uint32_t flags)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(buff_size);
+    PJ_UNUSED_ARG(flags);
+    return PJ_ENOTSUP;
+}
+
+/*
+ * Same as #pj_ssl_sock_start_recvfrom() except that the recvfrom() 
+ * operation takes the buffer from the argument rather than creating
+ * new ones.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_recvfrom2 (pj_ssl_sock_t *ssock,
+						 pj_pool_t *pool,
+						 unsigned buff_size,
+						 void *readbuf[],
+						 pj_uint32_t flags)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(buff_size);
+    PJ_UNUSED_ARG(readbuf);
+    PJ_UNUSED_ARG(flags);
+    return PJ_ENOTSUP;
+}
+
+static void send_cb(int err, void *key)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)key;
+    write_state_t *st = &ssock->write_state;
+
+    /* Check connection status */
+    if (err != KErrNone || !PjSymbianOS::Instance()->IsConnectionUp() ||
+	!ssock->established) 
+    {
+	ssock->established = PJ_FALSE;
+	return;
+    }
+
+    /* Remove sent data from buffer */
+    st->start += st->current_data->len;
+    st->len -= st->current_data->len;
+
+    /* Reset current outstanding send */
+    st->current_data = NULL;
+
+    /* Let's check if there is pending data to send */
+    if (st->len) {
+	write_data_t *wdata = (write_data_t*)st->start;
+	pj_status_t status;
+	
+	st->send_ptr.Set((TUint8*)wdata->data, (TInt)wdata->data_len);
+	st->current_data = wdata;
+	status = ssock->sock->Send(&send_cb, ssock, st->send_ptr, 0);
+	if (status != PJ_EPENDING) {
+	    ssock->established = PJ_FALSE;
+	    st->len = 0;
+	    return;
+	}
+    }
+}
+
+/*
+ * Send data using the socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_send (pj_ssl_sock_t *ssock,
+				      pj_ioqueue_op_key_t *send_key,
+				      const void *data,
+				      pj_ssize_t *size,
+				      unsigned flags)
+{
+    PJ_CHECK_STACK();
+    PJ_ASSERT_RETURN(ssock && data && size, PJ_EINVAL);
+    PJ_ASSERT_RETURN(ssock->write_state.max_len == 0 || 
+		     ssock->write_state.max_len >= (pj_size_t)*size, 
+		     PJ_ETOOSMALL);
+    
+    /* Check connection status */
+    if (!PjSymbianOS::Instance()->IsConnectionUp() || !ssock->established) 
+    {
+	ssock->established = PJ_FALSE;
+	return PJ_ECANCELLED;
+    }
+
+    write_state_t *st = &ssock->write_state;
+    
+    /* Synchronous mode */
+    if (st->max_len == 0) {
+	st->send_ptr.Set((TUint8*)data, (TInt)*size);
+	return ssock->sock->SendSync(st->send_ptr, flags);
+    }
+
+    /* CSecureSocket only allows one outstanding send operation, so
+     * we use buffering mechanism to allow application to perform send 
+     * operations at any time.
+     */
+    
+    pj_size_t avail_len = st->max_len - st->len;
+    pj_size_t needed_len = *size + sizeof(write_data_t) - 1;
+    
+    /* Align needed_len to be multiplication of 4 */
+    needed_len = ((needed_len + 3) >> 2) << 2; 
+
+    /* Block until there is buffer slot available! */
+    while (needed_len >= avail_len) {
+	pj_symbianos_poll(-1, -1);
+	avail_len = st->max_len - st->len;
+    }
+
+    /* Ok, make sure the new data will not get wrapped */
+    if (st->start + st->len + needed_len > st->buf + st->max_len) {
+	/* Align buffer left */
+	pj_memmove(st->buf, st->start, st->len);
+	st->start = st->buf;
+    }
+    
+    /* Push back the send data into the buffer */
+    write_data_t *wdata = (write_data_t*)(st->start + st->len);
+    
+    wdata->len = needed_len;
+    wdata->key = send_key;
+    wdata->data_len = (pj_size_t)*size;
+    pj_memcpy(wdata->data, data, *size);
+    st->len += needed_len;
+
+    /* If no outstanding send, send it */
+    if (st->current_data == NULL) {
+	pj_status_t status;
+	    
+	wdata = (write_data_t*)st->start;
+	st->current_data = wdata;
+	st->send_ptr.Set((TUint8*)wdata->data, (TInt)wdata->data_len);
+	status = ssock->sock->Send(&send_cb, ssock, st->send_ptr, flags);
+	
+	if (status != PJ_EPENDING) {
+	    *size = -status;
+	    return status;
+	}
+    }
+    
+    return PJ_SUCCESS;
+}
+
+/*
+ * Send datagram using the socket.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_sendto (pj_ssl_sock_t *ssock,
+					pj_ioqueue_op_key_t *send_key,
+					const void *data,
+					pj_ssize_t *size,
+					unsigned flags,
+					const pj_sockaddr_t *addr,
+					int addr_len)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(send_key);
+    PJ_UNUSED_ARG(data);
+    PJ_UNUSED_ARG(size);
+    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG(addr);
+    PJ_UNUSED_ARG(addr_len);
+    return PJ_ENOTSUP;
+}
+
+/*
+ * Starts asynchronous socket accept() operations on this SSL socket. 
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_accept (pj_ssl_sock_t *ssock,
+					      pj_pool_t *pool,
+					      const pj_sockaddr_t *local_addr,
+					      int addr_len)
+{
+    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG(pool);
+    PJ_UNUSED_ARG(local_addr);
+    PJ_UNUSED_ARG(addr_len);
+    
+    return PJ_ENOTSUP;
+}
+
+static void connect_cb(int err, void *key)
+{
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)key;
+    pj_status_t status;
+    
+    if (ssock->connect_timer) {
+	delete ssock->connect_timer;
+	ssock->connect_timer = NULL;
+    }
+
+    status = (err == KErrNone)? PJ_SUCCESS : PJ_RETURN_OS_ERROR(err);
+    if (status == PJ_SUCCESS) {
+	ssock->established = PJ_TRUE;
+    } else {
+	delete ssock->sock;
+	ssock->sock = NULL;
+    }
+    
+    if (ssock->cb.on_connect_complete) {
+	pj_bool_t ret = (*ssock->cb.on_connect_complete)(ssock, status);
+	if (!ret) {
+	    /* We've been destroyed */
+	    return;
+	}
+    }
+}
+
+static void connect_timer_cb(void *key)
+{
+    connect_cb(KErrTimedOut, key);
+}
+
+/*
+ * Starts asynchronous socket connect() operation and SSL/TLS handshaking 
+ * for this socket. Once the connection is done (either successfully or not),
+ * the \a on_connect_complete() callback will be called.
+ */
+PJ_DEF(pj_status_t) pj_ssl_sock_start_connect (pj_ssl_sock_t *ssock,
+					       pj_pool_t *pool,
+					       const pj_sockaddr_t *localaddr,
+					       const pj_sockaddr_t *remaddr,
+					       int addr_len)
+{
+    CPjSSLSocket *sock = NULL;
+    pj_status_t status;
+    
+    PJ_ASSERT_RETURN(ssock && pool && localaddr && remaddr && addr_len,
+		     PJ_EINVAL);
+
+    /* Check connection status */
+    PJ_SYMBIAN_CHECK_CONNECTION();
+    
+    if (ssock->sock != NULL) {
+	CPjSSLSocket::ssl_state state = ssock->sock->GetState();
+	switch (state) {
+	case CPjSSLSocket::SSL_STATE_ESTABLISHED:
+	    return PJ_SUCCESS;
+	default:
+	    return PJ_EPENDING;
+	}
+    }
+
+    /* Set SSL protocol */
+    TPtrC8 proto;
+    
+    if (ssock->proto == PJ_SSL_SOCK_PROTO_DEFAULT)
+	ssock->proto = PJ_SSL_SOCK_PROTO_TLS1;
+
+    /* CSecureSocket only support TLS1.0 and SSL3.0 */
+    switch(ssock->proto) {
+    case PJ_SSL_SOCK_PROTO_TLS1:
+	proto.Set((const TUint8*)"TLS1.0", 6);
+	break;
+    case PJ_SSL_SOCK_PROTO_SSL3:
+	proto.Set((const TUint8*)"SSL3.0", 6);
+	break;
+    default:
+	return PJ_ENOTSUP;
+    }
+
+    /* Prepare addresses */
+    TInetAddr localaddr_, remaddr_;
+    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)localaddr, addr_len, 
+				  localaddr_);
+    if (status != PJ_SUCCESS)
+	return status;
+    
+    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)remaddr, addr_len,
+				  remaddr_);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    pj_sockaddr_cp((pj_sockaddr_t*)&ssock->rem_addr, remaddr);
+
+    /* Init SSL engine */
+    TRAPD(err, sock = CPjSSLSocket::NewL(proto, ssock->qos_type, 
+				         ssock->qos_params));
+    if (err != KErrNone)
+	return PJ_ENOMEM;
+    
+    if (ssock->timeout.sec != 0 || ssock->timeout.msec != 0) {
+	ssock->connect_timer = new CPjTimer(&ssock->timeout, 
+					    &connect_timer_cb, ssock);
+    }
+    
+    /* Convert server name to Symbian descriptor */
+    TPtrC8 servername_((TUint8*)ssock->servername.ptr, 
+		       ssock->servername.slen);
+    
+    /* Try to connect */
+    status = sock->Connect(&connect_cb, ssock, localaddr_, remaddr_,
+			   servername_);
+    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	delete sock;
+	return status;
+    }
+
+    ssock->sock = sock;
+    return status;
+}
+
+
+PJ_DEF(pj_status_t) pj_ssl_sock_renegotiate(pj_ssl_sock_t *ssock)
+{
+    PJ_UNUSED_ARG(ssock);
+    return PJ_ENOTSUP;
+}
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp
index 4aff5f9564..9b1127761f 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp
@@ -1,5 +1,5 @@
-/* $Id: timer_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* $Id: timer_symbian.cpp 3034 2009-12-16 13:30:34Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/timer.h>
 #include <pj/pool.h>
@@ -28,103 +28,241 @@
 
 #define DEFAULT_MAX_TIMED_OUT_PER_POLL  (64)
 
+// Maximum number of miliseconds that RTimer.At() supports
+#define MAX_RTIMER_INTERVAL		2147
+
+/* Absolute maximum number of timer entries */
+#ifndef PJ_SYMBIAN_TIMER_MAX_COUNT
+#  define PJ_SYMBIAN_TIMER_MAX_COUNT	65535
+#endif
+
+/* Get the number of free slots in the timer heap */
+#define FREECNT(th)	(th->max_size - th->cur_size)
+
+// Forward declaration
+class CPjTimerEntry;
 
 /**
  * The implementation of timer heap.
  */
-
-struct pj_timer_heap_t {
+struct pj_timer_heap_t
+{
     /** Maximum size of the heap. */
     pj_size_t max_size;
 
     /** Current size of the heap. */
     pj_size_t cur_size;
 
-    /** Max timed out entries to process per poll. */
-    unsigned max_entries_per_poll;
+    /** Array of timer entries. A scheduled timer will occupy one slot, and
+     *  the slot number will be saved in entry->_timer_id
+     */
+    CPjTimerEntry **entries;
+    
+    /** Array of free slot indexes in the "entries" array */
+    int *free_slots;
 };
 
-
-//////////////////////////////////////////////////////////////////////////////
 /**
  * Active object for each timer entry.
  */
-
-class CPjTimerEntry : public CActive
+class CPjTimerEntry : public CActive 
 {
+public:
+    pj_timer_entry  *entry_;
+    
+    static CPjTimerEntry* NewL(	pj_timer_heap_t *timer_heap,
+    				pj_timer_entry *entry,
+    				const pj_time_val *delay);
+    
+    ~CPjTimerEntry();
+    
+    virtual void RunL();
+    virtual void DoCancel();
+
+private:	
+    pj_timer_heap_t *timer_heap_;
+    RTimer	     rtimer_;
+    pj_uint32_t	     interval_left_;
+    
+    CPjTimerEntry(pj_timer_heap_t *timer_heap, pj_timer_entry *entry);
+    void ConstructL(const pj_time_val *delay);
+    void Schedule();
+};
 
-    public:
-        static CPjTimerEntry* NewL (pj_timer_heap_t *timer_heap,
-                                    pj_timer_entry *entry,
-                                    const pj_time_val *delay);
+//////////////////////////////////////////////////////////////////////////////
+/*
+ * Implementation.
+ */
 
-        ~CPjTimerEntry();
+/* Grow timer heap to the specified size */
+static pj_status_t realloc_timer_heap(pj_timer_heap_t *th, pj_size_t new_size)
+{
+    typedef CPjTimerEntry *entry_ptr;
+    CPjTimerEntry **entries = NULL;
+    int *free_slots = NULL;
+    unsigned i, j;
+ 
+    if (new_size > PJ_SYMBIAN_TIMER_MAX_COUNT) {
+	/* Just some sanity limit */
+	new_size = PJ_SYMBIAN_TIMER_MAX_COUNT;
+	if (new_size <= th->max_size) {
+	    /* We've grown large enough */
+	    pj_assert(!"Too many timer heap entries");
+	    return PJ_ETOOMANY;
+	}
+    }
+    
+    /* Allocate entries, move entries from the old array if there is one */
+    entries = new entry_ptr[new_size];
+    if (th->entries) {
+	pj_memcpy(entries, th->entries, th->max_size * sizeof(th->entries[0]));
+    }
+    /* Initialize the remaining new area */
+    pj_bzero(&entries[th->max_size], 
+	    (new_size - th->max_size) * sizeof(th->entries[0]));
+    
+    /* Allocate free slots array */
+    free_slots = new int[new_size];
+    if (th->free_slots) {
+	pj_memcpy(free_slots, th->free_slots, 
+		  FREECNT(th) * sizeof(th->free_slots[0]));
+    }
+    /* Initialize the remaining new area */
+    for (i=FREECNT(th), j=th->max_size; j<new_size; ++i, ++j) {
+	free_slots[i] = j;
+    }
+    for ( ; i<new_size; ++i) {
+	free_slots[i] = -1;
+    }
+    
+    /* Apply */
+    delete [] th->entries;
+    th->entries = entries;
+    th->max_size = new_size;
+    delete [] th->free_slots;
+    th->free_slots = free_slots;
 
-        virtual void RunL();
-        virtual void DoCancel();
+    return PJ_SUCCESS;
+}
 
-    private:
-        pj_timer_heap_t *timer_heap_;
-        pj_timer_entry  *entry_;
-        RTimer	     rtimer_;
+/* Allocate and register an entry to timer heap for newly scheduled entry */
+static pj_status_t add_entry(pj_timer_heap_t *th, CPjTimerEntry *entry)
+{
+    pj_status_t status;
+    int slot;
+    
+    /* Check that there's still capacity left in the timer heap */
+    if (FREECNT(th) < 1) {
+	// Grow the timer heap twice the capacity
+	status = realloc_timer_heap(th, th->max_size * 2);
+	if (status != PJ_SUCCESS)
+	    return status;
+    }
+    
+    /* Allocate one free slot. Use LIFO */
+    slot = th->free_slots[FREECNT(th)-1];
+    PJ_ASSERT_RETURN((slot >= 0) && (slot < (int)th->max_size) && 
+		     (th->entries[slot]==NULL), PJ_EBUG);
+    
+    th->free_slots[FREECNT(th)-1] = -1;
+    th->entries[slot] = entry;
+    entry->entry_->_timer_id = slot;
+    ++th->cur_size;
+    
+    return PJ_SUCCESS;
+}
 
-        CPjTimerEntry (pj_timer_heap_t *timer_heap, pj_timer_entry *entry);
-        void ConstructL (const pj_time_val *delay);
-};
+/* Free a slot when an entry's timer has elapsed or cancel */
+static pj_status_t remove_entry(pj_timer_heap_t *th, CPjTimerEntry *entry)
+{
+    int slot = entry->entry_->_timer_id;
+    
+    PJ_ASSERT_RETURN(slot >= 0 && slot < (int)th->max_size, PJ_EBUG);
+    PJ_ASSERT_RETURN(FREECNT(th) < th->max_size, PJ_EBUG);
+    PJ_ASSERT_RETURN(th->entries[slot]==entry, PJ_EBUG);
+    PJ_ASSERT_RETURN(th->free_slots[FREECNT(th)]==-1, PJ_EBUG);
+    
+    th->entries[slot] = NULL;
+    th->free_slots[FREECNT(th)] = slot;
+    entry->entry_->_timer_id = -1;
+    --th->cur_size;
+    
+    return PJ_SUCCESS;
+}
 
 
-CPjTimerEntry::CPjTimerEntry (pj_timer_heap_t *timer_heap,
-                              pj_timer_entry *entry)
-        : CActive (PJ_SYMBIAN_TIMER_PRIORITY), timer_heap_ (timer_heap), entry_ (entry)
+CPjTimerEntry::CPjTimerEntry(pj_timer_heap_t *timer_heap,
+			     pj_timer_entry *entry)
+: CActive(PJ_SYMBIAN_TIMER_PRIORITY), entry_(entry), timer_heap_(timer_heap), 
+  interval_left_(0)
 {
 }
 
-CPjTimerEntry::~CPjTimerEntry()
+CPjTimerEntry::~CPjTimerEntry() 
 {
     Cancel();
     rtimer_.Close();
 }
 
-void CPjTimerEntry::ConstructL (const pj_time_val *delay)
+void CPjTimerEntry::Schedule()
 {
-    rtimer_.CreateLocal();
-    CActiveScheduler::Add (this);
-
-    pj_int32_t interval = PJ_TIME_VAL_MSEC (*delay) * 1000;
-
-    if (interval < 0) {
-        interval = 0;
+    pj_int32_t interval;
+    
+    if (interval_left_ > MAX_RTIMER_INTERVAL) {
+	interval = MAX_RTIMER_INTERVAL;
+    } else {
+	interval = interval_left_;
     }
-
-    rtimer_.After (iStatus, interval);
-
+    
+    interval_left_ -= interval;
+    rtimer_.After(iStatus, interval * 1000);
     SetActive();
 }
 
-CPjTimerEntry* CPjTimerEntry::NewL (pj_timer_heap_t *timer_heap,
-                                    pj_timer_entry *entry,
-                                    const pj_time_val *delay)
+void CPjTimerEntry::ConstructL(const pj_time_val *delay) 
 {
-    CPjTimerEntry *self = new CPjTimerEntry (timer_heap, entry);
-    CleanupStack::PushL (self);
-    self->ConstructL (delay);
-    CleanupStack::Pop (self);
+    rtimer_.CreateLocal();
+    CActiveScheduler::Add(this);
+    
+    interval_left_ = PJ_TIME_VAL_MSEC(*delay);
+    Schedule();
+}
+
+CPjTimerEntry* CPjTimerEntry::NewL(pj_timer_heap_t *timer_heap,
+				   pj_timer_entry *entry,
+				   const pj_time_val *delay) 
+{
+    CPjTimerEntry *self = new CPjTimerEntry(timer_heap, entry);
+    CleanupStack::PushL(self);
+    self->ConstructL(delay);
+    CleanupStack::Pop(self);
 
     return self;
 }
 
-void CPjTimerEntry::RunL()
+void CPjTimerEntry::RunL() 
 {
-    --timer_heap_->cur_size;
-    entry_->_timer_id = NULL;
-    entry_->cb (timer_heap_, entry_);
-
+    if (interval_left_ > 0) {
+	Schedule();
+	return;
+    }
+    
+    remove_entry(timer_heap_, this);
+    entry_->cb(timer_heap_, entry_);
+    
     // Finger's crossed!
     delete this;
 }
 
-void CPjTimerEntry::DoCancel()
+void CPjTimerEntry::DoCancel() 
 {
+    /* It's possible that _timer_id is -1, see schedule(). In this case,
+     * the entry has not been added to the timer heap, so don't remove
+     * it.
+     */
+    if (entry_ && entry_->_timer_id != -1)
+	remove_entry(timer_heap_, this);
+    
     rtimer_.Cancel();
 }
 
@@ -135,79 +273,91 @@ void CPjTimerEntry::DoCancel()
 /*
  * Calculate memory size required to create a timer heap.
  */
-PJ_DEF (pj_size_t) pj_timer_heap_mem_size (pj_size_t count)
+PJ_DEF(pj_size_t) pj_timer_heap_mem_size(pj_size_t count)
 {
     return /* size of the timer heap itself: */
-        sizeof (pj_timer_heap_t) +
-        /* size of each entry: */
-        (count+2) * (sizeof (pj_timer_entry*) +sizeof (pj_timer_id_t)) +
-        /* lock, pool etc: */
-        132;
+           sizeof(pj_timer_heap_t) + 
+           /* size of each entry: */
+           (count+2) * (sizeof(void*)+sizeof(int)) +
+           /* lock, pool etc: */
+           132;
 }
 
 /*
  * Create a new timer heap.
  */
-PJ_DEF (pj_status_t) pj_timer_heap_create (pj_pool_t *pool,
-        pj_size_t size,
-        pj_timer_heap_t **p_heap)
+PJ_DEF(pj_status_t) pj_timer_heap_create( pj_pool_t *pool,
+					  pj_size_t size,
+                                          pj_timer_heap_t **p_heap)
 {
     pj_timer_heap_t *ht;
+    pj_status_t status;
 
-    PJ_ASSERT_RETURN (pool && p_heap, PJ_EINVAL);
+    PJ_ASSERT_RETURN(pool && p_heap, PJ_EINVAL);
 
     *p_heap = NULL;
 
     /* Allocate timer heap data structure from the pool */
-    ht = PJ_POOL_ALLOC_T (pool, pj_timer_heap_t);
-
+    ht = PJ_POOL_ZALLOC_T(pool, pj_timer_heap_t);
     if (!ht)
         return PJ_ENOMEM;
 
-    /* Initialize timer heap sizes */
-    ht->max_size = size;
-
-    ht->cur_size = 0;
-
-    ht->max_entries_per_poll = DEFAULT_MAX_TIMED_OUT_PER_POLL;
+    /* Allocate slots */
+    status = realloc_timer_heap(ht, size);
+    if (status != PJ_SUCCESS)
+	return status;
 
     *p_heap = ht;
-
     return PJ_SUCCESS;
 }
 
-PJ_DEF (void) pj_timer_heap_destroy (pj_timer_heap_t *ht)
+PJ_DEF(void) pj_timer_heap_destroy( pj_timer_heap_t *ht )
 {
-    PJ_UNUSED_ARG (ht);
+    /* Cancel and delete pending active objects */
+    if (ht->entries) {
+	unsigned i;
+	for (i=0; i<ht->max_size; ++i) {
+	    if (ht->entries[i]) {
+		ht->entries[i]->Cancel();
+		delete ht->entries[i];
+		ht->entries[i] = NULL;
+	    }
+	}
+    }
+    
+    delete [] ht->entries;
+    delete [] ht->free_slots;
+    
+    ht->entries = NULL;
+    ht->free_slots = NULL;
 }
 
-PJ_DEF (void) pj_timer_heap_set_lock (pj_timer_heap_t *ht,
+PJ_DEF(void) pj_timer_heap_set_lock(  pj_timer_heap_t *ht,
                                       pj_lock_t *lock,
-                                      pj_bool_t auto_del)
+                                      pj_bool_t auto_del )
 {
-    PJ_UNUSED_ARG (ht);
-
+    PJ_UNUSED_ARG(ht);
     if (auto_del)
-        pj_lock_destroy (lock);
+    	pj_lock_destroy(lock);
 }
 
 
-PJ_DEF (unsigned) pj_timer_heap_set_max_timed_out_per_poll (pj_timer_heap_t *ht,
-        unsigned count)
+PJ_DEF(unsigned) pj_timer_heap_set_max_timed_out_per_poll(pj_timer_heap_t *ht,
+                                                          unsigned count )
 {
-    unsigned old_count = ht->max_entries_per_poll;
-    ht->max_entries_per_poll = count;
-    return old_count;
+    /* Not applicable */
+    PJ_UNUSED_ARG(count);
+    return ht->max_size;
 }
 
-PJ_DEF (pj_timer_entry*) pj_timer_entry_init (pj_timer_entry *entry,
-        int id,
-        void *user_data,
-        pj_timer_heap_callback *cb)
+PJ_DEF(pj_timer_entry*) pj_timer_entry_init( pj_timer_entry *entry,
+                                             int id,
+                                             void *user_data,
+                                             pj_timer_heap_callback *cb )
 {
-    pj_assert (entry && cb);
+    pj_assert(entry && cb);
 
-    entry->_timer_id = NULL;
+    entry->_timer_id = -1;
     entry->id = id;
     entry->user_data = user_data;
     entry->cb = cb;
@@ -215,74 +365,81 @@ PJ_DEF (pj_timer_entry*) pj_timer_entry_init (pj_timer_entry *entry,
     return entry;
 }
 
-PJ_DEF (pj_status_t) pj_timer_heap_schedule (pj_timer_heap_t *ht,
-        pj_timer_entry *entry,
-        const pj_time_val *delay)
+PJ_DEF(pj_status_t) pj_timer_heap_schedule( pj_timer_heap_t *ht,
+					    pj_timer_entry *entry, 
+					    const pj_time_val *delay)
 {
     CPjTimerEntry *timerObj;
-
-    PJ_ASSERT_RETURN (ht && entry && delay, PJ_EINVAL);
-    PJ_ASSERT_RETURN (entry->cb != NULL, PJ_EINVAL);
+    pj_status_t status;
+    
+    PJ_ASSERT_RETURN(ht && entry && delay, PJ_EINVAL);
+    PJ_ASSERT_RETURN(entry->cb != NULL, PJ_EINVAL);
 
     /* Prevent same entry from being scheduled more than once */
-    PJ_ASSERT_RETURN (entry->_timer_id == NULL, PJ_EINVALIDOP);
-
-    timerObj = CPjTimerEntry::NewL (ht, entry, delay);
-    entry->_timer_id = (void*) timerObj;
-
-    ++ht->cur_size;
+    PJ_ASSERT_RETURN(entry->_timer_id < 1, PJ_EINVALIDOP);
+
+    entry->_timer_id = -1;
+    
+    timerObj = CPjTimerEntry::NewL(ht, entry, delay);
+    status = add_entry(ht, timerObj);
+    if (status != PJ_SUCCESS) {
+	timerObj->Cancel();
+	delete timerObj;
+	return status;
+    }
+    
     return PJ_SUCCESS;
 }
 
-PJ_DEF (int) pj_timer_heap_cancel (pj_timer_heap_t *ht,
-                                   pj_timer_entry *entry)
+PJ_DEF(int) pj_timer_heap_cancel( pj_timer_heap_t *ht,
+				  pj_timer_entry *entry)
 {
-    PJ_ASSERT_RETURN (ht && entry, PJ_EINVAL);
-
-    if (entry->_timer_id != NULL) {
-        CPjTimerEntry *timerObj = (CPjTimerEntry*) entry->_timer_id;
-        timerObj->Cancel();
-        delete timerObj;
-        entry->_timer_id = NULL;
-        --ht->cur_size;
-        return 1;
+    PJ_ASSERT_RETURN(ht && entry, PJ_EINVAL);
+    
+    if (entry->_timer_id >= 0 && entry->_timer_id < (int)ht->max_size) {
+    	CPjTimerEntry *timerObj = ht->entries[entry->_timer_id];
+    	if (timerObj) {
+    	    timerObj->Cancel();
+    	    delete timerObj;
+    	    return 1;
+    	} else {
+    	    return 0;
+    	}
     } else {
-        return 0;
+    	return 0;
     }
 }
 
-PJ_DEF (unsigned) pj_timer_heap_poll (pj_timer_heap_t *ht,
-                                      pj_time_val *next_delay)
+PJ_DEF(unsigned) pj_timer_heap_poll( pj_timer_heap_t *ht, 
+                                     pj_time_val *next_delay )
 {
     /* Polling is not necessary on Symbian, since all async activities
      * are registered to active scheduler.
      */
-    PJ_UNUSED_ARG (ht);
-
+    PJ_UNUSED_ARG(ht);
     if (next_delay) {
-        next_delay->sec = 1;
-        next_delay->msec = 0;
+    	next_delay->sec = 1;
+    	next_delay->msec = 0;
     }
-
     return 0;
 }
 
-PJ_DEF (pj_size_t) pj_timer_heap_count (pj_timer_heap_t *ht)
+PJ_DEF(pj_size_t) pj_timer_heap_count( pj_timer_heap_t *ht )
 {
-    PJ_ASSERT_RETURN (ht, 0);
+    PJ_ASSERT_RETURN(ht, 0);
 
     return ht->cur_size;
 }
 
-PJ_DEF (pj_status_t) pj_timer_heap_earliest_time (pj_timer_heap_t * ht,
-        pj_time_val *timeval)
+PJ_DEF(pj_status_t) pj_timer_heap_earliest_time( pj_timer_heap_t * ht,
+					         pj_time_val *timeval)
 {
     /* We don't support this! */
-    PJ_UNUSED_ARG (ht);
-
+    PJ_UNUSED_ARG(ht);
+    
     timeval->sec = 1;
     timeval->msec = 0;
-
+    
     return PJ_SUCCESS;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp
index c1ce1e52e5..b7404b4e9a 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp
@@ -1,5 +1,5 @@
-/* $Id: unicode_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
+/* $Id: unicode_symbian.cpp 3047 2010-01-06 14:35:13Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj/unicode.h>
 
@@ -25,20 +25,23 @@
 /*
  * Convert ANSI strings to Unicode strings.
  */
-PJ_DEF (wchar_t*) pj_ansi_to_unicode (const char *str, pj_size_t len,
-                                      wchar_t *wbuf, pj_size_t wbuf_count)
+PJ_DEF(wchar_t*) pj_ansi_to_unicode( const char *str, pj_size_t len,
+				     wchar_t *wbuf, pj_size_t wbuf_count)
 {
-    TPtrC8 aForeign ( (const TUint8*) str, (TInt) len);
-    TPtr16 aUnicode ( (TUint16*) wbuf, (TInt) (wbuf_count-1));
+    TPtrC8 aForeign((const TUint8*)str, (TInt)len);
+    TPtr16 aUnicode((TUint16*)wbuf, (TInt)(wbuf_count-1));
     TInt left;
 
-    left = PjSymbianOS::Instance()->ConvertToUnicode (aUnicode, aForeign);
+    left = PjSymbianOS::Instance()->ConvertToUnicode(aUnicode, aForeign);
 
     if (left != 0) {
-        // Error, or there are unconvertable characters
-        *wbuf = 0;
+	// Error, or there are unconvertable characters
+	*wbuf = 0;
     } else {
-        wbuf[len] = 0;
+	if (len < wbuf_count)
+	    wbuf[len] = 0;
+	else
+	    wbuf[len-1] = 0;
     }
 
     return wbuf;
@@ -48,20 +51,23 @@ PJ_DEF (wchar_t*) pj_ansi_to_unicode (const char *str, pj_size_t len,
 /*
  * Convert Unicode string to ANSI string.
  */
-PJ_DEF (char*) pj_unicode_to_ansi (const wchar_t *wstr, pj_size_t len,
-                                   char *buf, pj_size_t buf_size)
+PJ_DEF(char*) pj_unicode_to_ansi( const wchar_t *wstr, pj_size_t len,
+				  char *buf, pj_size_t buf_size)
 {
-    TPtrC16 aUnicode ( (const TUint16*) wstr, (TInt) len);
-    TPtr8 aForeign ( (TUint8*) buf, (TInt) (buf_size-1));
+    TPtrC16 aUnicode((const TUint16*)wstr, (TInt)len);
+    TPtr8 aForeign((TUint8*)buf, (TInt)(buf_size-1));
     TInt left;
 
-    left = PjSymbianOS::Instance()->ConvertFromUnicode (aForeign, aUnicode);
+    left = PjSymbianOS::Instance()->ConvertFromUnicode(aForeign, aUnicode);
 
     if (left != 0) {
-        // Error, or there are unconvertable characters
-        buf[0] = '\0';
+	// Error, or there are unconvertable characters
+	buf[0] = '\0';
     } else {
-        buf[len] = '\0';
+	if (len < buf_size)
+	    buf[len] = '\0';
+	else
+	    buf[len-1] = '\0';
     }
 
     return buf;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_win32.c b/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_win32.c
index 3153a09bf6..47fa8c83fe 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_win32.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_win32.c
@@ -1,4 +1,4 @@
-/* $Id: unicode_win32.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: unicode_win32.c 3047 2010-01-06 14:35:13Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -30,7 +30,13 @@ PJ_DEF(wchar_t*) pj_ansi_to_unicode(const char *s, pj_size_t len,
 
     len = MultiByteToWideChar(CP_ACP, 0, s, len, 
 			      buf, buf_count);
-    buf[len] = 0;
+    if (buf_count) {
+	if (len < buf_count)
+	    buf[len] = 0;
+	else
+	    buf[len-1] = 0;
+    }
+
     return buf;
 }
 
@@ -41,7 +47,13 @@ PJ_DEF(char*) pj_unicode_to_ansi( const wchar_t *wstr, pj_size_t len,
     PJ_ASSERT_RETURN(wstr && buf, NULL);
 
     len = WideCharToMultiByte(CP_ACP, 0, wstr, len, buf, buf_size, NULL, NULL);
-    buf[len] = '\0';
+    if (buf_size) {
+	if (len < buf_size)
+	    buf[len] = '\0';
+	else
+	    buf[len-1] = '\0';
+    }
+
     return buf;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp
index f69f4cc75a..6b749ad62d 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp
@@ -1,5 +1,5 @@
 /* $Id */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pj++/file.hpp>
 #include <pj++/list.hpp>
@@ -42,20 +42,20 @@ int main()
     Pj_Caching_Pool mem;
     Pj_Pool the_pool;
     Pj_Pool *pool = &the_pool;
+    
+    the_pool.attach(mem.create_pool(4000,4000));
 
-    the_pool.attach (mem.create_pool (4000,4000));
-
-    Pj_Semaphore_Lock lsem (pool);
+    Pj_Semaphore_Lock lsem(pool);
     Pj_Semaphore_Lock *plsem;
 
-    plsem = new (pool) Pj_Semaphore_Lock (pool);
+    plsem = new(pool) Pj_Semaphore_Lock(pool);
     delete plsem;
 
-    Pj_Proactor proactor (pool, 100, 100);
+    Pj_Proactor proactor(pool, 100, 100);
 
-    My_Event_Handler *event_handler = new (the_pool) My_Event_Handler;
-    proactor.register_socket_handler (pool, event_handler);
-    proactor.unregister_handler (event_handler);
+    My_Event_Handler *event_handler = new(the_pool) My_Event_Handler;
+    proactor.register_socket_handler(pool, event_handler);
+    proactor.unregister_handler(event_handler);
 
     return 0;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/activesock.c b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/activesock.c
index 2b73204113..42c5900666 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/activesock.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/activesock.c
@@ -1,4 +1,4 @@
-/* $Id: activesock.c 2771 2009-06-17 13:31:13Z bennylp $ */
+/* $Id: activesock.c 3048 2010-01-08 09:53:31Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -490,8 +490,6 @@ int activesock_test(void)
 {
     int ret;
 
-    ret = (int)&udp_ping_pong_test;
-
     PJ_LOG(3,("", "..udp ping/pong test"));
     ret = udp_ping_pong_test();
     if (ret != 0)
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/errno.c b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/errno.c
index c0c5865f1a..b6445f2952 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/errno.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/errno.c
@@ -1,4 +1,4 @@
-/* $Id: errno.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: errno.c 2992 2009-11-09 04:09:13Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -158,6 +158,10 @@ int errno_test(void)
     PJ_LOG(3,(THIS_FILE, "...msg for rc=PJ_EBUG, cut at %d chars: '%s'", 
               CUT, errbuf));
 
+    /* Perror */
+    pj_perror(3, THIS_FILE, PJ_SUCCESS, "...testing %s", "pj_perror");
+    PJ_PERROR(3,(THIS_FILE, PJ_SUCCESS, "...testing %s", "PJ_PERROR"));
+
     return 0;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp
index d9e4b682e4..ecc542e79b 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: exception_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ioq_tcp.c b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ioq_tcp.c
index bf7f7f5b73..a699f54bdf 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ioq_tcp.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ioq_tcp.c
@@ -1,4 +1,4 @@
-/* $Id: ioq_tcp.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: ioq_tcp.c 3051 2010-01-08 13:08:05Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -97,6 +97,15 @@ static void on_ioqueue_accept(pj_ioqueue_key_t *key,
 			  "invalid socket and status is %d", status));
 	}
     } else {
+        pj_sockaddr addr;
+        int client_addr_len;
+
+        client_addr_len = sizeof(addr);
+        status = pj_sock_getsockname(sock, &addr, &client_addr_len);
+        if (status != PJ_SUCCESS) {
+            app_perror("...ERROR in pj_sock_getsockname()", status);
+        }
+
 	callback_accept_key = key;
 	callback_accept_op = op_key;
 	callback_accept_status = status;
@@ -757,30 +766,28 @@ static int compliance_test_2(pj_bool_t allow_concur)
 		++pending_op;
 	    }
 
-	}
-
-
-	// Poll until all connected
-	while (pending_op) {
-	    pj_time_val timeout = {1, 0};
+	    // Poll until connection of this pair established
+	    while (pending_op) {
+		pj_time_val timeout = {1, 0};
 
 #ifdef PJ_SYMBIAN
-	    status = pj_symbianos_poll(-1, 1000);
+		status = pj_symbianos_poll(-1, 1000);
 #else
-	    status = pj_ioqueue_poll(ioque, &timeout);
+		status = pj_ioqueue_poll(ioque, &timeout);
 #endif
-	    if (status > 0) {
-		if (status > pending_op) {
-		    PJ_LOG(3,(THIS_FILE,
-			      "...error: pj_ioqueue_poll() returned %d "
-			      "(only expecting %d)",
-			      status, pending_op));
-		    return -110;
-		}
-		pending_op -= status;
-
-		if (pending_op == 0) {
-		    status = 0;
+		if (status > 0) {
+		    if (status > pending_op) {
+			PJ_LOG(3,(THIS_FILE,
+				  "...error: pj_ioqueue_poll() returned %d "
+				  "(only expecting %d)",
+				  status, pending_op));
+			return -110;
+		    }
+		    pending_op -= status;
+
+		    if (pending_op == 0) {
+			status = 0;
+		    }
 		}
 	    }
 	}
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp
index a0b2ec7d19..a91b671f2c 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp
@@ -25,10 +25,8 @@ int main()
     //err = test_main();
 
     if (err)
-        return err;
-
+	return err;
     return exp;
-
     //return 0;
 }
 
@@ -48,31 +46,31 @@ LOCAL_D CConsoleBase* console;  // write all messages to this
 
 class MyScheduler : public CActiveScheduler
 {
+public:
+    MyScheduler()
+    {}
 
-    public:
-        MyScheduler() {}
-
-        void Error (TInt aError) const;
+    void Error(TInt aError) const;
 };
 
-void MyScheduler::Error (TInt aError) const
+void MyScheduler::Error(TInt aError) const
 {
-    PJ_UNUSED_ARG (aError);
+    PJ_UNUSED_ARG(aError);
 }
 
 LOCAL_C void DoStartL()
-{
+    {
     // Create active scheduler (to run active objects)
     CActiveScheduler* scheduler = new (ELeave) MyScheduler;
-    CleanupStack::PushL (scheduler);
-    CActiveScheduler::Install (scheduler);
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
 
     test_main();
 
-    CActiveScheduler::Install (NULL);
-    CleanupStack::Pop (scheduler);
+    CActiveScheduler::Install(NULL);
+    CleanupStack::Pop(scheduler);
     delete scheduler;
-}
+    }
 
 #define WRITE_TO_DEBUG_CONSOLE
 
@@ -81,59 +79,55 @@ LOCAL_C void DoStartL()
 #endif
 
 //  Global Functions
-static void log_writer (int level, const char *buf, int len)
+static void log_writer(int level, const char *buf, int len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG (level);
-
-    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
+    PJ_UNUSED_ARG(level);
+    
+    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
     buf16[len] = 0;
     buf16[len+1] = 0;
-
-    TPtrC16 aBuf ( (const TUint16*) buf16, (TInt) len);
-    console->Write (aBuf);
-
+    
+    TPtrC16 aBuf((const TUint16*)buf16, (TInt)len);
+    console->Write(aBuf);
+    
 #ifdef WRITE_TO_DEBUG_CONSOLE
-    RDebug::Print (aBuf);
+    RDebug::Print(aBuf);
 #endif
 }
 
 
 GLDEF_C TInt E32Main()
-{
+    {
     // Create cleanup stack
     __UHEAP_MARK;
     CTrapCleanup* cleanup = CTrapCleanup::New();
 
     // Create output console
-    TRAPD (createError, console = Console::NewL (_L ("Console"), TSize (KConsFullScreen,KConsFullScreen)));
-
+    TRAPD(createError, console = Console::NewL(_L("Console"), TSize(KConsFullScreen,KConsFullScreen)));
     if (createError)
         return createError;
 
-    pj_log_set_log_func (&log_writer);
+    pj_log_set_log_func(&log_writer);
 
     // Run application code inside TRAP harness, wait keypress when terminated
-    TRAPD (mainError, DoStartL());
-
+    TRAPD(mainError, DoStartL());
     if (mainError)
-        console->Printf (_L (" failed, leave code = %d"), mainError);
-
-    console->Printf (_L (" [press any key]\n"));
-
+        console->Printf(_L(" failed, leave code = %d"), mainError);
+    
+    console->Printf(_L(" [press any key]\n"));
     console->Getch();
-
+    
     delete console;
-
     delete cleanup;
-
-    CloseSTDLIB();
-
+    
+    CloseSTDLIB(); 
+    
     __UHEAP_MARKEND;
-
+    
     return KErrNone;
-}
+    }
 
 #endif	/* if 0 */
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp
index 93d64af92e..381e42aee3 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: pool_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/sock.c b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/sock.c
index 19ecd74a54..ac5cc3333e 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/sock.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/sock.c
@@ -1,4 +1,4 @@
-/* $Id: sock.c 2863 2009-08-12 10:56:06Z bennylp $ */
+/* $Id: sock.c 3044 2010-01-04 16:54:50Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -72,6 +72,18 @@
 static char bigdata[BIG_DATA_LEN];
 static char bigbuffer[BIG_DATA_LEN];
 
+/* Macro for checking the value of "sin_len" member of sockaddr
+ * (it must always be zero).
+ */
+#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0
+#   define CHECK_SA_ZERO_LEN(addr, ret) \
+	if (((pj_addr_hdr*)(addr))->sa_zero_len != 0) \
+	    return ret
+#else
+#   define CHECK_SA_ZERO_LEN(addr, ret)
+#endif
+
+
 static int format_test(void)
 {
     pj_str_t s = pj_str(ADDRESS);
@@ -167,6 +179,28 @@ static int format_test(void)
 
     /* pj_gethostaddr() */
 
+    /* Various constants */
+#if !defined(PJ_SYMBIAN) || PJ_SYMBIAN==0
+    if (PJ_AF_INET==0xFFFF) return -5500;
+    if (PJ_AF_INET6==0xFFFF) return -5501;
+    
+    /* 0xFFFF could be a valid SOL_SOCKET (e.g: on some Win or Mac) */
+    //if (PJ_SOL_SOCKET==0xFFFF) return -5503;
+    
+    if (PJ_SOL_IP==0xFFFF) return -5502;
+    if (PJ_SOL_TCP==0xFFFF) return -5510;
+    if (PJ_SOL_UDP==0xFFFF) return -5520;
+    if (PJ_SOL_IPV6==0xFFFF) return -5530;
+
+    if (PJ_SO_TYPE==0xFFFF) return -5540;
+    if (PJ_SO_RCVBUF==0xFFFF) return -5550;
+    if (PJ_SO_SNDBUF==0xFFFF) return -5560;
+    if (PJ_TCP_NODELAY==0xFFFF) return -5570;
+    if (PJ_SO_REUSEADDR==0xFFFF) return -5580;
+
+    if (PJ_MSG_OOB==0xFFFF) return -5590;
+    if (PJ_MSG_PEEK==0xFFFF) return -5600;
+#endif
 
     return 0;
 }
@@ -262,6 +296,9 @@ static int parse_test(void)
 	    return -10;
 	}
 
+	/* Check "sin_len" member of parse result */
+	CHECK_SA_ZERO_LEN(&addr, -20);
+
 	/* Build the correct result */
 	status = pj_sockaddr_init(valid_tests[i].result_af,
 				  &result,
@@ -290,6 +327,9 @@ static int parse_test(void)
 	    return -50;
 	}
 
+	/* Check "sin_len" member of parse result */
+	CHECK_SA_ZERO_LEN(&addr, -55);
+
 	/* Compare the result again */
 	if (pj_sockaddr_cmp(&addr, &result) != 0) {
 	    PJ_LOG(1,("test", ".... parsed result mismatched for %s", 
@@ -329,6 +369,68 @@ static int parse_test(void)
     return 0;
 }
 
+static int purity_test(void)
+{
+    PJ_LOG(3,("test", "...purity_test()"));
+
+#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0
+    /* Check on "sin_len" member of sockaddr */
+    {
+	const pj_str_t str_ip = {"1.1.1.1", 7};
+	pj_sockaddr addr[16];
+	pj_addrinfo ai[16];
+	unsigned cnt;
+	pj_status_t rc;
+
+	/* pj_enum_ip_interface() */
+	cnt = PJ_ARRAY_SIZE(addr);
+	rc = pj_enum_ip_interface(pj_AF_UNSPEC(), &cnt, addr);
+	if (rc == PJ_SUCCESS) {
+	    while (cnt--)
+		CHECK_SA_ZERO_LEN(&addr[cnt], -10);
+	}
+
+	/* pj_gethostip() on IPv4 */
+	rc = pj_gethostip(pj_AF_INET(), &addr[0]);
+	if (rc == PJ_SUCCESS)
+	    CHECK_SA_ZERO_LEN(&addr[0], -20);
+
+	/* pj_gethostip() on IPv6 */
+	rc = pj_gethostip(pj_AF_INET6(), &addr[0]);
+	if (rc == PJ_SUCCESS)
+	    CHECK_SA_ZERO_LEN(&addr[0], -30);
+
+	/* pj_getdefaultipinterface() on IPv4 */
+	rc = pj_getdefaultipinterface(pj_AF_INET(), &addr[0]);
+	if (rc == PJ_SUCCESS)
+	    CHECK_SA_ZERO_LEN(&addr[0], -40);
+
+	/* pj_getdefaultipinterface() on IPv6 */
+	rc = pj_getdefaultipinterface(pj_AF_INET6(), &addr[0]);
+	if (rc == PJ_SUCCESS)
+	    CHECK_SA_ZERO_LEN(&addr[0], -50);
+
+	/* pj_getaddrinfo() on a host name */
+	cnt = PJ_ARRAY_SIZE(ai);
+	rc = pj_getaddrinfo(pj_AF_UNSPEC(), pj_gethostname(), &cnt, ai);
+	if (rc == PJ_SUCCESS) {
+	    while (cnt--)
+		CHECK_SA_ZERO_LEN(&ai[cnt].ai_addr, -60);
+	}
+
+	/* pj_getaddrinfo() on an IP address */
+	cnt = PJ_ARRAY_SIZE(ai);
+	rc = pj_getaddrinfo(pj_AF_UNSPEC(), &str_ip, &cnt, ai);
+	if (rc == PJ_SUCCESS) {
+	    pj_assert(cnt == 1);
+	    CHECK_SA_ZERO_LEN(&ai[0].ai_addr, -70);
+	}
+    }
+#endif
+
+    return 0;
+}
+
 static int simple_sock_test(void)
 {
     int types[2];
@@ -738,6 +840,10 @@ int sock_test()
     if (rc != 0)
 	return rc;
 
+    rc = purity_test();
+    if (rc != 0)
+	return rc;
+
     rc = gethostbyname_test();
     if (rc != 0)
 	return rc;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ssl_sock.c b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ssl_sock.c
new file mode 100644
index 0000000000..691e48bfeb
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/ssl_sock.c
@@ -0,0 +1,1196 @@
+/* $Id: ssl_sock.c 3018 2009-11-11 07:14:28Z nanang $ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * 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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include "test.h"
+#include <pjlib.h>
+
+
+#define CERT_DIR		    "../build/"
+#define CERT_CA_FILE		    NULL
+#define CERT_FILE		    CERT_DIR "cacert.pem"
+#define CERT_PRIVKEY_FILE	    CERT_DIR "privkey.pem"
+#define CERT_PRIVKEY_PASS	    ""
+
+
+#if INCLUDE_SSLSOCK_TEST
+
+/* Global vars */
+static int clients_num;
+
+struct send_key {
+    pj_ioqueue_op_key_t	op_key;
+};
+
+
+static int get_cipher_list(void) {
+    pj_status_t status;
+    pj_ssl_cipher ciphers[100];
+    unsigned cipher_num;
+    unsigned i;
+
+    cipher_num = PJ_ARRAY_SIZE(ciphers);
+    status = pj_ssl_cipher_get_availables(ciphers, &cipher_num);
+    if (status != PJ_SUCCESS) {
+	app_perror("...FAILED to get available ciphers", status);
+	return status;
+    }
+
+    PJ_LOG(3, ("", "...Found %u ciphers:", cipher_num));
+    for (i = 0; i < cipher_num; ++i) {
+	const char* st;
+	st = pj_ssl_cipher_name(ciphers[i]);
+	if (st == NULL)
+	    st = "[Unknown]";
+
+	PJ_LOG(3, ("", "...%3u: 0x%08x=%s", i+1, ciphers[i], st));
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+struct test_state
+{
+    pj_pool_t	   *pool;	    /* pool				    */
+    pj_bool_t	    is_server;	    /* server role flag			    */
+    pj_bool_t	    is_verbose;	    /* verbose flag, e.g: cert info	    */
+    pj_bool_t	    echo;	    /* echo received data		    */
+    pj_status_t	    err;	    /* error flag			    */
+    unsigned	    sent;	    /* bytes sent			    */
+    unsigned	    recv;	    /* bytes received			    */
+    pj_uint8_t	    read_buf[256];  /* read buffer			    */
+    pj_bool_t	    done;	    /* test done flag			    */
+    char	   *send_str;	    /* data to send once connected	    */
+    unsigned	    send_str_len;   /* send data length			    */
+    pj_bool_t	    check_echo;	    /* flag to compare sent & echoed data   */
+    const char	   *check_echo_ptr; /* pointer/cursor for comparing data    */
+    struct send_key send_key;	    /* send op key			    */
+};
+
+static void dump_cert_info(const char *prefix, const pj_ssl_cert_info *ci)
+{
+    const char *wdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+    pj_parsed_time pt1;
+    pj_parsed_time pt2;
+
+    pj_time_decode(&ci->validity_start, &pt1);
+    pj_time_decode(&ci->validity_end, &pt2);
+
+    PJ_LOG(3, ("", "%sSubject    : %.*s", prefix, ci->subject.slen, ci->subject.ptr));
+    PJ_LOG(3, ("", "%sIssuer     : %.*s", prefix, ci->issuer.slen, ci->issuer.ptr));
+    PJ_LOG(3, ("", "%sVersion    : v%d", prefix, ci->version));
+    PJ_LOG(3, ("", "%sValid from : %s %4d-%02d-%02d %02d:%02d:%02d.%03d %s", 
+		   prefix, wdays[pt1.wday], pt1.year, pt1.mon+1, pt1.day,
+		   pt1.hour, pt1.min, pt1.sec, pt1.msec,
+		   (ci->validity_use_gmt? "GMT":"")));
+    PJ_LOG(3, ("", "%sValid to   : %s %4d-%02d-%02d %02d:%02d:%02d.%03d %s", 
+		   prefix, wdays[pt2.wday], pt2.year, pt2.mon+1, pt2.day,
+		   pt2.hour, pt2.min, pt2.sec, pt2.msec,
+		   (ci->validity_use_gmt? "GMT":"")));
+}
+
+
+static pj_bool_t ssl_on_connect_complete(pj_ssl_sock_t *ssock,
+					 pj_status_t status)
+{
+    struct test_state *st = (struct test_state*) 
+		    	    pj_ssl_sock_get_user_data(ssock);
+    void *read_buf[1];
+    pj_ssl_sock_info info;
+    char buf1[64], buf2[64];
+
+    if (status != PJ_SUCCESS) {
+	app_perror("...ERROR ssl_on_connect_complete()", status);
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_get_info(ssock, &info);
+    if (status != PJ_SUCCESS) {
+	app_perror("...ERROR pj_ssl_sock_get_info()", status);
+	goto on_return;
+    }
+
+    pj_sockaddr_print((pj_sockaddr_t*)&info.local_addr, buf1, sizeof(buf1), 1);
+    pj_sockaddr_print((pj_sockaddr_t*)&info.remote_addr, buf2, sizeof(buf2), 1);
+    PJ_LOG(3, ("", "...Connected %s -> %s!", buf1, buf2));
+
+    if (st->is_verbose) {
+	const char *tmp_st;
+
+	/* Print cipher name */
+	tmp_st = pj_ssl_cipher_name(info.cipher);
+	if (tmp_st == NULL)
+	    tmp_st = "[Unknown]";
+	PJ_LOG(3, ("", ".....Cipher: %s", tmp_st));
+
+	/* Print certificates info */
+	if (info.local_cert_info.subject.slen) {
+	    PJ_LOG(3, ("", ".....Local certificate info:"));
+	    dump_cert_info(".......", &info.local_cert_info);
+	}
+	if (info.remote_cert_info.subject.slen) {
+	    PJ_LOG(3, ("", ".....Remote certificate info:"));
+	    dump_cert_info(".......", &info.remote_cert_info);
+	}
+    }
+
+    /* Start reading data */
+    read_buf[0] = st->read_buf;
+    status = pj_ssl_sock_start_read2(ssock, st->pool, sizeof(st->read_buf), (void**)read_buf, 0);
+    if (status != PJ_SUCCESS) {
+	app_perror("...ERROR pj_ssl_sock_start_read2()", status);
+	goto on_return;
+    }
+
+    /* Start sending data */
+    while (st->sent < st->send_str_len) {
+	pj_ssize_t size;
+
+	size = st->send_str_len - st->sent;
+	status = pj_ssl_sock_send(ssock, (pj_ioqueue_op_key_t*)&st->send_key, 
+				  st->send_str + st->sent, &size, 0);
+	if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	    app_perror("...ERROR pj_ssl_sock_send()", status);
+	    goto on_return;
+	}
+
+	if (status == PJ_SUCCESS)
+	    st->sent += size;
+	else
+	    break;
+    }
+
+on_return:
+    st->err = status;
+
+    if (st->err != PJ_SUCCESS) {
+	pj_ssl_sock_close(ssock);
+	clients_num--;
+	return PJ_FALSE;
+    }
+
+    return PJ_TRUE;
+}
+
+
+static pj_bool_t ssl_on_accept_complete(pj_ssl_sock_t *ssock,
+					pj_ssl_sock_t *newsock,
+					const pj_sockaddr_t *src_addr,
+					int src_addr_len)
+{
+    struct test_state *parent_st = (struct test_state*) 
+				   pj_ssl_sock_get_user_data(ssock);
+    struct test_state *st;
+    void *read_buf[1];
+    pj_status_t status;
+
+    PJ_UNUSED_ARG(src_addr_len);
+
+    /* Duplicate parent test state to newly accepted test state */
+    st = pj_pool_zalloc(parent_st->pool, sizeof(struct test_state));
+    *st = *parent_st;
+    pj_ssl_sock_set_user_data(newsock, st);
+
+    if (st->is_verbose) {
+	pj_ssl_sock_info info;
+	char buf[64];
+	const char *tmp_st;
+
+	status = pj_ssl_sock_get_info(newsock, &info);
+	if (status != PJ_SUCCESS) {
+	    app_perror("...ERROR pj_ssl_sock_get_info()", status);
+	    goto on_return;
+	}
+
+	pj_sockaddr_print(src_addr, buf, sizeof(buf), 1);
+	PJ_LOG(3, ("", "...Accepted connection from %s", buf));
+
+	/* Print cipher name */
+	tmp_st = pj_ssl_cipher_name(info.cipher);
+	if (tmp_st == NULL)
+	    tmp_st = "[Unknown]";
+	PJ_LOG(3, ("", ".....Cipher: %s", tmp_st));
+
+	/* Print certificates info */
+	if (info.local_cert_info.subject.slen) {
+	    PJ_LOG(3, ("", ".....Local certificate info:"));
+	    dump_cert_info(".......", &info.local_cert_info);
+	}
+	if (info.remote_cert_info.subject.slen) {
+	    PJ_LOG(3, ("", ".....Remote certificate info:"));
+	    dump_cert_info(".......", &info.remote_cert_info);
+	}
+    }
+
+    /* Start reading data */
+    read_buf[0] = st->read_buf;
+    status = pj_ssl_sock_start_read2(newsock, st->pool, sizeof(st->read_buf), (void**)read_buf, 0);
+    if (status != PJ_SUCCESS) {
+	app_perror("...ERROR pj_ssl_sock_start_read2()", status);
+	goto on_return;
+    }
+
+    /* Start sending data */
+    while (st->sent < st->send_str_len) {
+	pj_ssize_t size;
+
+	size = st->send_str_len - st->sent;
+	status = pj_ssl_sock_send(newsock, (pj_ioqueue_op_key_t*)&st->send_key, 
+				  st->send_str + st->sent, &size, 0);
+	if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	    app_perror("...ERROR pj_ssl_sock_send()", status);
+	    goto on_return;
+	}
+
+	if (status == PJ_SUCCESS)
+	    st->sent += size;
+	else
+	    break;
+    }
+
+on_return:
+    st->err = status;
+
+    if (st->err != PJ_SUCCESS) {
+	pj_ssl_sock_close(newsock);
+	return PJ_FALSE;
+    }
+
+    return PJ_TRUE;
+}
+
+static pj_bool_t ssl_on_data_read(pj_ssl_sock_t *ssock,
+				  void *data,
+				  pj_size_t size,
+				  pj_status_t status,
+				  pj_size_t *remainder)
+{
+    struct test_state *st = (struct test_state*) 
+			     pj_ssl_sock_get_user_data(ssock);
+
+    PJ_UNUSED_ARG(remainder);
+    PJ_UNUSED_ARG(data);
+
+    if (size > 0) {
+	pj_size_t consumed;
+
+	/* Set random remainder */
+	*remainder = pj_rand() % 100;
+
+	/* Apply zero remainder if:
+	 * - remainder is less than size, or
+	 * - connection closed/error
+	 * - echo/check_eco set
+	 */
+	if (*remainder > size || status != PJ_SUCCESS || st->echo || st->check_echo)
+	    *remainder = 0;
+
+	consumed = size - *remainder;
+	st->recv += consumed;
+
+	//printf("%.*s", consumed, (char*)data);
+
+	pj_memmove(data, (char*)data + consumed, *remainder);
+
+	/* Echo data when specified to */
+	if (st->echo) {
+	    pj_ssize_t size_ = consumed;
+	    status = pj_ssl_sock_send(ssock, (pj_ioqueue_op_key_t*)&st->send_key, data, &size_, 0);
+	    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+		app_perror("...ERROR pj_ssl_sock_send()", status);
+		goto on_return;
+	    }
+
+	    if (status == PJ_SUCCESS)
+		st->sent += size_;
+	}
+
+	/* Verify echoed data when specified to */
+	if (st->check_echo) {
+	    if (!st->check_echo_ptr)
+		st->check_echo_ptr = st->send_str;
+
+	    if (pj_memcmp(st->check_echo_ptr, data, consumed)) {
+		status = PJ_EINVAL;
+		app_perror("...ERROR echoed data not exact", status);
+		goto on_return;
+	    }
+	    st->check_echo_ptr += consumed;
+
+	    /* Echo received completely */
+	    if (st->send_str_len == st->recv) {
+		pj_ssl_sock_info info;
+		char buf[64];
+
+		status = pj_ssl_sock_get_info(ssock, &info);
+		if (status != PJ_SUCCESS) {
+		    app_perror("...ERROR pj_ssl_sock_get_info()", status);
+		    goto on_return;
+		}
+
+		pj_sockaddr_print((pj_sockaddr_t*)&info.local_addr, buf, sizeof(buf), 1);
+		PJ_LOG(3, ("", "...%s successfully recv %d bytes echo", buf, st->recv));
+		st->done = PJ_TRUE;
+	    }
+	}
+    }
+
+    if (status != PJ_SUCCESS) {
+	if (status == PJ_EEOF) {
+	    status = PJ_SUCCESS;
+	    st->done = PJ_TRUE;
+	} else {
+	    app_perror("...ERROR ssl_on_data_read()", status);
+	}
+    }
+
+on_return:
+    st->err = status;
+
+    if (st->err != PJ_SUCCESS || st->done) {
+	pj_ssl_sock_close(ssock);
+	if (!st->is_server)
+	    clients_num--;
+	return PJ_FALSE;
+    }
+
+    return PJ_TRUE;
+}
+
+static pj_bool_t ssl_on_data_sent(pj_ssl_sock_t *ssock,
+				  pj_ioqueue_op_key_t *op_key,
+				  pj_ssize_t sent)
+{
+    struct test_state *st = (struct test_state*)
+			     pj_ssl_sock_get_user_data(ssock);
+    PJ_UNUSED_ARG(op_key);
+
+    if (sent < 0) {
+	st->err = -sent;
+    } else {
+	st->sent += sent;
+
+	/* Send more if any */
+	while (st->sent < st->send_str_len) {
+	    pj_ssize_t size;
+	    pj_status_t status;
+
+	    size = st->send_str_len - st->sent;
+	    status = pj_ssl_sock_send(ssock, (pj_ioqueue_op_key_t*)&st->send_key, 
+				      st->send_str + st->sent, &size, 0);
+	    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+		app_perror("...ERROR pj_ssl_sock_send()", status);
+		st->err = status;
+		break;
+	    }
+
+	    if (status == PJ_SUCCESS)
+		st->sent += size;
+	    else
+		break;
+	}
+    }
+
+    if (st->err != PJ_SUCCESS) {
+	pj_ssl_sock_close(ssock);
+	if (!st->is_server)
+	    clients_num--;
+	return PJ_FALSE;
+    }
+
+    return PJ_TRUE;
+}
+
+#define HTTP_REQ		"GET / HTTP/1.0\r\n\r\n";
+#define HTTP_SERVER_ADDR	"trac.pjsip.org"
+#define HTTP_SERVER_PORT	443
+
+static int https_client_test(unsigned ms_timeout)
+{
+    pj_pool_t *pool = NULL;
+    pj_ioqueue_t *ioqueue = NULL;
+    pj_timer_heap_t *timer = NULL;
+    pj_ssl_sock_t *ssock = NULL;
+    pj_ssl_sock_param param;
+    pj_status_t status;
+    struct test_state state = {0};
+    pj_sockaddr local_addr, rem_addr;
+    pj_str_t tmp_st;
+
+    pool = pj_pool_create(mem, "https_get", 256, 256, NULL);
+
+    status = pj_ioqueue_create(pool, 4, &ioqueue);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_timer_heap_create(pool, 4, &timer);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    state.pool = pool;
+    state.send_str = HTTP_REQ;
+    state.send_str_len = pj_ansi_strlen(state.send_str);
+    state.is_verbose = PJ_TRUE;
+
+    pj_ssl_sock_param_default(&param);
+    param.cb.on_connect_complete = &ssl_on_connect_complete;
+    param.cb.on_data_read = &ssl_on_data_read;
+    param.cb.on_data_sent = &ssl_on_data_sent;
+    param.ioqueue = ioqueue;
+    param.user_data = &state;
+    param.server_name = pj_str((char*)HTTP_SERVER_ADDR);
+    param.timer_heap = timer;
+    param.timeout.sec = 0;
+    param.timeout.msec = ms_timeout;
+    pj_time_val_normalize(&param.timeout);
+
+    status = pj_ssl_sock_create(pool, &param, &ssock);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    pj_sockaddr_init(PJ_AF_INET, &local_addr, pj_strset2(&tmp_st, "0.0.0.0"), 0);
+    pj_sockaddr_init(PJ_AF_INET, &rem_addr, pj_strset2(&tmp_st, HTTP_SERVER_ADDR), HTTP_SERVER_PORT);
+    status = pj_ssl_sock_start_connect(ssock, pool, &local_addr, &rem_addr, sizeof(rem_addr));
+    if (status == PJ_SUCCESS) {
+	ssl_on_connect_complete(ssock, PJ_SUCCESS);
+    } else if (status == PJ_EPENDING) {
+	status = PJ_SUCCESS;
+    } else {
+	goto on_return;
+    }
+
+    /* Wait until everything has been sent/received */
+    while (state.err == PJ_SUCCESS && !state.done) {
+#ifdef PJ_SYMBIAN
+	pj_symbianos_poll(-1, 1000);
+#else
+	pj_time_val delay = {0, 100};
+	pj_ioqueue_poll(ioqueue, &delay);
+	pj_timer_heap_poll(timer, &delay);
+#endif
+    }
+
+    if (state.err) {
+	status = state.err;
+	goto on_return;
+    }
+
+    PJ_LOG(3, ("", "...Done!"));
+    PJ_LOG(3, ("", ".....Sent/recv: %d/%d bytes", state.sent, state.recv));
+
+on_return:
+    if (ssock && !state.err && !state.done) 
+	pj_ssl_sock_close(ssock);
+    if (ioqueue)
+	pj_ioqueue_destroy(ioqueue);
+    if (timer)
+	pj_timer_heap_destroy(timer);
+    if (pool)
+	pj_pool_release(pool);
+
+    return status;
+}
+
+
+static int echo_test(pj_ssl_sock_proto srv_proto, pj_ssl_sock_proto cli_proto,
+		     pj_ssl_cipher srv_cipher, pj_ssl_cipher cli_cipher)
+{
+    pj_pool_t *pool = NULL;
+    pj_ioqueue_t *ioqueue = NULL;
+    pj_ssl_sock_t *ssock_serv = NULL;
+    pj_ssl_sock_t *ssock_cli = NULL;
+    pj_ssl_sock_param param;
+    struct test_state state_serv = { 0 };
+    struct test_state state_cli = { 0 };
+    pj_sockaddr addr, listen_addr;
+    pj_ssl_cipher ciphers[1];
+    pj_ssl_cert_t *cert = NULL;
+    pj_status_t status;
+
+    pool = pj_pool_create(mem, "ssl_echo", 256, 256, NULL);
+
+    status = pj_ioqueue_create(pool, 4, &ioqueue);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Set cert */
+    {
+	pj_str_t tmp1, tmp2, tmp3, tmp4;
+
+	status = pj_ssl_cert_load_from_files(pool, 
+					     pj_strset2(&tmp1, (char*)CERT_CA_FILE), 
+					     pj_strset2(&tmp2, (char*)CERT_FILE), 
+					     pj_strset2(&tmp3, (char*)CERT_PRIVKEY_FILE), 
+					     pj_strset2(&tmp4, (char*)CERT_PRIVKEY_PASS), 
+					     &cert);
+	if (status != PJ_SUCCESS) {
+	    goto on_return;
+	}
+    }
+
+    pj_ssl_sock_param_default(&param);
+    param.cb.on_accept_complete = &ssl_on_accept_complete;
+    param.cb.on_connect_complete = &ssl_on_connect_complete;
+    param.cb.on_data_read = &ssl_on_data_read;
+    param.cb.on_data_sent = &ssl_on_data_sent;
+    param.ioqueue = ioqueue;
+    param.ciphers = ciphers;
+
+    /* Init default bind address */
+    {
+	pj_str_t tmp_st;
+	pj_sockaddr_init(PJ_AF_INET, &addr, pj_strset2(&tmp_st, "127.0.0.1"), 0);
+    }
+
+    /* SERVER */
+    param.proto = srv_proto;
+    param.user_data = &state_serv;
+    param.ciphers_num = (srv_cipher == -1)? 0 : 1;
+    ciphers[0] = srv_cipher;
+
+    state_serv.pool = pool;
+    state_serv.echo = PJ_TRUE;
+    state_serv.is_server = PJ_TRUE;
+    state_serv.is_verbose = PJ_TRUE;
+
+    status = pj_ssl_sock_create(pool, &param, &ssock_serv);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_set_certificate(ssock_serv, pool, cert);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_start_accept(ssock_serv, pool, &addr, pj_sockaddr_get_len(&addr));
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Get listener address */
+    {
+	pj_ssl_sock_info info;
+
+	pj_ssl_sock_get_info(ssock_serv, &info);
+	pj_sockaddr_cp(&listen_addr, &info.local_addr);
+    }
+
+    /* CLIENT */
+    param.proto = cli_proto;
+    param.user_data = &state_cli;
+    param.ciphers_num = (cli_cipher == -1)? 0 : 1;
+    ciphers[0] = cli_cipher;
+
+    state_cli.pool = pool;
+    state_cli.check_echo = PJ_TRUE;
+    state_cli.is_verbose = PJ_TRUE;
+
+    {
+	pj_time_val now;
+
+	pj_gettimeofday(&now);
+	pj_srand((unsigned)now.sec);
+	state_cli.send_str_len = (pj_rand() % 5 + 1) * 1024 + pj_rand() % 1024;
+    }
+    state_cli.send_str = pj_pool_alloc(pool, state_cli.send_str_len);
+    {
+	unsigned i;
+	for (i = 0; i < state_cli.send_str_len; ++i)
+	    state_cli.send_str[i] = (char)(pj_rand() % 256);
+    }
+
+    status = pj_ssl_sock_create(pool, &param, &ssock_cli);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_start_connect(ssock_cli, pool, &addr, &listen_addr, pj_sockaddr_get_len(&addr));
+    if (status == PJ_SUCCESS) {
+	ssl_on_connect_complete(ssock_cli, PJ_SUCCESS);
+    } else if (status == PJ_EPENDING) {
+	status = PJ_SUCCESS;
+    } else {
+	goto on_return;
+    }
+
+    /* Wait until everything has been sent/received or error */
+    while (!state_serv.err && !state_cli.err && !state_serv.done && !state_cli.done)
+    {
+#ifdef PJ_SYMBIAN
+	pj_symbianos_poll(-1, 1000);
+#else
+	pj_time_val delay = {0, 100};
+	pj_ioqueue_poll(ioqueue, &delay);
+#endif
+    }
+
+    /* Clean up sockets */
+    {
+	pj_time_val delay = {0, 100};
+	while (pj_ioqueue_poll(ioqueue, &delay) > 0);
+    }
+
+    if (state_serv.err || state_cli.err) {
+	if (state_serv.err != PJ_SUCCESS)
+	    status = state_serv.err;
+	else
+	    status = state_cli.err;
+
+	goto on_return;
+    }
+
+    PJ_LOG(3, ("", "...Done!"));
+    PJ_LOG(3, ("", ".....Sent/recv: %d/%d bytes", state_cli.sent, state_cli.recv));
+
+on_return:
+    if (ssock_serv)
+	pj_ssl_sock_close(ssock_serv);
+    if (ssock_cli && !state_cli.err && !state_cli.done) 
+	pj_ssl_sock_close(ssock_cli);
+    if (ioqueue)
+	pj_ioqueue_destroy(ioqueue);
+    if (pool)
+	pj_pool_release(pool);
+
+    return status;
+}
+
+
+static pj_bool_t asock_on_data_read(pj_activesock_t *asock,
+				    void *data,
+				    pj_size_t size,
+				    pj_status_t status,
+				    pj_size_t *remainder)
+{
+    struct test_state *st = (struct test_state*)
+			     pj_activesock_get_user_data(asock);
+
+    PJ_UNUSED_ARG(data);
+    PJ_UNUSED_ARG(size);
+    PJ_UNUSED_ARG(remainder);
+
+    if (status != PJ_SUCCESS) {
+	if (status == PJ_EEOF) {
+	    status = PJ_SUCCESS;
+	    st->done = PJ_TRUE;
+	} else {
+	    app_perror("...ERROR asock_on_data_read()", status);
+	}
+    }
+
+    st->err = status;
+
+    if (st->err != PJ_SUCCESS || st->done) {
+	pj_activesock_close(asock);
+	if (!st->is_server)
+	    clients_num--;
+	return PJ_FALSE;
+    }
+
+    return PJ_TRUE;
+}
+
+
+static pj_bool_t asock_on_connect_complete(pj_activesock_t *asock,
+					   pj_status_t status)
+{
+    struct test_state *st = (struct test_state*)
+			     pj_activesock_get_user_data(asock);
+
+    if (status == PJ_SUCCESS) {
+	void *read_buf[1];
+
+	/* Start reading data */
+	read_buf[0] = st->read_buf;
+	status = pj_activesock_start_read2(asock, st->pool, sizeof(st->read_buf), (void**)read_buf, 0);
+	if (status != PJ_SUCCESS) {
+	    app_perror("...ERROR pj_ssl_sock_start_read2()", status);
+	}
+    }
+
+    st->err = status;
+
+    if (st->err != PJ_SUCCESS) {
+	pj_activesock_close(asock);
+	if (!st->is_server)
+	    clients_num--;
+	return PJ_FALSE;
+    }
+
+    return PJ_TRUE;
+}
+
+
+/* Raw TCP socket try to connect to SSL socket server, once
+ * connection established, it will just do nothing, SSL socket
+ * server should be able to close the connection after specified
+ * timeout period (set ms_timeout to 0 to disable timer).
+ */
+static int client_non_ssl(unsigned ms_timeout)
+{
+    pj_pool_t *pool = NULL;
+    pj_ioqueue_t *ioqueue = NULL;
+    pj_timer_heap_t *timer = NULL;
+    pj_ssl_sock_t *ssock_serv = NULL;
+    pj_activesock_t *asock_cli = NULL;
+    pj_activesock_cb asock_cb = { 0 };
+    pj_sock_t sock = PJ_INVALID_SOCKET;
+    pj_ssl_sock_param param;
+    struct test_state state_serv = { 0 };
+    struct test_state state_cli = { 0 };
+    pj_sockaddr listen_addr;
+    pj_ssl_cert_t *cert = NULL;
+    pj_status_t status;
+
+    pool = pj_pool_create(mem, "ssl_accept_raw_tcp", 256, 256, NULL);
+
+    status = pj_ioqueue_create(pool, 4, &ioqueue);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_timer_heap_create(pool, 4, &timer);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Set cert */
+    {
+	pj_str_t tmp1, tmp2, tmp3, tmp4;
+	status = pj_ssl_cert_load_from_files(pool, 
+					     pj_strset2(&tmp1, (char*)CERT_CA_FILE), 
+					     pj_strset2(&tmp2, (char*)CERT_FILE), 
+					     pj_strset2(&tmp3, (char*)CERT_PRIVKEY_FILE), 
+					     pj_strset2(&tmp4, (char*)CERT_PRIVKEY_PASS), 
+					     &cert);
+	if (status != PJ_SUCCESS) {
+	    goto on_return;
+	}
+    }
+
+    pj_ssl_sock_param_default(&param);
+    param.cb.on_accept_complete = &ssl_on_accept_complete;
+    param.cb.on_data_read = &ssl_on_data_read;
+    param.cb.on_data_sent = &ssl_on_data_sent;
+    param.ioqueue = ioqueue;
+    param.timer_heap = timer;
+    param.timeout.sec = 0;
+    param.timeout.msec = ms_timeout;
+    pj_time_val_normalize(&param.timeout);
+
+    /* SERVER */
+    param.user_data = &state_serv;
+    state_serv.pool = pool;
+    state_serv.is_server = PJ_TRUE;
+    state_serv.is_verbose = PJ_TRUE;
+
+    status = pj_ssl_sock_create(pool, &param, &ssock_serv);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_set_certificate(ssock_serv, pool, cert);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Init bind address */
+    {
+	pj_str_t tmp_st;
+	pj_sockaddr_init(PJ_AF_INET, &listen_addr, pj_strset2(&tmp_st, "127.0.0.1"), 0);
+    }
+
+    status = pj_ssl_sock_start_accept(ssock_serv, pool, &listen_addr, pj_sockaddr_get_len(&listen_addr));
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Update listener address */
+    {
+	pj_ssl_sock_info info;
+
+	pj_ssl_sock_get_info(ssock_serv, &info);
+	pj_sockaddr_cp(&listen_addr, &info.local_addr);
+    }
+
+    /* CLIENT */
+    state_cli.pool = pool;
+    status = pj_sock_socket(pj_AF_INET(), pj_SOCK_STREAM(), 0, &sock);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    asock_cb.on_connect_complete = &asock_on_connect_complete;
+    asock_cb.on_data_read = &asock_on_data_read;
+    status = pj_activesock_create(pool, sock, pj_SOCK_STREAM(), NULL, 
+				  ioqueue, &asock_cb, &state_cli, &asock_cli);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_activesock_start_connect(asock_cli, pool, (pj_sockaddr_t*)&listen_addr, 
+					 pj_sockaddr_get_len(&listen_addr));
+    if (status == PJ_SUCCESS) {
+	asock_on_connect_complete(asock_cli, PJ_SUCCESS);
+    } else if (status == PJ_EPENDING) {
+	status = PJ_SUCCESS;
+    } else {
+	goto on_return;
+    }
+
+    /* Wait until everything has been sent/received or error */
+    while (!state_serv.err && !state_cli.err && !state_serv.done && !state_cli.done)
+    {
+#ifdef PJ_SYMBIAN
+	pj_symbianos_poll(-1, 1000);
+#else
+	pj_time_val delay = {0, 100};
+	pj_ioqueue_poll(ioqueue, &delay);
+	pj_timer_heap_poll(timer, &delay);
+#endif
+    }
+
+    if (state_serv.err || state_cli.err) {
+	if (state_serv.err != PJ_SUCCESS)
+	    status = state_serv.err;
+	else
+	    status = state_cli.err;
+
+	goto on_return;
+    }
+
+    PJ_LOG(3, ("", "...Done!"));
+
+on_return:
+    if (ssock_serv)
+	pj_ssl_sock_close(ssock_serv);
+    if (asock_cli && !state_cli.err && !state_cli.done)
+	pj_activesock_close(asock_cli);
+    if (timer)
+	pj_timer_heap_destroy(timer);
+    if (ioqueue)
+	pj_ioqueue_destroy(ioqueue);
+    if (pool)
+	pj_pool_release(pool);
+
+    return status;
+}
+
+
+/* Test will perform multiple clients trying to connect to single server.
+ * Once SSL connection established, echo test will be performed.
+ */
+static int perf_test(unsigned clients, unsigned ms_handshake_timeout)
+{
+    pj_pool_t *pool = NULL;
+    pj_ioqueue_t *ioqueue = NULL;
+    pj_timer_heap_t *timer = NULL;
+    pj_ssl_sock_t *ssock_serv = NULL;
+    pj_ssl_sock_t **ssock_cli = NULL;
+    pj_ssl_sock_param param;
+    struct test_state state_serv = { 0 };
+    struct test_state *state_cli = NULL;
+    pj_sockaddr addr, listen_addr;
+    pj_ssl_cert_t *cert = NULL;
+    pj_status_t status;
+    unsigned i, cli_err = 0, tot_sent = 0, tot_recv = 0;
+    pj_time_val start;
+
+    pool = pj_pool_create(mem, "ssl_perf", 256, 256, NULL);
+
+    status = pj_ioqueue_create(pool, PJ_IOQUEUE_MAX_HANDLES, &ioqueue);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_timer_heap_create(pool, PJ_IOQUEUE_MAX_HANDLES, &timer);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Set cert */
+    {
+	pj_str_t tmp1, tmp2, tmp3, tmp4;
+
+	status = pj_ssl_cert_load_from_files(pool, 
+					     pj_strset2(&tmp1, (char*)CERT_CA_FILE), 
+					     pj_strset2(&tmp2, (char*)CERT_FILE), 
+					     pj_strset2(&tmp3, (char*)CERT_PRIVKEY_FILE), 
+					     pj_strset2(&tmp4, (char*)CERT_PRIVKEY_PASS), 
+					     &cert);
+	if (status != PJ_SUCCESS) {
+	    goto on_return;
+	}
+    }
+
+    pj_ssl_sock_param_default(&param);
+    param.cb.on_accept_complete = &ssl_on_accept_complete;
+    param.cb.on_connect_complete = &ssl_on_connect_complete;
+    param.cb.on_data_read = &ssl_on_data_read;
+    param.cb.on_data_sent = &ssl_on_data_sent;
+    param.ioqueue = ioqueue;
+    param.timer_heap = timer;
+    param.timeout.sec = 0;
+    param.timeout.msec = ms_handshake_timeout;
+    pj_time_val_normalize(&param.timeout);
+
+    /* Init default bind address */
+    {
+	pj_str_t tmp_st;
+	pj_sockaddr_init(PJ_AF_INET, &addr, pj_strset2(&tmp_st, "127.0.0.1"), 0);
+    }
+
+    /* SERVER */
+    param.user_data = &state_serv;
+
+    state_serv.pool = pool;
+    state_serv.echo = PJ_TRUE;
+    state_serv.is_server = PJ_TRUE;
+
+    status = pj_ssl_sock_create(pool, &param, &ssock_serv);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_set_certificate(ssock_serv, pool, cert);
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    status = pj_ssl_sock_start_accept(ssock_serv, pool, &addr, pj_sockaddr_get_len(&addr));
+    if (status != PJ_SUCCESS) {
+	goto on_return;
+    }
+
+    /* Get listening address for clients to connect to */
+    {
+	pj_ssl_sock_info info;
+	char buf[64];
+
+	pj_ssl_sock_get_info(ssock_serv, &info);
+	pj_sockaddr_cp(&listen_addr, &info.local_addr);
+
+	pj_sockaddr_print((pj_sockaddr_t*)&listen_addr, buf, sizeof(buf), 1);
+	PJ_LOG(3, ("", "...Listener ready at %s", buf));
+    }
+
+
+    /* CLIENTS */
+    clients_num = clients;
+    param.timeout.sec = 0;
+    param.timeout.msec = 0;
+
+    /* Init random seed */
+    {
+	pj_time_val now;
+
+	pj_gettimeofday(&now);
+	pj_srand((unsigned)now.sec);
+    }
+
+    /* Allocate SSL socket pointers and test state */
+    ssock_cli = pj_pool_calloc(pool, clients, sizeof(pj_ssl_sock_t*));
+    state_cli = pj_pool_calloc(pool, clients, sizeof(struct test_state));
+
+    /* Setup clients */
+    for (i = 0; i < clients; ++i) {
+	param.user_data = &state_cli[i];
+
+	state_cli[i].pool = pool;
+	state_cli[i].check_echo = PJ_TRUE;
+	state_cli[i].send_str_len = (pj_rand() % 5 + 1) * 1024 + pj_rand() % 1024;
+	state_cli[i].send_str = pj_pool_alloc(pool, state_cli[i].send_str_len);
+	{
+	    unsigned j;
+	    for (j = 0; j < state_cli[i].send_str_len; ++j)
+		state_cli[i].send_str[j] = (char)(pj_rand() % 256);
+	}
+
+	status = pj_ssl_sock_create(pool, &param, &ssock_cli[i]);
+	if (status != PJ_SUCCESS) {
+	    app_perror("...ERROR pj_ssl_sock_create()", status);
+	    cli_err++;
+	    clients_num--;
+	    continue;
+	}
+
+	status = pj_ssl_sock_start_connect(ssock_cli[i], pool, &addr, &listen_addr, pj_sockaddr_get_len(&addr));
+	if (status == PJ_SUCCESS) {
+	    ssl_on_connect_complete(ssock_cli[i], PJ_SUCCESS);
+	} else if (status == PJ_EPENDING) {
+	    status = PJ_SUCCESS;
+	} else {
+	    app_perror("...ERROR pj_ssl_sock_create()", status);
+	    pj_ssl_sock_close(ssock_cli[i]);
+	    ssock_cli[i] = NULL;
+	    clients_num--;
+	    cli_err++;
+	    continue;
+	}
+
+	/* Give chance to server to accept this client */
+	{
+	    unsigned n = 5;
+
+#ifdef PJ_SYMBIAN
+	    while(n && pj_symbianos_poll(-1, 1000))
+		n--;
+#else
+	    pj_time_val delay = {0, 100};
+	    while(n && pj_ioqueue_poll(ioqueue, &delay) > 0)
+		n--;
+#endif
+	}
+    }
+
+    /* Get start timestamp */
+    pj_gettimeofday(&start);
+
+    /* Wait until everything has been sent/received or error */
+    while (clients_num)
+    {
+#ifdef PJ_SYMBIAN
+	pj_symbianos_poll(-1, 1000);
+#else
+	pj_time_val delay = {0, 100};
+	pj_ioqueue_poll(ioqueue, &delay);
+	pj_timer_heap_poll(timer, &delay);
+#endif
+    }
+
+    /* Clean up sockets */
+    {
+	pj_time_val delay = {0, 500};
+	while (pj_ioqueue_poll(ioqueue, &delay) > 0);
+    }
+
+    if (state_serv.err != PJ_SUCCESS) {
+	status = state_serv.err;
+	goto on_return;
+    }
+
+    PJ_LOG(3, ("", "...Done!"));
+
+    /* SSL setup and data transfer duration */
+    {
+	pj_time_val stop;
+	
+	pj_gettimeofday(&stop);
+	PJ_TIME_VAL_SUB(stop, start);
+
+	PJ_LOG(3, ("", ".....Setup & data transfer duration: %d.%03ds", stop.sec, stop.msec));
+    }
+
+    /* Check clients status */
+    for (i = 0; i < clients; ++i) {
+	if (state_cli[i].err != PJ_SUCCESS)
+	    cli_err++;
+
+	tot_sent += state_cli[1].sent;
+	tot_recv += state_cli[1].recv;
+    }
+
+    PJ_LOG(3, ("", ".....Clients: %d (%d errors)", clients, cli_err));
+    PJ_LOG(3, ("", ".....Total sent/recv: %d/%d bytes", tot_sent, tot_recv));
+
+on_return:
+    if (ssock_serv) 
+	pj_ssl_sock_close(ssock_serv);
+
+    for (i = 0; i < clients; ++i) {
+	if (ssock_cli[i] && !state_cli[i].err && !state_cli[i].done)
+	    pj_ssl_sock_close(ssock_cli[i]);
+    }
+    if (ioqueue)
+	pj_ioqueue_destroy(ioqueue);
+    if (pool)
+	pj_pool_release(pool);
+
+    return status;
+}
+
+
+int ssl_sock_test(void)
+{
+    int ret;
+
+    PJ_LOG(3,("", "..get cipher list test"));
+    ret = get_cipher_list();
+    if (ret != 0)
+	return ret;
+
+    PJ_LOG(3,("", "..https client test"));
+    ret = https_client_test(30000);
+    // Ignore test result as internet connection may not be available.
+    //if (ret != 0)
+	//return ret;
+
+#ifndef PJ_SYMBIAN
+
+    PJ_LOG(3,("", "..echo test w/ TLSv1 and TLS_RSA_WITH_DES_CBC_SHA cipher"));
+    ret = echo_test(PJ_SSL_SOCK_PROTO_TLS1, PJ_SSL_SOCK_PROTO_TLS1, 
+		    TLS_RSA_WITH_DES_CBC_SHA, TLS_RSA_WITH_DES_CBC_SHA);
+    if (ret != 0)
+	return ret;
+
+    PJ_LOG(3,("", "..echo test w/ SSLv23 and TLS_RSA_WITH_AES_256_CBC_SHA cipher"));
+    ret = echo_test(PJ_SSL_SOCK_PROTO_SSL23, PJ_SSL_SOCK_PROTO_SSL23, 
+		    TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA);
+    if (ret != 0)
+	return ret;
+
+    PJ_LOG(3,("", "..echo test w/ incompatible proto"));
+    ret = echo_test(PJ_SSL_SOCK_PROTO_TLS1, PJ_SSL_SOCK_PROTO_SSL3, 
+		    TLS_RSA_WITH_DES_CBC_SHA, TLS_RSA_WITH_DES_CBC_SHA);
+    if (ret == 0)
+	return PJ_EBUG;
+
+    PJ_LOG(3,("", "..echo test w/ incompatible ciphers"));
+    ret = echo_test(PJ_SSL_SOCK_PROTO_DEFAULT, PJ_SSL_SOCK_PROTO_DEFAULT, 
+		    TLS_RSA_WITH_DES_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA);
+    if (ret == 0)
+	return PJ_EBUG;
+
+    PJ_LOG(3,("", "..client non-SSL (handshake timeout 5 secs)"));
+    ret = client_non_ssl(5000);
+    if (ret != 0)
+	return ret;
+
+    PJ_LOG(3,("", "..performance test"));
+    ret = perf_test(PJ_IOQUEUE_MAX_HANDLES/2 - 1, 0);
+    if (ret != 0)
+	return ret;
+
+#endif
+
+    return 0;
+}
+
+#else	/* INCLUDE_SSLSOCK_TEST */
+/* To prevent warning about "translation unit is empty"
+ * when this test is disabled. 
+ */
+int dummy_ssl_sock_test;
+#endif	/* INCLUDE_SSLSOCK_TEST */
+
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.c b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.c
index cf41eeac0e..5db7346d91 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.c
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.c
@@ -1,4 +1,4 @@
-/* $Id: test.c 2769 2009-06-17 12:36:36Z bennylp $ */
+/* $Id: test.c 2970 2009-10-26 15:47:52Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -167,6 +167,10 @@ int test_inner(void)
     DO_TEST( file_test() );
 #endif
 
+#if INCLUDE_SSLSOCK_TEST
+    DO_TEST( ssl_sock_test() );
+#endif
+
 #if INCLUDE_ECHO_SERVER
     //echo_server();
     //echo_srv_sync();
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.h b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.h
index 796ba6d07f..a35da79d30 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.h
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test.h
@@ -1,4 +1,4 @@
-/* $Id: test.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: test.h 2970 2009-10-26 15:47:52Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -54,6 +54,7 @@
 #define INCLUDE_UDP_IOQUEUE_TEST    GROUP_NETWORK
 #define INCLUDE_TCP_IOQUEUE_TEST    GROUP_NETWORK
 #define INCLUDE_ACTIVESOCK_TEST	    GROUP_NETWORK
+#define INCLUDE_SSLSOCK_TEST	    (PJ_HAS_SSL_SOCK && GROUP_NETWORK)
 #define INCLUDE_IOQUEUE_PERF_TEST   (PJ_HAS_THREADS && GROUP_NETWORK)
 #define INCLUDE_IOQUEUE_UNREG_TEST  (PJ_HAS_THREADS && GROUP_NETWORK)
 #define INCLUDE_FILE_TEST           GROUP_FILE
@@ -96,6 +97,7 @@ extern int tcp_ioqueue_test(void);
 extern int ioqueue_perf_test(void);
 extern int activesock_test(void);
 extern int file_test(void);
+extern int ssl_sock_test(void);
 
 extern int echo_server(void);
 extern int echo_client(int sock_type, const char *server, int port);
@@ -104,6 +106,7 @@ extern int echo_srv_sync(void);
 extern int udp_echo_srv_ioqueue(void);
 extern int echo_srv_common_loop(pj_atomic_t *bytes_counter);
 
+
 extern pj_pool_factory *mem;
 
 extern int          test_main(void);
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp
index 1f0cbc8316..788bd153b4 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: test_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjmedia/build/Makefile b/sflphone-common/libs/pjproject/pjmedia/build/Makefile
index b3a960c400..dae6d61bcd 100644
--- a/sflphone-common/libs/pjproject/pjmedia/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjmedia/build/Makefile
@@ -11,14 +11,14 @@ include $(PJDIR)/build/common.mak
 
 RULES_MAK := $(PJDIR)/build/rules.mak
 
-PJLIB_LIB:=$(PJDIR)/pjlib/lib/libpj-sfl-$(TARGET_NAME)$(LIBEXT)
-PJLIB_UTIL_LIB:=$(PJDIR)/pjlib-util/lib/libpjlib-util-sfl-$(TARGET_NAME)$(LIBEXT)
-PJNATH_LIB:=$(PJDIR)/pjnath/lib/libpjnath-sfl-$(TARGET_NAME)$(LIBEXT)
+PJLIB_LIB:=$(PJDIR)/pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT)
+PJLIB_UTIL_LIB:=$(PJDIR)/pjlib-util/lib/libpjlib-util-$(TARGET_NAME)$(LIBEXT)
+PJNATH_LIB:=$(PJDIR)/pjnath/lib/libpjnath-$(TARGET_NAME)$(LIBEXT)
 
-export PJMEDIA_LIB:=../lib/libpjmedia-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJMEDIA_CODEC_LIB:=../lib/libpjmedia-codec-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJSDP_LIB:=../lib/libpjsdp-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJMEDIA_AUDIODEV_LIB:=../lib/libpjmedia-audiodev-sfl-$(TARGET_NAME)$(LIBEXT)
+export PJMEDIA_LIB:=../lib/libpjmedia-$(TARGET_NAME)$(LIBEXT)
+export PJMEDIA_CODEC_LIB:=../lib/libpjmedia-codec-$(TARGET_NAME)$(LIBEXT)
+export PJSDP_LIB:=../lib/libpjsdp-$(TARGET_NAME)$(LIBEXT)
+export PJMEDIA_AUDIODEV_LIB:=../lib/libpjmedia-audiodev-$(TARGET_NAME)$(LIBEXT)
 
 
 ###############################################################################
@@ -30,7 +30,7 @@ export _CFLAGS 	:= $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
 		   $(CC_INC)../../pjlib-util/include \
 		   $(CC_INC)../../pjnath/include \
 		   $(CC_INC)../.. \
-		   $(SRTP_INC) -O2
+		   $(SRTP_INC) 
 export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
 		   $(HOST_CXXFLAGS) $(CXXFLAGS)
 export _LDFLAGS := $(subst /,$(HOST_PSEP),$(PJMEDIA_LIB)) \
@@ -49,7 +49,7 @@ export _LDFLAGS := $(subst /,$(HOST_PSEP),$(PJMEDIA_LIB)) \
 #
 export PJMEDIA_SRCDIR = ../src/pjmedia
 export PJMEDIA_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
-			alaw_ulaw.o alaw_ulaw_table.o clock_thread.o codec.o \
+			alaw_ulaw.o alaw_ulaw_table.o bidirectional.o clock_thread.o codec.o \
 			conference.o conf_switch.o delaybuf.o echo_common.o \
 			echo_port.o echo_suppress.o endpoint.o errno.o \
 			g711.o jbuf.o master_port.o mem_capture.o mem_player.o \
@@ -177,14 +177,14 @@ realclean:
 	$(subst @@,$(subst /,$(HOST_PSEP),.pjsdp-$(TARGET_NAME).depend),$(HOST_RMR))
 	
 	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $@
-	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia-audiodev $@
+	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA_AUDIODEV app=pjmedia-audiodev $@
 	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $@
 	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $@
 	$(MAKE) -f $(RULES_MAK) APP=PJSDP app=pjsdp $@
 
 depend:
 	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia $@
-	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA app=pjmedia-audiodev $@
+	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA_AUDIODEV app=pjmedia-audiodev $@
 	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA_CODEC app=pjmedia-codec $@
 	$(MAKE) -f $(RULES_MAK) APP=PJMEDIA_TEST app=pjmedia-test $@
 	$(MAKE) -f $(RULES_MAK) APP=PJSDP app=pjsdp $@
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h
index 713f252af9..2ab01f2718 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h
@@ -1,5 +1,5 @@
-/* $Id: config.h 2833 2009-07-14 14:33:39Z nanang $ */
-/*
+/* $Id: config.h 2977 2009-10-29 09:39:17Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #ifndef __PJMEDIA_AUDIODEV_CONFIG_H__
 #define __PJMEDIA_AUDIODEV_CONFIG_H__
@@ -44,9 +44,17 @@ PJ_BEGIN_DECL
 
 /**
  * This setting controls whether PortAudio support should be included.
+ *
+ * By default it is enabled except on Windows platforms (including
+ * Windows Mobile) and Symbian.
  */
 #ifndef PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO
-#   define PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO	1
+#   if (defined(PJ_WIN32) && PJ_WIN32!=0) || \
+       (defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0)
+#	define PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO	0
+#   else
+#	define PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO	1
+#   endif
 #endif
 
 
@@ -85,7 +93,7 @@ PJ_BEGIN_DECL
 
 
 /**
- * This setting controls whether Symbian audio (using built-in multimedia
+ * This setting controls whether Symbian audio (using built-in multimedia 
  * framework) support should be included.
  */
 #ifndef PJMEDIA_AUDIO_DEV_HAS_SYMB_MDA
@@ -96,7 +104,7 @@ PJ_BEGIN_DECL
 /**
  * This setting controls whether the Audio Device API should support
  * device implementation that is based on the old sound device API
- * (sound.h).
+ * (sound.h). 
  *
  * Enable this API if:
  *  - you have implemented your own sound device using the old sound
@@ -130,7 +138,7 @@ PJ_END_DECL
  * @{
 
 PJMEDIA Audio Device API is a cross-platform audio API appropriate for use with
-VoIP applications and many other types of audio streaming applications.
+VoIP applications and many other types of audio streaming applications. 
 
 The API abstracts many different audio API's on various platforms, such as:
  - PortAudio back-end for Win32, Windows Mobile, Linux, Unix, dan MacOS X.
@@ -140,45 +148,45 @@ The API abstracts many different audio API's on various platforms, such as:
  - null-audio implementation
  - and more to be implemented in the future
 
-The Audio Device API/library is an evolution from PJMEDIA @ref PJMED_SND and
+The Audio Device API/library is an evolution from PJMEDIA @ref PJMED_SND and 
 contains many enhancements:
 
  - Forward compatibility:
 \n
-   The new API has been designed to be extensible, it will support new API's as
-   well as new features that may be introduced in the future without breaking
-   compatibility with applications that use this API as well as compatibility
-   with existing device implementations.
+   The new API has been designed to be extensible, it will support new API's as 
+   well as new features that may be introduced in the future without breaking 
+   compatibility with applications that use this API as well as compatibility 
+   with existing device implementations. 
 
  - Device capabilities:
 \n
    At the heart of the API is device capabilities management, where all possible
    audio capabilities of audio devices should be able to be handled in a generic
-   manner. With this framework, new capabilities that may be discovered in the
-   future can be handled in manner without breaking existing applications.
+   manner. With this framework, new capabilities that may be discovered in the 
+   future can be handled in manner without breaking existing applications. 
 
  - Built-in features:
 \n
-   The device capabilities framework enables applications to use and control
+   The device capabilities framework enables applications to use and control 
    audio features built-in in the device, such as:
-    - echo cancellation,
-    - built-in codecs,
+    - echo cancellation, 
+    - built-in codecs, 
     - audio routing (e.g. to earpiece or loudspeaker),
     - volume control,
     - etc.
 
  - Codec support:
 \n
-   Some audio devices such as Nokia/Symbian Audio Proxy Server (APS) and Nokia
+   Some audio devices such as Nokia/Symbian Audio Proxy Server (APS) and Nokia 
    VoIP Audio Services (VAS) support built-in hardware audio codecs (e.g. G.729,
    iLBC, and AMR), and application can use the sound device in encoded mode to
-   make use of these hardware codecs.
+   make use of these hardware codecs. 
 
  - Multiple backends:
 \n
-   The new API supports multiple audio backends (called factories or drivers in
-   the code) to be active simultaneously, and audio backends may be added or
-   removed during run-time.
+   The new API supports multiple audio backends (called factories or drivers in 
+   the code) to be active simultaneously, and audio backends may be added or 
+   removed during run-time. 
 
 
 @section using Overview on using the API
@@ -186,11 +194,11 @@ contains many enhancements:
 @subsection getting_started Getting started
 
  -# <b>Configure the application's project settings</b>.\n
-    Add the following
+    Add the following 
     include:
     \code
     #include <pjmedia_audiodev.h>\endcode\n
-    And add <b>pjmedia-audiodev</b> library to your application link
+    And add <b>pjmedia-audiodev</b> library to your application link 
     specifications.\n
  -# <b>Compile time settings</b>.\n
     Use the compile time settings to enable or
@@ -221,7 +229,7 @@ contains many enhancements:
 
 	status = pjmedia_aud_dev_get_info(dev_idx, &info);
 	printf("%d. %s (in=%d, out=%d)\n",
-	       dev_idx, info.name,
+	       dev_idx, info.name, 
 	       info.input_count, info.output_count);
     }
     \endcode\n
@@ -266,7 +274,7 @@ Capabilities are encoded as #pjmedia_aud_dev_cap enumeration. Please see
  -# Info: You can set the device settings when opening audio stream by setting
     the flags and the appropriate setting in #pjmedia_aud_param when calling
     #pjmedia_aud_stream_create()\n
- -# Info: Once the audio stream is running, you can retrieve or change the stream
+ -# Info: Once the audio stream is running, you can retrieve or change the stream 
     setting by specifying the capability in #pjmedia_aud_stream_get_cap()
     and #pjmedia_aud_stream_set_cap() respectively.
 
@@ -321,12 +329,12 @@ or both.
     param.ext_fmt.vad = PJ_FALSE;
     \endcode\n
  -# Note that if non-PCM format is configured on the audio stream, the
-    capture and/or playback functions (#pjmedia_aud_rec_cb and
+    capture and/or playback functions (#pjmedia_aud_rec_cb and 
     #pjmedia_aud_play_cb respectively) will report the audio frame as
     #pjmedia_frame_ext structure instead of the #pjmedia_frame.
  -# Optionally configure other device's capabilities. The following snippet
     shows how to enable echo cancellation on the device (note that this
-    snippet may not be necessary since the setting may have been enabled
+    snippet may not be necessary since the setting may have been enabled 
     when calling #pjmedia_aud_dev_default_param() above):
     \code
     if (info.caps & PJMEDIA_AUD_DEV_CAP_EC) {
@@ -339,7 +347,7 @@ or both.
     \code
        pjmedia_aud_stream *stream;
 
-       status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb,
+       status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb, 
                                           user_data, &stream);
     \endcode
 
@@ -362,7 +370,7 @@ or both.
     \code
     // Volume setting is an unsigned integer showing the level in percent.
     unsigned vol;
-    status = pjmedia_aud_stream_get_cap(stream,
+    status = pjmedia_aud_stream_get_cap(stream, 
 					PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
 					&vol);
     \endcode
@@ -371,7 +379,7 @@ or both.
     \code
     // Volume setting is an unsigned integer showing the level in percent.
     unsigned vol = 50;
-    status = pjmedia_aud_stream_set_cap(stream,
+    status = pjmedia_aud_stream_set_cap(stream, 
 					PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
 					&vol);
     \endcode
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h
index fa47a23e79..627f588823 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2875 2009-08-13 15:57:26Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #ifndef __PJMEDIA_CODEC_CONFIG_H__
 #define __PJMEDIA_CODEC_CONFIG_H__
@@ -131,7 +131,7 @@
 
 /**
  * Enable Intel IPP AMR codec. This also needs to be enabled when AMR WB
- * codec is enabled. This option is only used when PJMEDIA_HAS_INTEL_IPP
+ * codec is enabled. This option is only used when PJMEDIA_HAS_INTEL_IPP 
  * is enabled.
  *
  * Default: 1
@@ -143,7 +143,7 @@
 
 /**
  * Enable Intel IPP AMR wideband codec. The PJMEDIA_HAS_INTEL_IPP_CODEC_AMR
- * option must also be enabled to use this codec. This option is only used
+ * option must also be enabled to use this codec. This option is only used 
  * when PJMEDIA_HAS_INTEL_IPP is enabled.
  *
  * Default: 1
@@ -279,8 +279,8 @@
 #endif
 
 /**
- * Default G.722.1 codec encoder and decoder level adjustment.
- * If the value is non-zero, then PCM input samples to the encoder will
+ * Default G.722.1 codec encoder and decoder level adjustment. 
+ * If the value is non-zero, then PCM input samples to the encoder will 
  * be shifted right by this value, and similarly PCM output samples from
  * the decoder will be shifted left by this value.
  *
@@ -294,7 +294,7 @@
 
 /**
  * Enabling both G.722.1 codec implementations, internal PJMEDIA and IPP,
- * may cause problem in SDP, i.e: payload types duplications. So, let's
+ * may cause problem in SDP, i.e: payload types duplications. So, let's 
  * just trap such case here at compile time.
  *
  * Application can control which implementation to be used by manipulating
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h
index 0ddaa6d294..d1c6e0364c 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h
@@ -1,5 +1,5 @@
-/* $Id: config.h 2850 2009-08-01 09:20:59Z bennylp $ */
-/*
+/* $Id: config.h 2977 2009-10-29 09:39:17Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #ifndef __PJMEDIA_CONFIG_H__
 #define __PJMEDIA_CONFIG_H__
@@ -45,11 +45,11 @@
 #endif
 
 /**
- * Specify whether we prefer to use audio switch board rather than
+ * Specify whether we prefer to use audio switch board rather than 
  * conference bridge.
  *
- * Audio switch board is a kind of simplified version of conference
- * bridge, but not really the subset of conference bridge. It has
+ * Audio switch board is a kind of simplified version of conference 
+ * bridge, but not really the subset of conference bridge. It has 
  * stricter rules on audio routing among the pjmedia ports and has
  * no audio mixing capability. The power of it is it could work with
  * encoded audio frames where conference brigde couldn't.
@@ -103,10 +103,16 @@
 #endif
 
 /**
- * Specify default sound device latency, in milisecond.
+ * Specify default sound device latency, in milisecond. 
+ *
+ * Default is 160ms for Windows Mobile and 140ms for other platforms.
  */
 #ifndef PJMEDIA_SND_DEFAULT_PLAY_LATENCY
-#   define PJMEDIA_SND_DEFAULT_PLAY_LATENCY 100
+#   if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE!=0
+#	define PJMEDIA_SND_DEFAULT_PLAY_LATENCY	    160
+#   else
+#	define PJMEDIA_SND_DEFAULT_PLAY_LATENCY	    140
+#   endif
 #endif
 
 
@@ -127,21 +133,21 @@
 /**
  * This denotes implementation of WSOLA using fixed or floating point WSOLA
  * algorithm. This implementation provides the best quality of the result,
- * at the expense of one frame delay and intensive processing power
+ * at the expense of one frame delay and intensive processing power 
  * requirement.
  */
 #define PJMEDIA_WSOLA_IMP_WSOLA		    1
 
 /**
- * This denotes implementation of WSOLA algorithm with faster waveform
- * similarity calculation. This implementation provides fair quality of
+ * This denotes implementation of WSOLA algorithm with faster waveform 
+ * similarity calculation. This implementation provides fair quality of 
  * the result with the main advantage of low processing power requirement.
  */
 #define PJMEDIA_WSOLA_IMP_WSOLA_LITE	    2
 
 /**
  * Specify type of Waveform based Similarity Overlap and Add (WSOLA) backend
- * implementation to be used. WSOLA is an algorithm to expand and/or compress
+ * implementation to be used. WSOLA is an algorithm to expand and/or compress 
  * audio frames without changing the pitch, and used by the delaybuf and as PLC
  * backend algorithm.
  *
@@ -154,8 +160,8 @@
 
 /**
  * Specify the default maximum duration of synthetic audio that is generated
- * by WSOLA. This value should be long enough to cover burst of packet losses.
- * but not too long, because as the duration increases the quality would
+ * by WSOLA. This value should be long enough to cover burst of packet losses. 
+ * but not too long, because as the duration increases the quality would 
  * degrade considerably.
  *
  * Note that this limit is only applied when fading is enabled in the WSOLA
@@ -184,7 +190,7 @@
 /**
  * Specify WSOLA algorithm delay, in milliseconds. The algorithm delay is
  * used to merge synthetic samples with real samples in the transition
- * between real to synthetic and vice versa. The longer the delay, the
+ * between real to synthetic and vice versa. The longer the delay, the 
  * smoother signal to be generated, at the expense of longer latency and
  * a slighty more computation.
  *
@@ -213,17 +219,17 @@
 /**
  * Specify number of sound buffers. Larger number is better for sound
  * stability and to accommodate sound devices that are unable to send frames
- * in timely manner, however it would probably cause more audio delay (and
+ * in timely manner, however it would probably cause more audio delay (and 
  * definitely will take more memory). One individual buffer is normally 10ms
  * or 20 ms long, depending on ptime settings (samples_per_frame value).
  *
  * The setting here currently is used by the conference bridge, the splitter
  * combiner port, and dsound.c.
  *
- * Default: 6
+ * Default: (PJMEDIA_SND_DEFAULT_PLAY_LATENCY+20)/20
  */
 #ifndef PJMEDIA_SOUND_BUFFER_COUNT
-#   define PJMEDIA_SOUND_BUFFER_COUNT	    6
+#   define PJMEDIA_SOUND_BUFFER_COUNT	    ((PJMEDIA_SND_DEFAULT_PLAY_LATENCY+20)/20)
 #endif
 
 
@@ -296,13 +302,13 @@
  */
 #define PJMEDIA_RESAMPLE_NONE		    1	/**< No resampling.	    */
 #define PJMEDIA_RESAMPLE_LIBRESAMPLE	    2	/**< Sample rate conversion 
-using libresample.  */
+						     using libresample.  */
 #define PJMEDIA_RESAMPLE_SPEEX		    3	/**< Sample rate conversion 
-using Speex. */
+						     using Speex. */
 #define PJMEDIA_RESAMPLE_LIBSAMPLERATE	    4	/**< Sample rate conversion 
-using libsamplerate
-(a.k.a Secret Rabbit Code)
-*/
+						     using libsamplerate 
+						     (a.k.a Secret Rabbit Code)
+						 */
 
 /**
  * Select which resample implementation to use. Currently pjmedia supports:
@@ -342,7 +348,7 @@ using libsamplerate
  * This (among other thing) will affect the size of buffers to be allocated
  * for outgoing packets.
  */
-#ifndef PJMEDIA_MAX_FRAME_DURATION_MS
+#ifndef PJMEDIA_MAX_FRAME_DURATION_MS   
 #   define PJMEDIA_MAX_FRAME_DURATION_MS   	200
 #endif
 
@@ -350,7 +356,7 @@ using libsamplerate
 /**
  * Max packet size to support.
  */
-#ifndef PJMEDIA_MAX_MTU
+#ifndef PJMEDIA_MAX_MTU			
 #  define PJMEDIA_MAX_MTU			1500
 #endif
 
@@ -358,7 +364,7 @@ using libsamplerate
 /**
  * DTMF/telephone-event duration, in timestamp.
  */
-#ifndef PJMEDIA_DTMF_DURATION
+#ifndef PJMEDIA_DTMF_DURATION		
 #  define PJMEDIA_DTMF_DURATION			1600	/* in timestamp */
 #endif
 
@@ -368,7 +374,7 @@ using libsamplerate
  * remote address required to make the stream switch transmission
  * to the source address.
  */
-#ifndef PJMEDIA_RTP_NAT_PROBATION_CNT
+#ifndef PJMEDIA_RTP_NAT_PROBATION_CNT	
 #  define PJMEDIA_RTP_NAT_PROBATION_CNT		10
 #endif
 
@@ -409,9 +415,9 @@ using libsamplerate
 
 /**
  * Specify whether RTCP XR support should be built into PJMEDIA. Disabling
- * this feature will reduce footprint slightly. Note that even when this
- * setting is enabled, RTCP XR processing will only be performed in stream
- * if it is enabled on run-time on per stream basis. See
+ * this feature will reduce footprint slightly. Note that even when this 
+ * setting is enabled, RTCP XR processing will only be performed in stream 
+ * if it is enabled on run-time on per stream basis. See  
  * PJMEDIA_STREAM_ENABLE_XR setting for more info.
  *
  * Default: 1 (yes).
@@ -423,7 +429,7 @@ using libsamplerate
 
 /**
  * The RTCP XR feature is activated and used by stream if \a enable_rtcp_xr
- * field of \a pjmedia_stream_info structure is non-zero. This setting
+ * field of \a pjmedia_stream_info structure is non-zero. This setting 
  * controls the default value of this field.
  *
  * Default: 0 (disabled)
@@ -442,7 +448,7 @@ using libsamplerate
  *
  * Specify zero to disable this feature.
  *
- * Default: 600 msec (which gives good probability that some RTP
+ * Default: 600 msec (which gives good probability that some RTP 
  *                    packets will reach the destination, but without
  *                    filling up the jitter buffer on the remote end).
  */
@@ -452,13 +458,13 @@ using libsamplerate
 
 
 /**
- * Specify the maximum duration of silence period in the codec, in msec.
+ * Specify the maximum duration of silence period in the codec, in msec. 
  * This is useful for example to keep NAT binding open in the firewall
- * and to prevent server from disconnecting the call because no
+ * and to prevent server from disconnecting the call because no 
  * RTP packet is received.
  *
  * This only applies to codecs that use PJMEDIA's VAD (pretty much
- * everything including iLBC, except Speex, which has its own DTX
+ * everything including iLBC, except Speex, which has its own DTX 
  * mechanism).
  *
  * Use (-1) to disable this feature.
@@ -510,7 +516,7 @@ using libsamplerate
  * remote, or should it rather use the codec preference as specified by
  * local endpoint.
  *
- * For example, suppose incoming call has codec order "8 0 3", while
+ * For example, suppose incoming call has codec order "8 0 3", while 
  * local codec order is "3 0 8". If remote codec order is preferable,
  * the selected codec will be 8, while if local codec order is preferable,
  * the selected codec will be 3.
@@ -538,7 +544,7 @@ using libsamplerate
 
 
 /**
- * This macro controls whether pjmedia should include SDP rtpmap
+ * This macro controls whether pjmedia should include SDP rtpmap 
  * attribute for static payload types. SDP rtpmap for static
  * payload types are optional, although they are normally included
  * for interoperability reason.
@@ -592,12 +598,12 @@ using libsamplerate
 #endif
 
 
-/*
+/* 
  * Below specifies the various tone generator backend algorithm.
  */
 
-/**
- * The math's sine(), floating point. This has very good precision
+/** 
+ * The math's sine(), floating point. This has very good precision 
  * but it's the slowest and requires floating point support and
  * linking with the math library.
  */
@@ -613,7 +619,7 @@ using libsamplerate
 /**
  * Fixed point using sine signal generated by Cordic algorithm. This
  * algorithm can be tuned to provide balance between precision and
- * performance by tuning the PJMEDIA_TONEGEN_FIXED_POINT_CORDIC_LOOP
+ * performance by tuning the PJMEDIA_TONEGEN_FIXED_POINT_CORDIC_LOOP 
  * setting, and may be suitable for platforms that lack floating-point
  * support.
  */
@@ -628,7 +634,7 @@ using libsamplerate
 
 
 /**
- * Specify the tone generator algorithm to be used. Please see
+ * Specify the tone generator algorithm to be used. Please see 
  * http://trac.pjsip.org/repos/wiki/Tone_Generator for the performance
  * analysis results of the various tone generator algorithms.
  *
@@ -648,7 +654,7 @@ using libsamplerate
 /**
  * Specify the number of calculation loops to generate the tone, when
  * PJMEDIA_TONEGEN_FIXED_POINT_CORDIC algorithm is used. With more calculation
- * loops, the tone signal gets more precise, but this will add more
+ * loops, the tone signal gets more precise, but this will add more 
  * processing.
  *
  * Valid values are 1 to 28.
@@ -736,8 +742,8 @@ using libsamplerate
 
 /**
  * Transport info (pjmedia_transport_info) contains a socket info and list
- * of transport specific info, since transports can be chained together
- * (for example, SRTP transport uses UDP transport as the underlying
+ * of transport specific info, since transports can be chained together 
+ * (for example, SRTP transport uses UDP transport as the underlying 
  * transport). This constant specifies maximum number of transport specific
  * infos that can be held in a transport info.
  */
@@ -780,22 +786,22 @@ using libsamplerate
 #endif
 
 /**
- * Specify another type of keep-alive and NAT hole punching
+ * Specify another type of keep-alive and NAT hole punching 
  * mechanism (the other type is PJMEDIA_STREAM_VAD_SUSPEND_MSEC
- * and PJMEDIA_CODEC_MAX_SILENCE_PERIOD) to be used by stream.
- * When this feature is enabled, the stream will initially
+ * and PJMEDIA_CODEC_MAX_SILENCE_PERIOD) to be used by stream. 
+ * When this feature is enabled, the stream will initially 
  * transmit one packet to punch a hole in NAT, and periodically
  * transmit keep-alive packets.
  *
  * When this alternative keep-alive mechanism is used, application
- * may disable the other keep-alive mechanisms, i.e: by setting
- * PJMEDIA_STREAM_VAD_SUSPEND_MSEC to zero and
+ * may disable the other keep-alive mechanisms, i.e: by setting 
+ * PJMEDIA_STREAM_VAD_SUSPEND_MSEC to zero and 
  * PJMEDIA_CODEC_MAX_SILENCE_PERIOD to -1.
  *
  * The value of this macro specifies the type of packet used
  * for the keep-alive mechanism. Valid values are
  * PJMEDIA_STREAM_KA_EMPTY_RTP and PJMEDIA_STREAM_KA_USER.
- *
+ * 
  * The duration of the keep-alive interval further can be set
  * with PJMEDIA_STREAM_KA_INTERVAL setting.
  *
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config_auto.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config_auto.h
deleted file mode 100644
index 2f544be76e..0000000000
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config_auto.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* pjmedia/include/pjmedia/config_auto.h.  Generated from config_auto.h.in by configure.  */
-/* $Id: config_auto.h.in 2394 2008-12-23 17:27:53Z bennylp $ */
-/*
- * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
- * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
- *
- * 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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#ifndef __PJMEDIA_CONFIG_AUTO_H_
-#define __PJMEDIA_CONFIG_AUTO_H_
-
-/**
- * @file config_auto.h
- * @brief PJMEDIA configuration as set by autoconf script
- */
-
-/*
- * Note:
- *	The configuration in config_site.h overrides any other settings,
- *	including the setting as detected by autoconf. 
- */
- 
-/* G711 codec */
-#ifndef PJMEDIA_HAS_G711_CODEC
-/* #undef PJMEDIA_HAS_G711_CODEC */
-#endif
-
-
-#endif	/* __PJMEDIA_CONFIG_AUTO_H_ */
-
-
-
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/sdp.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/sdp.h
index 8abfb125d0..eaa40c8851 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/sdp.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/sdp.h
@@ -1,4 +1,4 @@
-/* $Id: sdp.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sdp.h 2995 2009-11-09 05:18:12Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -652,6 +652,18 @@ PJ_DECL(pj_status_t) pjmedia_sdp_session_cmp(const pjmedia_sdp_session *sd1,
 					     unsigned option);
 
 
+/**
+ * Add new attribute to the session descriptor.
+ *
+ * @param s		The SDP session description.
+ * @param attr		Attribute to add.
+ *
+ * @return		PJ_SUCCESS or the appropriate error code.
+ */
+PJ_DECL(pj_status_t) pjmedia_sdp_session_add_attr(pjmedia_sdp_session *m,
+						  pjmedia_sdp_attr *attr);
+
+
 PJ_END_DECL
 
 /**
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport.h
index 0536f51d59..c7f693f2ad 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport.h
@@ -1,4 +1,4 @@
-/* $Id: transport.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: transport.h 2945 2009-10-14 13:13:18Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -503,7 +503,7 @@ struct pjmedia_transport_info
     /**
      * Specifies number of transport specific info included.
      */
-    int specific_info_cnt;
+    unsigned specific_info_cnt;
 
     /**
      * Buffer storage of transport specific info.
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport_ice.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport_ice.h
index 1c19b377bd..507d86db5b 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport_ice.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/transport_ice.h
@@ -1,4 +1,4 @@
-/* $Id: transport_ice.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: transport_ice.h 2945 2009-10-14 13:13:18Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -62,6 +62,52 @@ typedef struct pjmedia_ice_cb
 } pjmedia_ice_cb;
 
 
+/**
+ * This structure specifies ICE transport specific info. This structure
+ * will be filled in media transport specific info.
+ */
+typedef struct pjmedia_ice_transport_info
+{
+    /**
+     * ICE sesion state.
+     */
+    pj_ice_strans_state sess_state;
+
+    /**
+     * Session role.
+     */
+    pj_ice_sess_role role;
+
+    /**
+     * Number of components in the component array. Before ICE negotiation
+     * is complete, the number represents the number of components of the
+     * local agent. After ICE negotiation has been completed successfully,
+     * the number represents the number of common components between local
+     * and remote agents.
+     */
+    unsigned comp_cnt;
+
+    /**
+     * Array of ICE components. Typically the first element denotes RTP and
+     * second element denotes RTCP.
+     */
+    struct
+    {
+	/**
+	 * Local candidate type.
+	 */
+	pj_ice_cand_type    lcand_type;
+
+	/**
+	 * Remote candidate type.
+	 */
+	pj_ice_cand_type    rcand_type;
+
+    } comp[2];
+
+} pjmedia_ice_transport_info;
+
+
 /**
  * Options that can be specified when creating ICE transport.
  */
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
index 5b237e4c4d..a7587a3968 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
@@ -1,5 +1,5 @@
-/* $Id: symb_aps_dev.cpp 2677 2009-05-06 15:44:12Z nanang $ */
-/*
+/* $Id: symb_aps_dev.cpp 2958 2009-10-20 14:54:57Z nanang $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pjmedia-audiodev/audiodev_imp.h>
 #include <pjmedia-audiodev/errno.h>
@@ -35,7 +35,7 @@
 #include <APSClientSession.h>
 #include <pjmedia-codec/amr_helper.h>
 
-/* Pack/unpack G.729 frame of S60 DSP codec, taken from:
+/* Pack/unpack G.729 frame of S60 DSP codec, taken from:  
  * http://wiki.forum.nokia.com/index.php/TSS000776_-_Payload_conversion_for_G.729_audio_format
  */
 #include "s60_g729_bitstream.h"
@@ -59,8 +59,8 @@ static pj_uint8_t aps_g711_frame_len;
 
 
 /* APS factory */
-
-struct aps_factory {
+struct aps_factory
+{
     pjmedia_aud_dev_factory	 base;
     pj_pool_t			*pool;
     pj_pool_factory		*pf;
@@ -69,16 +69,15 @@ struct aps_factory {
 
 
 /* Forward declaration of CPjAudioEngine */
-
 class CPjAudioEngine;
 
 
 /* APS stream. */
-
-struct aps_stream {
+struct aps_stream
+{
     // Base
     pjmedia_aud_stream	 base;			/**< Base class.	*/
-
+    
     // Pool
     pj_pool_t		*pool;			/**< Memory pool.       */
 
@@ -101,7 +100,7 @@ struct aps_stream {
     pj_uint16_t		 rec_buf_len;		/**< Record buffer length. */
     void                *strm_data;		/**< Stream data.	*/
 
-    /* Resampling is needed, in case audio device is opened with clock rate
+    /* Resampling is needed, in case audio device is opened with clock rate 
      * other than 8kHz (only for PCM format).
      */
     pjmedia_resample	*play_resample;		/**< Resampler for playback. */
@@ -118,37 +117,38 @@ struct aps_stream {
 
 
 /* Prototypes */
-static pj_status_t factory_init (pjmedia_aud_dev_factory *f);
-static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f);
-static unsigned    factory_get_dev_count (pjmedia_aud_dev_factory *f);
-static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_dev_info *info);
-static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_param *param);
-static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
-        const pjmedia_aud_param *param,
-        pjmedia_aud_rec_cb rec_cb,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data,
-        pjmedia_aud_stream **p_aud_strm);
-
-static pj_status_t stream_get_param (pjmedia_aud_stream *strm,
-                                     pjmedia_aud_param *param);
-static pj_status_t stream_get_cap (pjmedia_aud_stream *strm,
-                                   pjmedia_aud_dev_cap cap,
-                                   void *value);
-static pj_status_t stream_set_cap (pjmedia_aud_stream *strm,
-                                   pjmedia_aud_dev_cap cap,
-                                   const void *value);
-static pj_status_t stream_start (pjmedia_aud_stream *strm);
-static pj_status_t stream_stop (pjmedia_aud_stream *strm);
-static pj_status_t stream_destroy (pjmedia_aud_stream *strm);
+static pj_status_t factory_init(pjmedia_aud_dev_factory *f);
+static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f);
+static unsigned    factory_get_dev_count(pjmedia_aud_dev_factory *f);
+static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
+					unsigned index,
+					pjmedia_aud_dev_info *info);
+static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
+					 unsigned index,
+					 pjmedia_aud_param *param);
+static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
+					 const pjmedia_aud_param *param,
+					 pjmedia_aud_rec_cb rec_cb,
+					 pjmedia_aud_play_cb play_cb,
+					 void *user_data,
+					 pjmedia_aud_stream **p_aud_strm);
+
+static pj_status_t stream_get_param(pjmedia_aud_stream *strm,
+				    pjmedia_aud_param *param);
+static pj_status_t stream_get_cap(pjmedia_aud_stream *strm,
+				  pjmedia_aud_dev_cap cap,
+				  void *value);
+static pj_status_t stream_set_cap(pjmedia_aud_stream *strm,
+				  pjmedia_aud_dev_cap cap,
+				  const void *value);
+static pj_status_t stream_start(pjmedia_aud_stream *strm);
+static pj_status_t stream_stop(pjmedia_aud_stream *strm);
+static pj_status_t stream_destroy(pjmedia_aud_stream *strm);
 
 
 /* Operations */
-static pjmedia_aud_dev_factory_op factory_op = {
+static pjmedia_aud_dev_factory_op factory_op =
+{
     &factory_init,
     &factory_destroy,
     &factory_get_dev_count,
@@ -157,7 +157,8 @@ static pjmedia_aud_dev_factory_op factory_op = {
     &factory_create_stream
 };
 
-static pjmedia_aud_stream_op stream_op = {
+static pjmedia_aud_stream_op stream_op = 
+{
     &stream_get_param,
     &stream_get_cap,
     &stream_set_cap,
@@ -174,344 +175,297 @@ static pjmedia_aud_stream_op stream_op = {
 /*
  * Utility: print sound device error
  */
-static void snd_perror (const char *title, TInt rc)
+static void snd_perror(const char *title, TInt rc)
 {
-    PJ_LOG (1, (THIS_FILE, "%s (error code=%d)", title, rc));
+    PJ_LOG(1,(THIS_FILE, "%s (error code=%d)", title, rc));
 }
 
-typedef void (*PjAudioCallback) (TAPSCommBuffer &buf, void *user_data);
+typedef void(*PjAudioCallback)(TAPSCommBuffer &buf, void *user_data);
 
 /**
  * Abstract class for handler of callbacks from APS client.
  */
-
 class MQueueHandlerObserver
 {
-
-    public:
-        MQueueHandlerObserver (PjAudioCallback RecCb_, PjAudioCallback PlayCb_,
-                               void *UserData_)
-                : RecCb (RecCb_), PlayCb (PlayCb_), UserData (UserData_) {}
-
-        virtual void InputStreamInitialized (const TInt aStatus) = 0;
-        virtual void OutputStreamInitialized (const TInt aStatus) = 0;
-        virtual void NotifyError (const TInt aError) = 0;
-
-    public:
-        PjAudioCallback RecCb;
-        PjAudioCallback PlayCb;
-        void *UserData;
+public:
+    MQueueHandlerObserver(PjAudioCallback RecCb_, PjAudioCallback PlayCb_,
+			  void *UserData_)
+    : RecCb(RecCb_), PlayCb(PlayCb_), UserData(UserData_)
+    {}
+
+    virtual void InputStreamInitialized(const TInt aStatus) = 0;
+    virtual void OutputStreamInitialized(const TInt aStatus) = 0;
+    virtual void NotifyError(const TInt aError) = 0;
+
+public:
+    PjAudioCallback RecCb;
+    PjAudioCallback PlayCb;
+    void *UserData;
 };
 
 /**
  * Handler for communication and data queue.
  */
-
 class CQueueHandler : public CActive
 {
+public:
+    // Types of queue handler
+    enum TQueueHandlerType {
+        ERecordCommQueue,
+        EPlayCommQueue,
+        ERecordQueue,
+        EPlayQueue
+    };
+
+    // The order corresponds to the APS Server state, do not change!
+    enum TState {
+    	EAPSPlayerInitialize        = 1,
+    	EAPSRecorderInitialize      = 2,
+    	EAPSPlayData                = 3,
+    	EAPSRecordData              = 4,
+    	EAPSPlayerInitComplete      = 5,
+    	EAPSRecorderInitComplete    = 6
+    };
+
+    static CQueueHandler* NewL(MQueueHandlerObserver* aObserver,
+			       RMsgQueue<TAPSCommBuffer>* aQ,
+			       RMsgQueue<TAPSCommBuffer>* aWriteQ,
+			       TQueueHandlerType aType)
+    {
+	CQueueHandler* self = new (ELeave) CQueueHandler(aObserver, aQ, aWriteQ,
+							 aType);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
 
-    public:
-        // Types of queue handler
-        enum TQueueHandlerType {
-            ERecordCommQueue,
-            EPlayCommQueue,
-            ERecordQueue,
-            EPlayQueue
-        };
-
-        // The order corresponds to the APS Server state, do not change!
-        enum TState {
-            EAPSPlayerInitialize        = 1,
-            EAPSRecorderInitialize      = 2,
-            EAPSPlayData                = 3,
-            EAPSRecordData              = 4,
-            EAPSPlayerInitComplete      = 5,
-            EAPSRecorderInitComplete    = 6
-        };
-
-        static CQueueHandler* NewL (MQueueHandlerObserver* aObserver,
-                                    RMsgQueue<TAPSCommBuffer>* aQ,
-                                    RMsgQueue<TAPSCommBuffer>* aWriteQ,
-                                    TQueueHandlerType aType) {
-            CQueueHandler* self = new (ELeave) CQueueHandler (aObserver, aQ, aWriteQ,
-                    aType);
-            CleanupStack::PushL (self);
-            self->ConstructL();
-            CleanupStack::Pop (self);
-            return self;
-        }
+    // Destructor
+    ~CQueueHandler() { Cancel(); }
 
-        // Destructor
-        ~CQueueHandler() {
-            Cancel();
-        }
+    // Start listening queue event
+    void Start() {
+	iQ->NotifyDataAvailable(iStatus);
+	SetActive();
+    }
 
-        // Start listening queue event
-        void Start() {
-            iQ->NotifyDataAvailable (iStatus);
-            SetActive();
-        }
+private:
+    // Constructor
+    CQueueHandler(MQueueHandlerObserver* aObserver,
+		  RMsgQueue<TAPSCommBuffer>* aQ,
+		  RMsgQueue<TAPSCommBuffer>* aWriteQ,
+		  TQueueHandlerType aType)
+	: CActive(CActive::EPriorityHigh),
+	  iQ(aQ), iWriteQ(aWriteQ), iObserver(aObserver), iType(aType)
+    {
+	CActiveScheduler::Add(this);
+
+	// use lower priority for comm queues
+	if ((iType == ERecordCommQueue) || (iType == EPlayCommQueue))
+	    SetPriority(CActive::EPriorityStandard);
+    }
 
-    private:
-        // Constructor
-        CQueueHandler (MQueueHandlerObserver* aObserver,
-                       RMsgQueue<TAPSCommBuffer>* aQ,
-                       RMsgQueue<TAPSCommBuffer>* aWriteQ,
-                       TQueueHandlerType aType)
-                : CActive (CActive::EPriorityHigh),
-                iQ (aQ), iWriteQ (aWriteQ), iObserver (aObserver), iType (aType) {
-            CActiveScheduler::Add (this);
+    // Second phase constructor
+    void ConstructL() {}
 
-            // use lower priority for comm queues
+    // Inherited from CActive
+    void DoCancel() { iQ->CancelDataAvailable(); }
 
-            if ( (iType == ERecordCommQueue) || (iType == EPlayCommQueue))
-                SetPriority (CActive::EPriorityStandard);
+    void RunL() {
+	if (iStatus != KErrNone) {
+	    iObserver->NotifyError(iStatus.Int());
+	    return;
         }
 
-        // Second phase constructor
-        void ConstructL() {}
-
-        // Inherited from CActive
-        void DoCancel() {
-            iQ->CancelDataAvailable();
+	TAPSCommBuffer buffer;
+	TInt ret = iQ->Receive(buffer);
+
+	if (ret != KErrNone) {
+	    iObserver->NotifyError(ret);
+	    return;
+	}
+
+	switch (iType) {
+	case ERecordQueue:
+	    if (buffer.iCommand == EAPSRecordData) {
+		iObserver->RecCb(buffer, iObserver->UserData);
+	    } else {
+		iObserver->NotifyError(buffer.iStatus);
+	    }
+	    break;
+
+	// Callbacks from the APS main thread
+	case EPlayCommQueue:
+	    switch (buffer.iCommand) {
+		case EAPSPlayData:
+		    if (buffer.iStatus == KErrUnderflow) {
+			iObserver->PlayCb(buffer, iObserver->UserData);
+			iWriteQ->Send(buffer);
+		    }
+		    break;
+		case EAPSPlayerInitialize:
+		    iObserver->NotifyError(buffer.iStatus);
+		    break;
+		case EAPSPlayerInitComplete:
+		    iObserver->OutputStreamInitialized(buffer.iStatus);
+		    break;
+		case EAPSRecorderInitComplete:
+		    iObserver->InputStreamInitialized(buffer.iStatus);
+		    break;
+		default:
+		    iObserver->NotifyError(buffer.iStatus);
+		    break;
+	    }
+	    break;
+
+	// Callbacks from the APS recorder thread
+	case ERecordCommQueue:
+	    switch (buffer.iCommand) {
+		// The APS recorder thread will only report errors
+		// through this handler. All other callbacks will be
+		// sent from the APS main thread through EPlayCommQueue
+		case EAPSRecorderInitialize:
+		case EAPSRecordData:
+		default:
+		    iObserver->NotifyError(buffer.iStatus);
+		    break;
+	    }
+	    break;
+
+	default:
+	    break;
         }
 
-        void RunL() {
-            if (iStatus != KErrNone) {
-                iObserver->NotifyError (iStatus.Int());
-                return;
-            }
-
-            TAPSCommBuffer buffer;
-
-            TInt ret = iQ->Receive (buffer);
-
-            if (ret != KErrNone) {
-                iObserver->NotifyError (ret);
-                return;
-            }
-
-            switch (iType) {
-
-                case ERecordQueue:
-
-                    if (buffer.iCommand == EAPSRecordData) {
-                        iObserver->RecCb (buffer, iObserver->UserData);
-                    } else {
-                        iObserver->NotifyError (buffer.iStatus);
-                    }
-
-                    break;
-
-                    // Callbacks from the APS main thread
-
-                case EPlayCommQueue:
-
-                    switch (buffer.iCommand) {
-
-                        case EAPSPlayData:
-
-                            if (buffer.iStatus == KErrUnderflow) {
-                                iObserver->PlayCb (buffer, iObserver->UserData);
-                                iWriteQ->Send (buffer);
-                            }
-
-                            break;
-
-                        case EAPSPlayerInitialize:
-                            iObserver->NotifyError (buffer.iStatus);
-                            break;
-
-                        case EAPSPlayerInitComplete:
-                            iObserver->OutputStreamInitialized (buffer.iStatus);
-                            break;
-
-                        case EAPSRecorderInitComplete:
-                            iObserver->InputStreamInitialized (buffer.iStatus);
-                            break;
-
-                        default:
-                            iObserver->NotifyError (buffer.iStatus);
-                            break;
-                    }
-
-                    break;
-
-                    // Callbacks from the APS recorder thread
-
-                case ERecordCommQueue:
-
-                    switch (buffer.iCommand) {
-                            // The APS recorder thread will only report errors
-                            // through this handler. All other callbacks will be
-                            // sent from the APS main thread through EPlayCommQueue
-
-                        case EAPSRecorderInitialize:
-
-                        case EAPSRecordData:
-
-                        default:
-                            iObserver->NotifyError (buffer.iStatus);
-                            break;
-                    }
-
-                    break;
-
-                default:
-                    break;
-            }
-
-            // issue next request
-            iQ->NotifyDataAvailable (iStatus);
-
-            SetActive();
-        }
+        // issue next request
+        iQ->NotifyDataAvailable(iStatus);
+        SetActive();
+    }
 
-        TInt RunError (TInt) {
-            return 0;
-        }
+    TInt RunError(TInt) {
+	return 0;
+    }
 
-        // Data
-        RMsgQueue<TAPSCommBuffer>	*iQ;   // (not owned)
-        RMsgQueue<TAPSCommBuffer>	*iWriteQ;   // (not owned)
-        MQueueHandlerObserver	*iObserver; // (not owned)
-        TQueueHandlerType            iType;
+    // Data
+    RMsgQueue<TAPSCommBuffer>	*iQ;   // (not owned)
+    RMsgQueue<TAPSCommBuffer>	*iWriteQ;   // (not owned)
+    MQueueHandlerObserver	*iObserver; // (not owned)
+    TQueueHandlerType            iType;
 };
 
 /*
  * Audio setting for CPjAudioEngine.
  */
-
 class CPjAudioSetting
 {
-
-    public:
-        TFourCC		 fourcc;
-        TAPSCodecMode	 mode;
-        TBool		 plc;
-        TBool		 vad;
-        TBool		 cng;
-        TBool		 loudspk;
+public:
+    TFourCC		 fourcc;
+    TAPSCodecMode	 mode;
+    TBool		 plc;
+    TBool		 vad;
+    TBool		 cng;
+    TBool		 loudspk;
 };
 
 /*
  * Implementation: Symbian Input & Output Stream.
  */
-
 class CPjAudioEngine : public CBase, MQueueHandlerObserver
 {
-
-    public:
-        enum State {
-            STATE_NULL,
-            STATE_INITIALIZING,
-            STATE_READY,
-            STATE_STREAMING,
-            STATE_PENDING_STOP
-        };
-
-        ~CPjAudioEngine();
-
-        static CPjAudioEngine *NewL (struct aps_stream *parent_strm,
-                                     PjAudioCallback rec_cb,
-                                     PjAudioCallback play_cb,
-                                     void *user_data,
-                                     const CPjAudioSetting &setting);
-
-        TInt StartL();
-        void Stop();
-
-        TInt ActivateSpeaker (TBool active);
-
-        TInt SetVolume (TInt vol) {
-            return iSession.SetVolume (vol);
-        }
-
-        TInt GetVolume() {
-            return iSession.Volume();
-        }
-
-        TInt GetMaxVolume() {
-            return iSession.MaxVolume();
-        }
-
-        TInt SetGain (TInt gain) {
-            return iSession.SetGain (gain);
-        }
-
-        TInt GetGain() {
-            return iSession.Gain();
-        }
-
-        TInt GetMaxGain() {
-            return iSession.MaxGain();
-        }
-
-    private:
-        CPjAudioEngine (struct aps_stream *parent_strm,
-                        PjAudioCallback rec_cb,
-                        PjAudioCallback play_cb,
-                        void *user_data,
-                        const CPjAudioSetting &setting);
-        void ConstructL();
-
-        TInt InitPlayL();
-        TInt InitRecL();
-        TInt StartStreamL();
-
-        // Inherited from MQueueHandlerObserver
-        virtual void InputStreamInitialized (const TInt aStatus);
-        virtual void OutputStreamInitialized (const TInt aStatus);
-        virtual void NotifyError (const TInt aError);
-
-        State			 state_;
-
-        struct aps_stream		*parentStrm_;
-        CPjAudioSetting		 setting_;
-
-        RAPSSession                  iSession;
-        TAPSInitSettings             iPlaySettings;
-        TAPSInitSettings             iRecSettings;
-
-        RMsgQueue<TAPSCommBuffer>    iReadQ;
-        RMsgQueue<TAPSCommBuffer>    iReadCommQ;
-        RMsgQueue<TAPSCommBuffer>    iWriteQ;
-        RMsgQueue<TAPSCommBuffer>    iWriteCommQ;
-
-        CQueueHandler		*iPlayCommHandler;
-        CQueueHandler		*iRecCommHandler;
-        CQueueHandler		*iRecHandler;
+public:
+    enum State
+    {
+	STATE_NULL,
+	STATE_INITIALIZING,
+	STATE_READY,
+	STATE_STREAMING,
+	STATE_PENDING_STOP
+    };
+
+    ~CPjAudioEngine();
+
+    static CPjAudioEngine *NewL(struct aps_stream *parent_strm,
+			        PjAudioCallback rec_cb,
+				PjAudioCallback play_cb,
+				void *user_data,
+				const CPjAudioSetting &setting);
+
+    TInt StartL();
+    void Stop();
+
+    TInt ActivateSpeaker(TBool active);
+    
+    TInt SetVolume(TInt vol) { return iSession.SetVolume(vol); }
+    TInt GetVolume() { return iSession.Volume(); }
+    TInt GetMaxVolume() { return iSession.MaxVolume(); }
+    
+    TInt SetGain(TInt gain) { return iSession.SetGain(gain); }
+    TInt GetGain() { return iSession.Gain(); }
+    TInt GetMaxGain() { return iSession.MaxGain(); }
+
+private:
+    CPjAudioEngine(struct aps_stream *parent_strm,
+		   PjAudioCallback rec_cb,
+		   PjAudioCallback play_cb,
+		   void *user_data,
+		   const CPjAudioSetting &setting);
+    void ConstructL();
+
+    TInt InitPlayL();
+    TInt InitRecL();
+    TInt StartStreamL();
+
+    // Inherited from MQueueHandlerObserver
+    virtual void InputStreamInitialized(const TInt aStatus);
+    virtual void OutputStreamInitialized(const TInt aStatus);
+    virtual void NotifyError(const TInt aError);
+
+    State			 state_;
+    struct aps_stream		*parentStrm_;
+    CPjAudioSetting		 setting_;
+
+    RAPSSession                  iSession;
+    TAPSInitSettings             iPlaySettings;
+    TAPSInitSettings             iRecSettings;
+
+    RMsgQueue<TAPSCommBuffer>    iReadQ;
+    RMsgQueue<TAPSCommBuffer>    iReadCommQ;
+    RMsgQueue<TAPSCommBuffer>    iWriteQ;
+    RMsgQueue<TAPSCommBuffer>    iWriteCommQ;
+
+    CQueueHandler		*iPlayCommHandler;
+    CQueueHandler		*iRecCommHandler;
+    CQueueHandler		*iRecHandler;
 };
 
 
-CPjAudioEngine* CPjAudioEngine::NewL (struct aps_stream *parent_strm,
-                                      PjAudioCallback rec_cb,
-                                      PjAudioCallback play_cb,
-                                      void *user_data,
-                                      const CPjAudioSetting &setting)
+CPjAudioEngine* CPjAudioEngine::NewL(struct aps_stream *parent_strm,
+				     PjAudioCallback rec_cb,
+				     PjAudioCallback play_cb,
+				     void *user_data,
+				     const CPjAudioSetting &setting)
 {
-    CPjAudioEngine* self = new (ELeave) CPjAudioEngine (parent_strm,
-            rec_cb, play_cb,
-            user_data,
-            setting);
-    CleanupStack::PushL (self);
+    CPjAudioEngine* self = new (ELeave) CPjAudioEngine(parent_strm,
+						       rec_cb, play_cb,
+						       user_data,
+						       setting);
+    CleanupStack::PushL(self);
     self->ConstructL();
-    CleanupStack::Pop (self);
+    CleanupStack::Pop(self);
     return self;
 }
 
-CPjAudioEngine::CPjAudioEngine (struct aps_stream *parent_strm,
-                                PjAudioCallback rec_cb,
-                                PjAudioCallback play_cb,
-                                void *user_data,
-                                const CPjAudioSetting &setting)
-        : MQueueHandlerObserver (rec_cb, play_cb, user_data),
-        state_ (STATE_NULL),
-        parentStrm_ (parent_strm),
-        setting_ (setting),
-        iPlayCommHandler (0),
-        iRecCommHandler (0),
-        iRecHandler (0)
+CPjAudioEngine::CPjAudioEngine(struct aps_stream *parent_strm,
+			       PjAudioCallback rec_cb,
+			       PjAudioCallback play_cb,
+			       void *user_data,
+			       const CPjAudioSetting &setting)
+      : MQueueHandlerObserver(rec_cb, play_cb, user_data),
+	state_(STATE_NULL),
+	parentStrm_(parent_strm),
+	setting_(setting),
+	iPlayCommHandler(0),
+	iRecCommHandler(0),
+	iRecHandler(0)
 {
 }
 
@@ -528,57 +482,49 @@ CPjAudioEngine::~CPjAudioEngine()
     // the client session.
     TTime start, now;
     enum { APS_CLOSE_WAIT_TIME = 200 }; /* in msecs */
-
+    
     start.UniversalTime();
-
     do {
-        pj_symbianos_poll (-1, APS_CLOSE_WAIT_TIME);
-        now.UniversalTime();
-    } while (now.MicroSecondsFrom (start) < APS_CLOSE_WAIT_TIME * 1000);
+	pj_symbianos_poll(-1, APS_CLOSE_WAIT_TIME);
+	now.UniversalTime();
+    } while (now.MicroSecondsFrom(start) < APS_CLOSE_WAIT_TIME * 1000);
 
     iSession.Close();
 
     if (state_ == STATE_READY) {
-        if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
-            iReadQ.Close();
-            iReadCommQ.Close();
-        }
-
-        iWriteQ.Close();
-
-        iWriteCommQ.Close();
+	if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
+	    iReadQ.Close();
+	    iReadCommQ.Close();
+	}
+	iWriteQ.Close();
+	iWriteCommQ.Close();
     }
-
-    TRACE_ ( (THIS_FILE, "Sound device destroyed"));
+    
+    TRACE_((THIS_FILE, "Sound device destroyed"));
 }
 
 TInt CPjAudioEngine::InitPlayL()
 {
-    TInt err = iSession.InitializePlayer (iPlaySettings);
-
+    TInt err = iSession.InitializePlayer(iPlaySettings);
     if (err != KErrNone) {
-        snd_perror ("Failed to initialize player", err);
-        return err;
+	snd_perror("Failed to initialize player", err);
+	return err;
     }
 
     // Open message queues for the output stream
     TBuf<128> buf2 = iPlaySettings.iGlobal;
-
-    buf2.Append (_L ("PlayQueue"));
-
+    buf2.Append(_L("PlayQueue"));
     TBuf<128> buf3 = iPlaySettings.iGlobal;
+    buf3.Append(_L("PlayCommQueue"));
 
-    buf3.Append (_L ("PlayCommQueue"));
-
-    while (iWriteQ.OpenGlobal (buf2))
-        User::After (10);
-
-    while (iWriteCommQ.OpenGlobal (buf3))
-        User::After (10);
+    while (iWriteQ.OpenGlobal(buf2))
+	User::After(10);
+    while (iWriteCommQ.OpenGlobal(buf3))
+	User::After(10);
 
     // Construct message queue handler
-    iPlayCommHandler = CQueueHandler::NewL (this, &iWriteCommQ, &iWriteQ,
-                                            CQueueHandler::EPlayCommQueue);
+    iPlayCommHandler = CQueueHandler::NewL(this, &iWriteCommQ, &iWriteQ,
+					   CQueueHandler::EPlayCommQueue);
 
     // Start observing APS callbacks on output stream message queue
     iPlayCommHandler->Start();
@@ -589,38 +535,32 @@ TInt CPjAudioEngine::InitPlayL()
 TInt CPjAudioEngine::InitRecL()
 {
     // Initialize input stream device
-    TInt err = iSession.InitializeRecorder (iRecSettings);
-
+    TInt err = iSession.InitializeRecorder(iRecSettings);
     if (err != KErrNone && err != KErrAlreadyExists) {
-        snd_perror ("Failed to initialize recorder", err);
-        return err;
+	snd_perror("Failed to initialize recorder", err);
+	return err;
     }
 
     TBuf<128> buf1 = iRecSettings.iGlobal;
-
-    buf1.Append (_L ("RecordQueue"));
+    buf1.Append(_L("RecordQueue"));
     TBuf<128> buf4 = iRecSettings.iGlobal;
-    buf4.Append (_L ("RecordCommQueue"));
+    buf4.Append(_L("RecordCommQueue"));
 
     // Must wait for APS thread to finish creating message queues
     // before we can open and use them.
-
-    while (iReadQ.OpenGlobal (buf1))
-        User::After (10);
-
-    while (iReadCommQ.OpenGlobal (buf4))
-        User::After (10);
+    while (iReadQ.OpenGlobal(buf1))
+	User::After(10);
+    while (iReadCommQ.OpenGlobal(buf4))
+	User::After(10);
 
     // Construct message queue handlers
-    iRecHandler = CQueueHandler::NewL (this, &iReadQ, NULL,
-                                       CQueueHandler::ERecordQueue);
-
-    iRecCommHandler = CQueueHandler::NewL (this, &iReadCommQ, NULL,
-                                           CQueueHandler::ERecordCommQueue);
+    iRecHandler = CQueueHandler::NewL(this, &iReadQ, NULL,
+				      CQueueHandler::ERecordQueue);
+    iRecCommHandler = CQueueHandler::NewL(this, &iReadCommQ, NULL,
+					  CQueueHandler::ERecordCommQueue);
 
     // Start observing APS callbacks from on input stream message queue
     iRecHandler->Start();
-
     iRecCommHandler->Start();
 
     return 0;
@@ -629,10 +569,10 @@ TInt CPjAudioEngine::InitRecL()
 TInt CPjAudioEngine::StartL()
 {
     if (state_ == STATE_READY)
-        return StartStreamL();
-
-    PJ_ASSERT_RETURN (state_ == STATE_NULL, PJMEDIA_EAUD_INVOP);
+	return StartStreamL();
 
+    PJ_ASSERT_RETURN(state_ == STATE_NULL, PJMEDIA_EAUD_INVOP);
+    
     // Even if only capturer are opened, playback thread of APS Server need
     // to be run(?). Since some messages will be delivered via play comm queue.
     state_ = STATE_INITIALIZING;
@@ -643,18 +583,17 @@ TInt CPjAudioEngine::StartL()
 void CPjAudioEngine::Stop()
 {
     if (state_ == STATE_STREAMING) {
-        iSession.Stop();
-        state_ = STATE_READY;
-        TRACE_ ( (THIS_FILE, "Sound device stopped"));
+	iSession.Stop();
+	state_ = STATE_READY;
+	TRACE_((THIS_FILE, "Sound device stopped"));
     } else if (state_ == STATE_INITIALIZING) {
-        // Initialization is on progress, so let's set the state to
-        // STATE_PENDING_STOP to prevent it starting the stream.
-        state_ = STATE_PENDING_STOP;
-
-        // Then wait until initialization done.
-
-        while (state_ != STATE_READY)
-            pj_symbianos_poll (-1, 100);
+	// Initialization is on progress, so let's set the state to 
+	// STATE_PENDING_STOP to prevent it starting the stream.
+	state_ = STATE_PENDING_STOP;
+	
+	// Then wait until initialization done.
+	while (state_ != STATE_READY)
+	    pj_symbianos_poll(-1, 100);
     }
 }
 
@@ -663,96 +602,94 @@ void CPjAudioEngine::ConstructL()
     // Recorder settings
     iRecSettings.iFourCC		= setting_.fourcc;
     iRecSettings.iGlobal		= APP_UID;
-    iRecSettings.iPriority		= TMdaPriority (100);
-    iRecSettings.iPreference		= TMdaPriorityPreference (0x05210001);
+    iRecSettings.iPriority		= TMdaPriority(100);
+    iRecSettings.iPreference		= TMdaPriorityPreference(0x05210001);
     iRecSettings.iSettings.iChannels	= EMMFMono;
     iRecSettings.iSettings.iSampleRate	= EMMFSampleRate8000Hz;
 
     // Player settings
     iPlaySettings.iFourCC		= setting_.fourcc;
     iPlaySettings.iGlobal		= APP_UID;
-    iPlaySettings.iPriority		= TMdaPriority (100);
-    iPlaySettings.iPreference		= TMdaPriorityPreference (0x05220001);
+    iPlaySettings.iPriority		= TMdaPriority(100);
+    iPlaySettings.iPreference		= TMdaPriorityPreference(0x05220001);
     iPlaySettings.iSettings.iChannels	= EMMFMono;
     iPlaySettings.iSettings.iSampleRate = EMMFSampleRate8000Hz;
     iPlaySettings.iSettings.iVolume	= 0;
 
-    User::LeaveIfError (iSession.Connect());
+    User::LeaveIfError(iSession.Connect());
 }
 
 TInt CPjAudioEngine::StartStreamL()
 {
-    pj_assert (state_==STATE_READY || state_==STATE_INITIALIZING);
-
-    iSession.SetCng (setting_.cng);
-    iSession.SetVadMode (setting_.vad);
-    iSession.SetPlc (setting_.plc);
-    iSession.SetEncoderMode (setting_.mode);
-    iSession.SetDecoderMode (setting_.mode);
-    iSession.ActivateLoudspeaker (setting_.loudspk);
+    pj_assert(state_==STATE_READY || state_==STATE_INITIALIZING); 
+    
+    iSession.SetCng(setting_.cng);
+    iSession.SetVadMode(setting_.vad);
+    iSession.SetPlc(setting_.plc);
+    iSession.SetEncoderMode(setting_.mode);
+    iSession.SetDecoderMode(setting_.mode);
+    iSession.ActivateLoudspeaker(setting_.loudspk);
 
     // Not only capture
-
     if (parentStrm_->param.dir != PJMEDIA_DIR_CAPTURE) {
-        iSession.Write();
-        TRACE_ ( (THIS_FILE, "Player started"));
+	iSession.Write();
+	TRACE_((THIS_FILE, "Player started"));
     }
 
     // Not only playback
     if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
-        iSession.Read();
-        TRACE_ ( (THIS_FILE, "Recorder started"));
+	iSession.Read();
+	TRACE_((THIS_FILE, "Recorder started"));
     }
 
     state_ = STATE_STREAMING;
-
+    
     return 0;
 }
 
-void CPjAudioEngine::InputStreamInitialized (const TInt aStatus)
+void CPjAudioEngine::InputStreamInitialized(const TInt aStatus)
 {
-    TRACE_ ( (THIS_FILE, "Recorder initialized, err=%d", aStatus));
+    TRACE_((THIS_FILE, "Recorder initialized, err=%d", aStatus));
 
     if (aStatus == KErrNone) {
-        // Don't start the stream since Stop() has been requested.
-        if (state_ != STATE_PENDING_STOP) {
-            StartStreamL();
-        } else {
-            state_ = STATE_READY;
-        }
+	// Don't start the stream since Stop() has been requested. 
+	if (state_ != STATE_PENDING_STOP) {
+	    StartStreamL();
+	} else {
+	    state_ = STATE_READY;
+	}
     }
 }
 
-void CPjAudioEngine::OutputStreamInitialized (const TInt aStatus)
+void CPjAudioEngine::OutputStreamInitialized(const TInt aStatus)
 {
-    TRACE_ ( (THIS_FILE, "Player initialized, err=%d", aStatus));
+    TRACE_((THIS_FILE, "Player initialized, err=%d", aStatus));
 
     if (aStatus == KErrNone) {
-        if (parentStrm_->param.dir == PJMEDIA_DIR_PLAYBACK) {
-            // Don't start the stream since Stop() has been requested.
-            if (state_ != STATE_PENDING_STOP) {
-                StartStreamL();
-            } else {
-                state_ = STATE_READY;
-            }
-        } else
-            InitRecL();
+	if (parentStrm_->param.dir == PJMEDIA_DIR_PLAYBACK) {
+	    // Don't start the stream since Stop() has been requested.
+	    if (state_ != STATE_PENDING_STOP) {
+		StartStreamL();
+	    } else {
+		state_ = STATE_READY;
+	    }
+	} else
+	    InitRecL();
     }
 }
 
-void CPjAudioEngine::NotifyError (const TInt aError)
+void CPjAudioEngine::NotifyError(const TInt aError)
 {
-    snd_perror ("Error from CQueueHandler", aError);
+    snd_perror("Error from CQueueHandler", aError);
 }
 
-TInt CPjAudioEngine::ActivateSpeaker (TBool active)
+TInt CPjAudioEngine::ActivateSpeaker(TBool active)
 {
     if (state_ == STATE_READY || state_ == STATE_STREAMING) {
-        iSession.ActivateLoudspeaker (active);
-        TRACE_ ( (THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
-        return KErrNone;
+        iSession.ActivateLoudspeaker(active);
+        TRACE_((THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
+	return KErrNone;
     }
-
     return KErrNotReady;
 }
 
@@ -760,22 +697,20 @@ TInt CPjAudioEngine::ActivateSpeaker (TBool active)
  * Internal APS callbacks for PCM format
  */
 
-static void RecCbPcm (TAPSCommBuffer &buf, void *user_data)
+static void RecCbPcm(TAPSCommBuffer &buf, void *user_data)
 {
-
     struct aps_stream *strm = (struct aps_stream*) user_data;
 
     /* Buffer has to contain normal speech. */
-    pj_assert (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
+    pj_assert(buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
 
     /* Detect the recorder G.711 frame size, player frame size will follow
      * this recorder frame size.
      */
-
     if (aps_g711_frame_len == 0) {
-        aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
-        TRACE_ ( (THIS_FILE, "Detected APS G.711 frame size = %u samples",
-                  aps_g711_frame_len));
+	aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
+	TRACE_((THIS_FILE, "Detected APS G.711 frame size = %u samples",
+		aps_g711_frame_len));
     }
 
     /* Decode APS buffer (coded in G.711) and put the PCM result into rec_buf.
@@ -784,75 +719,68 @@ static void RecCbPcm (TAPSCommBuffer &buf, void *user_data)
     unsigned samples_processed = 0;
 
     while (samples_processed < aps_g711_frame_len) {
-        unsigned samples_to_process;
-        unsigned samples_req;
-
-        samples_to_process = aps_g711_frame_len - samples_processed;
-        samples_req = (strm->param.samples_per_frame /
-                       strm->param.channel_count /
-                       strm->resample_factor) -
-                      strm->rec_buf_len;
-
-        if (samples_to_process > samples_req)
-            samples_to_process = samples_req;
-
-        pjmedia_ulaw_decode (&strm->rec_buf[strm->rec_buf_len],
-                             buf.iBuffer.Ptr() + 2 + samples_processed,
-                             samples_to_process);
-
-        strm->rec_buf_len += samples_to_process;
-
-        samples_processed += samples_to_process;
-
-        /* Buffer is full, time to call parent callback */
-        if (strm->rec_buf_len == strm->param.samples_per_frame /
-                strm->param.channel_count /
-                strm->resample_factor) {
-            pjmedia_frame f;
-
-            /* Need to resample clock rate? */
-
-            if (strm->rec_resample) {
-                unsigned resampled = 0;
-
-                while (resampled < strm->rec_buf_len) {
-                    pjmedia_resample_run (strm->rec_resample,
-                                          &strm->rec_buf[resampled],
-                                          strm->pcm_buf +
-                                          resampled * strm->resample_factor);
-                    resampled += 80;
-                }
-
-                f.buf = strm->pcm_buf;
-            } else {
-                f.buf = strm->rec_buf;
-            }
-
-            /* Need to convert channel count? */
-            if (strm->param.channel_count != 1) {
-                pjmedia_convert_channel_1ton ( (pj_int16_t*) f.buf,
-                                               (pj_int16_t*) f.buf,
-                                               strm->param.channel_count,
-                                               strm->param.samples_per_frame /
-                                               strm->param.channel_count,
-                                               0);
-            }
-
-            /* Call parent callback */
-            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-
-            f.size = strm->param.samples_per_frame << 1;
-
-            strm->rec_cb (strm->user_data, &f);
-
-            strm->rec_buf_len = 0;
-        }
+	unsigned samples_to_process;
+	unsigned samples_req;
+
+	samples_to_process = aps_g711_frame_len - samples_processed;
+	samples_req = (strm->param.samples_per_frame /
+		       strm->param.channel_count /
+		       strm->resample_factor) -
+		      strm->rec_buf_len;
+	if (samples_to_process > samples_req)
+	    samples_to_process = samples_req;
+
+	pjmedia_ulaw_decode(&strm->rec_buf[strm->rec_buf_len],
+			    buf.iBuffer.Ptr() + 2 + samples_processed,
+			    samples_to_process);
+
+	strm->rec_buf_len += samples_to_process;
+	samples_processed += samples_to_process;
+
+	/* Buffer is full, time to call parent callback */
+	if (strm->rec_buf_len == strm->param.samples_per_frame / 
+				 strm->param.channel_count /
+				 strm->resample_factor) 
+	{
+	    pjmedia_frame f;
+
+	    /* Need to resample clock rate? */
+	    if (strm->rec_resample) {
+		unsigned resampled = 0;
+		
+		while (resampled < strm->rec_buf_len) {
+		    pjmedia_resample_run(strm->rec_resample, 
+				&strm->rec_buf[resampled],
+				strm->pcm_buf + 
+				resampled * strm->resample_factor);
+		    resampled += 80;
+		}
+		f.buf = strm->pcm_buf;
+	    } else {
+		f.buf = strm->rec_buf;
+	    }
+
+	    /* Need to convert channel count? */
+	    if (strm->param.channel_count != 1) {
+		pjmedia_convert_channel_1ton((pj_int16_t*)f.buf,
+					     (pj_int16_t*)f.buf,
+					     strm->param.channel_count,
+					     strm->param.samples_per_frame /
+					     strm->param.channel_count,
+					     0);
+	    }
+
+	    /* Call parent callback */
+	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+	    f.size = strm->param.samples_per_frame << 1;
+	    strm->rec_cb(strm->user_data, &f);
+	    strm->rec_buf_len = 0;
+	}
     }
 }
 
-static void PlayCbPcm (TAPSCommBuffer &buf, void *user_data)
+static void PlayCbPcm(TAPSCommBuffer &buf, void *user_data)
 {
-
     struct aps_stream *strm = (struct aps_stream*) user_data;
     unsigned g711_frame_len = aps_g711_frame_len;
 
@@ -860,84 +788,79 @@ static void PlayCbPcm (TAPSCommBuffer &buf, void *user_data)
     buf.iCommand = CQueueHandler::EAPSPlayData;
     buf.iStatus = 0;
     buf.iBuffer.Zero();
-    buf.iBuffer.Append (1);
-    buf.iBuffer.Append (0);
+    buf.iBuffer.Append(1);
+    buf.iBuffer.Append(0);
 
     /* Assume frame size is 10ms if frame size hasn't been known. */
-
     if (g711_frame_len == 0)
-        g711_frame_len = 80;
+	g711_frame_len = 80;
 
     /* Call parent stream callback to get PCM samples to play,
      * encode the PCM samples into G.711 and put it into APS buffer.
      */
     unsigned samples_processed = 0;
-
+    
     while (samples_processed < g711_frame_len) {
-        /* Need more samples to play, time to call parent callback */
-        if (strm->play_buf_len == 0) {
-            pjmedia_frame f;
-            unsigned samples_got;
-
-            f.size = strm->param.samples_per_frame << 1;
-
-            if (strm->play_resample || strm->param.channel_count != 1)
-                f.buf = strm->pcm_buf;
-            else
-                f.buf = strm->play_buf;
-
-            /* Call parent callback */
-            strm->play_cb (strm->user_data, &f);
-
-            if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
-                pjmedia_zero_samples ( (pj_int16_t*) f.buf,
-                                       strm->param.samples_per_frame);
-            }
-
-            samples_got = strm->param.samples_per_frame /
-
-                          strm->param.channel_count /
-                          strm->resample_factor;
-
-            /* Need to convert channel count? */
-
-            if (strm->param.channel_count != 1) {
-                pjmedia_convert_channel_nto1 ( (pj_int16_t*) f.buf,
-                                               (pj_int16_t*) f.buf,
-                                               strm->param.channel_count,
-                                               strm->param.samples_per_frame,
-                                               PJ_FALSE,
-                                               0);
-            }
-
-            /* Need to resample clock rate? */
-            if (strm->play_resample) {
-                unsigned resampled = 0;
-
-                while (resampled < samples_got) {
-                    pjmedia_resample_run (strm->play_resample,
-                                          strm->pcm_buf +
-                                          resampled * strm->resample_factor,
-                                          &strm->play_buf[resampled]);
-                    resampled += 80;
-                }
-            }
-
-            strm->play_buf_len = samples_got;
-
-            strm->play_buf_start = 0;
-        }
-
-        unsigned tmp;
-
-        tmp = PJ_MIN (strm->play_buf_len, g711_frame_len - samples_processed);
-        pjmedia_ulaw_encode ( (pj_uint8_t*) &strm->play_buf[strm->play_buf_start],
-                              &strm->play_buf[strm->play_buf_start],
-                              tmp);
-        buf.iBuffer.Append ( (TUint8*) &strm->play_buf[strm->play_buf_start], tmp);
-        samples_processed += tmp;
-        strm->play_buf_len -= tmp;
-        strm->play_buf_start += tmp;
+	/* Need more samples to play, time to call parent callback */
+	if (strm->play_buf_len == 0) {
+	    pjmedia_frame f;
+	    unsigned samples_got;
+	    
+	    f.size = strm->param.samples_per_frame << 1;
+	    if (strm->play_resample || strm->param.channel_count != 1)
+		f.buf = strm->pcm_buf;
+	    else
+		f.buf = strm->play_buf;
+
+	    /* Call parent callback */
+	    strm->play_cb(strm->user_data, &f);
+	    if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
+		pjmedia_zero_samples((pj_int16_t*)f.buf, 
+				     strm->param.samples_per_frame);
+	    }
+	    
+	    samples_got = strm->param.samples_per_frame / 
+			  strm->param.channel_count /
+			  strm->resample_factor;
+
+	    /* Need to convert channel count? */
+	    if (strm->param.channel_count != 1) {
+		pjmedia_convert_channel_nto1((pj_int16_t*)f.buf,
+					     (pj_int16_t*)f.buf,
+					     strm->param.channel_count,
+					     strm->param.samples_per_frame,
+					     PJ_FALSE,
+					     0);
+	    }
+
+	    /* Need to resample clock rate? */
+	    if (strm->play_resample) {
+		unsigned resampled = 0;
+		
+		while (resampled < samples_got) 
+		{
+		    pjmedia_resample_run(strm->play_resample, 
+				strm->pcm_buf + 
+				resampled * strm->resample_factor,
+				&strm->play_buf[resampled]);
+		    resampled += 80;
+		}
+	    }
+	    
+	    strm->play_buf_len = samples_got;
+	    strm->play_buf_start = 0;
+	}
+
+	unsigned tmp;
+
+	tmp = PJ_MIN(strm->play_buf_len, g711_frame_len - samples_processed);
+	pjmedia_ulaw_encode((pj_uint8_t*)&strm->play_buf[strm->play_buf_start],
+			    &strm->play_buf[strm->play_buf_start],
+			    tmp);
+	buf.iBuffer.Append((TUint8*)&strm->play_buf[strm->play_buf_start], tmp);
+	samples_processed += tmp;
+	strm->play_buf_len -= tmp;
+	strm->play_buf_start += tmp;
     }
 }
 
@@ -945,138 +868,131 @@ static void PlayCbPcm (TAPSCommBuffer &buf, void *user_data)
  * Internal APS callbacks for non-PCM format
  */
 
-static void RecCb (TAPSCommBuffer &buf, void *user_data)
+static void RecCb(TAPSCommBuffer &buf, void *user_data)
 {
-
     struct aps_stream *strm = (struct aps_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->rec_buf;
-
-    switch (strm->param.ext_fmt.id) {
-
-        case PJMEDIA_FORMAT_AMR: {
-            const pj_uint8_t *p = (const pj_uint8_t*) buf.iBuffer.Ptr() + 1;
-            unsigned len = buf.iBuffer.Length() - 1;
-
-            pjmedia_frame_ext_append_subframe (frame, p, len << 3, 160);
-
-            if (frame->samples_cnt == strm->param.samples_per_frame) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_G729: {
-            /* Check if we got a normal or SID frame. */
-            if (buf.iBuffer[0] != 0 || buf.iBuffer[1] != 0) {
-                enum { NORMAL_LEN = 22, SID_LEN = 8 };
-                TBitStream *bitstream = (TBitStream*) strm->strm_data;
-                unsigned src_len = buf.iBuffer.Length()- 2;
-
-                pj_assert (src_len == NORMAL_LEN || src_len == SID_LEN);
-
-                const TDesC8& p = bitstream->CompressG729Frame (
-                                      buf.iBuffer.Right (src_len),
-                                      src_len == SID_LEN);
-
-                pjmedia_frame_ext_append_subframe (frame, p.Ptr(),
-                                                   p.Length() << 3, 80);
-            } else { /* We got null frame. */
-                pjmedia_frame_ext_append_subframe (frame, NULL, 0, 80);
-            }
-
-            if (frame->samples_cnt == strm->param.samples_per_frame) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_ILBC: {
-            unsigned samples_got;
-
-            samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
-
-            /* Check if we got a normal frame. */
-
-            if (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0) {
-                const pj_uint8_t *p = (const pj_uint8_t*) buf.iBuffer.Ptr() + 2;
-                unsigned len = buf.iBuffer.Length() - 2;
-
-                pjmedia_frame_ext_append_subframe (frame, p, len << 3,
-                                                   samples_got);
-            } else { /* We got null frame. */
-                pjmedia_frame_ext_append_subframe (frame, NULL, 0, samples_got);
-            }
-
-            if (frame->samples_cnt == strm->param.samples_per_frame) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_PCMU:
-
-        case PJMEDIA_FORMAT_PCMA: {
-            unsigned samples_processed = 0;
-
-            /* Make sure it is normal frame. */
-            pj_assert (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
-
-            /* Detect the recorder G.711 frame size, player frame size will
-             * follow this recorder frame size.
-             */
-
-            if (aps_g711_frame_len == 0) {
-                aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
-                TRACE_ ( (THIS_FILE, "Detected APS G.711 frame size = %u samples",
-                          aps_g711_frame_len));
-            }
-
-            /* Convert APS buffer format into pjmedia_frame_ext. Whenever
-             * samples count in the frame is equal to stream's samples per
-             * frame, call parent stream callback.
-             */
-            while (samples_processed < aps_g711_frame_len) {
-                unsigned tmp;
-                const pj_uint8_t *pb = (const pj_uint8_t*) buf.iBuffer.Ptr() +
-                                       2 + samples_processed;
-
-                tmp = PJ_MIN (strm->param.samples_per_frame - frame->samples_cnt,
-                              aps_g711_frame_len - samples_processed);
-
-                pjmedia_frame_ext_append_subframe (frame, pb, tmp << 3, tmp);
-                samples_processed += tmp;
-
-                if (frame->samples_cnt == strm->param.samples_per_frame) {
-                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                    strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                    frame->samples_cnt = 0;
-                    frame->subframe_cnt = 0;
-                }
-            }
-        }
-
-        break;
-
-        default:
-            break;
+    
+    switch(strm->param.ext_fmt.id) {
+    case PJMEDIA_FORMAT_AMR:
+	{
+	    const pj_uint8_t *p = (const pj_uint8_t*)buf.iBuffer.Ptr() + 1;
+	    unsigned len = buf.iBuffer.Length() - 1;
+	    
+	    pjmedia_frame_ext_append_subframe(frame, p, len << 3, 160);
+	    if (frame->samples_cnt == strm->param.samples_per_frame) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_G729:
+	{
+	    /* Check if we got a normal or SID frame. */
+	    if (buf.iBuffer[0] != 0 || buf.iBuffer[1] != 0) {
+		enum { NORMAL_LEN = 22, SID_LEN = 8 };
+		TBitStream *bitstream = (TBitStream*)strm->strm_data;
+		unsigned src_len = buf.iBuffer.Length()- 2;
+		
+		pj_assert(src_len == NORMAL_LEN || src_len == SID_LEN);
+
+		const TDesC8& p = bitstream->CompressG729Frame(
+					    buf.iBuffer.Right(src_len), 
+					    src_len == SID_LEN);
+		
+		pjmedia_frame_ext_append_subframe(frame, p.Ptr(), 
+						  p.Length() << 3, 80);
+	    } else { /* We got null frame. */
+		pjmedia_frame_ext_append_subframe(frame, NULL, 0, 80);
+	    }
+	    
+	    if (frame->samples_cnt == strm->param.samples_per_frame) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+
+    case PJMEDIA_FORMAT_ILBC:
+	{
+	    unsigned samples_got;
+	    
+	    samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
+	    
+	    /* Check if we got a normal frame. */
+	    if (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0) {
+		const pj_uint8_t *p = (const pj_uint8_t*)buf.iBuffer.Ptr() + 2;
+		unsigned len = buf.iBuffer.Length() - 2;
+		
+		pjmedia_frame_ext_append_subframe(frame, p, len << 3,
+						  samples_got);
+	    } else { /* We got null frame. */
+		pjmedia_frame_ext_append_subframe(frame, NULL, 0, samples_got);
+	    }
+	    
+	    if (frame->samples_cnt == strm->param.samples_per_frame) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_PCMU:
+    case PJMEDIA_FORMAT_PCMA:
+	{
+	    unsigned samples_processed = 0;
+	    
+	    /* Make sure it is normal frame. */
+	    pj_assert(buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
+
+	    /* Detect the recorder G.711 frame size, player frame size will 
+	     * follow this recorder frame size.
+	     */
+	    if (aps_g711_frame_len == 0) {
+		aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
+		TRACE_((THIS_FILE, "Detected APS G.711 frame size = %u samples",
+			aps_g711_frame_len));
+	    }
+	    
+	    /* Convert APS buffer format into pjmedia_frame_ext. Whenever 
+	     * samples count in the frame is equal to stream's samples per 
+	     * frame, call parent stream callback.
+	     */
+	    while (samples_processed < aps_g711_frame_len) {
+		unsigned tmp;
+		const pj_uint8_t *pb = (const pj_uint8_t*)buf.iBuffer.Ptr() +
+				       2 + samples_processed;
+    
+		tmp = PJ_MIN(strm->param.samples_per_frame - frame->samples_cnt,
+			     aps_g711_frame_len - samples_processed);
+		
+		pjmedia_frame_ext_append_subframe(frame, pb, tmp << 3, tmp);
+		samples_processed += tmp;
+    
+		if (frame->samples_cnt == strm->param.samples_per_frame) {
+		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		    strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		    frame->samples_cnt = 0;
+		    frame->subframe_cnt = 0;
+		}
+	    }
+	}
+	break;
+	
+    default:
+	break;
     }
 }
 
-static void PlayCb (TAPSCommBuffer &buf, void *user_data)
+static void PlayCb(TAPSCommBuffer &buf, void *user_data)
 {
-
     struct aps_stream *strm = (struct aps_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->play_buf;
 
@@ -1085,209 +1001,202 @@ static void PlayCb (TAPSCommBuffer &buf, void *user_data)
     buf.iStatus = 0;
     buf.iBuffer.Zero();
 
-    switch (strm->param.ext_fmt.id) {
-
-        case PJMEDIA_FORMAT_AMR: {
-            if (frame->samples_cnt == 0) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-            }
-
-            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                pjmedia_frame_ext_subframe *sf;
-                unsigned samples_cnt;
-
-                sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                if (sf->data && sf->bitlen) {
-                    /* AMR header for APS is one byte, the format (may be!):
-                     * 0xxxxy00, where xxxx:frame type, y:not sure.
-                     */
-                    unsigned len = (sf->bitlen+7) >>3;
-                    enum {SID_FT = 8 };
-                    pj_uint8_t amr_header = 4, ft = SID_FT;
-
-                    if (len >= pjmedia_codec_amrnb_framelen[0])
-                        ft = pjmedia_codec_amr_get_mode2 (PJ_TRUE, len);
-
-                    amr_header |= ft << 3;
-
-                    buf.iBuffer.Append (amr_header);
-
-                    buf.iBuffer.Append ( (TUint8*) sf->data, len);
-                } else {
-                    buf.iBuffer.Append (0);
-                }
-
-                pjmedia_frame_ext_pop_subframes (frame, 1);
-
-            } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                buf.iBuffer.Append (0);
-
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_G729: {
-            if (frame->samples_cnt == 0) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-            }
-
-            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                pjmedia_frame_ext_subframe *sf;
-                unsigned samples_cnt;
-
-                sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                if (sf->data && sf->bitlen) {
-                    enum { NORMAL_LEN = 10, SID_LEN = 2 };
-                    pj_bool_t sid_frame = ( (sf->bitlen >> 3) == SID_LEN);
-                    TBitStream *bitstream = (TBitStream*) strm->strm_data;
-                    const TPtrC8 src (sf->data, sf->bitlen>>3);
-                    const TDesC8 &dst = bitstream->ExpandG729Frame (src,
-                                        sid_frame);
-
-                    if (sid_frame) {
-                        buf.iBuffer.Append (0);
-                        buf.iBuffer.Append (1);
-                    } else {
-                        buf.iBuffer.Append (1);
-                        buf.iBuffer.Append (0);
-                    }
-
-                    buf.iBuffer.Append (dst);
-                } else {
-                    buf.iBuffer.Append (0);
-                    buf.iBuffer.Append (0);
-                }
-
-                pjmedia_frame_ext_pop_subframes (frame, 1);
-
-            } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                buf.iBuffer.Append (0);
-                buf.iBuffer.Append (0);
-
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_ILBC: {
-            if (frame->samples_cnt == 0) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-            }
-
-            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                pjmedia_frame_ext_subframe *sf;
-                unsigned samples_cnt;
-
-                sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                pj_assert ( (strm->param.ext_fmt.bitrate == 15200 &&
-                             samples_cnt == 160) ||
-                            (strm->param.ext_fmt.bitrate != 15200 &&
-                             samples_cnt == 240));
-
-                if (sf->data && sf->bitlen) {
-                    buf.iBuffer.Append (1);
-                    buf.iBuffer.Append (0);
-                    buf.iBuffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
-                } else {
-                    buf.iBuffer.Append (0);
-                    buf.iBuffer.Append (0);
-                }
-
-                pjmedia_frame_ext_pop_subframes (frame, 1);
-
-            } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                buf.iBuffer.Append (0);
-                buf.iBuffer.Append (0);
-
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_PCMU:
-
-        case PJMEDIA_FORMAT_PCMA: {
-            unsigned samples_ready = 0;
-            unsigned samples_req = aps_g711_frame_len;
-
-            /* Assume frame size is 10ms if frame size hasn't been known. */
-
-            if (samples_req == 0)
-                samples_req = 80;
-
-            buf.iBuffer.Append (1);
-
-            buf.iBuffer.Append (0);
-
-            /* Call parent stream callback to get samples to play. */
-            while (samples_ready < samples_req) {
-                if (frame->samples_cnt == 0) {
-                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                    strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                    pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                               frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-                }
-
-                if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                    pjmedia_frame_ext_subframe *sf;
-                    unsigned samples_cnt;
-
-                    sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                    if (sf->data && sf->bitlen) {
-                        buf.iBuffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
-                    } else {
-                        pj_uint8_t silc;
-                        silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
-                               pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
-                        buf.iBuffer.AppendFill (silc, samples_cnt);
-                    }
-
-                    samples_ready += samples_cnt;
-
-                    pjmedia_frame_ext_pop_subframes (frame, 1);
-
-                } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                    pj_uint8_t silc;
-
-                    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
-                           pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
-                    buf.iBuffer.AppendFill (silc, samples_req - samples_ready);
-
-                    samples_ready = samples_req;
-                    frame->samples_cnt = 0;
-                    frame->subframe_cnt = 0;
-                }
-            }
-        }
-
-        break;
-
-        default:
-            break;
+    switch(strm->param.ext_fmt.id) {
+    case PJMEDIA_FORMAT_AMR:
+	{
+	    if (frame->samples_cnt == 0) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+	    }
+
+	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		pjmedia_frame_ext_subframe *sf;
+		unsigned samples_cnt;
+		
+		sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		
+		if (sf->data && sf->bitlen) {
+		    /* AMR header for APS is one byte, the format (may be!):
+		     * 0xxxxy00, where xxxx:frame type, y:not sure. 
+		     */
+		    unsigned len = (sf->bitlen+7)>>3;
+		    enum {SID_FT = 8 };
+		    pj_uint8_t amr_header = 4, ft = SID_FT;
+
+		    if (len >= pjmedia_codec_amrnb_framelen[0])
+			ft = pjmedia_codec_amr_get_mode2(PJ_TRUE, len);
+		    
+		    amr_header |= ft << 3;
+		    buf.iBuffer.Append(amr_header);
+		    
+		    buf.iBuffer.Append((TUint8*)sf->data, len);
+		} else {
+		    buf.iBuffer.Append(0);
+		}
+
+		pjmedia_frame_ext_pop_subframes(frame, 1);
+	    
+	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
+		buf.iBuffer.Append(0);
+		
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_G729:
+	{
+	    if (frame->samples_cnt == 0) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+	    }
+
+	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		pjmedia_frame_ext_subframe *sf;
+		unsigned samples_cnt;
+		
+		sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		
+		if (sf->data && sf->bitlen) {
+		    enum { NORMAL_LEN = 10, SID_LEN = 2 };
+		    pj_bool_t sid_frame = ((sf->bitlen >> 3) == SID_LEN);
+		    TBitStream *bitstream = (TBitStream*)strm->strm_data;
+		    const TPtrC8 src(sf->data, sf->bitlen>>3);
+		    const TDesC8 &dst = bitstream->ExpandG729Frame(src,
+								   sid_frame); 
+		    if (sid_frame) {
+			buf.iBuffer.Append(2);
+			buf.iBuffer.Append(0);
+		    } else {
+			buf.iBuffer.Append(1);
+			buf.iBuffer.Append(0);
+		    }
+		    buf.iBuffer.Append(dst);
+		} else {
+		    buf.iBuffer.Append(2);
+		    buf.iBuffer.Append(0);
+		    buf.iBuffer.AppendFill(0, 22);
+		}
+
+		pjmedia_frame_ext_pop_subframes(frame, 1);
+	    
+	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
+	        buf.iBuffer.Append(2);
+	        buf.iBuffer.Append(0);
+	        buf.iBuffer.AppendFill(0, 22);
+		
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_ILBC:
+	{
+	    if (frame->samples_cnt == 0) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+	    }
+
+	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		pjmedia_frame_ext_subframe *sf;
+		unsigned samples_cnt;
+		
+		sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		
+		pj_assert((strm->param.ext_fmt.bitrate == 15200 && 
+			   samples_cnt == 160) ||
+			  (strm->param.ext_fmt.bitrate != 15200 &&
+			   samples_cnt == 240));
+		
+		if (sf->data && sf->bitlen) {
+		    buf.iBuffer.Append(1);
+		    buf.iBuffer.Append(0);
+		    buf.iBuffer.Append((TUint8*)sf->data, sf->bitlen>>3);
+		} else {
+		    buf.iBuffer.Append(0);
+		    buf.iBuffer.Append(0);
+		}
+
+		pjmedia_frame_ext_pop_subframes(frame, 1);
+	    
+	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
+		buf.iBuffer.Append(0);
+		buf.iBuffer.Append(0);
+		
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_PCMU:
+    case PJMEDIA_FORMAT_PCMA:
+	{
+	    unsigned samples_ready = 0;
+	    unsigned samples_req = aps_g711_frame_len;
+	    
+	    /* Assume frame size is 10ms if frame size hasn't been known. */
+	    if (samples_req == 0)
+		samples_req = 80;
+	    
+	    buf.iBuffer.Append(1);
+	    buf.iBuffer.Append(0);
+	    
+	    /* Call parent stream callback to get samples to play. */
+	    while (samples_ready < samples_req) {
+		if (frame->samples_cnt == 0) {
+		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		    strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		    pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			      frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+		}
+    
+		if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		    pjmedia_frame_ext_subframe *sf;
+		    unsigned samples_cnt;
+		    
+		    sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		    if (sf->data && sf->bitlen) {
+			buf.iBuffer.Append((TUint8*)sf->data, sf->bitlen>>3);
+		    } else {
+			pj_uint8_t silc;
+			silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
+				pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
+			buf.iBuffer.AppendFill(silc, samples_cnt);
+		    }
+		    samples_ready += samples_cnt;
+		    
+		    pjmedia_frame_ext_pop_subframes(frame, 1);
+		
+		} else { /* PJMEDIA_FRAME_TYPE_NONE */
+		    pj_uint8_t silc;
+		    
+		    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
+			    pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
+		    buf.iBuffer.AppendFill(silc, samples_req - samples_ready);
+
+		    samples_ready = samples_req;
+		    frame->samples_cnt = 0;
+		    frame->subframe_cnt = 0;
+		}
+	    }
+	}
+	break;
+	
+    default:
+	break;
     }
 }
 
@@ -1300,20 +1209,19 @@ static void PlayCb (TAPSCommBuffer &buf, void *user_data)
  * C compatible declaration of APS factory.
  */
 PJ_BEGIN_DECL
-PJ_DECL (pjmedia_aud_dev_factory*) pjmedia_aps_factory (pj_pool_factory *pf);
+PJ_DECL(pjmedia_aud_dev_factory*) pjmedia_aps_factory(pj_pool_factory *pf);
 PJ_END_DECL
 
 /*
  * Init APS audio driver.
  */
-PJ_DEF (pjmedia_aud_dev_factory*) pjmedia_aps_factory (pj_pool_factory *pf)
+PJ_DEF(pjmedia_aud_dev_factory*) pjmedia_aps_factory(pj_pool_factory *pf)
 {
-
     struct aps_factory *f;
     pj_pool_t *pool;
 
-    pool = pj_pool_create (pf, "APS", 1000, 1000, NULL);
-    f = PJ_POOL_ZALLOC_T (pool, struct aps_factory);
+    pool = pj_pool_create(pf, "APS", 1000, 1000, NULL);
+    f = PJ_POOL_ZALLOC_T(pool, struct aps_factory);
     f->pf = pf;
     f->pool = pool;
     f->base.op = &factory_op;
@@ -1322,21 +1230,20 @@ PJ_DEF (pjmedia_aud_dev_factory*) pjmedia_aps_factory (pj_pool_factory *pf)
 }
 
 /* API: init factory */
-static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
+static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
 {
+    struct aps_factory *af = (struct aps_factory*)f;
 
-    struct aps_factory *af = (struct aps_factory*) f;
-
-    pj_ansi_strcpy (af->dev_info.name, "S60 APS");
+    pj_ansi_strcpy(af->dev_info.name, "S60 APS");
     af->dev_info.default_samples_per_sec = 8000;
     af->dev_info.caps = PJMEDIA_AUD_DEV_CAP_EXT_FORMAT |
-                        //PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
-                        PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
-                        PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
-                        PJMEDIA_AUD_DEV_CAP_VAD |
-                        PJMEDIA_AUD_DEV_CAP_CNG;
-    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE |
-                          PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+			//PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
+			PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
+			PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
+			PJMEDIA_AUD_DEV_CAP_VAD |
+			PJMEDIA_AUD_DEV_CAP_CNG;
+    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE | 
+			  PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
     af->dev_info.input_count = 1;
     af->dev_info.output_count = 1;
 
@@ -1361,60 +1268,57 @@ static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
     af->dev_info.ext_fmt[4].id = PJMEDIA_FORMAT_PCMA;
     af->dev_info.ext_fmt[4].bitrate = 64000;
     af->dev_info.ext_fmt[4].vad = PJ_FALSE;
-
-    PJ_LOG (4, (THIS_FILE, "APS initialized"));
+    
+    PJ_LOG(4, (THIS_FILE, "APS initialized"));
 
     return PJ_SUCCESS;
 }
 
 /* API: destroy factory */
-static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f)
+static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f)
 {
-
-    struct aps_factory *af = (struct aps_factory*) f;
+    struct aps_factory *af = (struct aps_factory*)f;
     pj_pool_t *pool = af->pool;
 
     af->pool = NULL;
-    pj_pool_release (pool);
-
-    PJ_LOG (4, (THIS_FILE, "APS destroyed"));
+    pj_pool_release(pool);
 
+    PJ_LOG(4, (THIS_FILE, "APS destroyed"));
+    
     return PJ_SUCCESS;
 }
 
 /* API: get number of devices */
-static unsigned factory_get_dev_count (pjmedia_aud_dev_factory *f)
+static unsigned factory_get_dev_count(pjmedia_aud_dev_factory *f)
 {
-    PJ_UNUSED_ARG (f);
+    PJ_UNUSED_ARG(f);
     return 1;
 }
 
 /* API: get device info */
-static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_dev_info *info)
+static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
+					unsigned index,
+					pjmedia_aud_dev_info *info)
 {
+    struct aps_factory *af = (struct aps_factory*)f;
 
-    struct aps_factory *af = (struct aps_factory*) f;
+    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
 
-    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
-
-    pj_memcpy (info, &af->dev_info, sizeof (*info));
+    pj_memcpy(info, &af->dev_info, sizeof(*info));
 
     return PJ_SUCCESS;
 }
 
 /* API: create default device parameter */
-static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_param *param)
+static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
+					 unsigned index,
+					 pjmedia_aud_param *param)
 {
+    struct aps_factory *af = (struct aps_factory*)f;
 
-    struct aps_factory *af = (struct aps_factory*) f;
-
-    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_bzero (param, sizeof (*param));
+    pj_bzero(param, sizeof(*param));
     param->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
     param->rec_id = index;
     param->play_id = index;
@@ -1430,17 +1334,15 @@ static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
 
 
 /* API: create stream */
-static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
-        const pjmedia_aud_param *param,
-        pjmedia_aud_rec_cb rec_cb,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data,
-        pjmedia_aud_stream **p_aud_strm)
+static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
+					 const pjmedia_aud_param *param,
+					 pjmedia_aud_rec_cb rec_cb,
+					 pjmedia_aud_play_cb play_cb,
+					 void *user_data,
+					 pjmedia_aud_stream **p_aud_strm)
 {
-
-    struct aps_factory *af = (struct aps_factory*) f;
+    struct aps_factory *af = (struct aps_factory*)f;
     pj_pool_t *pool;
-
     struct aps_stream *strm;
 
     CPjAudioSetting aps_setting;
@@ -1448,413 +1350,382 @@ static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
     PjAudioCallback aps_play_cb;
 
     /* Can only support 16bits per sample */
-    PJ_ASSERT_RETURN (param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
 
     /* Supported clock rates:
-     * - for non-PCM format: 8kHz
-     * - for PCM format: 8kHz and 16kHz
+     * - for non-PCM format: 8kHz  
+     * - for PCM format: 8kHz and 16kHz  
      */
-    PJ_ASSERT_RETURN (param->clock_rate == 8000 ||
-                      (param->clock_rate == 16000 &&
-                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-                      PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->clock_rate == 8000 ||
+		     (param->clock_rate == 16000 && 
+		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+		     PJ_EINVAL);
 
     /* Supported channels number:
      * - for non-PCM format: mono
-     * - for PCM format: mono and stereo
+     * - for PCM format: mono and stereo  
      */
-    PJ_ASSERT_RETURN (param->channel_count == 1 ||
-                      (param->channel_count == 2 &&
-                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-                      PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->channel_count == 1 || 
+		     (param->channel_count == 2 &&
+		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+		     PJ_EINVAL);
 
     /* Create and Initialize stream descriptor */
-    pool = pj_pool_create (af->pf, "aps-dev", 1000, 1000, NULL);
-    PJ_ASSERT_RETURN (pool, PJ_ENOMEM);
+    pool = pj_pool_create(af->pf, "aps-dev", 1000, 1000, NULL);
+    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
 
-    strm = PJ_POOL_ZALLOC_T (pool, struct aps_stream);
+    strm = PJ_POOL_ZALLOC_T(pool, struct aps_stream);
     strm->pool = pool;
     strm->param = *param;
 
     if (strm->param.flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT == 0)
-        strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
-
+	strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
+	
     /* Set audio engine fourcc. */
-    switch (strm->param.ext_fmt.id) {
-
-        case PJMEDIA_FORMAT_L16:
-
-        case PJMEDIA_FORMAT_PCMU:
-
-        case PJMEDIA_FORMAT_PCMA:
-            aps_setting.fourcc = TFourCC (KMCPFourCCIdG711);
-            break;
-
-        case PJMEDIA_FORMAT_AMR:
-            aps_setting.fourcc = TFourCC (KMCPFourCCIdAMRNB);
-            break;
-
-        case PJMEDIA_FORMAT_G729:
-            aps_setting.fourcc = TFourCC (KMCPFourCCIdG729);
-            break;
-
-        case PJMEDIA_FORMAT_ILBC:
-            aps_setting.fourcc = TFourCC (KMCPFourCCIdILBC);
-            break;
-
-        default:
-            aps_setting.fourcc = 0;
-            break;
+    switch(strm->param.ext_fmt.id) {
+    case PJMEDIA_FORMAT_L16:
+    case PJMEDIA_FORMAT_PCMU:
+    case PJMEDIA_FORMAT_PCMA:
+	aps_setting.fourcc = TFourCC(KMCPFourCCIdG711);
+	break;
+    case PJMEDIA_FORMAT_AMR:
+	aps_setting.fourcc = TFourCC(KMCPFourCCIdAMRNB);
+	break;
+    case PJMEDIA_FORMAT_G729:
+	aps_setting.fourcc = TFourCC(KMCPFourCCIdG729);
+	break;
+    case PJMEDIA_FORMAT_ILBC:
+	aps_setting.fourcc = TFourCC(KMCPFourCCIdILBC);
+	break;
+    default:
+	aps_setting.fourcc = 0;
+	break;
     }
 
     /* Set audio engine mode. */
-    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR) {
-        aps_setting.mode = (TAPSCodecMode) strm->param.ext_fmt.bitrate;
-    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
-               strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
-               (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC  &&
-                strm->param.ext_fmt.bitrate != 15200)) {
-        aps_setting.mode = EULawOr30ms;
-    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
-               (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC &&
-                strm->param.ext_fmt.bitrate == 15200)) {
-        aps_setting.mode = EALawOr20ms;
+    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR)
+    {
+	aps_setting.mode = (TAPSCodecMode)strm->param.ext_fmt.bitrate;
+    } 
+    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
+	     strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
+	    (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC  &&
+	     strm->param.ext_fmt.bitrate != 15200))
+    {
+	aps_setting.mode = EULawOr30ms;
+    } 
+    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
+	    (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC &&
+	     strm->param.ext_fmt.bitrate == 15200))
+    {
+	aps_setting.mode = EALawOr20ms;
     }
 
-    /* Disable VAD on L16, G711, and also G729 (G729's VAD potentially
+    /* Disable VAD on L16, G711, and also G729 (G729's VAD potentially 
      * causes noise?).
      */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-        aps_setting.vad = EFalse;
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729)
+    {
+	aps_setting.vad = EFalse;
     } else {
-        aps_setting.vad = strm->param.ext_fmt.vad;
+	aps_setting.vad = strm->param.ext_fmt.vad;
     }
-
+    
     /* Set other audio engine attributes. */
     aps_setting.plc = strm->param.plc_enabled;
-
     aps_setting.cng = aps_setting.vad;
-
-    aps_setting.loudspk =
-        strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+    aps_setting.loudspk = 
+		strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
 
     /* Set audio engine callbacks. */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
-        aps_play_cb = &PlayCbPcm;
-        aps_rec_cb  = &RecCbPcm;
+	aps_play_cb = &PlayCbPcm;
+	aps_rec_cb  = &RecCbPcm;
     } else {
-        aps_play_cb = &PlayCb;
-        aps_rec_cb  = &RecCb;
+	aps_play_cb = &PlayCb;
+	aps_rec_cb  = &RecCb;
     }
 
     strm->rec_cb = rec_cb;
-
     strm->play_cb = play_cb;
     strm->user_data = user_data;
     strm->resample_factor = strm->param.clock_rate / 8000;
 
     /* play_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->play_buf = (pj_int16_t*) pj_pool_zalloc (
-                         pool,
-                         (strm->param.samples_per_frame /
-                          strm->resample_factor /
-                          strm->param.channel_count) << 1);
+    strm->play_buf = (pj_int16_t*)pj_pool_zalloc(
+					pool, 
+					(strm->param.samples_per_frame / 
+					strm->resample_factor /
+					strm->param.channel_count) << 1);
     strm->play_buf_len = 0;
     strm->play_buf_start = 0;
 
     /* rec_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->rec_buf  = (pj_int16_t*) pj_pool_zalloc (
-                         pool,
-                         (strm->param.samples_per_frame /
-                          strm->resample_factor /
-                          strm->param.channel_count) << 1);
+    strm->rec_buf  = (pj_int16_t*)pj_pool_zalloc(
+					pool, 
+					(strm->param.samples_per_frame / 
+					strm->resample_factor /
+					strm->param.channel_count) << 1);
     strm->rec_buf_len = 0;
 
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-        TBitStream *g729_bitstream = new TBitStream;
-
-        PJ_ASSERT_RETURN (g729_bitstream, PJ_ENOMEM);
-        strm->strm_data = (void*) g729_bitstream;
+	TBitStream *g729_bitstream = new TBitStream;
+	
+	PJ_ASSERT_RETURN(g729_bitstream, PJ_ENOMEM);
+	strm->strm_data = (void*)g729_bitstream;
     }
-
+	
     /* Init resampler when format is PCM and clock rate is not 8kHz */
-    if (strm->param.clock_rate != 8000 &&
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
-        pj_status_t status;
-
-        if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-            /* Create resample for recorder */
-            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
-                                              8000,
-                                              strm->param.clock_rate,
-                                              80,
-                                              &strm->rec_resample);
-
-            if (status != PJ_SUCCESS)
-                return status;
-        }
-
-        if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-            /* Create resample for player */
-            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
-                                              strm->param.clock_rate,
-                                              8000,
-                                              80 * strm->resample_factor,
-                                              &strm->play_resample);
-
-            if (status != PJ_SUCCESS)
-                return status;
-        }
+    if (strm->param.clock_rate != 8000 && 
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16)
+    {
+	pj_status_t status;
+	
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    /* Create resample for recorder */
+	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
+					      8000,
+					      strm->param.clock_rate,
+					      80,
+					      &strm->rec_resample);
+	    if (status != PJ_SUCCESS)
+		return status;
+	}
+    
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    /* Create resample for player */
+	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
+					      strm->param.clock_rate,
+					      8000,
+					      80 * strm->resample_factor,
+					      &strm->play_resample);
+	    if (status != PJ_SUCCESS)
+		return status;
+	}
     }
 
     /* Create PCM buffer, when the clock rate is not 8kHz or not mono */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 &&
-            (strm->resample_factor > 1 || strm->param.channel_count != 1)) {
-        strm->pcm_buf = (pj_int16_t*) pj_pool_zalloc (pool,
-                        strm->param.samples_per_frame << 1);
+	(strm->resample_factor > 1 || strm->param.channel_count != 1)) 
+    {
+	strm->pcm_buf = (pj_int16_t*)pj_pool_zalloc(pool, 
+					strm->param.samples_per_frame << 1);
     }
 
-
+    
     /* Create the audio engine. */
-    TRAPD (err, strm->engine = CPjAudioEngine::NewL (strm,
-                               aps_rec_cb, aps_play_cb,
-                               strm, aps_setting));
-
+    TRAPD(err, strm->engine = CPjAudioEngine::NewL(strm,
+						   aps_rec_cb, aps_play_cb,
+						   strm, aps_setting));
     if (err != KErrNone) {
-        pj_pool_release (pool);
-        return PJ_RETURN_OS_ERROR (err);
+    	pj_pool_release(pool);
+	return PJ_RETURN_OS_ERROR(err);
     }
 
     /* Apply output volume setting if specified */
     if (param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING) {
-        stream_set_cap (&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-                        &param->output_vol);
+	stream_set_cap(&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, 
+		       &param->output_vol);
     }
 
     /* Done */
     strm->base.op = &stream_op;
-
     *p_aud_strm = &strm->base;
 
     return PJ_SUCCESS;
 }
 
 /* API: Get stream info. */
-static pj_status_t stream_get_param (pjmedia_aud_stream *s,
-                                     pjmedia_aud_param *pi)
+static pj_status_t stream_get_param(pjmedia_aud_stream *s,
+				    pjmedia_aud_param *pi)
 {
+    struct aps_stream *strm = (struct aps_stream*)s;
 
-    struct aps_stream *strm = (struct aps_stream*) s;
-
-    PJ_ASSERT_RETURN (strm && pi, PJ_EINVAL);
+    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
 
-    pj_memcpy (pi, &strm->param, sizeof (*pi));
+    pj_memcpy(pi, &strm->param, sizeof(*pi));
 
     /* Update the output volume setting */
-
-    if (stream_get_cap (s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-                        &pi->output_vol) == PJ_SUCCESS) {
-        pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
+    if (stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+		       &pi->output_vol) == PJ_SUCCESS)
+    {
+	pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
     }
-
+    
     return PJ_SUCCESS;
 }
 
 /* API: get capability */
-static pj_status_t stream_get_cap (pjmedia_aud_stream *s,
-                                   pjmedia_aud_dev_cap cap,
-                                   void *pval)
+static pj_status_t stream_get_cap(pjmedia_aud_stream *s,
+				  pjmedia_aud_dev_cap cap,
+				  void *pval)
 {
-
-    struct aps_stream *strm = (struct aps_stream*) s;
+    struct aps_stream *strm = (struct aps_stream*)s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
 
     switch (cap) {
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                * (pjmedia_aud_dev_route*) pval = strm->param.output_route;
-                status = PJ_SUCCESS;
-            }
-
-            break;
-
-            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
-            /*
-            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-
-                TInt max_gain = strm->engine->GetMaxGain();
-                TInt gain = strm->engine->GetGain();
-
-                if (max_gain > 0 && gain >= 0) {
-            	*(unsigned*)pval = gain * 100 / max_gain;
-            	status = PJ_SUCCESS;
-                } else {
-            	status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-            break;
-            */
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
-
-                TInt max_vol = strm->engine->GetMaxVolume();
-                TInt vol = strm->engine->GetVolume();
-
-                if (max_vol > 0 && vol >= 0) {
-                    * (unsigned*) pval = vol * 100 / max_vol;
-                    status = PJ_SUCCESS;
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-
-            break;
-
-        default:
-            break;
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    *(pjmedia_aud_dev_route*)pval = strm->param.output_route;
+	    status = PJ_SUCCESS;
+	}
+	break;
+    
+    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
+    /*
+    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_gain = strm->engine->GetMaxGain();
+	    TInt gain = strm->engine->GetGain();
+	    
+	    if (max_gain > 0 && gain >= 0) {
+		*(unsigned*)pval = gain * 100 / max_gain; 
+		status = PJ_SUCCESS;
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    */
+
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_vol = strm->engine->GetMaxVolume();
+	    TInt vol = strm->engine->GetVolume();
+	    
+	    if (max_vol > 0 && vol >= 0) {
+		*(unsigned*)pval = vol * 100 / max_vol; 
+		status = PJ_SUCCESS;
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    default:
+	break;
     }
-
+    
     return status;
 }
 
 /* API: set capability */
-static pj_status_t stream_set_cap (pjmedia_aud_stream *s,
-                                   pjmedia_aud_dev_cap cap,
-                                   const void *pval)
+static pj_status_t stream_set_cap(pjmedia_aud_stream *s,
+				  pjmedia_aud_dev_cap cap,
+				  const void *pval)
 {
-
-    struct aps_stream *strm = (struct aps_stream*) s;
+    struct aps_stream *strm = (struct aps_stream*)s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
 
     switch (cap) {
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                pjmedia_aud_dev_route r = * (const pjmedia_aud_dev_route*) pval;
-                TInt err;
-
-                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
-
-                switch (r) {
-
-                    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
-
-                    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
-                        err = strm->engine->ActivateSpeaker (EFalse);
-                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
-                        break;
-
-                    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
-                        err = strm->engine->ActivateSpeaker (ETrue);
-                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
-                        break;
-
-                    default:
-                        status = PJ_EINVAL;
-                        break;
-                }
-
-                if (status == PJ_SUCCESS)
-                    strm->param.output_route = r;
-            }
-
-            break;
-
-            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
-            /*
-            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-
-                TInt max_gain = strm->engine->GetMaxGain();
-                if (max_gain > 0) {
-            	TInt gain, err;
-
-            	gain = *(unsigned*)pval * max_gain / 100;
-            	err = strm->engine->SetGain(gain);
-            	status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-                } else {
-            	status = PJMEDIA_EAUD_NOTREADY;
-                }
-                if (status == PJ_SUCCESS)
-            	strm->param.input_vol = *(unsigned*)pval;
-            }
-            break;
-            */
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
-
-                TInt max_vol = strm->engine->GetMaxVolume();
-
-                if (max_vol > 0) {
-                    TInt vol, err;
-
-                    vol = * (unsigned*) pval * max_vol / 100;
-                    err = strm->engine->SetVolume (vol);
-                    status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-
-                if (status == PJ_SUCCESS)
-                    strm->param.output_vol = * (unsigned*) pval;
-            }
-
-            break;
-
-        default:
-            break;
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    pjmedia_aud_dev_route r = *(const pjmedia_aud_dev_route*)pval;
+	    TInt err;
+
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    switch (r) {
+	    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
+	    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
+		err = strm->engine->ActivateSpeaker(EFalse);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+		break;
+	    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
+		err = strm->engine->ActivateSpeaker(ETrue);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+		break;
+	    default:
+		status = PJ_EINVAL;
+		break;
+	    }
+	    if (status == PJ_SUCCESS)
+		strm->param.output_route = r; 
+	}
+	break;
+
+    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
+    /*
+    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_gain = strm->engine->GetMaxGain();
+	    if (max_gain > 0) {
+		TInt gain, err;
+		
+		gain = *(unsigned*)pval * max_gain / 100;
+		err = strm->engine->SetGain(gain);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	    if (status == PJ_SUCCESS)
+		strm->param.input_vol = *(unsigned*)pval;
+	}
+	break;
+    */
+
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_vol = strm->engine->GetMaxVolume();
+	    if (max_vol > 0) {
+		TInt vol, err;
+		
+		vol = *(unsigned*)pval * max_vol / 100;
+		err = strm->engine->SetVolume(vol);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	    if (status == PJ_SUCCESS)
+		strm->param.output_vol = *(unsigned*)pval;
+	}
+	break;
+    default:
+	break;
     }
-
+    
     return status;
 }
 
 /* API: Start stream. */
-static pj_status_t stream_start (pjmedia_aud_stream *strm)
+static pj_status_t stream_start(pjmedia_aud_stream *strm)
 {
+    struct aps_stream *stream = (struct aps_stream*)strm;
 
-    struct aps_stream *stream = (struct aps_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
     if (stream->engine) {
-        TInt err = stream->engine->StartL();
-
-        if (err != KErrNone)
-            return PJ_RETURN_OS_ERROR (err);
+	TInt err = stream->engine->StartL();
+    	if (err != KErrNone)
+    	    return PJ_RETURN_OS_ERROR(err);
     }
 
     return PJ_SUCCESS;
 }
 
 /* API: Stop stream. */
-static pj_status_t stream_stop (pjmedia_aud_stream *strm)
+static pj_status_t stream_stop(pjmedia_aud_stream *strm)
 {
+    struct aps_stream *stream = (struct aps_stream*)strm;
 
-    struct aps_stream *stream = (struct aps_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
     if (stream->engine) {
-        stream->engine->Stop();
+    	stream->engine->Stop();
     }
 
     return PJ_SUCCESS;
@@ -1862,31 +1733,28 @@ static pj_status_t stream_stop (pjmedia_aud_stream *strm)
 
 
 /* API: Destroy stream. */
-static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
+static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
 {
+    struct aps_stream *stream = (struct aps_stream*)strm;
 
-    struct aps_stream *stream = (struct aps_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
-    stream_stop (strm);
+    stream_stop(strm);
 
     delete stream->engine;
     stream->engine = NULL;
 
     if (stream->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-        TBitStream *g729_bitstream = (TBitStream*) stream->strm_data;
-        stream->strm_data = NULL;
-        delete g729_bitstream;
+	TBitStream *g729_bitstream = (TBitStream*)stream->strm_data;
+	stream->strm_data = NULL;
+	delete g729_bitstream;
     }
 
     pj_pool_t *pool;
-
     pool = stream->pool;
-
     if (pool) {
-        stream->pool = NULL;
-        pj_pool_release (pool);
+    	stream->pool = NULL;
+    	pj_pool_release(pool);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
index 44ba2f893e..d943f2bd25 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
@@ -1,5 +1,5 @@
 /* $Id: symb_mda_dev.cpp 2777 2009-06-19 09:15:59Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pjmedia-audiodev/audiodev_imp.h>
 #include <pjmedia-audiodev/errno.h>
@@ -32,7 +32,7 @@
  * This file provides sound implementation for Symbian Audio Streaming
  * device. Application using this sound abstraction must link with:
  *  - mediaclientaudiostream.lib, and
- *  - mediaclientaudioinputstream.lib
+ *  - mediaclientaudioinputstream.lib 
  */
 #include <mda/common/audio.h>
 #include <mdaaudiooutputstream.h>
@@ -52,8 +52,8 @@
 
 
 /* MDA factory */
-
-struct mda_factory {
+struct mda_factory
+{
     pjmedia_aud_dev_factory	 base;
     pj_pool_t			*pool;
     pj_pool_factory		*pf;
@@ -61,17 +61,15 @@ struct mda_factory {
 };
 
 /* Forward declaration of internal engine. */
-
 class CPjAudioInputEngine;
-
 class CPjAudioOutputEngine;
 
 /* MDA stream. */
-
-struct mda_stream {
+struct mda_stream
+{
     // Base
     pjmedia_aud_stream	 base;			/**< Base class.	*/
-
+    
     // Pool
     pj_pool_t		*pool;			/**< Memory pool.       */
 
@@ -85,37 +83,38 @@ struct mda_stream {
 
 
 /* Prototypes */
-static pj_status_t factory_init (pjmedia_aud_dev_factory *f);
-static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f);
-static unsigned    factory_get_dev_count (pjmedia_aud_dev_factory *f);
-static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_dev_info *info);
-static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_param *param);
-static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
-        const pjmedia_aud_param *param,
-        pjmedia_aud_rec_cb rec_cb,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data,
-        pjmedia_aud_stream **p_aud_strm);
-
-static pj_status_t stream_get_param (pjmedia_aud_stream *strm,
-                                     pjmedia_aud_param *param);
-static pj_status_t stream_get_cap (pjmedia_aud_stream *strm,
-                                   pjmedia_aud_dev_cap cap,
-                                   void *value);
-static pj_status_t stream_set_cap (pjmedia_aud_stream *strm,
-                                   pjmedia_aud_dev_cap cap,
-                                   const void *value);
-static pj_status_t stream_start (pjmedia_aud_stream *strm);
-static pj_status_t stream_stop (pjmedia_aud_stream *strm);
-static pj_status_t stream_destroy (pjmedia_aud_stream *strm);
+static pj_status_t factory_init(pjmedia_aud_dev_factory *f);
+static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f);
+static unsigned    factory_get_dev_count(pjmedia_aud_dev_factory *f);
+static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
+					unsigned index,
+					pjmedia_aud_dev_info *info);
+static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
+					 unsigned index,
+					 pjmedia_aud_param *param);
+static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
+					 const pjmedia_aud_param *param,
+					 pjmedia_aud_rec_cb rec_cb,
+					 pjmedia_aud_play_cb play_cb,
+					 void *user_data,
+					 pjmedia_aud_stream **p_aud_strm);
+
+static pj_status_t stream_get_param(pjmedia_aud_stream *strm,
+				    pjmedia_aud_param *param);
+static pj_status_t stream_get_cap(pjmedia_aud_stream *strm,
+				  pjmedia_aud_dev_cap cap,
+				  void *value);
+static pj_status_t stream_set_cap(pjmedia_aud_stream *strm,
+				  pjmedia_aud_dev_cap cap,
+				  const void *value);
+static pj_status_t stream_start(pjmedia_aud_stream *strm);
+static pj_status_t stream_stop(pjmedia_aud_stream *strm);
+static pj_status_t stream_destroy(pjmedia_aud_stream *strm);
 
 
 /* Operations */
-static pjmedia_aud_dev_factory_op factory_op = {
+static pjmedia_aud_dev_factory_op factory_op =
+{
     &factory_init,
     &factory_destroy,
     &factory_get_dev_count,
@@ -124,7 +123,8 @@ static pjmedia_aud_dev_factory_op factory_op = {
     &factory_create_stream
 };
 
-static pjmedia_aud_stream_op stream_op = {
+static pjmedia_aud_stream_op stream_op = 
+{
     &stream_get_param,
     &stream_get_cap,
     &stream_set_cap,
@@ -137,171 +137,141 @@ static pjmedia_aud_stream_op stream_op = {
 /*
  * Convert clock rate to Symbian's TMdaAudioDataSettings capability.
  */
-static TInt get_clock_rate_cap (unsigned clock_rate)
+static TInt get_clock_rate_cap(unsigned clock_rate)
 {
     switch (clock_rate) {
-
-        case 8000:
-            return TMdaAudioDataSettings::ESampleRate8000Hz;
-
-        case 11025:
-            return TMdaAudioDataSettings::ESampleRate11025Hz;
-
-        case 12000:
-            return TMdaAudioDataSettings::ESampleRate12000Hz;
-
-        case 16000:
-            return TMdaAudioDataSettings::ESampleRate16000Hz;
-
-        case 22050:
-            return TMdaAudioDataSettings::ESampleRate22050Hz;
-
-        case 24000:
-            return TMdaAudioDataSettings::ESampleRate24000Hz;
-
-        case 32000:
-            return TMdaAudioDataSettings::ESampleRate32000Hz;
-
-        case 44100:
-            return TMdaAudioDataSettings::ESampleRate44100Hz;
-
-        case 48000:
-            return TMdaAudioDataSettings::ESampleRate48000Hz;
-
-        case 64000:
-            return TMdaAudioDataSettings::ESampleRate64000Hz;
-
-        case 96000:
-            return TMdaAudioDataSettings::ESampleRate96000Hz;
-
-        default:
-            return 0;
+    case 8000:  return TMdaAudioDataSettings::ESampleRate8000Hz;
+    case 11025: return TMdaAudioDataSettings::ESampleRate11025Hz;
+    case 12000: return TMdaAudioDataSettings::ESampleRate12000Hz;
+    case 16000: return TMdaAudioDataSettings::ESampleRate16000Hz;
+    case 22050: return TMdaAudioDataSettings::ESampleRate22050Hz;
+    case 24000: return TMdaAudioDataSettings::ESampleRate24000Hz;
+    case 32000: return TMdaAudioDataSettings::ESampleRate32000Hz;
+    case 44100: return TMdaAudioDataSettings::ESampleRate44100Hz;
+    case 48000: return TMdaAudioDataSettings::ESampleRate48000Hz;
+    case 64000: return TMdaAudioDataSettings::ESampleRate64000Hz;
+    case 96000: return TMdaAudioDataSettings::ESampleRate96000Hz;
+    default:
+	return 0;
     }
 }
 
 /*
  * Convert number of channels into Symbian's TMdaAudioDataSettings capability.
  */
-static TInt get_channel_cap (unsigned channel_count)
+static TInt get_channel_cap(unsigned channel_count)
 {
     switch (channel_count) {
-
-        case 1:
-            return TMdaAudioDataSettings::EChannelsMono;
-
-        case 2:
-            return TMdaAudioDataSettings::EChannelsStereo;
-
-        default:
-            return 0;
+    case 1: return TMdaAudioDataSettings::EChannelsMono;
+    case 2: return TMdaAudioDataSettings::EChannelsStereo;
+    default:
+	return 0;
     }
 }
 
 /*
  * Utility: print sound device error
  */
-static void snd_perror (const char *title, TInt rc)
+static void snd_perror(const char *title, TInt rc) 
 {
-    PJ_LOG (1, (THIS_FILE, "%s: error code %d", title, rc));
+    PJ_LOG(1,(THIS_FILE, "%s: error code %d", title, rc));
 }
-
+ 
 //////////////////////////////////////////////////////////////////////////////
 //
 
 /*
  * Implementation: Symbian Input Stream.
  */
-
 class CPjAudioInputEngine : public CBase, MMdaAudioInputStreamCallback
 {
+public:
+    enum State
+    {
+	STATE_INACTIVE,
+	STATE_ACTIVE,
+    };
+
+    ~CPjAudioInputEngine();
+
+    static CPjAudioInputEngine *NewL(struct mda_stream *parent_strm,
+				     pjmedia_aud_rec_cb rec_cb,
+				     void *user_data);
+
+    static CPjAudioInputEngine *NewLC(struct mda_stream *parent_strm,
+				      pjmedia_aud_rec_cb rec_cb,
+				      void *user_data);
+
+    pj_status_t StartRecord();
+    void Stop();
+
+    pj_status_t SetGain(TInt gain) { 
+	if (iInputStream_) { 
+	    iInputStream_->SetGain(gain);
+	    return PJ_SUCCESS;
+	} else
+	    return PJ_EINVALIDOP;
+    }
+    
+    TInt GetGain() { 
+	if (iInputStream_) { 
+	    return iInputStream_->Gain();
+	} else
+	    return PJ_EINVALIDOP;
+    }
 
-    public:
-        enum State {
-            STATE_INACTIVE,
-            STATE_ACTIVE,
-        };
-
-        ~CPjAudioInputEngine();
-
-        static CPjAudioInputEngine *NewL (struct mda_stream *parent_strm,
-                                          pjmedia_aud_rec_cb rec_cb,
-                                          void *user_data);
-
-        static CPjAudioInputEngine *NewLC (struct mda_stream *parent_strm,
-                                           pjmedia_aud_rec_cb rec_cb,
-                                           void *user_data);
-
-        pj_status_t StartRecord();
-        void Stop();
-
-        pj_status_t SetGain (TInt gain) {
-            if (iInputStream_) {
-                iInputStream_->SetGain (gain);
-                return PJ_SUCCESS;
-            } else
-                return PJ_EINVALIDOP;
-        }
-
-        TInt GetGain() {
-            if (iInputStream_) {
-                return iInputStream_->Gain();
-            } else
-                return PJ_EINVALIDOP;
-        }
-
-        TInt GetMaxGain() {
-            if (iInputStream_) {
-                return iInputStream_->MaxGain();
-            } else
-                return PJ_EINVALIDOP;
-        }
-
-    private:
-        State		     state_;
-
-        struct mda_stream	    *parentStrm_;
-        pjmedia_aud_rec_cb	     recCb_;
-        void		    *userData_;
-        CMdaAudioInputStream    *iInputStream_;
-        HBufC8		    *iStreamBuffer_;
-        TPtr8		     iFramePtr_;
-        TInt		     lastError_;
-        pj_uint32_t		     timeStamp_;
-
-        // cache variable
-        // to avoid calculating frame length repeatedly
-        TInt		     frameLen_;
-
-        // sometimes recorded size != requested framesize, so let's
-        // provide a buffer to make sure the rec callback returning
-        // framesize as requested.
-        TUint8		    *frameRecBuf_;
-        TInt		     frameRecBufLen_;
-
-        CPjAudioInputEngine (struct mda_stream *parent_strm,
-                             pjmedia_aud_rec_cb rec_cb,
-                             void *user_data);
-        void ConstructL();
-        TPtr8 & GetFrame();
-
-    public:
-        virtual void MaiscOpenComplete (TInt aError);
-        virtual void MaiscBufferCopied (TInt aError, const TDesC8 &aBuffer);
-        virtual void MaiscRecordComplete (TInt aError);
+    TInt GetMaxGain() { 
+	if (iInputStream_) { 
+	    return iInputStream_->MaxGain();
+	} else
+	    return PJ_EINVALIDOP;
+    }
+    
+private:
+    State		     state_;
+    struct mda_stream	    *parentStrm_;
+    pjmedia_aud_rec_cb	     recCb_;
+    void		    *userData_;
+    CMdaAudioInputStream    *iInputStream_;
+    HBufC8		    *iStreamBuffer_;
+    TPtr8		     iFramePtr_;
+    TInt		     lastError_;
+    pj_uint32_t		     timeStamp_;
+
+    // cache variable
+    // to avoid calculating frame length repeatedly
+    TInt		     frameLen_;
+    
+    // sometimes recorded size != requested framesize, so let's
+    // provide a buffer to make sure the rec callback returning
+    // framesize as requested.
+    TUint8		    *frameRecBuf_;
+    TInt		     frameRecBufLen_;
+
+    CPjAudioInputEngine(struct mda_stream *parent_strm,
+	    pjmedia_aud_rec_cb rec_cb,
+			void *user_data);
+    void ConstructL();
+    TPtr8 & GetFrame();
+    
+public:
+    virtual void MaiscOpenComplete(TInt aError);
+    virtual void MaiscBufferCopied(TInt aError, const TDesC8 &aBuffer);
+    virtual void MaiscRecordComplete(TInt aError);
 
 };
 
 
-CPjAudioInputEngine::CPjAudioInputEngine (struct mda_stream *parent_strm,
-        pjmedia_aud_rec_cb rec_cb,
-        void *user_data)
-        : state_ (STATE_INACTIVE), parentStrm_ (parent_strm),
-        recCb_ (rec_cb), userData_ (user_data),
-        iInputStream_ (NULL), iStreamBuffer_ (NULL), iFramePtr_ (0, 0),
-        lastError_ (KErrNone), timeStamp_ (0),
-        frameLen_ (parent_strm->param.samples_per_frame *
-                   BYTES_PER_SAMPLE),
-        frameRecBuf_ (NULL), frameRecBufLen_ (0)
+CPjAudioInputEngine::CPjAudioInputEngine(struct mda_stream *parent_strm,
+					 pjmedia_aud_rec_cb rec_cb,
+					 void *user_data)
+    : state_(STATE_INACTIVE), parentStrm_(parent_strm), 
+      recCb_(rec_cb), userData_(user_data), 
+      iInputStream_(NULL), iStreamBuffer_(NULL), iFramePtr_(0, 0),
+      lastError_(KErrNone), timeStamp_(0),
+      frameLen_(parent_strm->param.samples_per_frame * 
+	        BYTES_PER_SAMPLE),
+      frameRecBuf_(NULL), frameRecBufLen_(0)
 {
 }
 
@@ -311,7 +281,7 @@ CPjAudioInputEngine::~CPjAudioInputEngine()
 
     delete iStreamBuffer_;
     iStreamBuffer_ = NULL;
-
+    
     delete [] frameRecBuf_;
     frameRecBuf_ = NULL;
     frameRecBufLen_ = 0;
@@ -319,33 +289,33 @@ CPjAudioInputEngine::~CPjAudioInputEngine()
 
 void CPjAudioInputEngine::ConstructL()
 {
-    iStreamBuffer_ = HBufC8::NewL (frameLen_);
-    CleanupStack::PushL (iStreamBuffer_);
+    iStreamBuffer_ = HBufC8::NewL(frameLen_);
+    CleanupStack::PushL(iStreamBuffer_);
 
     frameRecBuf_ = new TUint8[frameLen_*2];
-    CleanupStack::PushL (frameRecBuf_);
+    CleanupStack::PushL(frameRecBuf_);
 }
 
-CPjAudioInputEngine *CPjAudioInputEngine::NewLC (struct mda_stream *parent,
-        pjmedia_aud_rec_cb rec_cb,
-        void *user_data)
+CPjAudioInputEngine *CPjAudioInputEngine::NewLC(struct mda_stream *parent,
+						pjmedia_aud_rec_cb rec_cb,
+					        void *user_data)
 {
-    CPjAudioInputEngine* self = new (ELeave) CPjAudioInputEngine (parent,
-            rec_cb,
-            user_data);
-    CleanupStack::PushL (self);
+    CPjAudioInputEngine* self = new (ELeave) CPjAudioInputEngine(parent,
+								 rec_cb, 
+								 user_data);
+    CleanupStack::PushL(self);
     self->ConstructL();
     return self;
 }
 
-CPjAudioInputEngine *CPjAudioInputEngine::NewL (struct mda_stream *parent,
-        pjmedia_aud_rec_cb rec_cb,
-        void *user_data)
+CPjAudioInputEngine *CPjAudioInputEngine::NewL(struct mda_stream *parent,
+					       pjmedia_aud_rec_cb rec_cb,
+					       void *user_data)
 {
-    CPjAudioInputEngine *self = NewLC (parent, rec_cb, user_data);
-    CleanupStack::Pop (self->frameRecBuf_);
-    CleanupStack::Pop (self->iStreamBuffer_);
-    CleanupStack::Pop (self);
+    CPjAudioInputEngine *self = NewLC(parent, rec_cb, user_data);
+    CleanupStack::Pop(self->frameRecBuf_);
+    CleanupStack::Pop(self->iStreamBuffer_);
+    CleanupStack::Pop(self);
     return self;
 }
 
@@ -355,50 +325,44 @@ pj_status_t CPjAudioInputEngine::StartRecord()
 
     // Ignore command if recording is in progress.
     if (state_ == STATE_ACTIVE)
-        return PJ_SUCCESS;
+	return PJ_SUCCESS;
 
     // According to Nokia's AudioStream example, some 2nd Edition, FP2 devices
-    // (such as Nokia 6630) require the stream to be reconstructed each time
+    // (such as Nokia 6630) require the stream to be reconstructed each time 
     // before calling Open() - otherwise the callback never gets called.
     // For uniform behavior, lets just delete/re-create the stream for all
     // devices.
 
     // Destroy existing stream.
     if (iInputStream_) delete iInputStream_;
-
     iInputStream_ = NULL;
 
     // Create the stream.
-    TRAPD (err, iInputStream_ = CMdaAudioInputStream::NewL (*this));
-
+    TRAPD(err, iInputStream_ = CMdaAudioInputStream::NewL(*this));
     if (err != KErrNone)
-        return PJ_RETURN_OS_ERROR (err);
+	return PJ_RETURN_OS_ERROR(err);
 
     // Initialize settings.
     TMdaAudioDataSettings iStreamSettings;
-
-    iStreamSettings.iChannels =
-        get_channel_cap (parentStrm_->param.channel_count);
-
-    iStreamSettings.iSampleRate =
-        get_clock_rate_cap (parentStrm_->param.clock_rate);
-
-    pj_assert (iStreamSettings.iChannels != 0 &&
-               iStreamSettings.iSampleRate != 0);
-
-    PJ_LOG (4, (THIS_FILE, "Opening sound device for capture, "
-                "clock rate=%d, channel count=%d..",
-                parentStrm_->param.clock_rate,
-                parentStrm_->param.channel_count));
-
+    iStreamSettings.iChannels = 
+			    get_channel_cap(parentStrm_->param.channel_count);
+    iStreamSettings.iSampleRate = 
+			    get_clock_rate_cap(parentStrm_->param.clock_rate);
+
+    pj_assert(iStreamSettings.iChannels != 0 && 
+	      iStreamSettings.iSampleRate != 0);
+
+    PJ_LOG(4,(THIS_FILE, "Opening sound device for capture, "
+    		         "clock rate=%d, channel count=%d..",
+    		         parentStrm_->param.clock_rate, 
+    		         parentStrm_->param.channel_count));
+    
     // Open stream.
     lastError_ = KRequestPending;
-
-    iInputStream_->Open (&iStreamSettings);
-
+    iInputStream_->Open(&iStreamSettings);
+    
     // Success
-    PJ_LOG (4, (THIS_FILE, "Sound capture started."));
-
+    PJ_LOG(4,(THIS_FILE, "Sound capture started."));
     return PJ_SUCCESS;
 }
 
@@ -407,121 +371,113 @@ void CPjAudioInputEngine::Stop()
 {
     // If capture is in progress, stop it.
     if (iInputStream_ && state_ == STATE_ACTIVE) {
-        lastError_ = KRequestPending;
-        iInputStream_->Stop();
+    	lastError_ = KRequestPending;
+    	iInputStream_->Stop();
 
-        // Wait until it's actually stopped
-
-        while (lastError_ == KRequestPending)
-            pj_symbianos_poll (-1, 100);
+	// Wait until it's actually stopped
+    	while (lastError_ == KRequestPending)
+	    pj_symbianos_poll(-1, 100);
     }
 
     if (iInputStream_) {
-        delete iInputStream_;
-        iInputStream_ = NULL;
+	delete iInputStream_;
+	iInputStream_ = NULL;
     }
-
+    
     state_ = STATE_INACTIVE;
 }
 
 
-TPtr8 & CPjAudioInputEngine::GetFrame()
+TPtr8 & CPjAudioInputEngine::GetFrame() 
 {
     //iStreamBuffer_->Des().FillZ(frameLen_);
-    iFramePtr_.Set ( (TUint8*) (iStreamBuffer_->Ptr()), frameLen_, frameLen_);
+    iFramePtr_.Set((TUint8*)(iStreamBuffer_->Ptr()), frameLen_, frameLen_);
     return iFramePtr_;
 }
 
-void CPjAudioInputEngine::MaiscOpenComplete (TInt aError)
+void CPjAudioInputEngine::MaiscOpenComplete(TInt aError)
 {
     lastError_ = aError;
-
     if (aError != KErrNone) {
-        snd_perror ("Error in MaiscOpenComplete()", aError);
-        return;
+        snd_perror("Error in MaiscOpenComplete()", aError);
+    	return;
     }
 
     // set stream priority to normal and time sensitive
-    iInputStream_->SetPriority (EPriorityNormal,
-                                EMdaPriorityPreferenceTime);
+    iInputStream_->SetPriority(EPriorityNormal, 
+    			       EMdaPriorityPreferenceTime);				
 
     // Read the first frame.
     TPtr8 & frm = GetFrame();
-
-    TRAPD (err2, iInputStream_->ReadL (frm));
-
+    TRAPD(err2, iInputStream_->ReadL(frm));
     if (err2) {
-        PJ_LOG (4, (THIS_FILE, "Exception in iInputStream_->ReadL()"));
+    	PJ_LOG(4,(THIS_FILE, "Exception in iInputStream_->ReadL()"));
     }
 }
 
-void CPjAudioInputEngine::MaiscBufferCopied (TInt aError,
-        const TDesC8 &aBuffer)
+void CPjAudioInputEngine::MaiscBufferCopied(TInt aError, 
+					    const TDesC8 &aBuffer)
 {
     lastError_ = aError;
-
     if (aError != KErrNone) {
-        snd_perror ("Error in MaiscBufferCopied()", aError);
-        return;
+    	snd_perror("Error in MaiscBufferCopied()", aError);
+	return;
     }
 
     if (frameRecBufLen_ || aBuffer.Length() < frameLen_) {
-        pj_memcpy (frameRecBuf_ + frameRecBufLen_, (void*) aBuffer.Ptr(), aBuffer.Length());
-        frameRecBufLen_ += aBuffer.Length();
+	pj_memcpy(frameRecBuf_ + frameRecBufLen_, (void*) aBuffer.Ptr(), aBuffer.Length());
+	frameRecBufLen_ += aBuffer.Length();
     }
 
     if (frameRecBufLen_) {
-        while (frameRecBufLen_ >= frameLen_) {
-            pjmedia_frame f;
-
-            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-            f.buf = frameRecBuf_;
-            f.size = frameLen_;
-            f.timestamp.u32.lo = timeStamp_;
-            f.bit_info = 0;
-
-            // Call the callback.
-            recCb_ (userData_, &f);
-            // Increment timestamp.
-            timeStamp_ += parentStrm_->param.samples_per_frame;
-
-            frameRecBufLen_ -= frameLen_;
-            pj_memmove (frameRecBuf_, frameRecBuf_+frameLen_, frameRecBufLen_);
-        }
+    	while (frameRecBufLen_ >= frameLen_) {
+    	    pjmedia_frame f;
+    	    
+    	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+    	    f.buf = frameRecBuf_;
+    	    f.size = frameLen_;
+    	    f.timestamp.u32.lo = timeStamp_;
+    	    f.bit_info = 0;
+    	    
+    	    // Call the callback.
+	    recCb_(userData_, &f);
+	    // Increment timestamp.
+	    timeStamp_ += parentStrm_->param.samples_per_frame;
+
+	    frameRecBufLen_ -= frameLen_;
+	    pj_memmove(frameRecBuf_, frameRecBuf_+frameLen_, frameRecBufLen_);
+    	}
     } else {
-        pjmedia_frame f;
-
-        f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-        f.buf = (void*) aBuffer.Ptr();
-        f.size = aBuffer.Length();
-        f.timestamp.u32.lo = timeStamp_;
-        f.bit_info = 0;
-
-        // Call the callback.
-        recCb_ (userData_, &f);
-
-        // Increment timestamp.
-        timeStamp_ += parentStrm_->param.samples_per_frame;
+	pjmedia_frame f;
+	
+	f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+	f.buf = (void*)aBuffer.Ptr();
+	f.size = aBuffer.Length();
+	f.timestamp.u32.lo = timeStamp_;
+	f.bit_info = 0;
+	
+	// Call the callback.
+	recCb_(userData_, &f);
+	
+	// Increment timestamp.
+	timeStamp_ += parentStrm_->param.samples_per_frame;
     }
 
     // Record next frame
     TPtr8 & frm = GetFrame();
-
-    TRAPD (err2, iInputStream_->ReadL (frm));
-
+    TRAPD(err2, iInputStream_->ReadL(frm));
     if (err2) {
-        PJ_LOG (4, (THIS_FILE, "Exception in iInputStream_->ReadL()"));
+    	PJ_LOG(4,(THIS_FILE, "Exception in iInputStream_->ReadL()"));
     }
 }
 
 
-void CPjAudioInputEngine::MaiscRecordComplete (TInt aError)
+void CPjAudioInputEngine::MaiscRecordComplete(TInt aError)
 {
     lastError_ = aError;
     state_ = STATE_INACTIVE;
-
     if (aError != KErrNone && aError != KErrCancel) {
-        snd_perror ("Error in MaiscRecordComplete()", aError);
+    	snd_perror("Error in MaiscRecordComplete()", aError);
     }
 }
 
@@ -536,78 +492,77 @@ void CPjAudioInputEngine::MaiscRecordComplete (TInt aError)
 
 class CPjAudioOutputEngine : public CBase, MMdaAudioOutputStreamCallback
 {
+public:
+    enum State
+    {
+	STATE_INACTIVE,
+	STATE_ACTIVE,
+    };
+
+    ~CPjAudioOutputEngine();
+
+    static CPjAudioOutputEngine *NewL(struct mda_stream *parent_strm,
+				      pjmedia_aud_play_cb play_cb,
+				      void *user_data);
+
+    static CPjAudioOutputEngine *NewLC(struct mda_stream *parent_strm,
+				       pjmedia_aud_play_cb rec_cb,
+				       void *user_data);
+
+    pj_status_t StartPlay();
+    void Stop();
+
+    pj_status_t SetVolume(TInt vol) { 
+	if (iOutputStream_) { 
+	    iOutputStream_->SetVolume(vol);
+	    return PJ_SUCCESS;
+	} else
+	    return PJ_EINVALIDOP;
+    }
+    
+    TInt GetVolume() { 
+	if (iOutputStream_) { 
+	    return iOutputStream_->Volume();
+	} else
+	    return PJ_EINVALIDOP;
+    }
+
+    TInt GetMaxVolume() { 
+	if (iOutputStream_) { 
+	    return iOutputStream_->MaxVolume();
+	} else
+	    return PJ_EINVALIDOP;
+    }
 
-    public:
-        enum State {
-            STATE_INACTIVE,
-            STATE_ACTIVE,
-        };
-
-        ~CPjAudioOutputEngine();
-
-        static CPjAudioOutputEngine *NewL (struct mda_stream *parent_strm,
-                                           pjmedia_aud_play_cb play_cb,
-                                           void *user_data);
-
-        static CPjAudioOutputEngine *NewLC (struct mda_stream *parent_strm,
-                                            pjmedia_aud_play_cb rec_cb,
-                                            void *user_data);
-
-        pj_status_t StartPlay();
-        void Stop();
-
-        pj_status_t SetVolume (TInt vol) {
-            if (iOutputStream_) {
-                iOutputStream_->SetVolume (vol);
-                return PJ_SUCCESS;
-            } else
-                return PJ_EINVALIDOP;
-        }
-
-        TInt GetVolume() {
-            if (iOutputStream_) {
-                return iOutputStream_->Volume();
-            } else
-                return PJ_EINVALIDOP;
-        }
-
-        TInt GetMaxVolume() {
-            if (iOutputStream_) {
-                return iOutputStream_->MaxVolume();
-            } else
-                return PJ_EINVALIDOP;
-        }
-
-    private:
-        State		     state_;
-
-        struct mda_stream	    *parentStrm_;
-        pjmedia_aud_play_cb	     playCb_;
-        void		    *userData_;
-        CMdaAudioOutputStream   *iOutputStream_;
-        TUint8		    *frameBuf_;
-        unsigned		     frameBufSize_;
-        TPtrC8		     frame_;
-        TInt		     lastError_;
-        unsigned		     timestamp_;
-
-        CPjAudioOutputEngine (struct mda_stream *parent_strm,
-                              pjmedia_aud_play_cb play_cb,
-                              void *user_data);
-        void ConstructL();
-
-        virtual void MaoscOpenComplete (TInt aError);
-        virtual void MaoscBufferCopied (TInt aError, const TDesC8& aBuffer);
-        virtual void MaoscPlayComplete (TInt aError);
+private:
+    State		     state_;
+    struct mda_stream	    *parentStrm_;
+    pjmedia_aud_play_cb	     playCb_;
+    void		    *userData_;
+    CMdaAudioOutputStream   *iOutputStream_;
+    TUint8		    *frameBuf_;
+    unsigned		     frameBufSize_;
+    TPtrC8		     frame_;
+    TInt		     lastError_;
+    unsigned		     timestamp_;
+
+    CPjAudioOutputEngine(struct mda_stream *parent_strm,
+			 pjmedia_aud_play_cb play_cb,
+			 void *user_data);
+    void ConstructL();
+
+    virtual void MaoscOpenComplete(TInt aError);
+    virtual void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);
+    virtual void MaoscPlayComplete(TInt aError);
 };
 
 
-CPjAudioOutputEngine::CPjAudioOutputEngine (struct mda_stream *parent_strm,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data)
-        : state_ (STATE_INACTIVE), parentStrm_ (parent_strm), playCb_ (play_cb),
-        userData_ (user_data), iOutputStream_ (NULL), frameBuf_ (NULL),
-        lastError_ (KErrNone), timestamp_ (0)
+CPjAudioOutputEngine::CPjAudioOutputEngine(struct mda_stream *parent_strm,
+					   pjmedia_aud_play_cb play_cb,
+					   void *user_data) 
+: state_(STATE_INACTIVE), parentStrm_(parent_strm), playCb_(play_cb), 
+  userData_(user_data), iOutputStream_(NULL), frameBuf_(NULL),
+  lastError_(KErrNone), timestamp_(0)
 {
 }
 
@@ -615,36 +570,36 @@ CPjAudioOutputEngine::CPjAudioOutputEngine (struct mda_stream *parent_strm,
 void CPjAudioOutputEngine::ConstructL()
 {
     frameBufSize_ = parentStrm_->param.samples_per_frame *
-                    BYTES_PER_SAMPLE;
+		    BYTES_PER_SAMPLE;
     frameBuf_ = new TUint8[frameBufSize_];
 }
 
 CPjAudioOutputEngine::~CPjAudioOutputEngine()
 {
     Stop();
-    delete [] frameBuf_;
+    delete [] frameBuf_;	
 }
 
 CPjAudioOutputEngine *
-CPjAudioOutputEngine::NewLC (struct mda_stream *parent_strm,
-                             pjmedia_aud_play_cb play_cb,
-                             void *user_data)
+CPjAudioOutputEngine::NewLC(struct mda_stream *parent_strm,
+			    pjmedia_aud_play_cb play_cb,
+			    void *user_data)
 {
-    CPjAudioOutputEngine* self = new (ELeave) CPjAudioOutputEngine (parent_strm,
-            play_cb,
-            user_data);
-    CleanupStack::PushL (self);
+    CPjAudioOutputEngine* self = new (ELeave) CPjAudioOutputEngine(parent_strm,
+								   play_cb, 
+								   user_data);
+    CleanupStack::PushL(self);
     self->ConstructL();
     return self;
 }
 
 CPjAudioOutputEngine *
-CPjAudioOutputEngine::NewL (struct mda_stream *parent_strm,
-                            pjmedia_aud_play_cb play_cb,
-                            void *user_data)
+CPjAudioOutputEngine::NewL(struct mda_stream *parent_strm,
+			   pjmedia_aud_play_cb play_cb,
+			   void *user_data)
 {
-    CPjAudioOutputEngine *self = NewLC (parent_strm, play_cb, user_data);
-    CleanupStack::Pop (self);
+    CPjAudioOutputEngine *self = NewLC(parent_strm, play_cb, user_data);
+    CleanupStack::Pop(self);
     return self;
 }
 
@@ -652,44 +607,38 @@ pj_status_t CPjAudioOutputEngine::StartPlay()
 {
     // Ignore command if playing is in progress.
     if (state_ == STATE_ACTIVE)
-        return PJ_SUCCESS;
-
+	return PJ_SUCCESS;
+    
     // Destroy existing stream.
     if (iOutputStream_) delete iOutputStream_;
-
     iOutputStream_ = NULL;
-
+    
     // Create the stream
-    TRAPD (err, iOutputStream_ = CMdaAudioOutputStream::NewL (*this));
-
+    TRAPD(err, iOutputStream_ = CMdaAudioOutputStream::NewL(*this));
     if (err != KErrNone)
-        return PJ_RETURN_OS_ERROR (err);
-
+	return PJ_RETURN_OS_ERROR(err);
+    
     // Initialize settings.
     TMdaAudioDataSettings iStreamSettings;
-
-    iStreamSettings.iChannels =
-        get_channel_cap (parentStrm_->param.channel_count);
-
-    iStreamSettings.iSampleRate =
-        get_clock_rate_cap (parentStrm_->param.clock_rate);
-
-    pj_assert (iStreamSettings.iChannels != 0 &&
-               iStreamSettings.iSampleRate != 0);
-
-    PJ_LOG (4, (THIS_FILE, "Opening sound device for playback, "
-                "clock rate=%d, channel count=%d..",
-                parentStrm_->param.clock_rate,
-                parentStrm_->param.channel_count));
+    iStreamSettings.iChannels = 
+			    get_channel_cap(parentStrm_->param.channel_count);
+    iStreamSettings.iSampleRate = 
+			    get_clock_rate_cap(parentStrm_->param.clock_rate);
+
+    pj_assert(iStreamSettings.iChannels != 0 && 
+	      iStreamSettings.iSampleRate != 0);
+    
+    PJ_LOG(4,(THIS_FILE, "Opening sound device for playback, "
+    		         "clock rate=%d, channel count=%d..",
+    		         parentStrm_->param.clock_rate, 
+    		         parentStrm_->param.channel_count));
 
     // Open stream.
     lastError_ = KRequestPending;
-
-    iOutputStream_->Open (&iStreamSettings);
+    iOutputStream_->Open(&iStreamSettings);
 
     // Success
-    PJ_LOG (4, (THIS_FILE, "Sound playback started"));
-
+    PJ_LOG(4,(THIS_FILE, "Sound playback started"));
     return PJ_SUCCESS;
 
 }
@@ -698,137 +647,131 @@ void CPjAudioOutputEngine::Stop()
 {
     // Stop stream if it's playing
     if (iOutputStream_ && state_ != STATE_INACTIVE) {
-        lastError_ = KRequestPending;
-        iOutputStream_->Stop();
+    	lastError_ = KRequestPending;
+    	iOutputStream_->Stop();
 
-        // Wait until it's actually stopped
-
-        while (lastError_ == KRequestPending)
-            pj_symbianos_poll (-1, 100);
+	// Wait until it's actually stopped
+    	while (lastError_ == KRequestPending)
+	    pj_symbianos_poll(-1, 100);
     }
-
-    if (iOutputStream_) {
-        delete iOutputStream_;
-        iOutputStream_ = NULL;
+    
+    if (iOutputStream_) {	
+	delete iOutputStream_;
+	iOutputStream_ = NULL;
     }
-
+    
     state_ = STATE_INACTIVE;
 }
 
-void CPjAudioOutputEngine::MaoscOpenComplete (TInt aError)
+void CPjAudioOutputEngine::MaoscOpenComplete(TInt aError)
 {
     lastError_ = aError;
-
+    
     if (aError==KErrNone) {
-        // output stream opened succesfully, set status to Active
-        state_ = STATE_ACTIVE;
-
-        // set stream properties, 16bit 8KHz mono
-        TMdaAudioDataSettings iSettings;
-        iSettings.iChannels =
-            get_channel_cap (parentStrm_->param.channel_count);
-        iSettings.iSampleRate =
-            get_clock_rate_cap (parentStrm_->param.clock_rate);
-
-        iOutputStream_->SetAudioPropertiesL (iSettings.iSampleRate,
-                                             iSettings.iChannels);
-
-        // set volume to 1/2th of stream max volume
-        iOutputStream_->SetVolume (iOutputStream_->MaxVolume() /2);
-
-        // set stream priority to normal and time sensitive
-        iOutputStream_->SetPriority (EPriorityNormal,
-                                     EMdaPriorityPreferenceTime);
-
-        // Call callback to retrieve frame from upstream.
-        pjmedia_frame f;
-        pj_status_t status;
-
-        f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-        f.buf = frameBuf_;
-        f.size = frameBufSize_;
-        f.timestamp.u32.lo = timestamp_;
-        f.bit_info = 0;
-
-        status = playCb_ (this->userData_, &f);
-
-        if (status != PJ_SUCCESS) {
-            this->Stop();
-            return;
-        }
-
-        if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
-            pj_bzero (frameBuf_, frameBufSize_);
-
-        // Increment timestamp.
-        timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
-
-        // issue WriteL() to write the first audio data block,
-        // subsequent calls to WriteL() will be issued in
-        // MMdaAudioOutputStreamCallback::MaoscBufferCopied()
-        // until whole data buffer is written.
-        frame_.Set (frameBuf_, frameBufSize_);
-
-        iOutputStream_->WriteL (frame_);
+	// output stream opened succesfully, set status to Active
+	state_ = STATE_ACTIVE;
+
+	// set stream properties, 16bit 8KHz mono
+	TMdaAudioDataSettings iSettings;
+	iSettings.iChannels = 
+			get_channel_cap(parentStrm_->param.channel_count);
+	iSettings.iSampleRate = 
+			get_clock_rate_cap(parentStrm_->param.clock_rate);
+
+	iOutputStream_->SetAudioPropertiesL(iSettings.iSampleRate, 
+					    iSettings.iChannels);
+
+	// set volume to 1/2th of stream max volume
+	iOutputStream_->SetVolume(iOutputStream_->MaxVolume()/2);
+	
+	// set stream priority to normal and time sensitive
+	iOutputStream_->SetPriority(EPriorityNormal, 
+				    EMdaPriorityPreferenceTime);				
+
+	// Call callback to retrieve frame from upstream.
+	pjmedia_frame f;
+	pj_status_t status;
+	
+	f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+	f.buf = frameBuf_;
+	f.size = frameBufSize_;
+	f.timestamp.u32.lo = timestamp_;
+	f.bit_info = 0;
+
+	status = playCb_(this->userData_, &f);
+	if (status != PJ_SUCCESS) {
+	    this->Stop();
+	    return;
+	}
+
+	if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
+	    pj_bzero(frameBuf_, frameBufSize_);
+	
+	// Increment timestamp.
+	timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
+
+	// issue WriteL() to write the first audio data block, 
+	// subsequent calls to WriteL() will be issued in 
+	// MMdaAudioOutputStreamCallback::MaoscBufferCopied() 
+	// until whole data buffer is written.
+	frame_.Set(frameBuf_, frameBufSize_);
+	iOutputStream_->WriteL(frame_);
     } else {
-        snd_perror ("Error in MaoscOpenComplete()", aError);
+    	snd_perror("Error in MaoscOpenComplete()", aError);
     }
 }
 
-void CPjAudioOutputEngine::MaoscBufferCopied (TInt aError,
-        const TDesC8& aBuffer)
+void CPjAudioOutputEngine::MaoscBufferCopied(TInt aError, 
+					     const TDesC8& aBuffer)
 {
-    PJ_UNUSED_ARG (aBuffer);
+    PJ_UNUSED_ARG(aBuffer);
 
     if (aError==KErrNone) {
-        // Buffer successfully written, feed another one.
-
-        // Call callback to retrieve frame from upstream.
-        pjmedia_frame f;
-        pj_status_t status;
-
-        f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-        f.buf = frameBuf_;
-        f.size = frameBufSize_;
-        f.timestamp.u32.lo = timestamp_;
-        f.bit_info = 0;
-
-        status = playCb_ (this->userData_, &f);
-
-        if (status != PJ_SUCCESS) {
-            this->Stop();
-            return;
-        }
-
-        if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
-            pj_bzero (frameBuf_, frameBufSize_);
-
-        // Increment timestamp.
-        timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
-
-        // Write to playback stream.
-        frame_.Set (frameBuf_, frameBufSize_);
-
-        iOutputStream_->WriteL (frame_);
+    	// Buffer successfully written, feed another one.
+
+	// Call callback to retrieve frame from upstream.
+	pjmedia_frame f;
+	pj_status_t status;
+	
+	f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+	f.buf = frameBuf_;
+	f.size = frameBufSize_;
+	f.timestamp.u32.lo = timestamp_;
+	f.bit_info = 0;
+
+	status = playCb_(this->userData_, &f);
+	if (status != PJ_SUCCESS) {
+	    this->Stop();
+	    return;
+	}
+
+	if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
+	    pj_bzero(frameBuf_, frameBufSize_);
+	
+	// Increment timestamp.
+	timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
+
+	// Write to playback stream.
+	frame_.Set(frameBuf_, frameBufSize_);
+	iOutputStream_->WriteL(frame_);
 
     } else if (aError==KErrAbort) {
-        // playing was aborted, due to call to CMdaAudioOutputStream::Stop()
-        state_ = STATE_INACTIVE;
+	// playing was aborted, due to call to CMdaAudioOutputStream::Stop()
+	state_ = STATE_INACTIVE;
     } else  {
-        // error writing data to output
-        lastError_ = aError;
-        state_ = STATE_INACTIVE;
-        snd_perror ("Error in MaoscBufferCopied()", aError);
+	// error writing data to output
+	lastError_ = aError;
+	state_ = STATE_INACTIVE;
+	snd_perror("Error in MaoscBufferCopied()", aError);
     }
 }
 
-void CPjAudioOutputEngine::MaoscPlayComplete (TInt aError)
+void CPjAudioOutputEngine::MaoscPlayComplete(TInt aError)
 {
     lastError_ = aError;
     state_ = STATE_INACTIVE;
-
     if (aError != KErrNone && aError != KErrCancel) {
-        snd_perror ("Error in MaoscPlayComplete()", aError);
+    	snd_perror("Error in MaoscPlayComplete()", aError);
     }
 }
 
@@ -840,20 +783,19 @@ void CPjAudioOutputEngine::MaoscPlayComplete (TInt aError)
  * C compatible declaration of MDA factory.
  */
 PJ_BEGIN_DECL
-PJ_DECL (pjmedia_aud_dev_factory*) pjmedia_symb_mda_factory (pj_pool_factory *pf);
+PJ_DECL(pjmedia_aud_dev_factory*) pjmedia_symb_mda_factory(pj_pool_factory *pf);
 PJ_END_DECL
 
 /*
  * Init Symbian audio driver.
  */
-pjmedia_aud_dev_factory* pjmedia_symb_mda_factory (pj_pool_factory *pf)
+pjmedia_aud_dev_factory* pjmedia_symb_mda_factory(pj_pool_factory *pf)
 {
-
     struct mda_factory *f;
     pj_pool_t *pool;
 
-    pool = pj_pool_create (pf, "symb_aud", 1000, 1000, NULL);
-    f = PJ_POOL_ZALLOC_T (pool, struct mda_factory);
+    pool = pj_pool_create(pf, "symb_aud", 1000, 1000, NULL);
+    f = PJ_POOL_ZALLOC_T(pool, struct mda_factory);
     f->pf = pf;
     f->pool = pool;
     f->base.op = &factory_op;
@@ -862,71 +804,67 @@ pjmedia_aud_dev_factory* pjmedia_symb_mda_factory (pj_pool_factory *pf)
 }
 
 /* API: init factory */
-static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
+static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
 {
+    struct mda_factory *af = (struct mda_factory*)f;
 
-    struct mda_factory *af = (struct mda_factory*) f;
-
-    pj_ansi_strcpy (af->dev_info.name, "Symbian Audio");
+    pj_ansi_strcpy(af->dev_info.name, "Symbian Audio");
     af->dev_info.default_samples_per_sec = 8000;
     af->dev_info.caps = PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
-                        PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
+			PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
     af->dev_info.input_count = 1;
     af->dev_info.output_count = 1;
 
-    PJ_LOG (4, (THIS_FILE, "Symb Mda initialized"));
+    PJ_LOG(4, (THIS_FILE, "Symb Mda initialized"));
 
     return PJ_SUCCESS;
 }
 
 /* API: destroy factory */
-static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f)
+static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f)
 {
-
-    struct mda_factory *af = (struct mda_factory*) f;
+    struct mda_factory *af = (struct mda_factory*)f;
     pj_pool_t *pool = af->pool;
 
     af->pool = NULL;
-    pj_pool_release (pool);
-
-    PJ_LOG (4, (THIS_FILE, "Symbian Mda destroyed"));
+    pj_pool_release(pool);
 
+    PJ_LOG(4, (THIS_FILE, "Symbian Mda destroyed"));
+    
     return PJ_SUCCESS;
 }
 
 /* API: get number of devices */
-static unsigned factory_get_dev_count (pjmedia_aud_dev_factory *f)
+static unsigned factory_get_dev_count(pjmedia_aud_dev_factory *f)
 {
-    PJ_UNUSED_ARG (f);
+    PJ_UNUSED_ARG(f);
     return 1;
 }
 
 /* API: get device info */
-static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_dev_info *info)
+static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
+					unsigned index,
+					pjmedia_aud_dev_info *info)
 {
+    struct mda_factory *af = (struct mda_factory*)f;
 
-    struct mda_factory *af = (struct mda_factory*) f;
+    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
 
-    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
-
-    pj_memcpy (info, &af->dev_info, sizeof (*info));
+    pj_memcpy(info, &af->dev_info, sizeof(*info));
 
     return PJ_SUCCESS;
 }
 
 /* API: create default device parameter */
-static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_param *param)
+static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
+					 unsigned index,
+					 pjmedia_aud_param *param)
 {
+    struct mda_factory *af = (struct mda_factory*)f;
 
-    struct mda_factory *af = (struct mda_factory*) f;
-
-    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_bzero (param, sizeof (*param));
+    pj_bzero(param, sizeof(*param));
     param->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
     param->rec_id = index;
     param->play_id = index;
@@ -941,239 +879,210 @@ static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
 
 
 /* API: create stream */
-static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
-        const pjmedia_aud_param *param,
-        pjmedia_aud_rec_cb rec_cb,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data,
-        pjmedia_aud_stream **p_aud_strm)
+static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
+					 const pjmedia_aud_param *param,
+					 pjmedia_aud_rec_cb rec_cb,
+					 pjmedia_aud_play_cb play_cb,
+					 void *user_data,
+					 pjmedia_aud_stream **p_aud_strm)
 {
-
-    struct mda_factory *mf = (struct mda_factory*) f;
+    struct mda_factory *mf = (struct mda_factory*)f;
     pj_pool_t *pool;
-
     struct mda_stream *strm;
 
     /* Can only support 16bits per sample raw PCM format. */
-    PJ_ASSERT_RETURN (param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
-    PJ_ASSERT_RETURN ( (param->flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT) ==0 ||
-                       param->ext_fmt.id == PJMEDIA_FORMAT_L16,
-                       PJ_ENOTSUP);
-
+    PJ_ASSERT_RETURN(param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
+    PJ_ASSERT_RETURN((param->flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT)==0 ||
+		     param->ext_fmt.id == PJMEDIA_FORMAT_L16,
+		     PJ_ENOTSUP);
+    
     /* It seems that MDA recorder only supports for mono channel. */
-    PJ_ASSERT_RETURN (param->channel_count == 1, PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->channel_count == 1, PJ_EINVAL);
 
     /* Create and Initialize stream descriptor */
-    pool = pj_pool_create (mf->pf, "symb_aud_dev", 1000, 1000, NULL);
-    PJ_ASSERT_RETURN (pool, PJ_ENOMEM);
+    pool = pj_pool_create(mf->pf, "symb_aud_dev", 1000, 1000, NULL);
+    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
 
-    strm = PJ_POOL_ZALLOC_T (pool, struct mda_stream);
+    strm = PJ_POOL_ZALLOC_T(pool, struct mda_stream);
     strm->pool = pool;
     strm->param = *param;
 
     // Create the output stream.
-
     if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-        TRAPD (err, strm->out_engine = CPjAudioOutputEngine::NewL (strm, play_cb,
-                                       user_data));
-
-        if (err != KErrNone) {
-            pj_pool_release (pool);
-            return PJ_RETURN_OS_ERROR (err);
-        }
+	TRAPD(err, strm->out_engine = CPjAudioOutputEngine::NewL(strm, play_cb,
+								 user_data));
+	if (err != KErrNone) {
+	    pj_pool_release(pool);	
+	    return PJ_RETURN_OS_ERROR(err);
+	}
     }
 
     // Create the input stream.
     if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-        TRAPD (err, strm->in_engine = CPjAudioInputEngine::NewL (strm, rec_cb,
-                                      user_data));
-
-        if (err != KErrNone) {
-            strm->in_engine = NULL;
-            delete strm->out_engine;
-            strm->out_engine = NULL;
-            pj_pool_release (pool);
-            return PJ_RETURN_OS_ERROR (err);
-        }
+	TRAPD(err, strm->in_engine = CPjAudioInputEngine::NewL(strm, rec_cb, 
+							       user_data));
+	if (err != KErrNone) {
+	    strm->in_engine = NULL;
+	    delete strm->out_engine;
+	    strm->out_engine = NULL;
+	    pj_pool_release(pool);	
+	    return PJ_RETURN_OS_ERROR(err);
+	}
     }
-
+	
     /* Done */
     strm->base.op = &stream_op;
-
     *p_aud_strm = &strm->base;
 
     return PJ_SUCCESS;
 }
 
 /* API: Get stream info. */
-static pj_status_t stream_get_param (pjmedia_aud_stream *s,
-                                     pjmedia_aud_param *pi)
+static pj_status_t stream_get_param(pjmedia_aud_stream *s,
+				    pjmedia_aud_param *pi)
 {
+    struct mda_stream *strm = (struct mda_stream*)s;
 
-    struct mda_stream *strm = (struct mda_stream*) s;
-
-    PJ_ASSERT_RETURN (strm && pi, PJ_EINVAL);
-
-    pj_memcpy (pi, &strm->param, sizeof (*pi));
+    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
 
+    pj_memcpy(pi, &strm->param, sizeof(*pi));
+    
     return PJ_SUCCESS;
 }
 
 /* API: get capability */
-static pj_status_t stream_get_cap (pjmedia_aud_stream *s,
-                                   pjmedia_aud_dev_cap cap,
-                                   void *pval)
+static pj_status_t stream_get_cap(pjmedia_aud_stream *s,
+				  pjmedia_aud_dev_cap cap,
+				  void *pval)
 {
-
-    struct mda_stream *strm = (struct mda_stream*) s;
+    struct mda_stream *strm = (struct mda_stream*)s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
 
     switch (cap) {
-
-        case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN (strm->in_engine, PJ_EINVAL);
-
-                TInt max_gain = strm->in_engine->GetMaxGain();
-                TInt gain = strm->in_engine->GetGain();
-
-                if (max_gain > 0 && gain >= 0) {
-                    * (unsigned*) pval = gain * 100 / max_gain;
-                    status = PJ_SUCCESS;
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-
-            break;
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                PJ_ASSERT_RETURN (strm->out_engine, PJ_EINVAL);
-
-                TInt max_vol = strm->out_engine->GetMaxVolume();
-                TInt vol = strm->out_engine->GetVolume();
-
-                if (max_vol > 0 && vol >= 0) {
-                    * (unsigned*) pval = vol * 100 / max_vol;
-                    status = PJ_SUCCESS;
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-
-            break;
-
-        default:
-            break;
+    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->in_engine, PJ_EINVAL);
+	    
+	    TInt max_gain = strm->in_engine->GetMaxGain();
+	    TInt gain = strm->in_engine->GetGain();
+	    
+	    if (max_gain > 0 && gain >= 0) {
+		*(unsigned*)pval = gain * 100 / max_gain; 
+		status = PJ_SUCCESS;
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    PJ_ASSERT_RETURN(strm->out_engine, PJ_EINVAL);
+	    
+	    TInt max_vol = strm->out_engine->GetMaxVolume();
+	    TInt vol = strm->out_engine->GetVolume();
+	    
+	    if (max_vol > 0 && vol >= 0) {
+		*(unsigned*)pval = vol * 100 / max_vol; 
+		status = PJ_SUCCESS;
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    default:
+	break;
     }
-
+    
     return status;
 }
 
 /* API: set capability */
-static pj_status_t stream_set_cap (pjmedia_aud_stream *s,
-                                   pjmedia_aud_dev_cap cap,
-                                   const void *pval)
+static pj_status_t stream_set_cap(pjmedia_aud_stream *s,
+				  pjmedia_aud_dev_cap cap,
+				  const void *pval)
 {
-
-    struct mda_stream *strm = (struct mda_stream*) s;
+    struct mda_stream *strm = (struct mda_stream*)s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
 
     switch (cap) {
-
-        case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN (strm->in_engine, PJ_EINVAL);
-
-                TInt max_gain = strm->in_engine->GetMaxGain();
-
-                if (max_gain > 0) {
-                    TInt gain;
-
-                    gain = * (unsigned*) pval * max_gain / 100;
-                    status = strm->in_engine->SetGain (gain);
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-
-            break;
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN (strm->out_engine, PJ_EINVAL);
-
-                TInt max_vol = strm->out_engine->GetMaxVolume();
-
-                if (max_vol > 0) {
-                    TInt vol;
-
-                    vol = * (unsigned*) pval * max_vol / 100;
-                    status = strm->out_engine->SetVolume (vol);
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-
-            break;
-
-        default:
-            break;
+    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->in_engine, PJ_EINVAL);
+	    
+	    TInt max_gain = strm->in_engine->GetMaxGain();
+	    if (max_gain > 0) {
+		TInt gain;
+		
+		gain = *(unsigned*)pval * max_gain / 100;
+		status = strm->in_engine->SetGain(gain);
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->out_engine, PJ_EINVAL);
+	    
+	    TInt max_vol = strm->out_engine->GetMaxVolume();
+	    if (max_vol > 0) {
+		TInt vol;
+		
+		vol = *(unsigned*)pval * max_vol / 100;
+		status = strm->out_engine->SetVolume(vol);
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    default:
+	break;
     }
-
+    
     return status;
 }
 
 /* API: Start stream. */
-static pj_status_t stream_start (pjmedia_aud_stream *strm)
+static pj_status_t stream_start(pjmedia_aud_stream *strm)
 {
+    struct mda_stream *stream = (struct mda_stream*)strm;
 
-    struct mda_stream *stream = (struct mda_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
     if (stream->out_engine) {
-        pj_status_t status;
-        status = stream->out_engine->StartPlay();
-
-        if (status != PJ_SUCCESS)
-            return status;
+	pj_status_t status;
+    	status = stream->out_engine->StartPlay();
+    	if (status != PJ_SUCCESS)
+    	    return status;
     }
-
+    
     if (stream->in_engine) {
-        pj_status_t status;
-        status = stream->in_engine->StartRecord();
-
-        if (status != PJ_SUCCESS)
-            return status;
+	pj_status_t status;
+    	status = stream->in_engine->StartRecord();
+    	if (status != PJ_SUCCESS)
+    	    return status;
     }
 
     return PJ_SUCCESS;
 }
 
 /* API: Stop stream. */
-static pj_status_t stream_stop (pjmedia_aud_stream *strm)
+static pj_status_t stream_stop(pjmedia_aud_stream *strm)
 {
+    struct mda_stream *stream = (struct mda_stream*)strm;
 
-    struct mda_stream *stream = (struct mda_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
     if (stream->in_engine) {
-        stream->in_engine->Stop();
+    	stream->in_engine->Stop();
     }
-
+    	
     if (stream->out_engine) {
-        stream->out_engine->Stop();
+    	stream->out_engine->Stop();
     }
 
     return PJ_SUCCESS;
@@ -1181,14 +1090,13 @@ static pj_status_t stream_stop (pjmedia_aud_stream *strm)
 
 
 /* API: Destroy stream. */
-static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
+static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
 {
+    struct mda_stream *stream = (struct mda_stream*)strm;
 
-    struct mda_stream *stream = (struct mda_stream*) strm;
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
-
-    stream_stop (strm);
+    stream_stop(strm);
 
     delete stream->in_engine;
     stream->in_engine = NULL;
@@ -1198,10 +1106,9 @@ static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
 
     pj_pool_t *pool;
     pool = stream->pool;
-
     if (pool) {
-        stream->pool = NULL;
-        pj_pool_release (pool);
+    	stream->pool = NULL;
+    	pj_pool_release(pool);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
index a4c156bebb..93eb284404 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
@@ -1,5 +1,5 @@
-/* $Id: symb_vas_dev.cpp 2833 2009-07-14 14:33:39Z nanang $ */
-/*
+/* $Id: symb_vas_dev.cpp 3025 2009-11-24 12:24:35Z nanang $ */
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pjmedia-audiodev/audiodev_imp.h>
 #include <pjmedia-audiodev/errno.h>
@@ -40,10 +40,10 @@
 #include <VoIPILBCDecoderIntfc.h>
 #include <VoIPILBCEncoderIntfc.h>
 
-/* AMR helper */
+/* AMR helper */  
 #include <pjmedia-codec/amr_helper.h>
 
-/* Pack/unpack G.729 frame of S60 DSP codec, taken from:
+/* Pack/unpack G.729 frame of S60 DSP codec, taken from:  
  * http://wiki.forum.nokia.com/index.php/TSS000776_-_Payload_conversion_for_G.729_audio_format
  */
 #include "s60_g729_bitstream.h"
@@ -70,8 +70,8 @@ static pj_uint8_t vas_g711_frame_len;
 
 
 /* VAS factory */
-
-struct vas_factory {
+struct vas_factory
+{
     pjmedia_aud_dev_factory	 base;
     pj_pool_t			*pool;
     pj_pool_factory		*pf;
@@ -80,16 +80,15 @@ struct vas_factory {
 
 
 /* Forward declaration of CPjAudioEngine */
-
 class CPjAudioEngine;
 
 
 /* VAS stream. */
-
-struct vas_stream {
+struct vas_stream
+{
     // Base
     pjmedia_aud_stream	 base;			/**< Base class.	*/
-
+    
     // Pool
     pj_pool_t		*pool;			/**< Memory pool.       */
 
@@ -112,7 +111,7 @@ struct vas_stream {
     pj_uint16_t		 rec_buf_len;		/**< Record buffer length. */
     void                *strm_data;		/**< Stream data.	*/
 
-    /* Resampling is needed, in case audio device is opened with clock rate
+    /* Resampling is needed, in case audio device is opened with clock rate 
      * other than 8kHz (only for PCM format).
      */
     pjmedia_resample	*play_resample;		/**< Resampler for playback. */
@@ -129,37 +128,38 @@ struct vas_stream {
 
 
 /* Prototypes */
-static pj_status_t factory_init (pjmedia_aud_dev_factory *f);
-static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f);
-static unsigned    factory_get_dev_count (pjmedia_aud_dev_factory *f);
-static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_dev_info *info);
-static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_param *param);
-static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
-        const pjmedia_aud_param *param,
-        pjmedia_aud_rec_cb rec_cb,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data,
-        pjmedia_aud_stream **p_aud_strm);
-
-static pj_status_t stream_get_param (pjmedia_aud_stream *strm,
-                                     pjmedia_aud_param *param);
-static pj_status_t stream_get_cap (pjmedia_aud_stream *strm,
-                                   pjmedia_aud_dev_cap cap,
-                                   void *value);
-static pj_status_t stream_set_cap (pjmedia_aud_stream *strm,
-                                   pjmedia_aud_dev_cap cap,
-                                   const void *value);
-static pj_status_t stream_start (pjmedia_aud_stream *strm);
-static pj_status_t stream_stop (pjmedia_aud_stream *strm);
-static pj_status_t stream_destroy (pjmedia_aud_stream *strm);
+static pj_status_t factory_init(pjmedia_aud_dev_factory *f);
+static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f);
+static unsigned    factory_get_dev_count(pjmedia_aud_dev_factory *f);
+static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
+					unsigned index,
+					pjmedia_aud_dev_info *info);
+static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
+					 unsigned index,
+					 pjmedia_aud_param *param);
+static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
+					 const pjmedia_aud_param *param,
+					 pjmedia_aud_rec_cb rec_cb,
+					 pjmedia_aud_play_cb play_cb,
+					 void *user_data,
+					 pjmedia_aud_stream **p_aud_strm);
+
+static pj_status_t stream_get_param(pjmedia_aud_stream *strm,
+				    pjmedia_aud_param *param);
+static pj_status_t stream_get_cap(pjmedia_aud_stream *strm,
+				  pjmedia_aud_dev_cap cap,
+				  void *value);
+static pj_status_t stream_set_cap(pjmedia_aud_stream *strm,
+				  pjmedia_aud_dev_cap cap,
+				  const void *value);
+static pj_status_t stream_start(pjmedia_aud_stream *strm);
+static pj_status_t stream_stop(pjmedia_aud_stream *strm);
+static pj_status_t stream_destroy(pjmedia_aud_stream *strm);
 
 
 /* Operations */
-static pjmedia_aud_dev_factory_op factory_op = {
+static pjmedia_aud_dev_factory_op factory_op =
+{
     &factory_init,
     &factory_destroy,
     &factory_get_dev_count,
@@ -168,7 +168,8 @@ static pjmedia_aud_dev_factory_op factory_op = {
     &factory_create_stream
 };
 
-static pjmedia_aud_stream_op stream_op = {
+static pjmedia_aud_stream_op stream_op = 
+{
     &stream_get_param,
     &stream_get_cap,
     &stream_set_cap,
@@ -185,303 +186,277 @@ static pjmedia_aud_stream_op stream_op = {
 /*
  * Utility: print sound device error
  */
-static void snd_perror (const char *title, TInt rc)
+static void snd_perror(const char *title, TInt rc)
 {
-    PJ_LOG (1, (THIS_FILE, "%s (error code=%d)", title, rc));
+    PJ_LOG(1,(THIS_FILE, "%s (error code=%d)", title, rc));
 }
 
-typedef void (*PjAudioCallback) (CVoIPDataBuffer *buf, void *user_data);
+typedef void(*PjAudioCallback)(CVoIPDataBuffer *buf, void *user_data);
 
 /*
  * Audio setting for CPjAudioEngine.
  */
-
 class CPjAudioSetting
 {
-
-    public:
-        TVoIPCodecFormat	 format;
-        TInt		 mode;
-        TBool		 plc;
-        TBool		 vad;
-        TBool		 cng;
-        TBool		 loudspk;
+public:
+    TVoIPCodecFormat	 format;
+    TInt		 mode;
+    TBool		 plc;
+    TBool		 vad;
+    TBool		 cng;
+    TBool		 loudspk;
 };
 
 /*
  * Implementation: Symbian Input & Output Stream.
  */
-
 class CPjAudioEngine :  public CBase,
-            public MVoIPDownlinkObserver,
-            public MVoIPUplinkObserver,
-            public MVoIPFormatObserver
+			public MVoIPDownlinkObserver,
+			public MVoIPUplinkObserver,
+			public MVoIPFormatObserver
 {
-
-    public:
-        enum State {
-            STATE_NULL,
-            STATE_STARTING,
-            STATE_READY,
-            STATE_STREAMING
-        };
-
-        ~CPjAudioEngine();
-
-        static CPjAudioEngine *NewL (struct vas_stream *parent_strm,
-                                     PjAudioCallback rec_cb,
-                                     PjAudioCallback play_cb,
-                                     void *user_data,
-                                     const CPjAudioSetting &setting);
-
-        TInt Start();
-        void Stop();
-
-        TInt ActivateSpeaker (TBool active);
-
-        TInt SetVolume (TInt vol) {
-            return iVoIPDnlink->SetVolume (vol);
-        }
-
-        TInt GetVolume() {
-            TInt vol;
-            iVoIPDnlink->GetVolume (vol);
-            return vol;
-        }
-
-        TInt GetMaxVolume() {
-            TInt vol;
-            iVoIPDnlink->GetMaxVolume (vol);
-            return vol;
-        }
-
-        TInt SetGain (TInt gain) {
-            return iVoIPUplink->SetGain (gain);
-        }
-
-        TInt GetGain() {
-            TInt gain;
-            iVoIPUplink->GetGain (gain);
-            return gain;
-        }
-
-        TInt GetMaxGain() {
-            TInt gain;
-            iVoIPUplink->GetMaxGain (gain);
-            return gain;
-        }
-
-    private:
-        CPjAudioEngine (struct vas_stream *parent_strm,
-                        PjAudioCallback rec_cb,
-                        PjAudioCallback play_cb,
-                        void *user_data,
-                        const CPjAudioSetting &setting);
-        void ConstructL();
-
-        TInt InitPlay();
-        TInt InitRec();
-
-        TInt StartPlay();
-        TInt StartRec();
-
-        // From MVoIPDownlinkObserver
-        virtual void FillBuffer (const CVoIPAudioDownlinkStream& aSrc,
-                                 CVoIPDataBuffer* aBuffer);
-        virtual void Event (const CVoIPAudioDownlinkStream& aSrc,
-                            TInt aEventType,
-                            TInt aError);
-
-        // From MVoIPUplinkObserver
-        virtual void EmptyBuffer (const CVoIPAudioUplinkStream& aSrc,
-                                  CVoIPDataBuffer* aBuffer);
-        virtual void Event (const CVoIPAudioUplinkStream& aSrc,
-                            TInt aEventType,
-                            TInt aError);
-
-        // From MVoIPFormatObserver
-        virtual void Event (const CVoIPFormatIntfc& aSrc, TInt aEventType);
-
-        State			 dn_state_;
-        State			 up_state_;
-
-        struct vas_stream		*parentStrm_;
-        CPjAudioSetting		 setting_;
-        PjAudioCallback 		 rec_cb_;
-        PjAudioCallback 		 play_cb_;
-        void 			*user_data_;
-
-        // VAS objects
-        CVoIPUtilityFactory         *iFactory;
-        CVoIPAudioDownlinkStream    *iVoIPDnlink;
-        CVoIPAudioUplinkStream      *iVoIPUplink;
-        CVoIPFormatIntfc		*enc_fmt_if;
-        CVoIPFormatIntfc		*dec_fmt_if;
+public:
+    enum State
+    {
+	STATE_NULL,
+	STATE_STARTING,
+	STATE_READY,
+	STATE_STREAMING
+    };
+
+    ~CPjAudioEngine();
+
+    static CPjAudioEngine *NewL(struct vas_stream *parent_strm,
+			        PjAudioCallback rec_cb,
+				PjAudioCallback play_cb,
+				void *user_data,
+				const CPjAudioSetting &setting);
+
+    TInt Start();
+    void Stop();
+
+    TInt ActivateSpeaker(TBool active);
+    
+    TInt SetVolume(TInt vol) { return iVoIPDnlink->SetVolume(vol); }
+    TInt GetVolume() { TInt vol;iVoIPDnlink->GetVolume(vol);return vol; }
+    TInt GetMaxVolume() { TInt vol;iVoIPDnlink->GetMaxVolume(vol);return vol; }
+    
+    TInt SetGain(TInt gain) { return iVoIPUplink->SetGain(gain); }
+    TInt GetGain() { TInt gain;iVoIPUplink->GetGain(gain);return gain; }
+    TInt GetMaxGain() { TInt gain;iVoIPUplink->GetMaxGain(gain);return gain; }
+
+    TBool IsStarted();
+    
+private:
+    CPjAudioEngine(struct vas_stream *parent_strm,
+		   PjAudioCallback rec_cb,
+		   PjAudioCallback play_cb,
+		   void *user_data,
+		   const CPjAudioSetting &setting);
+    void ConstructL();
+
+    TInt InitPlay();
+    TInt InitRec();
+
+    TInt StartPlay();
+    TInt StartRec();
+
+    // From MVoIPDownlinkObserver
+    void FillBuffer(const CVoIPAudioDownlinkStream& aSrc,
+                            CVoIPDataBuffer* aBuffer);
+    void Event(const CVoIPAudioDownlinkStream& aSrc,
+                       TInt aEventType,
+                       TInt aError);
+
+    // From MVoIPUplinkObserver
+    void EmptyBuffer(const CVoIPAudioUplinkStream& aSrc,
+                             CVoIPDataBuffer* aBuffer);
+    void Event(const CVoIPAudioUplinkStream& aSrc,
+                       TInt aEventType,
+                       TInt aError);
+
+    // From MVoIPFormatObserver
+    void Event(const CVoIPFormatIntfc& aSrc, TInt aEventType);
+
+    State			 dn_state_;
+    State			 up_state_;
+    struct vas_stream		*parentStrm_;
+    CPjAudioSetting		 setting_;
+    PjAudioCallback 		 rec_cb_;
+    PjAudioCallback 		 play_cb_;
+    void 			*user_data_;
+
+    // VAS objects
+    CVoIPUtilityFactory         *iFactory;
+    CVoIPAudioDownlinkStream    *iVoIPDnlink;
+    CVoIPAudioUplinkStream      *iVoIPUplink;
+    CVoIPFormatIntfc		*enc_fmt_if;
+    CVoIPFormatIntfc		*dec_fmt_if;
 };
 
 
-CPjAudioEngine* CPjAudioEngine::NewL (struct vas_stream *parent_strm,
-                                      PjAudioCallback rec_cb,
-                                      PjAudioCallback play_cb,
-                                      void *user_data,
-                                      const CPjAudioSetting &setting)
+CPjAudioEngine* CPjAudioEngine::NewL(struct vas_stream *parent_strm,
+				     PjAudioCallback rec_cb,
+				     PjAudioCallback play_cb,
+				     void *user_data,
+				     const CPjAudioSetting &setting)
 {
-    CPjAudioEngine* self = new (ELeave) CPjAudioEngine (parent_strm,
-            rec_cb, play_cb,
-            user_data,
-            setting);
-    CleanupStack::PushL (self);
+    CPjAudioEngine* self = new (ELeave) CPjAudioEngine(parent_strm,
+						       rec_cb, play_cb,
+						       user_data,
+						       setting);
+    CleanupStack::PushL(self);
     self->ConstructL();
-    CleanupStack::Pop (self);
+    CleanupStack::Pop(self);
     return self;
 }
 
 void CPjAudioEngine::ConstructL()
 {
     TInt err;
-    const TVersion ver (1, 0, 0); /* Not really used at this time */
+    const TVersion ver(1, 0, 0); /* Not really used at this time */
 
-    err = CVoIPUtilityFactory::CreateFactory (iFactory);
-    User::LeaveIfError (err);
+    err = CVoIPUtilityFactory::CreateFactory(iFactory);
+    User::LeaveIfError(err);
 
     if (parentStrm_->param.dir != PJMEDIA_DIR_CAPTURE) {
-        err = iFactory->CreateDownlinkStream (ver,
-                                              CVoIPUtilityFactory::EVoIPCall,
-                                              iVoIPDnlink);
-        User::LeaveIfError (err);
+	err = iFactory->CreateDownlinkStream(ver, 
+					     CVoIPUtilityFactory::EVoIPCall,
+					     iVoIPDnlink);
+	User::LeaveIfError(err);
     }
 
     if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
-        err = iFactory->CreateUplinkStream (ver,
-                                            CVoIPUtilityFactory::EVoIPCall,
-                                            iVoIPUplink);
-        User::LeaveIfError (err);
+	err = iFactory->CreateUplinkStream(ver, 
+					   CVoIPUtilityFactory::EVoIPCall,
+					   iVoIPUplink);
+	User::LeaveIfError(err);
     }
 }
 
-CPjAudioEngine::CPjAudioEngine (struct vas_stream *parent_strm,
-                                PjAudioCallback rec_cb,
-                                PjAudioCallback play_cb,
-                                void *user_data,
-                                const CPjAudioSetting &setting)
-        : dn_state_ (STATE_NULL),
-        up_state_ (STATE_NULL),
-        parentStrm_ (parent_strm),
-        setting_ (setting),
-        rec_cb_ (rec_cb),
-        play_cb_ (play_cb),
-        user_data_ (user_data),
-        iFactory (NULL),
-        iVoIPDnlink (NULL),
-        iVoIPUplink (NULL),
-        enc_fmt_if (NULL),
-        dec_fmt_if (NULL)
+CPjAudioEngine::CPjAudioEngine(struct vas_stream *parent_strm,
+			       PjAudioCallback rec_cb,
+			       PjAudioCallback play_cb,
+			       void *user_data,
+			       const CPjAudioSetting &setting)
+      : dn_state_(STATE_NULL),
+        up_state_(STATE_NULL),
+	parentStrm_(parent_strm),
+	setting_(setting),
+        rec_cb_(rec_cb),
+        play_cb_(play_cb),
+        user_data_(user_data),
+        iFactory(NULL),
+        iVoIPDnlink(NULL),
+        iVoIPUplink(NULL),
+        enc_fmt_if(NULL),
+        dec_fmt_if(NULL)
 {
 }
 
 CPjAudioEngine::~CPjAudioEngine()
 {
     Stop();
-
+    
     if (iVoIPUplink)
-        iVoIPUplink->Close();
-
+	iVoIPUplink->Close();
+    
     if (iVoIPDnlink)
-        iVoIPDnlink->Close();
+	iVoIPDnlink->Close();
 
     delete iVoIPDnlink;
-
     delete iVoIPUplink;
-
     delete iFactory;
+    
+    TRACE_((THIS_FILE, "Sound device destroyed"));
+}
 
-    TRACE_ ( (THIS_FILE, "Sound device destroyed"));
+TBool CPjAudioEngine::IsStarted()
+{
+    return ((((parentStrm_->param.dir & PJMEDIA_DIR_CAPTURE) == 0) || 
+	       up_state_ == STATE_STREAMING) &&
+	    (((parentStrm_->param.dir & PJMEDIA_DIR_PLAYBACK) == 0) || 
+	       dn_state_ == STATE_STREAMING));
 }
 
 TInt CPjAudioEngine::InitPlay()
 {
     TInt err;
 
-    pj_assert (iVoIPDnlink);
-
-    err = iVoIPDnlink->SetFormat (setting_.format, dec_fmt_if);
+    pj_assert(iVoIPDnlink);
 
+    err = iVoIPDnlink->SetFormat(setting_.format, dec_fmt_if);
     if (err != KErrNone)
-        return err;
-
-    err = dec_fmt_if->SetObserver (*this);
-
+	return err;
+    
+    err = dec_fmt_if->SetObserver(*this);
     if (err != KErrNone)
-        return err;
+	return err;
 
-    return iVoIPDnlink->Open (*this);
+    return iVoIPDnlink->Open(*this);
 }
 
 TInt CPjAudioEngine::InitRec()
 {
     TInt err;
+    
+    pj_assert(iVoIPUplink);
 
-    pj_assert (iVoIPUplink);
-
-    err = iVoIPUplink->SetFormat (setting_.format, enc_fmt_if);
-
+    err = iVoIPUplink->SetFormat(setting_.format, enc_fmt_if);
     if (err != KErrNone)
-        return err;
-
-    err = enc_fmt_if->SetObserver (*this);
-
+	return err;
+    
+    err = enc_fmt_if->SetObserver(*this);
     if (err != KErrNone)
-        return err;
-
-    return iVoIPUplink->Open (*this);
+	return err;
+    
+    return iVoIPUplink->Open(*this);
 }
 
 TInt CPjAudioEngine::StartPlay()
 {
     TInt err;
-
-    pj_assert (iVoIPDnlink);
-    pj_assert (dn_state_ == STATE_READY);
+    
+    pj_assert(iVoIPDnlink);
+    pj_assert(dn_state_ == STATE_READY);
 
     /* Configure specific codec setting */
-
     switch (setting_.format) {
-
-        case EG711: {
-            CVoIPG711DecoderIntfc *g711dec_if = (CVoIPG711DecoderIntfc*)
-                                                dec_fmt_if;
-            err = g711dec_if->SetMode ( (CVoIPFormatIntfc::TG711CodecMode)
-                                        setting_.mode);
-            pj_assert (err == KErrNone);
-        }
-
-        break;
-
-        case EILBC: {
-            CVoIPILBCDecoderIntfc *ilbcdec_if = (CVoIPILBCDecoderIntfc*)
-                                                dec_fmt_if;
-            err = ilbcdec_if->SetMode ( (CVoIPFormatIntfc::TILBCCodecMode)
-                                        setting_.mode);
-            pj_assert (err == KErrNone);
-        }
-
-        break;
-
-        default:
-            break;
+    case EG711:
+	{
+	    CVoIPG711DecoderIntfc *g711dec_if = (CVoIPG711DecoderIntfc*)
+						dec_fmt_if;
+	    err = g711dec_if->SetMode((CVoIPFormatIntfc::TG711CodecMode)
+				      setting_.mode);
+	    pj_assert(err == KErrNone);
+	}
+	break;
+	
+    case EILBC:
+	{
+	    CVoIPILBCDecoderIntfc *ilbcdec_if = (CVoIPILBCDecoderIntfc*)
+						dec_fmt_if;
+	    err = ilbcdec_if->SetMode((CVoIPFormatIntfc::TILBCCodecMode)
+				      setting_.mode);
+	    pj_assert(err == KErrNone);
+	}
+	break;
+
+    default:
+	break;
     }
-
+    
     /* Configure audio routing */
-    ActivateSpeaker (setting_.loudspk);
+    ActivateSpeaker(setting_.loudspk);
 
     /* Start player */
     err = iVoIPDnlink->Start();
-
+    
     if (err == KErrNone) {
-        dn_state_ = STATE_STREAMING;
-        TRACE_ ( (THIS_FILE, "Downlink started"));
+	dn_state_ = STATE_STREAMING;
+	TRACE_((THIS_FILE, "Downlink started"));
     } else {
-        snd_perror ("Failed starting downlink", err);
+	snd_perror("Failed starting downlink", err);
     }
 
     return err;
@@ -490,49 +465,47 @@ TInt CPjAudioEngine::StartPlay()
 TInt CPjAudioEngine::StartRec()
 {
     TInt err;
-
-    pj_assert (iVoIPUplink);
-    pj_assert (up_state_ == STATE_READY);
+    
+    pj_assert(iVoIPUplink);
+    pj_assert(up_state_ == STATE_READY);
 
     /* Configure specific codec setting */
-
     switch (setting_.format) {
-
-        case EG711: {
-            CVoIPG711EncoderIntfc *g711enc_if = (CVoIPG711EncoderIntfc*)
-                                                enc_fmt_if;
-            err = g711enc_if->SetMode ( (CVoIPFormatIntfc::TG711CodecMode)
-                                        setting_.mode);
-            pj_assert (err == KErrNone);
-        }
-
-        break;
-
-        case EILBC: {
-            CVoIPILBCEncoderIntfc *ilbcenc_if = (CVoIPILBCEncoderIntfc*)
-                                                enc_fmt_if;
-            err = ilbcenc_if->SetMode ( (CVoIPFormatIntfc::TILBCCodecMode)
-                                        setting_.mode);
-            pj_assert (err == KErrNone);
-        }
-
-        break;
-
-        default:
-            break;
+    case EG711:
+	{
+	    CVoIPG711EncoderIntfc *g711enc_if = (CVoIPG711EncoderIntfc*)
+						enc_fmt_if;
+	    err = g711enc_if->SetMode((CVoIPFormatIntfc::TG711CodecMode)
+				      setting_.mode);
+	    pj_assert(err == KErrNone);
+	}
+	break;
+
+    case EILBC:
+	{
+	    CVoIPILBCEncoderIntfc *ilbcenc_if = (CVoIPILBCEncoderIntfc*)
+						enc_fmt_if;
+	    err = ilbcenc_if->SetMode((CVoIPFormatIntfc::TILBCCodecMode)
+				      setting_.mode);
+	    pj_assert(err == KErrNone);
+	}
+	break;
+	
+    default:
+	break;
     }
-
+    
     /* Configure general codec setting */
-    enc_fmt_if->SetVAD (setting_.vad);
-
+    enc_fmt_if->SetVAD(setting_.vad);
+    
     /* Start recorder */
     err = iVoIPUplink->Start();
-
+    
     if (err == KErrNone) {
-        up_state_ = STATE_STREAMING;
-        TRACE_ ( (THIS_FILE, "Uplink started"));
+	up_state_ = STATE_STREAMING;
+	TRACE_((THIS_FILE, "Uplink started"));
     } else {
-        snd_perror ("Failed starting uplink", err);
+	snd_perror("Failed starting uplink", err);
     }
 
     return err;
@@ -541,49 +514,37 @@ TInt CPjAudioEngine::StartRec()
 TInt CPjAudioEngine::Start()
 {
     TInt err = KErrNone;
-
+    
     if (iVoIPDnlink) {
-        switch (dn_state_) {
-
-            case STATE_READY:
-                err = StartPlay();
-                break;
-
-            case STATE_NULL:
-                err = InitPlay();
-
-                if (err != KErrNone)
-                    return err;
-
-                dn_state_ = STATE_STARTING;
-
-                break;
-
-            default:
-                break;
-        }
+	switch(dn_state_) {
+	case STATE_READY:
+	    err = StartPlay();
+	    break;
+	case STATE_NULL:
+	    err = InitPlay();
+	    if (err != KErrNone)
+		return err;
+	    dn_state_ = STATE_STARTING;
+	    break;
+	default:
+	    break;
+	}
     }
-
+    
     if (iVoIPUplink) {
-        switch (up_state_) {
-
-            case STATE_READY:
-                err = StartRec();
-                break;
-
-            case STATE_NULL:
-                err = InitRec();
-
-                if (err != KErrNone)
-                    return err;
-
-                up_state_ = STATE_STARTING;
-
-                break;
-
-            default:
-                break;
-        }
+	switch(up_state_) {
+	case STATE_READY:
+	    err = StartRec();
+	    break;
+	case STATE_NULL:
+	    err = InitRec();
+	    if (err != KErrNone)
+		return err;
+	    up_state_ = STATE_STARTING;
+	    break;
+	default:
+	    break;
+	}
     }
 
     return err;
@@ -592,147 +553,134 @@ TInt CPjAudioEngine::Start()
 void CPjAudioEngine::Stop()
 {
     if (iVoIPDnlink) {
-        switch (dn_state_) {
-
-            case STATE_STREAMING:
-                iVoIPDnlink->Stop();
-                dn_state_ = STATE_READY;
-                break;
-
-            case STATE_STARTING:
-                dn_state_ = STATE_NULL;
-                break;
-
-            default:
-                break;
-        }
+	switch(dn_state_) {
+	case STATE_STREAMING:
+	    iVoIPDnlink->Stop();
+	    dn_state_ = STATE_READY;
+	    break;
+	case STATE_STARTING:
+	    dn_state_ = STATE_NULL;
+	    break;
+	default:
+	    break;
+	}
     }
 
     if (iVoIPUplink) {
-        switch (up_state_) {
-
-            case STATE_STREAMING:
-                iVoIPUplink->Stop();
-                up_state_ = STATE_READY;
-                break;
-
-            case STATE_STARTING:
-                up_state_ = STATE_NULL;
-                break;
-
-            default:
-                break;
-        }
+	switch(up_state_) {
+	case STATE_STREAMING:
+	    iVoIPUplink->Stop();
+	    up_state_ = STATE_READY;
+	    break;
+	case STATE_STARTING:
+	    up_state_ = STATE_NULL;
+	    break;
+	default:
+	    break;
+	}
     }
 }
 
 
-TInt CPjAudioEngine::ActivateSpeaker (TBool active)
+TInt CPjAudioEngine::ActivateSpeaker(TBool active)
 {
     TInt err = KErrNotSupported;
-
+    
     if (iVoIPDnlink) {
-        err = iVoIPDnlink->SetAudioDevice (active?
-                                           CVoIPAudioDownlinkStream::ELoudSpeaker :
-                                           CVoIPAudioDownlinkStream::EHandset);
-        TRACE_ ( (THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
+	err = iVoIPDnlink->SetAudioDevice(active?
+				    CVoIPAudioDownlinkStream::ELoudSpeaker :
+				    CVoIPAudioDownlinkStream::EHandset);
+	TRACE_((THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
     }
-
+    
     return err;
 }
 
 // Callback from MVoIPDownlinkObserver
-void CPjAudioEngine::FillBuffer (const CVoIPAudioDownlinkStream& aSrc,
-                                 CVoIPDataBuffer* aBuffer)
+void CPjAudioEngine::FillBuffer(const CVoIPAudioDownlinkStream& aSrc,
+                                CVoIPDataBuffer* aBuffer)
 {
-    play_cb_ (aBuffer, user_data_);
-    iVoIPDnlink->BufferFilled (aBuffer);
+    play_cb_(aBuffer, user_data_);
+    iVoIPDnlink->BufferFilled(aBuffer);
 }
 
 // Callback from MVoIPUplinkObserver
-void CPjAudioEngine::EmptyBuffer (const CVoIPAudioUplinkStream& aSrc,
-                                  CVoIPDataBuffer* aBuffer)
+void CPjAudioEngine::EmptyBuffer(const CVoIPAudioUplinkStream& aSrc,
+                                 CVoIPDataBuffer* aBuffer)
 {
-    rec_cb_ (aBuffer, user_data_);
-    iVoIPUplink->BufferEmptied (aBuffer);
+    rec_cb_(aBuffer, user_data_);
+    iVoIPUplink->BufferEmptied(aBuffer);
 }
 
 // Callback from MVoIPDownlinkObserver
-void CPjAudioEngine::Event (const CVoIPAudioDownlinkStream& /*aSrc*/,
-                            TInt aEventType,
-                            TInt aError)
+void CPjAudioEngine::Event(const CVoIPAudioDownlinkStream& /*aSrc*/,
+                           TInt aEventType,
+                           TInt aError)
 {
     switch (aEventType) {
-
-        case MVoIPDownlinkObserver::KOpenComplete:
-
-            if (aError == KErrNone) {
-                State last_state = dn_state_;
-
-                dn_state_ = STATE_READY;
-                TRACE_ ( (THIS_FILE, "Downlink opened"));
-
-                if (last_state == STATE_STARTING)
-                    StartPlay();
-            }
-
-            break;
-
-        case MVoIPDownlinkObserver::KDownlinkClosed:
-            dn_state_ = STATE_NULL;
-            TRACE_ ( (THIS_FILE, "Downlink closed"));
-            break;
-
-        case MVoIPDownlinkObserver::KDownlinkError:
-            dn_state_ = STATE_READY;
-            snd_perror ("Downlink problem", aError);
-            break;
-
-        default:
-            break;
+    case MVoIPDownlinkObserver::KOpenComplete:
+	if (aError == KErrNone) {
+	    State last_state = dn_state_;
+
+	    dn_state_ = STATE_READY;
+	    TRACE_((THIS_FILE, "Downlink opened"));
+
+	    if (last_state == STATE_STARTING)
+		StartPlay();
+	}
+	break;
+
+    case MVoIPDownlinkObserver::KDownlinkClosed:
+	dn_state_ = STATE_NULL;
+	TRACE_((THIS_FILE, "Downlink closed"));
+	break;
+
+    case MVoIPDownlinkObserver::KDownlinkError:
+	dn_state_ = STATE_READY;
+	snd_perror("Downlink problem", aError);
+	break;
+    default:
+	break;
     }
 }
 
 // Callback from MVoIPUplinkObserver
-void CPjAudioEngine::Event (const CVoIPAudioUplinkStream& /*aSrc*/,
-                            TInt aEventType,
-                            TInt aError)
+void CPjAudioEngine::Event(const CVoIPAudioUplinkStream& /*aSrc*/,
+                           TInt aEventType,
+                           TInt aError)
 {
     switch (aEventType) {
-
-        case MVoIPUplinkObserver::KOpenComplete:
-
-            if (aError == KErrNone) {
-                State last_state = up_state_;
-
-                up_state_ = STATE_READY;
-                TRACE_ ( (THIS_FILE, "Uplink opened"));
-
-                if (last_state == STATE_STARTING)
-                    StartRec();
-            }
-
-            break;
-
-        case MVoIPUplinkObserver::KUplinkClosed:
-            up_state_ = STATE_NULL;
-            TRACE_ ( (THIS_FILE, "Uplink closed"));
-            break;
-
-        case MVoIPUplinkObserver::KUplinkError:
-            up_state_ = STATE_READY;
-            snd_perror ("Uplink problem", aError);
-            break;
-
-        default:
-            break;
+    case MVoIPUplinkObserver::KOpenComplete:
+	if (aError == KErrNone) {
+	    State last_state = up_state_;
+
+	    up_state_ = STATE_READY;
+	    TRACE_((THIS_FILE, "Uplink opened"));
+	    
+	    if (last_state == STATE_STARTING)
+		StartRec();
+	}
+	break;
+
+    case MVoIPUplinkObserver::KUplinkClosed:
+	up_state_ = STATE_NULL;
+	TRACE_((THIS_FILE, "Uplink closed"));
+	break;
+
+    case MVoIPUplinkObserver::KUplinkError:
+	up_state_ = STATE_READY;
+	snd_perror("Uplink problem", aError);
+	break;
+    default:
+	break;
     }
 }
 
 // Callback from MVoIPFormatObserver
-void CPjAudioEngine::Event (const CVoIPFormatIntfc& /*aSrc*/,
-                            TInt /*aEventType*/)
+void CPjAudioEngine::Event(const CVoIPFormatIntfc& /*aSrc*/, 
+			   TInt aEventType)
 {
+    snd_perror("Format event", aEventType);
 }
 
 /****************************************************************************
@@ -741,101 +689,89 @@ void CPjAudioEngine::Event (const CVoIPFormatIntfc& /*aSrc*/,
 
 #ifdef USE_NATIVE_PCM
 
-static void RecCbPcm2 (CVoIPDataBuffer *buf, void *user_data)
+static void RecCbPcm2(CVoIPDataBuffer *buf, void *user_data)
 {
-
     struct vas_stream *strm = (struct vas_stream*) user_data;
-    TPtr8 buffer (0, 0, 0);
+    TPtr8 buffer(0, 0, 0);
     pj_int16_t *p_buf;
     unsigned buf_len;
 
     /* Get the buffer */
-    buf->GetPayloadPtr (buffer);
-
+    buf->GetPayloadPtr(buffer);
+    
     /* Call parent callback */
     p_buf = (pj_int16_t*) buffer.Ptr();
     buf_len = buffer.Length() >> 1;
-
     while (buf_len) {
-        unsigned req;
-
-        req = strm->param.samples_per_frame - strm->rec_buf_len;
-
-        if (req > buf_len)
-            req = buf_len;
-
-        pjmedia_copy_samples (strm->rec_buf + strm->rec_buf_len, p_buf, req);
-
-        p_buf += req;
-
-        buf_len -= req;
-
-        strm->rec_buf_len += req;
-
-        if (strm->rec_buf_len >= strm->param.samples_per_frame) {
-            pjmedia_frame f;
-
-            f.buf = strm->rec_buf;
-            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-            f.size = strm->param.samples_per_frame << 1;
-            strm->rec_cb (strm->user_data, &f);
-            strm->rec_buf_len = 0;
-        }
+	unsigned req;
+	
+	req = strm->param.samples_per_frame - strm->rec_buf_len;
+	if (req > buf_len)
+	    req = buf_len;
+	pjmedia_copy_samples(strm->rec_buf + strm->rec_buf_len, p_buf, req);
+	p_buf += req;
+	buf_len -= req;
+	strm->rec_buf_len += req;
+	
+	if (strm->rec_buf_len >= strm->param.samples_per_frame) {
+	    pjmedia_frame f;
+
+	    f.buf = strm->rec_buf;
+	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+	    f.size = strm->param.samples_per_frame << 1;
+	    strm->rec_cb(strm->user_data, &f);
+	    strm->rec_buf_len = 0;
+	}
     }
 }
 
-static void PlayCbPcm2 (CVoIPDataBuffer *buf, void *user_data)
+static void PlayCbPcm2(CVoIPDataBuffer *buf, void *user_data)
 {
-
     struct vas_stream *strm = (struct vas_stream*) user_data;
-    TPtr8 buffer (0, 0, 0);
+    TPtr8 buffer(0, 0, 0);
     pjmedia_frame f;
 
     /* Get the buffer */
-    buf->GetPayloadPtr (buffer);
+    buf->GetPayloadPtr(buffer);
 
     /* Call parent callback */
     f.buf = strm->play_buf;
     f.size = strm->param.samples_per_frame << 1;
-    strm->play_cb (strm->user_data, &f);
-
+    strm->play_cb(strm->user_data, &f);
     if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
-        pjmedia_zero_samples ( (pj_int16_t*) f.buf,
-                               strm->param.samples_per_frame);
+	pjmedia_zero_samples((pj_int16_t*)f.buf, 
+			     strm->param.samples_per_frame);
     }
-
     f.size = strm->param.samples_per_frame << 1;
 
     /* Init buffer attributes and header. */
     buffer.Zero();
-    buffer.Append ( (TUint8*) f.buf, f.size);
+    buffer.Append((TUint8*)f.buf, f.size);
 
     /* Set the buffer */
-    buf->SetPayloadPtr (buffer);
+    buf->SetPayloadPtr(buffer);
 }
 
 #else // not USE_NATIVE_PCM
 
-static void RecCbPcm (CVoIPDataBuffer *buf, void *user_data)
+static void RecCbPcm(CVoIPDataBuffer *buf, void *user_data)
 {
-
     struct vas_stream *strm = (struct vas_stream*) user_data;
-    TPtr8 buffer (0, 0, 0);
+    TPtr8 buffer(0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr (buffer);
-
+    buf->GetPayloadPtr(buffer);
+    
     /* Buffer has to contain normal speech. */
-    pj_assert (buffer[0] == 1 && buffer[1] == 0);
+    pj_assert(buffer[0] == 1 && buffer[1] == 0);
 
     /* Detect the recorder G.711 frame size, player frame size will follow
      * this recorder frame size.
      */
-
     if (vas_g711_frame_len == 0) {
-        vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
-        TRACE_ ( (THIS_FILE, "Detected VAS G.711 frame size = %u samples",
-                  vas_g711_frame_len));
+	vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
+	TRACE_((THIS_FILE, "Detected VAS G.711 frame size = %u samples",
+		vas_g711_frame_len));
     }
 
     /* Decode VAS buffer (coded in G.711) and put the PCM result into rec_buf.
@@ -844,539 +780,511 @@ static void RecCbPcm (CVoIPDataBuffer *buf, void *user_data)
     unsigned samples_processed = 0;
 
     while (samples_processed < vas_g711_frame_len) {
-        unsigned samples_to_process;
-        unsigned samples_req;
-
-        samples_to_process = vas_g711_frame_len - samples_processed;
-        samples_req = (strm->param.samples_per_frame /
-                       strm->param.channel_count /
-                       strm->resample_factor) -
-                      strm->rec_buf_len;
-
-        if (samples_to_process > samples_req)
-            samples_to_process = samples_req;
-
-        pjmedia_ulaw_decode (&strm->rec_buf[strm->rec_buf_len],
-                             buffer.Ptr() + 2 + samples_processed,
-                             samples_to_process);
-
-        strm->rec_buf_len += samples_to_process;
-
-        samples_processed += samples_to_process;
-
-        /* Buffer is full, time to call parent callback */
-        if (strm->rec_buf_len == strm->param.samples_per_frame /
-                strm->param.channel_count /
-                strm->resample_factor) {
-            pjmedia_frame f;
-
-            /* Need to resample clock rate? */
-
-            if (strm->rec_resample) {
-                unsigned resampled = 0;
-
-                while (resampled < strm->rec_buf_len) {
-                    pjmedia_resample_run (strm->rec_resample,
-                                          &strm->rec_buf[resampled],
-                                          strm->pcm_buf +
-                                          resampled * strm->resample_factor);
-                    resampled += 80;
-                }
-
-                f.buf = strm->pcm_buf;
-            } else {
-                f.buf = strm->rec_buf;
-            }
-
-            /* Need to convert channel count? */
-            if (strm->param.channel_count != 1) {
-                pjmedia_convert_channel_1ton ( (pj_int16_t*) f.buf,
-                                               (pj_int16_t*) f.buf,
-                                               strm->param.channel_count,
-                                               strm->param.samples_per_frame /
-                                               strm->param.channel_count,
-                                               0);
-            }
-
-            /* Call parent callback */
-            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-
-            f.size = strm->param.samples_per_frame << 1;
-
-            strm->rec_cb (strm->user_data, &f);
-
-            strm->rec_buf_len = 0;
-        }
+	unsigned samples_to_process;
+	unsigned samples_req;
+
+	samples_to_process = vas_g711_frame_len - samples_processed;
+	samples_req = (strm->param.samples_per_frame /
+		       strm->param.channel_count /
+		       strm->resample_factor) -
+		      strm->rec_buf_len;
+	if (samples_to_process > samples_req)
+	    samples_to_process = samples_req;
+
+	pjmedia_ulaw_decode(&strm->rec_buf[strm->rec_buf_len],
+			    buffer.Ptr() + 2 + samples_processed,
+			    samples_to_process);
+
+	strm->rec_buf_len += samples_to_process;
+	samples_processed += samples_to_process;
+
+	/* Buffer is full, time to call parent callback */
+	if (strm->rec_buf_len == strm->param.samples_per_frame / 
+				 strm->param.channel_count /
+				 strm->resample_factor) 
+	{
+	    pjmedia_frame f;
+
+	    /* Need to resample clock rate? */
+	    if (strm->rec_resample) {
+		unsigned resampled = 0;
+		
+		while (resampled < strm->rec_buf_len) {
+		    pjmedia_resample_run(strm->rec_resample, 
+				&strm->rec_buf[resampled],
+				strm->pcm_buf + 
+				resampled * strm->resample_factor);
+		    resampled += 80;
+		}
+		f.buf = strm->pcm_buf;
+	    } else {
+		f.buf = strm->rec_buf;
+	    }
+
+	    /* Need to convert channel count? */
+	    if (strm->param.channel_count != 1) {
+		pjmedia_convert_channel_1ton((pj_int16_t*)f.buf,
+					     (pj_int16_t*)f.buf,
+					     strm->param.channel_count,
+					     strm->param.samples_per_frame /
+					     strm->param.channel_count,
+					     0);
+	    }
+
+	    /* Call parent callback */
+	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+	    f.size = strm->param.samples_per_frame << 1;
+	    strm->rec_cb(strm->user_data, &f);
+	    strm->rec_buf_len = 0;
+	}
     }
 }
 
 #endif // USE_NATIVE_PCM
 
-static void PlayCbPcm (CVoIPDataBuffer *buf, void *user_data)
+static void PlayCbPcm(CVoIPDataBuffer *buf, void *user_data)
 {
-
     struct vas_stream *strm = (struct vas_stream*) user_data;
     unsigned g711_frame_len = vas_g711_frame_len;
-    TPtr8 buffer (0, 0, 0);
+    TPtr8 buffer(0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr (buffer);
+    buf->GetPayloadPtr(buffer);
 
     /* Init buffer attributes and header. */
     buffer.Zero();
-    buffer.Append (1);
-    buffer.Append (0);
+    buffer.Append(1);
+    buffer.Append(0);
 
     /* Assume frame size is 10ms if frame size hasn't been known. */
-
     if (g711_frame_len == 0)
-        g711_frame_len = 80;
+	g711_frame_len = 80;
 
     /* Call parent stream callback to get PCM samples to play,
      * encode the PCM samples into G.711 and put it into VAS buffer.
      */
     unsigned samples_processed = 0;
-
+    
     while (samples_processed < g711_frame_len) {
-        /* Need more samples to play, time to call parent callback */
-        if (strm->play_buf_len == 0) {
-            pjmedia_frame f;
-            unsigned samples_got;
-
-            f.size = strm->param.samples_per_frame << 1;
-
-            if (strm->play_resample || strm->param.channel_count != 1)
-                f.buf = strm->pcm_buf;
-            else
-                f.buf = strm->play_buf;
-
-            /* Call parent callback */
-            strm->play_cb (strm->user_data, &f);
-
-            if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
-                pjmedia_zero_samples ( (pj_int16_t*) f.buf,
-                                       strm->param.samples_per_frame);
-            }
-
-            samples_got = strm->param.samples_per_frame /
-
-                          strm->param.channel_count /
-                          strm->resample_factor;
-
-            /* Need to convert channel count? */
-
-            if (strm->param.channel_count != 1) {
-                pjmedia_convert_channel_nto1 ( (pj_int16_t*) f.buf,
-                                               (pj_int16_t*) f.buf,
-                                               strm->param.channel_count,
-                                               strm->param.samples_per_frame,
-                                               PJ_FALSE,
-                                               0);
-            }
-
-            /* Need to resample clock rate? */
-            if (strm->play_resample) {
-                unsigned resampled = 0;
-
-                while (resampled < samples_got) {
-                    pjmedia_resample_run (strm->play_resample,
-                                          strm->pcm_buf +
-                                          resampled * strm->resample_factor,
-                                          &strm->play_buf[resampled]);
-                    resampled += 80;
-                }
-            }
-
-            strm->play_buf_len = samples_got;
-
-            strm->play_buf_start = 0;
-        }
-
-        unsigned tmp;
-
-        tmp = PJ_MIN (strm->play_buf_len, g711_frame_len - samples_processed);
-        pjmedia_ulaw_encode ( (pj_uint8_t*) &strm->play_buf[strm->play_buf_start],
-                              &strm->play_buf[strm->play_buf_start],
-                              tmp);
-        buffer.Append ( (TUint8*) &strm->play_buf[strm->play_buf_start], tmp);
-        samples_processed += tmp;
-        strm->play_buf_len -= tmp;
-        strm->play_buf_start += tmp;
+	/* Need more samples to play, time to call parent callback */
+	if (strm->play_buf_len == 0) {
+	    pjmedia_frame f;
+	    unsigned samples_got;
+	    
+	    f.size = strm->param.samples_per_frame << 1;
+	    if (strm->play_resample || strm->param.channel_count != 1)
+		f.buf = strm->pcm_buf;
+	    else
+		f.buf = strm->play_buf;
+
+	    /* Call parent callback */
+	    strm->play_cb(strm->user_data, &f);
+	    if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
+		pjmedia_zero_samples((pj_int16_t*)f.buf, 
+				     strm->param.samples_per_frame);
+	    }
+	    
+	    samples_got = strm->param.samples_per_frame / 
+			  strm->param.channel_count /
+			  strm->resample_factor;
+
+	    /* Need to convert channel count? */
+	    if (strm->param.channel_count != 1) {
+		pjmedia_convert_channel_nto1((pj_int16_t*)f.buf,
+					     (pj_int16_t*)f.buf,
+					     strm->param.channel_count,
+					     strm->param.samples_per_frame,
+					     PJ_FALSE,
+					     0);
+	    }
+
+	    /* Need to resample clock rate? */
+	    if (strm->play_resample) {
+		unsigned resampled = 0;
+		
+		while (resampled < samples_got) 
+		{
+		    pjmedia_resample_run(strm->play_resample, 
+				strm->pcm_buf + 
+				resampled * strm->resample_factor,
+				&strm->play_buf[resampled]);
+		    resampled += 80;
+		}
+	    }
+	    
+	    strm->play_buf_len = samples_got;
+	    strm->play_buf_start = 0;
+	}
+
+	unsigned tmp;
+
+	tmp = PJ_MIN(strm->play_buf_len, g711_frame_len - samples_processed);
+	pjmedia_ulaw_encode((pj_uint8_t*)&strm->play_buf[strm->play_buf_start],
+			    &strm->play_buf[strm->play_buf_start],
+			    tmp);
+	buffer.Append((TUint8*)&strm->play_buf[strm->play_buf_start], tmp);
+	samples_processed += tmp;
+	strm->play_buf_len -= tmp;
+	strm->play_buf_start += tmp;
     }
 
     /* Set the buffer */
-    buf->SetPayloadPtr (buffer);
+    buf->SetPayloadPtr(buffer);
 }
 
 /****************************************************************************
  * Internal VAS callbacks for non-PCM format
  */
 
-static void RecCb (CVoIPDataBuffer *buf, void *user_data)
+static void RecCb(CVoIPDataBuffer *buf, void *user_data)
 {
-
     struct vas_stream *strm = (struct vas_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->rec_buf;
-    TPtr8 buffer (0, 0, 0);
+    TPtr8 buffer(0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr (buffer);
-
-    switch (strm->param.ext_fmt.id) {
-
-        case PJMEDIA_FORMAT_AMR: {
-            const pj_uint8_t *p = (const pj_uint8_t*) buffer.Ptr() + 1;
-            unsigned len = buffer.Length() - 1;
-
-            pjmedia_frame_ext_append_subframe (frame, p, len << 3, 160);
-
-            if (frame->samples_cnt == strm->param.samples_per_frame) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_G729: {
-            /* Check if we got a normal or SID frame. */
-            if (buffer[0] != 0) {
-                enum { NORMAL_LEN = 22, SID_LEN = 8 };
-                TBitStream *bitstream = (TBitStream*) strm->strm_data;
-                unsigned src_len = buffer.Length()- 2;
-
-                pj_assert (src_len == NORMAL_LEN || src_len == SID_LEN);
-
-                const TDesC8& p = bitstream->CompressG729Frame (
-                                      buffer.Right (src_len),
-                                      src_len == SID_LEN);
-
-                pjmedia_frame_ext_append_subframe (frame, p.Ptr(),
-                                                   p.Length() << 3, 80);
-            } else { /* We got null frame. */
-                pjmedia_frame_ext_append_subframe (frame, NULL, 0, 80);
-            }
-
-            if (frame->samples_cnt == strm->param.samples_per_frame) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_ILBC: {
-            unsigned samples_got;
-
-            samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
-
-            /* Check if we got a normal or SID frame. */
-
-            if (buffer[0] != 0) {
-                const pj_uint8_t *p = (const pj_uint8_t*) buffer.Ptr() + 2;
-                unsigned len = buffer.Length() - 2;
-
-                pjmedia_frame_ext_append_subframe (frame, p, len << 3,
-                                                   samples_got);
-            } else { /* We got null frame. */
-                pjmedia_frame_ext_append_subframe (frame, NULL, 0, samples_got);
-            }
-
-            if (frame->samples_cnt == strm->param.samples_per_frame) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_PCMU:
-
-        case PJMEDIA_FORMAT_PCMA: {
-            unsigned samples_processed = 0;
-
-            /* Make sure it is normal frame. */
-            pj_assert (buffer[0] == 1 && buffer[1] == 0);
-
-            /* Detect the recorder G.711 frame size, player frame size will
-             * follow this recorder frame size.
-             */
-
-            if (vas_g711_frame_len == 0) {
-                vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
-                TRACE_ ( (THIS_FILE, "Detected VAS G.711 frame size = %u samples",
-                          vas_g711_frame_len));
-            }
-
-            /* Convert VAS buffer format into pjmedia_frame_ext. Whenever
-             * samples count in the frame is equal to stream's samples per
-             * frame, call parent stream callback.
-             */
-            while (samples_processed < vas_g711_frame_len) {
-                unsigned tmp;
-                const pj_uint8_t *pb = (const pj_uint8_t*) buffer.Ptr() +
-                                       2 + samples_processed;
-
-                tmp = PJ_MIN (strm->param.samples_per_frame - frame->samples_cnt,
-                              vas_g711_frame_len - samples_processed);
-
-                pjmedia_frame_ext_append_subframe (frame, pb, tmp << 3, tmp);
-                samples_processed += tmp;
-
-                if (frame->samples_cnt == strm->param.samples_per_frame) {
-                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                    strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
-                    frame->samples_cnt = 0;
-                    frame->subframe_cnt = 0;
-                }
-            }
-        }
-
-        break;
-
-        default:
-            break;
+    buf->GetPayloadPtr(buffer);
+    
+    switch(strm->param.ext_fmt.id) {
+    case PJMEDIA_FORMAT_AMR:
+	{
+	    const pj_uint8_t *p = (const pj_uint8_t*)buffer.Ptr() + 1;
+	    unsigned len = buffer.Length() - 1;
+	    
+	    pjmedia_frame_ext_append_subframe(frame, p, len << 3, 160);
+	    if (frame->samples_cnt == strm->param.samples_per_frame) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_G729:
+	{
+	    /* Check if we got a normal or SID frame. */
+	    if (buffer[0] != 0) {
+		enum { NORMAL_LEN = 22, SID_LEN = 8 };
+		TBitStream *bitstream = (TBitStream*)strm->strm_data;
+		unsigned src_len = buffer.Length()- 2;
+		
+		pj_assert(src_len == NORMAL_LEN || src_len == SID_LEN);
+		
+		const TDesC8& p = bitstream->CompressG729Frame(
+					    buffer.Right(src_len), 
+					    src_len == SID_LEN);
+		
+		pjmedia_frame_ext_append_subframe(frame, p.Ptr(), 
+						  p.Length() << 3, 80);
+	    } else { /* We got null frame. */
+		pjmedia_frame_ext_append_subframe(frame, NULL, 0, 80);
+	    }
+	    
+	    if (frame->samples_cnt == strm->param.samples_per_frame) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+
+    case PJMEDIA_FORMAT_ILBC:
+	{
+	    unsigned samples_got;
+	    
+	    samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
+	    
+	    /* Check if we got a normal or SID frame. */
+	    if (buffer[0] != 0) {
+		const pj_uint8_t *p = (const pj_uint8_t*)buffer.Ptr() + 2;
+		unsigned len = buffer.Length() - 2;
+		
+		pjmedia_frame_ext_append_subframe(frame, p, len << 3,
+						  samples_got);
+	    } else { /* We got null frame. */
+		pjmedia_frame_ext_append_subframe(frame, NULL, 0, samples_got);
+	    }
+	    
+	    if (frame->samples_cnt == strm->param.samples_per_frame) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_PCMU:
+    case PJMEDIA_FORMAT_PCMA:
+	{
+	    unsigned samples_processed = 0;
+	    
+	    /* Make sure it is normal frame. */
+	    pj_assert(buffer[0] == 1 && buffer[1] == 0);
+
+	    /* Detect the recorder G.711 frame size, player frame size will 
+	     * follow this recorder frame size.
+	     */
+	    if (vas_g711_frame_len == 0) {
+		vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
+		TRACE_((THIS_FILE, "Detected VAS G.711 frame size = %u samples",
+			vas_g711_frame_len));
+	    }
+	    
+	    /* Convert VAS buffer format into pjmedia_frame_ext. Whenever 
+	     * samples count in the frame is equal to stream's samples per 
+	     * frame, call parent stream callback.
+	     */
+	    while (samples_processed < vas_g711_frame_len) {
+		unsigned tmp;
+		const pj_uint8_t *pb = (const pj_uint8_t*)buffer.Ptr() +
+				       2 + samples_processed;
+    
+		tmp = PJ_MIN(strm->param.samples_per_frame - frame->samples_cnt,
+			     vas_g711_frame_len - samples_processed);
+		
+		pjmedia_frame_ext_append_subframe(frame, pb, tmp << 3, tmp);
+		samples_processed += tmp;
+    
+		if (frame->samples_cnt == strm->param.samples_per_frame) {
+		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		    strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
+		    frame->samples_cnt = 0;
+		    frame->subframe_cnt = 0;
+		}
+	    }
+	}
+	break;
+	
+    default:
+	break;
     }
 }
 
-static void PlayCb (CVoIPDataBuffer *buf, void *user_data)
+static void PlayCb(CVoIPDataBuffer *buf, void *user_data)
 {
-
     struct vas_stream *strm = (struct vas_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->play_buf;
-    TPtr8 buffer (0, 0, 0);
+    TPtr8 buffer(0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr (buffer);
+    buf->GetPayloadPtr(buffer);
 
     /* Init buffer attributes and header. */
     buffer.Zero();
 
-    switch (strm->param.ext_fmt.id) {
-
-        case PJMEDIA_FORMAT_AMR: {
-            if (frame->samples_cnt == 0) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-            }
-
-            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                pjmedia_frame_ext_subframe *sf;
-                unsigned samples_cnt;
-
-                sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                if (sf->data && sf->bitlen) {
-                    /* AMR header for VAS is one byte, the format (may be!):
-                     * 0xxxxy00, where xxxx:frame type, y:not sure.
-                     */
-                    unsigned len = (sf->bitlen+7) >>3;
-                    enum {SID_FT = 8 };
-                    pj_uint8_t amr_header = 4, ft = SID_FT;
-
-                    if (len >= pjmedia_codec_amrnb_framelen[0])
-                        ft = pjmedia_codec_amr_get_mode2 (PJ_TRUE, len);
-
-                    amr_header |= ft << 3;
-
-                    buffer.Append (amr_header);
-
-                    buffer.Append ( (TUint8*) sf->data, len);
-                } else {
-                    buffer.Append (0);
-                }
-
-                pjmedia_frame_ext_pop_subframes (frame, 1);
-
-            } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                buffer.Append (0);
-
-                frame->samples_cnt = 0;
-                frame->subframe_cnt = 0;
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_G729: {
-            if (frame->samples_cnt == 0) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-            }
-
-            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                pjmedia_frame_ext_subframe *sf;
-                unsigned samples_cnt;
-
-                sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                if (sf->data && sf->bitlen) {
-                    enum { NORMAL_LEN = 10, SID_LEN = 2 };
-                    pj_bool_t sid_frame = ( (sf->bitlen >> 3) == SID_LEN);
-                    TBitStream *bitstream = (TBitStream*) strm->strm_data;
-                    const TPtrC8 src (sf->data, sf->bitlen>>3);
-                    const TDesC8 &dst = bitstream->ExpandG729Frame (src,
-                                        sid_frame);
-
-                    if (sid_frame) {
-                        buffer.Append (2);
-                        buffer.Append (0);
-                    } else {
-                        buffer.Append (1);
-                        buffer.Append (0);
-                    }
-
-                    buffer.Append (dst);
-                } else {
-                    buffer.Append (2);
-                    buffer.Append (0);
-
-                    buffer.AppendFill (0, 22);
-                }
-
-                pjmedia_frame_ext_pop_subframes (frame, 1);
-
-            } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                buffer.Append (2);
-                buffer.Append (0);
-
-                buffer.AppendFill (0, 22);
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_ILBC: {
-            if (frame->samples_cnt == 0) {
-                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-            }
-
-            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                pjmedia_frame_ext_subframe *sf;
-                unsigned samples_cnt;
-
-                sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                pj_assert ( (strm->param.ext_fmt.bitrate == 15200 &&
-                             samples_cnt == 160) ||
-                            (strm->param.ext_fmt.bitrate != 15200 &&
-                             samples_cnt == 240));
-
-                if (sf->data && sf->bitlen) {
-                    buffer.Append (1);
-                    buffer.Append (0);
-                    buffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
-                } else {
-                    unsigned frame_len;
-
-                    buffer.Append (1);
-                    buffer.Append (0);
-
-                    /* VAS iLBC frame is 20ms or 30ms */
-                    frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
-                    buffer.AppendFill (0, frame_len);
-                }
-
-                pjmedia_frame_ext_pop_subframes (frame, 1);
-
-            } else { /* PJMEDIA_FRAME_TYPE_NONE */
-
-                unsigned frame_len;
-
-                buffer.Append (1);
-                buffer.Append (0);
-
-                /* VAS iLBC frame is 20ms or 30ms */
-                frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
-                buffer.AppendFill (0, frame_len);
-
-            }
-        }
-
-        break;
-
-        case PJMEDIA_FORMAT_PCMU:
-
-        case PJMEDIA_FORMAT_PCMA: {
-            unsigned samples_ready = 0;
-            unsigned samples_req = vas_g711_frame_len;
-
-            /* Assume frame size is 10ms if frame size hasn't been known. */
-
-            if (samples_req == 0)
-                samples_req = 80;
-
-            buffer.Append (1);
-
-            buffer.Append (0);
-
-            /* Call parent stream callback to get samples to play. */
-            while (samples_ready < samples_req) {
-                if (frame->samples_cnt == 0) {
-                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-                    strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
-                    pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-                               frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-                }
-
-                if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
-                    pjmedia_frame_ext_subframe *sf;
-                    unsigned samples_cnt;
-
-                    sf = pjmedia_frame_ext_get_subframe (frame, 0);
-                    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-
-                    if (sf->data && sf->bitlen) {
-                        buffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
-                    } else {
-                        pj_uint8_t silc;
-                        silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
-                               pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
-                        buffer.AppendFill (silc, samples_cnt);
-                    }
-
-                    samples_ready += samples_cnt;
-
-                    pjmedia_frame_ext_pop_subframes (frame, 1);
-
-                } else { /* PJMEDIA_FRAME_TYPE_NONE */
-                    pj_uint8_t silc;
-
-                    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
-                           pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
-                    buffer.AppendFill (silc, samples_req - samples_ready);
-
-                    samples_ready = samples_req;
-                    frame->samples_cnt = 0;
-                    frame->subframe_cnt = 0;
-                }
-            }
-        }
-
-        break;
-
-        default:
-            break;
+    switch(strm->param.ext_fmt.id) {
+    case PJMEDIA_FORMAT_AMR:
+	{
+	    if (frame->samples_cnt == 0) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+	    }
+
+	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		pjmedia_frame_ext_subframe *sf;
+		unsigned samples_cnt;
+		
+		sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		
+		if (sf->data && sf->bitlen) {
+		    /* AMR header for VAS is one byte, the format (may be!):
+		     * 0xxxxy00, where xxxx:frame type, y:not sure. 
+		     */
+		    unsigned len = (sf->bitlen+7)>>3;
+		    enum {SID_FT = 8 };
+		    pj_uint8_t amr_header = 4, ft = SID_FT;
+
+		    if (len >= pjmedia_codec_amrnb_framelen[0])
+			ft = pjmedia_codec_amr_get_mode2(PJ_TRUE, len);
+		    
+		    amr_header |= ft << 3;
+		    buffer.Append(amr_header);
+		    
+		    buffer.Append((TUint8*)sf->data, len);
+		} else {
+		    buffer.Append(0);
+		}
+
+		pjmedia_frame_ext_pop_subframes(frame, 1);
+	    
+	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
+		buffer.Append(0);
+		
+		frame->samples_cnt = 0;
+		frame->subframe_cnt = 0;
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_G729:
+	{
+	    if (frame->samples_cnt == 0) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+	    }
+
+	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		pjmedia_frame_ext_subframe *sf;
+		unsigned samples_cnt;
+		
+		sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		
+		if (sf->data && sf->bitlen) {
+		    enum { NORMAL_LEN = 10, SID_LEN = 2 };
+		    pj_bool_t sid_frame = ((sf->bitlen >> 3) == SID_LEN);
+		    TBitStream *bitstream = (TBitStream*)strm->strm_data;
+		    const TPtrC8 src(sf->data, sf->bitlen>>3);
+		    const TDesC8 &dst = bitstream->ExpandG729Frame(src,
+								   sid_frame); 
+		    if (sid_frame) {
+			buffer.Append(2);
+			buffer.Append(0);
+		    } else {
+			buffer.Append(1);
+			buffer.Append(0);
+		    }
+		    buffer.Append(dst);
+		} else {
+		    buffer.Append(2);
+		    buffer.Append(0);
+
+		    buffer.AppendFill(0, 22);
+		}
+
+		pjmedia_frame_ext_pop_subframes(frame, 1);
+	    
+	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
+		buffer.Append(2);
+		buffer.Append(0);
+		
+		buffer.AppendFill(0, 22);
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_ILBC:
+	{
+	    if (frame->samples_cnt == 0) {
+		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+	    }
+
+	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		pjmedia_frame_ext_subframe *sf;
+		unsigned samples_cnt;
+		
+		sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		
+		pj_assert((strm->param.ext_fmt.bitrate == 15200 && 
+			   samples_cnt == 160) ||
+			  (strm->param.ext_fmt.bitrate != 15200 &&
+			   samples_cnt == 240));
+		
+		if (sf->data && sf->bitlen) {
+		    buffer.Append(1);
+		    buffer.Append(0);
+		    buffer.Append((TUint8*)sf->data, sf->bitlen>>3);
+		} else {
+		    unsigned frame_len;
+		    
+		    buffer.Append(1);
+		    buffer.Append(0);
+		    
+		    /* VAS iLBC frame is 20ms or 30ms */
+		    frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
+		    buffer.AppendFill(0, frame_len);
+		}
+
+		pjmedia_frame_ext_pop_subframes(frame, 1);
+	    
+	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
+		
+		unsigned frame_len;
+		
+		buffer.Append(1);
+		buffer.Append(0);
+		
+		/* VAS iLBC frame is 20ms or 30ms */
+		frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
+		buffer.AppendFill(0, frame_len);
+
+	    }
+	}
+	break;
+	
+    case PJMEDIA_FORMAT_PCMU:
+    case PJMEDIA_FORMAT_PCMA:
+	{
+	    unsigned samples_ready = 0;
+	    unsigned samples_req = vas_g711_frame_len;
+	    
+	    /* Assume frame size is 10ms if frame size hasn't been known. */
+	    if (samples_req == 0)
+		samples_req = 80;
+	    
+	    buffer.Append(1);
+	    buffer.Append(0);
+	    
+	    /* Call parent stream callback to get samples to play. */
+	    while (samples_ready < samples_req) {
+		if (frame->samples_cnt == 0) {
+		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+		    strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
+		    pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+			      frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+		}
+    
+		if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
+		    pjmedia_frame_ext_subframe *sf;
+		    unsigned samples_cnt;
+		    
+		    sf = pjmedia_frame_ext_get_subframe(frame, 0);
+		    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+		    if (sf->data && sf->bitlen) {
+			buffer.Append((TUint8*)sf->data, sf->bitlen>>3);
+		    } else {
+			pj_uint8_t silc;
+			silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
+				pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
+			buffer.AppendFill(silc, samples_cnt);
+		    }
+		    samples_ready += samples_cnt;
+		    
+		    pjmedia_frame_ext_pop_subframes(frame, 1);
+		
+		} else { /* PJMEDIA_FRAME_TYPE_NONE */
+		    pj_uint8_t silc;
+		    
+		    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
+			    pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
+		    buffer.AppendFill(silc, samples_req - samples_ready);
+
+		    samples_ready = samples_req;
+		    frame->samples_cnt = 0;
+		    frame->subframe_cnt = 0;
+		}
+	    }
+	}
+	break;
+	
+    default:
+	break;
     }
 
     /* Set the buffer */
-    buf->SetPayloadPtr (buffer);
+    buf->SetPayloadPtr(buffer);
 }
 
 
@@ -1388,20 +1296,19 @@ static void PlayCb (CVoIPDataBuffer *buf, void *user_data)
  * C compatible declaration of VAS factory.
  */
 PJ_BEGIN_DECL
-PJ_DECL (pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory (pj_pool_factory *pf);
+PJ_DECL(pjmedia_aud_dev_factory*)pjmedia_symb_vas_factory(pj_pool_factory *pf);
 PJ_END_DECL
 
 /*
  * Init VAS audio driver.
  */
-PJ_DEF (pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory (pj_pool_factory *pf)
+PJ_DEF(pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory(pj_pool_factory *pf)
 {
-
     struct vas_factory *f;
     pj_pool_t *pool;
 
-    pool = pj_pool_create (pf, "VAS", 1000, 1000, NULL);
-    f = PJ_POOL_ZALLOC_T (pool, struct vas_factory);
+    pool = pj_pool_create(pf, "VAS", 1000, 1000, NULL);
+    f = PJ_POOL_ZALLOC_T(pool, struct vas_factory);
     f->pf = pf;
     f->pool = pool;
     f->base.op = &factory_op;
@@ -1410,185 +1317,171 @@ PJ_DEF (pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory (pj_pool_factory *pf)
 }
 
 /* API: init factory */
-static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
+static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
 {
-
-    struct vas_factory *af = (struct vas_factory*) f;
-    CVoIPUtilityFactory *vas_factory;
+    struct vas_factory *af = (struct vas_factory*)f;
+    CVoIPUtilityFactory *vas_factory_;
     CVoIPAudioUplinkStream *vas_uplink;
     CVoIPAudioDownlinkStream *vas_dnlink;
     RArray<TVoIPCodecFormat> uplink_formats, dnlink_formats;
     unsigned ext_fmt_cnt = 0;
-    TVersion vas_version (1, 0, 0); /* Not really used at this time */
+    TVersion vas_version(1, 0, 0); /* Not really used at this time */
     TInt err;
 
-    pj_ansi_strcpy (af->dev_info.name, "S60 VAS");
+    pj_ansi_strcpy(af->dev_info.name, "S60 VAS");
     af->dev_info.default_samples_per_sec = 8000;
     af->dev_info.caps = PJMEDIA_AUD_DEV_CAP_EXT_FORMAT |
-                        //PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
-                        PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
-                        PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
-                        PJMEDIA_AUD_DEV_CAP_VAD |
-                        PJMEDIA_AUD_DEV_CAP_CNG;
-    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE |
-                          PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+			//PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
+			PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
+			PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
+			PJMEDIA_AUD_DEV_CAP_VAD |
+			PJMEDIA_AUD_DEV_CAP_CNG;
+    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE | 
+			  PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
     af->dev_info.input_count = 1;
     af->dev_info.output_count = 1;
     af->dev_info.ext_fmt_cnt = 0;
 
     /* Enumerate supported formats */
-    err = CVoIPUtilityFactory::CreateFactory (vas_factory);
-
+    err = CVoIPUtilityFactory::CreateFactory(vas_factory_);
     if (err != KErrNone)
-        goto on_error;
+	goto on_error;
 
-    /* On VAS 2.0, uplink & downlink stream should be instantiated before
+    /* On VAS 2.0, uplink & downlink stream should be instantiated before 
      * querying formats.
      */
-    err = vas_factory->CreateUplinkStream (vas_version,
-                                           CVoIPUtilityFactory::EVoIPCall,
-                                           vas_uplink);
-
+    err = vas_factory_->CreateUplinkStream(vas_version, 
+				          CVoIPUtilityFactory::EVoIPCall,
+				          vas_uplink);
     if (err != KErrNone)
-        goto on_error;
-
-    err = vas_factory->CreateDownlinkStream (vas_version,
-            CVoIPUtilityFactory::EVoIPCall,
-            vas_dnlink);
-
+	goto on_error;
+    
+    err = vas_factory_->CreateDownlinkStream(vas_version, 
+				            CVoIPUtilityFactory::EVoIPCall,
+				            vas_dnlink);
     if (err != KErrNone)
-        goto on_error;
-
+	goto on_error;
+    
     uplink_formats.Reset();
-
-    err = vas_factory->GetSupportedUplinkFormats (uplink_formats);
-
+    err = vas_factory_->GetSupportedUplinkFormats(uplink_formats);
     if (err != KErrNone)
-        goto on_error;
+	goto on_error;
 
     dnlink_formats.Reset();
-
-    err = vas_factory->GetSupportedDownlinkFormats (dnlink_formats);
-
+    err = vas_factory_->GetSupportedDownlinkFormats(dnlink_formats);
     if (err != KErrNone)
-        goto on_error;
+	goto on_error;
 
     /* Free the streams, they are just used for querying formats */
     delete vas_uplink;
-
     vas_uplink = NULL;
-
     delete vas_dnlink;
-
     vas_dnlink = NULL;
-
+    delete vas_factory_;
+    vas_factory_ = NULL;
+    
     for (TInt i = 0; i < dnlink_formats.Count(); i++) {
-        /* Format must be supported by both downlink & uplink. */
-        if (uplink_formats.Find (dnlink_formats[i]) == KErrNotFound)
-            continue;
-
-        switch (dnlink_formats[i]) {
-
-            case EAMR_NB:
-                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_AMR;
-                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 7400;
-                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
-                break;
-
-            case EG729:
-                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_G729;
-                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 8000;
-                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
-                break;
-
-            case EILBC:
-                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_ILBC;
-                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 13333;
-                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
-                break;
-
-            case EG711:
+	/* Format must be supported by both downlink & uplink. */
+	if (uplink_formats.Find(dnlink_formats[i]) == KErrNotFound)
+	    continue;
+	
+	switch (dnlink_formats[i]) {
+	case EAMR_NB:
+	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_AMR;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 7400;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
+	    break;
+
+	case EG729:
+	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_G729;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 8000;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
+	    break;
+
+	case EILBC:
+	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_ILBC;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 13333;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
+	    break;
+
+	case EG711:
 #if PJMEDIA_AUDIO_DEV_SYMB_VAS_VERSION==2
-
-            case EG711_10MS:
+	case EG711_10MS:
 #endif
-                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMU;
-                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
-                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
-                ++ext_fmt_cnt;
-                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMA;
-                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
-                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
-                break;
-
-            default:
-                continue;
-        }
-
-        ++ext_fmt_cnt;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMU;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
+	    ++ext_fmt_cnt;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMA;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
+	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
+	    break;
+	
+	default:
+	    continue;
+	}
+	
+	++ext_fmt_cnt;
     }
-
+    
     af->dev_info.ext_fmt_cnt = ext_fmt_cnt;
 
     uplink_formats.Close();
     dnlink_formats.Close();
-
-    PJ_LOG (3, (THIS_FILE, "VAS initialized"));
+    
+    PJ_LOG(3, (THIS_FILE, "VAS initialized"));
 
     return PJ_SUCCESS;
-
+    
 on_error:
-    return PJ_RETURN_OS_ERROR (err);
+    return PJ_RETURN_OS_ERROR(err);
 }
 
 /* API: destroy factory */
-static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f)
+static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f)
 {
-
-    struct vas_factory *af = (struct vas_factory*) f;
+    struct vas_factory *af = (struct vas_factory*)f;
     pj_pool_t *pool = af->pool;
 
     af->pool = NULL;
-    pj_pool_release (pool);
-
-    PJ_LOG (3, (THIS_FILE, "VAS destroyed"));
+    pj_pool_release(pool);
 
+    PJ_LOG(3, (THIS_FILE, "VAS destroyed"));
+    
     return PJ_SUCCESS;
 }
 
 /* API: get number of devices */
-static unsigned factory_get_dev_count (pjmedia_aud_dev_factory *f)
+static unsigned factory_get_dev_count(pjmedia_aud_dev_factory *f)
 {
-    PJ_UNUSED_ARG (f);
+    PJ_UNUSED_ARG(f);
     return 1;
 }
 
 /* API: get device info */
-static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_dev_info *info)
+static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
+					unsigned index,
+					pjmedia_aud_dev_info *info)
 {
+    struct vas_factory *af = (struct vas_factory*)f;
 
-    struct vas_factory *af = (struct vas_factory*) f;
-
-    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_memcpy (info, &af->dev_info, sizeof (*info));
+    pj_memcpy(info, &af->dev_info, sizeof(*info));
 
     return PJ_SUCCESS;
 }
 
 /* API: create default device parameter */
-static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
-        unsigned index,
-        pjmedia_aud_param *param)
+static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
+					 unsigned index,
+					 pjmedia_aud_param *param)
 {
+    struct vas_factory *af = (struct vas_factory*)f;
 
-    struct vas_factory *af = (struct vas_factory*) f;
+    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
 
-    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
-
-    pj_bzero (param, sizeof (*param));
+    pj_bzero(param, sizeof(*param));
     param->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
     param->rec_id = index;
     param->play_id = index;
@@ -1604,17 +1497,15 @@ static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
 
 
 /* API: create stream */
-static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
-        const pjmedia_aud_param *param,
-        pjmedia_aud_rec_cb rec_cb,
-        pjmedia_aud_play_cb play_cb,
-        void *user_data,
-        pjmedia_aud_stream **p_aud_strm)
+static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
+					 const pjmedia_aud_param *param,
+					 pjmedia_aud_rec_cb rec_cb,
+					 pjmedia_aud_play_cb play_cb,
+					 void *user_data,
+					 pjmedia_aud_stream **p_aud_strm)
 {
-
-    struct vas_factory *af = (struct vas_factory*) f;
+    struct vas_factory *af = (struct vas_factory*)f;
     pj_pool_t *pool;
-
     struct vas_stream *strm;
 
     CPjAudioSetting vas_setting;
@@ -1622,433 +1513,422 @@ static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
     PjAudioCallback vas_play_cb;
 
     /* Can only support 16bits per sample */
-    PJ_ASSERT_RETURN (param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
 
     /* Supported clock rates:
-     * - for non-PCM format: 8kHz
-     * - for PCM format: 8kHz and 16kHz
+     * - for non-PCM format: 8kHz  
+     * - for PCM format: 8kHz and 16kHz  
      */
-    PJ_ASSERT_RETURN (param->clock_rate == 8000 ||
-                      (param->clock_rate == 16000 &&
-                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-                      PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->clock_rate == 8000 ||
+		     (param->clock_rate == 16000 && 
+		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+		     PJ_EINVAL);
 
     /* Supported channels number:
      * - for non-PCM format: mono
-     * - for PCM format: mono and stereo
+     * - for PCM format: mono and stereo  
      */
-    PJ_ASSERT_RETURN (param->channel_count == 1 ||
-                      (param->channel_count == 2 &&
-                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-                      PJ_EINVAL);
+    PJ_ASSERT_RETURN(param->channel_count == 1 || 
+		     (param->channel_count == 2 &&
+		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+		     PJ_EINVAL);
 
     /* Create and Initialize stream descriptor */
-    pool = pj_pool_create (af->pf, "vas-dev", 1000, 1000, NULL);
-    PJ_ASSERT_RETURN (pool, PJ_ENOMEM);
+    pool = pj_pool_create(af->pf, "vas-dev", 1000, 1000, NULL);
+    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
 
-    strm = PJ_POOL_ZALLOC_T (pool, struct vas_stream);
+    strm = PJ_POOL_ZALLOC_T(pool, struct vas_stream);
     strm->pool = pool;
     strm->param = *param;
 
     if (strm->param.flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT == 0)
-        strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
-
+	strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
+	
     /* Set audio engine fourcc. */
-    switch (strm->param.ext_fmt.id) {
-
-        case PJMEDIA_FORMAT_L16:
-#ifdef USE_NATIVE_PCM
-            vas_setting.format = EPCM16;
+    switch(strm->param.ext_fmt.id) {
+    case PJMEDIA_FORMAT_L16:
+#ifdef USE_NATIVE_PCM	
+	vas_setting.format = EPCM16;
 #else
-            vas_setting.format = EG711;
+	vas_setting.format = EG711;
 #endif
-            break;
-
-        case PJMEDIA_FORMAT_PCMU:
-
-        case PJMEDIA_FORMAT_PCMA:
-            vas_setting.format = EG711;
-            break;
-
-        case PJMEDIA_FORMAT_AMR:
-            vas_setting.format = EAMR_NB;
-            break;
-
-        case PJMEDIA_FORMAT_G729:
-            vas_setting.format = EG729;
-            break;
-
-        case PJMEDIA_FORMAT_ILBC:
-            vas_setting.format = EILBC;
-            break;
-
-        default:
-            vas_setting.format = ENULL;
-            break;
+	break;
+    case PJMEDIA_FORMAT_PCMU:
+    case PJMEDIA_FORMAT_PCMA:
+	vas_setting.format = EG711;
+	break;
+    case PJMEDIA_FORMAT_AMR:
+	vas_setting.format = EAMR_NB;
+	break;
+    case PJMEDIA_FORMAT_G729:
+	vas_setting.format = EG729;
+	break;
+    case PJMEDIA_FORMAT_ILBC:
+	vas_setting.format = EILBC;
+	break;
+    default:
+	vas_setting.format = ENULL;
+	break;
     }
 
     /* Set audio engine mode. */
-    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
-#ifdef USE_NATIVE_PCM
-        vas_setting.mode = 0;
+    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16)
+    {
+#ifdef USE_NATIVE_PCM	
+	vas_setting.mode = 0;
 #else
-        vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
+	vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
 #endif
-    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR) {
-        vas_setting.mode = strm->param.ext_fmt.bitrate;
-    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU) {
-        vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
-    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA) {
-        vas_setting.mode = CVoIPFormatIntfc::EG711ALaw;
-    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC) {
-        if (strm->param.ext_fmt.bitrate == 15200)
-            vas_setting.mode = CVoIPFormatIntfc::EiLBC20mSecFrame;
-        else
-            vas_setting.mode = CVoIPFormatIntfc::EiLBC30mSecFrame;
+    } 
+    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR)
+    {
+	vas_setting.mode = strm->param.ext_fmt.bitrate;
+    } 
+    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU)
+    {
+	vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
+    }
+    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA)
+    {
+	vas_setting.mode = CVoIPFormatIntfc::EG711ALaw;
+    }
+    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC)
+    {
+	if (strm->param.ext_fmt.bitrate == 15200)
+	    vas_setting.mode = CVoIPFormatIntfc::EiLBC20mSecFrame;
+	else
+	    vas_setting.mode = CVoIPFormatIntfc::EiLBC30mSecFrame;
     } else {
-        vas_setting.mode = 0;
+	vas_setting.mode = 0;
     }
 
-    /* Disable VAD on L16, G711, iLBC, and also G729 (G729's SID
+    /* Disable VAD on L16, G711, iLBC, and also G729 (G729's SID 
      * potentially cause noise?).
      */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC ||
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-        vas_setting.vad = EFalse;
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC ||
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729)
+    {
+	vas_setting.vad = EFalse;
     } else {
-        vas_setting.vad = strm->param.ext_fmt.vad;
+	vas_setting.vad = strm->param.ext_fmt.vad;
     }
-
+    
     /* Set other audio engine attributes. */
     vas_setting.plc = strm->param.plc_enabled;
-
     vas_setting.cng = vas_setting.vad;
-
-    vas_setting.loudspk =
-        strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+    vas_setting.loudspk = 
+		strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
 
     /* Set audio engine callbacks. */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
 #ifdef USE_NATIVE_PCM
-        vas_play_cb = &PlayCbPcm2;
-        vas_rec_cb  = &RecCbPcm2;
+	vas_play_cb = &PlayCbPcm2;
+	vas_rec_cb  = &RecCbPcm2;
 #else
-        vas_play_cb = &PlayCbPcm;
-        vas_rec_cb  = &RecCbPcm;
+	vas_play_cb = &PlayCbPcm;
+	vas_rec_cb  = &RecCbPcm;
 #endif
     } else {
-        vas_play_cb = &PlayCb;
-        vas_rec_cb  = &RecCb;
+	vas_play_cb = &PlayCb;
+	vas_rec_cb  = &RecCb;
     }
 
     strm->rec_cb = rec_cb;
-
     strm->play_cb = play_cb;
     strm->user_data = user_data;
     strm->resample_factor = strm->param.clock_rate / 8000;
 
     /* play_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->play_buf = (pj_int16_t*) pj_pool_zalloc (
-                         pool,
-                         (strm->param.samples_per_frame /
-                          strm->resample_factor /
-                          strm->param.channel_count) << 1);
+    strm->play_buf = (pj_int16_t*)pj_pool_zalloc(
+					pool, 
+					(strm->param.samples_per_frame / 
+					strm->resample_factor /
+					strm->param.channel_count) << 1);
     strm->play_buf_len = 0;
     strm->play_buf_start = 0;
 
     /* rec_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->rec_buf  = (pj_int16_t*) pj_pool_zalloc (
-                         pool,
-                         (strm->param.samples_per_frame /
-                          strm->resample_factor /
-                          strm->param.channel_count) << 1);
+    strm->rec_buf  = (pj_int16_t*)pj_pool_zalloc(
+					pool, 
+					(strm->param.samples_per_frame / 
+					strm->resample_factor /
+					strm->param.channel_count) << 1);
     strm->rec_buf_len = 0;
 
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-        TBitStream *g729_bitstream = new TBitStream;
-
-        PJ_ASSERT_RETURN (g729_bitstream, PJ_ENOMEM);
-        strm->strm_data = (void*) g729_bitstream;
+	TBitStream *g729_bitstream = new TBitStream;
+	
+	PJ_ASSERT_RETURN(g729_bitstream, PJ_ENOMEM);
+	strm->strm_data = (void*)g729_bitstream;
     }
-
+	
     /* Init resampler when format is PCM and clock rate is not 8kHz */
-    if (strm->param.clock_rate != 8000 &&
-            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
-        pj_status_t status;
-
-        if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-            /* Create resample for recorder */
-            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
-                                              8000,
-                                              strm->param.clock_rate,
-                                              80,
-                                              &strm->rec_resample);
-
-            if (status != PJ_SUCCESS)
-                return status;
-        }
-
-        if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-            /* Create resample for player */
-            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
-                                              strm->param.clock_rate,
-                                              8000,
-                                              80 * strm->resample_factor,
-                                              &strm->play_resample);
-
-            if (status != PJ_SUCCESS)
-                return status;
-        }
+    if (strm->param.clock_rate != 8000 && 
+	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16)
+    {
+	pj_status_t status;
+	
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    /* Create resample for recorder */
+	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
+					      8000,
+					      strm->param.clock_rate,
+					      80,
+					      &strm->rec_resample);
+	    if (status != PJ_SUCCESS)
+		return status;
+	}
+    
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    /* Create resample for player */
+	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
+					      strm->param.clock_rate,
+					      8000,
+					      80 * strm->resample_factor,
+					      &strm->play_resample);
+	    if (status != PJ_SUCCESS)
+		return status;
+	}
     }
 
     /* Create PCM buffer, when the clock rate is not 8kHz or not mono */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 &&
-            (strm->resample_factor > 1 || strm->param.channel_count != 1)) {
-        strm->pcm_buf = (pj_int16_t*) pj_pool_zalloc (pool,
-                        strm->param.samples_per_frame << 1);
+	(strm->resample_factor > 1 || strm->param.channel_count != 1)) 
+    {
+	strm->pcm_buf = (pj_int16_t*)pj_pool_zalloc(pool, 
+					strm->param.samples_per_frame << 1);
     }
 
-
+    
     /* Create the audio engine. */
-    TRAPD (err, strm->engine = CPjAudioEngine::NewL (strm,
-                               vas_rec_cb, vas_play_cb,
-                               strm, vas_setting));
-
+    TRAPD(err, strm->engine = CPjAudioEngine::NewL(strm,
+						   vas_rec_cb, vas_play_cb,
+						   strm, vas_setting));
     if (err != KErrNone) {
-        pj_pool_release (pool);
-        return PJ_RETURN_OS_ERROR (err);
+    	pj_pool_release(pool);
+	return PJ_RETURN_OS_ERROR(err);
     }
 
     /* Apply output volume setting if specified */
     if (param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING) {
-        stream_set_cap (&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-                        &param->output_vol);
+	stream_set_cap(&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, 
+		       &param->output_vol);
     }
 
     /* Done */
     strm->base.op = &stream_op;
-
     *p_aud_strm = &strm->base;
 
     return PJ_SUCCESS;
 }
 
 /* API: Get stream info. */
-static pj_status_t stream_get_param (pjmedia_aud_stream *s,
-                                     pjmedia_aud_param *pi)
+static pj_status_t stream_get_param(pjmedia_aud_stream *s,
+				    pjmedia_aud_param *pi)
 {
+    struct vas_stream *strm = (struct vas_stream*)s;
 
-    struct vas_stream *strm = (struct vas_stream*) s;
+    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
 
-    PJ_ASSERT_RETURN (strm && pi, PJ_EINVAL);
-
-    pj_memcpy (pi, &strm->param, sizeof (*pi));
+    pj_memcpy(pi, &strm->param, sizeof(*pi));
 
     /* Update the output volume setting */
-
-    if (stream_get_cap (s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-                        &pi->output_vol) == PJ_SUCCESS) {
-        pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
+    if (stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+		       &pi->output_vol) == PJ_SUCCESS)
+    {
+	pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
     }
-
+    
     return PJ_SUCCESS;
 }
 
 /* API: get capability */
-static pj_status_t stream_get_cap (pjmedia_aud_stream *s,
-                                   pjmedia_aud_dev_cap cap,
-                                   void *pval)
+static pj_status_t stream_get_cap(pjmedia_aud_stream *s,
+				  pjmedia_aud_dev_cap cap,
+				  void *pval)
 {
-
-    struct vas_stream *strm = (struct vas_stream*) s;
+    struct vas_stream *strm = (struct vas_stream*)s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
 
     switch (cap) {
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                * (pjmedia_aud_dev_route*) pval = strm->param.output_route;
-                status = PJ_SUCCESS;
-            }
-
-            break;
-
-            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
-            /*
-            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-
-                TInt max_gain = strm->engine->GetMaxGain();
-                TInt gain = strm->engine->GetGain();
-
-                if (max_gain > 0 && gain >= 0) {
-            	*(unsigned*)pval = gain * 100 / max_gain;
-            	status = PJ_SUCCESS;
-                } else {
-            	status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-            break;
-            */
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
-
-                TInt max_vol = strm->engine->GetMaxVolume();
-                TInt vol = strm->engine->GetVolume();
-
-                if (max_vol > 0 && vol >= 0) {
-                    * (unsigned*) pval = vol * 100 / max_vol;
-                    status = PJ_SUCCESS;
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-            }
-
-            break;
-
-        default:
-            break;
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    *(pjmedia_aud_dev_route*)pval = strm->param.output_route;
+	    status = PJ_SUCCESS;
+	}
+	break;
+    
+    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
+    /*
+    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_gain = strm->engine->GetMaxGain();
+	    TInt gain = strm->engine->GetGain();
+	    
+	    if (max_gain > 0 && gain >= 0) {
+		*(unsigned*)pval = gain * 100 / max_gain; 
+		status = PJ_SUCCESS;
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    */
+
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_vol = strm->engine->GetMaxVolume();
+	    TInt vol = strm->engine->GetVolume();
+	    
+	    if (max_vol > 0 && vol >= 0) {
+		*(unsigned*)pval = vol * 100 / max_vol; 
+		status = PJ_SUCCESS;
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	}
+	break;
+    default:
+	break;
     }
-
+    
     return status;
 }
 
 /* API: set capability */
-static pj_status_t stream_set_cap (pjmedia_aud_stream *s,
-                                   pjmedia_aud_dev_cap cap,
-                                   const void *pval)
+static pj_status_t stream_set_cap(pjmedia_aud_stream *s,
+				  pjmedia_aud_dev_cap cap,
+				  const void *pval)
 {
-
-    struct vas_stream *strm = (struct vas_stream*) s;
+    struct vas_stream *strm = (struct vas_stream*)s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
 
     switch (cap) {
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                pjmedia_aud_dev_route r = * (const pjmedia_aud_dev_route*) pval;
-                TInt err;
-
-                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
-
-                switch (r) {
-
-                    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
-
-                    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
-                        err = strm->engine->ActivateSpeaker (EFalse);
-                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
-                        break;
-
-                    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
-                        err = strm->engine->ActivateSpeaker (ETrue);
-                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
-                        break;
-
-                    default:
-                        status = PJ_EINVAL;
-                        break;
-                }
-
-                if (status == PJ_SUCCESS)
-                    strm->param.output_route = r;
-            }
-
-            break;
-
-            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
-            /*
-            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-
-                TInt max_gain = strm->engine->GetMaxGain();
-                if (max_gain > 0) {
-            	TInt gain, err;
-
-            	gain = *(unsigned*)pval * max_gain / 100;
-            	err = strm->engine->SetGain(gain);
-            	status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-                } else {
-            	status = PJMEDIA_EAUD_NOTREADY;
-                }
-                if (status == PJ_SUCCESS)
-            	strm->param.input_vol = *(unsigned*)pval;
-            }
-            break;
-            */
-
-        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-
-            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
-
-                TInt max_vol = strm->engine->GetMaxVolume();
-
-                if (max_vol > 0) {
-                    TInt vol, err;
-
-                    vol = * (unsigned*) pval * max_vol / 100;
-                    err = strm->engine->SetVolume (vol);
-                    status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
-                } else {
-                    status = PJMEDIA_EAUD_NOTREADY;
-                }
-
-                if (status == PJ_SUCCESS)
-                    strm->param.output_vol = * (unsigned*) pval;
-            }
-
-            break;
-
-        default:
-            break;
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    pjmedia_aud_dev_route r = *(const pjmedia_aud_dev_route*)pval;
+	    TInt err;
+
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    switch (r) {
+	    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
+	    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
+		err = strm->engine->ActivateSpeaker(EFalse);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+		break;
+	    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
+		err = strm->engine->ActivateSpeaker(ETrue);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+		break;
+	    default:
+		status = PJ_EINVAL;
+		break;
+	    }
+	    if (status == PJ_SUCCESS)
+		strm->param.output_route = r; 
+	}
+	break;
+
+    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
+    /*
+    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_gain = strm->engine->GetMaxGain();
+	    if (max_gain > 0) {
+		TInt gain, err;
+		
+		gain = *(unsigned*)pval * max_gain / 100;
+		err = strm->engine->SetGain(gain);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	    if (status == PJ_SUCCESS)
+		strm->param.input_vol = *(unsigned*)pval;
+	}
+	break;
+    */
+
+    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+	    
+	    TInt max_vol = strm->engine->GetMaxVolume();
+	    if (max_vol > 0) {
+		TInt vol, err;
+		
+		vol = *(unsigned*)pval * max_vol / 100;
+		err = strm->engine->SetVolume(vol);
+		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+	    } else {
+		status = PJMEDIA_EAUD_NOTREADY;
+	    }
+	    if (status == PJ_SUCCESS)
+		strm->param.output_vol = *(unsigned*)pval;
+	}
+	break;
+    default:
+	break;
     }
-
+    
     return status;
 }
 
 /* API: Start stream. */
-static pj_status_t stream_start (pjmedia_aud_stream *strm)
+static pj_status_t stream_start(pjmedia_aud_stream *strm)
 {
+    struct vas_stream *stream = (struct vas_stream*)strm;
 
-    struct vas_stream *stream = (struct vas_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
     if (stream->engine) {
-        TInt err = stream->engine->Start();
-
-        if (err != KErrNone)
-            return PJ_RETURN_OS_ERROR (err);
-    }
-
-    return PJ_SUCCESS;
+	enum { VAS_WAIT_START = 2000 }; /* in msecs */
+	TTime start, now;
+	TInt err = stream->engine->Start();
+	
+    	if (err != KErrNone)
+    	    return PJ_RETURN_OS_ERROR(err);
+
+    	/* Perform synchronous start, timeout after VAS_WAIT_START ms */
+	start.UniversalTime();
+	do {
+    	    pj_symbianos_poll(-1, 100);
+    	    now.UniversalTime();
+    	} while (!stream->engine->IsStarted() &&
+		 (now.MicroSecondsFrom(start) < VAS_WAIT_START * 1000));
+	
+	if (stream->engine->IsStarted())
+	    return PJ_SUCCESS;
+	else
+	    return PJ_ETIMEDOUT;
+    }    
+
+    return PJ_EINVALIDOP;
 }
 
 /* API: Stop stream. */
-static pj_status_t stream_stop (pjmedia_aud_stream *strm)
+static pj_status_t stream_stop(pjmedia_aud_stream *strm)
 {
+    struct vas_stream *stream = (struct vas_stream*)strm;
 
-    struct vas_stream *stream = (struct vas_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
     if (stream->engine) {
-        stream->engine->Stop();
+    	stream->engine->Stop();
     }
 
     return PJ_SUCCESS;
@@ -2056,31 +1936,28 @@ static pj_status_t stream_stop (pjmedia_aud_stream *strm)
 
 
 /* API: Destroy stream. */
-static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
+static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
 {
+    struct vas_stream *stream = (struct vas_stream*)strm;
 
-    struct vas_stream *stream = (struct vas_stream*) strm;
-
-    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
 
-    stream_stop (strm);
+    stream_stop(strm);
 
     delete stream->engine;
     stream->engine = NULL;
 
     if (stream->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-        TBitStream *g729_bitstream = (TBitStream*) stream->strm_data;
-        stream->strm_data = NULL;
-        delete g729_bitstream;
+	TBitStream *g729_bitstream = (TBitStream*)stream->strm_data;
+	stream->strm_data = NULL;
+	delete g729_bitstream;
     }
 
     pj_pool_t *pool;
-
     pool = stream->pool;
-
     if (pool) {
-        stream->pool = NULL;
-        pj_pool_release (pool);
+    	stream->pool = NULL;
+    	pj_pool_release(pool);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/wmme_dev.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/wmme_dev.c
index f7a3436b25..66924d8f23 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/wmme_dev.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/wmme_dev.c
@@ -1,4 +1,4 @@
-/* $Id: wmme_dev.c 2841 2009-07-18 09:21:09Z bennylp $ */
+/* $Id: wmme_dev.c 2941 2009-10-13 11:19:57Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -283,7 +283,15 @@ static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
 
     if (devCount==0) {
 	PJ_LOG(4,(THIS_FILE, "WMME found no sound devices"));
+	/* Enabling this will cause pjsua-lib initialization to fail when there
+	 * is no sound device installed in the system, even when pjsua has been
+	 * run with --null-audio. Moreover, it might be better to think that
+	 * the WMME backend initialization is successfull, regardless there is
+	 * no audio device installed, as later application can check it using 
+	 * get_dev_count().
 	return PJMEDIA_EAUD_NODEV;
+	 */
+	return PJ_SUCCESS;
     }
 
     wf->dev_info = (struct wmme_dev_info*)
@@ -450,7 +458,7 @@ static pj_status_t init_waveformatex(LPWAVEFORMATEX wfx,
 				     const pjmedia_aud_param *prm)
 {
 
-    pj_bzero(wfx, sizeof(PCMWAVEFORMAT)); 
+    pj_bzero(wfx, sizeof(WAVEFORMATEX));
     if (prm->ext_fmt.id == PJMEDIA_FORMAT_L16) {
 	enum { BYTES_PER_SAMPLE = 2 };
 	wfx->wFormatTag = WAVE_FORMAT_PCM; 
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-codec/passthrough.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-codec/passthrough.c
index 42042acca4..884c3e954b 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-codec/passthrough.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-codec/passthrough.c
@@ -1,4 +1,4 @@
-/* $Id: passthrough.c 2834 2009-07-15 17:55:16Z nanang $ */
+/* $Id: passthrough.c 2997 2009-11-09 08:49:32Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -719,6 +719,8 @@ static pj_status_t codec_open( pjmedia_codec *codec,
 #endif
 
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC
+    /* Init iLBC settings */
+    if (desc->pt == PJMEDIA_RTP_PT_ILBC)
     {
 	enum { DEFAULT_MODE = 30 };
 	static pj_str_t STR_MODE = {"mode", 4};
@@ -915,7 +917,9 @@ static pj_status_t codec_decode( pjmedia_codec *codec,
 				 struct pjmedia_frame *output)
 {
     codec_private_t *codec_data = (codec_private_t*) codec->codec_data;
+#if PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR
     struct codec_desc *desc = &codec_desc[codec_data->codec_idx];
+#endif
     pjmedia_frame_ext *output_ = (pjmedia_frame_ext*) output;
 
     pj_assert(input);
@@ -960,7 +964,6 @@ static pj_status_t codec_recover( pjmedia_codec *codec,
 				  struct pjmedia_frame *output)
 {
     codec_private_t *codec_data = (codec_private_t*) codec->codec_data;
-    struct codec_desc *desc = &codec_desc[codec_data->codec_idx];
     pjmedia_frame_ext *output_ = (pjmedia_frame_ext*) output;
 
     PJ_UNUSED_ARG(output_buf_len);
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/jbuf.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/jbuf.c
index fac084e9b9..3cdcc6acbd 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/jbuf.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/jbuf.c
@@ -1,4 +1,4 @@
-/* $Id: jbuf.c 2844 2009-07-29 12:14:21Z bennylp $ */
+/* $Id: jbuf.c 3015 2009-11-11 04:26:00Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -735,7 +735,7 @@ PJ_DEF(void) pjmedia_jbuf_get_frame2(pjmedia_jbuf *jb,
 
     } else {
 
-	pjmedia_jb_frame_type ftype;
+	pjmedia_jb_frame_type ftype = PJMEDIA_JB_MISSING_FRAME;
 	pj_bool_t res;
 
 	/* Retrieve a frame from frame list */
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/rtp.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/rtp.c
index e383e964ee..fbebb155f6 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/rtp.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/rtp.c
@@ -1,4 +1,4 @@
-/* $Id: rtp.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: rtp.c 2904 2009-08-20 13:06:17Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -170,7 +170,7 @@ PJ_DEF(pj_status_t) pjmedia_rtp_decode_rtp( pjmedia_rtp_session *ses,
     if ((*hdr)->x) {
 	pjmedia_rtp_ext_hdr *ext = (pjmedia_rtp_ext_hdr*) 
 				    (((pj_uint8_t*)pkt) + offset);
-	offset += (pj_ntohs(ext->length) * sizeof(pj_uint32_t));
+	offset += ((pj_ntohs(ext->length)+1) * sizeof(pj_uint32_t));
     }
 
     /* Check that offset is less than packet size */
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp.c
index 77bf5da68b..2a44d2f62e 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp.c
@@ -1,4 +1,4 @@
-/* $Id: sdp.c 2847 2009-07-30 19:35:24Z bennylp $ */
+/* $Id: sdp.c 2995 2009-11-09 05:18:12Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -174,6 +174,7 @@ PJ_DEF(pjmedia_sdp_attr*) pjmedia_sdp_attr_find2(unsigned count,
 }
 
 
+
 PJ_DEF(pj_status_t) pjmedia_sdp_attr_add(unsigned *count,
 					 pjmedia_sdp_attr *attr_array[],
 					 pjmedia_sdp_attr *attr)
@@ -680,6 +681,12 @@ PJ_DEF(pj_status_t) pjmedia_sdp_media_add_attr( pjmedia_sdp_media *m,
     return pjmedia_sdp_attr_add(&m->attr_count, m->attr, attr);
 }
 
+PJ_DEF(pj_status_t) pjmedia_sdp_session_add_attr(pjmedia_sdp_session *s,
+						 pjmedia_sdp_attr *attr)
+{
+    return pjmedia_sdp_attr_add(&s->attr_count, s->attr, attr);
+}
+
 PJ_DEF(unsigned) pjmedia_sdp_media_remove_all_attr(pjmedia_sdp_media *m,
 						   const char *name)
 {
@@ -978,13 +985,22 @@ static void parse_media(pj_scanner *scanner, pjmedia_sdp_media *med,
     /* format list */
     med->desc.fmt_count = 0;
     while (*scanner->curptr == ' ') {
+	pj_str_t fmt;
+
 	pj_scan_get_char(scanner);
 
 	/* Check again for the end of the line */
 	if ((*scanner->curptr == '\r') || (*scanner->curptr == '\n'))
 		break;
 
-	pj_scan_get(scanner, &cs_token, &med->desc.fmt[med->desc.fmt_count++]);
+	pj_scan_get(scanner, &cs_token, &fmt);
+	if (med->desc.fmt_count < PJMEDIA_MAX_SDP_FMT)
+	    med->desc.fmt[med->desc.fmt_count++] = fmt;
+	else
+	    PJ_PERROR(2,(THIS_FILE, PJ_ETOOMANY, 
+		         "Error adding SDP media format %.*s, "
+			 "format is ignored",
+			 (int)fmt.slen, fmt.ptr));
     }
 
     /* We've got what we're looking for, skip anything until newline */
@@ -1019,7 +1035,9 @@ static pjmedia_sdp_attr *parse_attr( pj_pool_t *pool, pj_scanner *scanner,
     /* get attr name. */
     pj_scan_get(scanner, &cs_token, &attr->name);
 
-    if (*scanner->curptr != '\r' && *scanner->curptr != '\n') {
+    if (*scanner->curptr && *scanner->curptr != '\r' && 
+	*scanner->curptr != '\n') 
+    {
 	/* skip ':' if present. */
 	if (*scanner->curptr == ':')
 	    pj_scan_get_char(scanner);
@@ -1080,9 +1098,9 @@ PJ_DEF(pj_status_t) pjmedia_sdp_parse( pj_pool_t *pool,
 		    attr = parse_attr(pool, &scanner, &ctx);
 		    if (attr) {
 			if (media) {
-			    media->attr[media->attr_count++] = attr;
+			    pjmedia_sdp_media_add_attr(media, attr);
 			} else {
-			    session->attr[session->attr_count++] = attr;
+			    pjmedia_sdp_session_add_attr(session, attr);
 			}
 		    }
 		    break;
@@ -1107,7 +1125,11 @@ PJ_DEF(pj_status_t) pjmedia_sdp_parse( pj_pool_t *pool,
 		case 'm':
 		    media = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_media);
 		    parse_media(&scanner, media, &ctx);
-		    session->media[ session->media_count++ ] = media;
+		    if (session->media_count < PJMEDIA_MAX_SDP_MEDIA)
+			session->media[ session->media_count++ ] = media;
+		    else
+			PJ_PERROR(2,(THIS_FILE, PJ_ETOOMANY,
+				     "Error adding media, media is ignored"));
 		    break;
 		case 'v':
 		    parse_version(&scanner, &ctx);
@@ -1350,11 +1372,14 @@ PJ_DEF(pj_status_t) pjmedia_sdp_media_deactivate(pj_pool_t *pool,
     pjmedia_sdp_attr *attr;
     static const pj_str_t ID_INACTIVE = { "inactive", 8 };
 
+    if (m->attr_count >= PJMEDIA_MAX_SDP_ATTR)
+	return PJ_ETOOMANY;
+
     attr = pjmedia_sdp_attr_create(pool, ID_INACTIVE.ptr, NULL);
     if (NULL == attr)
 	return PJ_ENOMEM;
 
-    m->attr[m->attr_count++] = attr;
+    pjmedia_sdp_media_add_attr(m, attr);
     m->desc.port = 0;
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_neg.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_neg.c
index 881b65342e..9e283027dd 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_neg.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_neg.c
@@ -1,4 +1,4 @@
-/* $Id: sdp_neg.c 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: sdp_neg.c 2926 2009-10-06 11:29:14Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -1006,6 +1006,15 @@ static pj_status_t match_offer(pj_pool_t *pool,
     const pjmedia_sdp_media *master, *slave;
     pj_str_t pt_amr_need_adapt = {NULL, 0};
 
+    /* If offer has zero port, just clone the offer and update direction */
+    if (offer->desc.port == 0) {
+	answer = pjmedia_sdp_media_clone(pool, offer);
+	remove_all_media_directions(answer);
+	update_media_direction(pool, offer, answer);
+	*p_answer = answer;
+	return PJ_SUCCESS;
+    }
+
     /* Set master/slave negotiator based on prefer_remote_codec_order. */
     if (prefer_remote_codec_order) {
 	master = offer;
@@ -1218,10 +1227,6 @@ static pj_status_t match_offer(pj_pool_t *pool,
     }
     answer->desc.fmt_count = pt_answer_count;
 
-    /* If offer has zero port, set our answer with zero port too */
-    if (offer->desc.port == 0)
-	answer->desc.port = 0;
-
     /* Update media direction. */
     update_media_direction(pool, offer, answer);
 
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp
index cfca6d28cc..dd5b8fd09c 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sdp_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/transport_ice.c b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/transport_ice.c
index b3f947bdcb..2bf078273a 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/transport_ice.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/transport_ice.c
@@ -1,4 +1,4 @@
-/* $Id: transport_ice.c 2896 2009-08-17 18:55:13Z bennylp $ */
+/* $Id: transport_ice.c 2957 2009-10-20 14:44:00Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -1147,7 +1147,9 @@ static pj_status_t transport_encode_sdp(pjmedia_transport *tp,
     pj_status_t status;
 
     /* Validate media transport */
-    /* For now, this transport only support RTP/AVP transport */
+    /* This transport only support RTP/AVP transport, unless if
+     * transport checking is disabled
+     */
     if ((tp_ice->media_option & PJMEDIA_TPMED_NO_TRANSPORT_CHECKING) == 0) {
 	pjmedia_sdp_media *loc_m, *rem_m;
 
@@ -1410,6 +1412,17 @@ static pj_status_t transport_media_start(pjmedia_transport *tp,
 	    }
 	}
 
+	/* Ticket #977: Update role if turns out we're supposed to be the 
+	 * Controlling agent (e.g. when talking to ice-lite peer). 
+	 */
+	if (tp_ice->rem_offer_state.local_role==PJ_ICE_SESS_ROLE_CONTROLLING &&
+	    pj_ice_strans_has_sess(tp_ice->ice_st)) 
+	{
+	    pj_ice_strans_change_role(tp_ice->ice_st, 
+				      PJ_ICE_SESS_ROLE_CONTROLLING);
+	}
+
+
 	/* start ICE */
     }
 
@@ -1473,6 +1486,38 @@ static pj_status_t transport_get_info(pjmedia_transport *tp,
 	info->src_rtcp_name = tp_ice->rtcp_src_addr;
     }
 
+    /* Fill up transport specific info */
+    if (info->specific_info_cnt < PJ_ARRAY_SIZE(info->spc_info)) {
+	pjmedia_transport_specific_info *tsi;
+	pjmedia_ice_transport_info *ii;
+	unsigned i;
+
+	pj_assert(sizeof(*ii) <= sizeof(tsi->buffer));
+	tsi = &info->spc_info[info->specific_info_cnt++];
+	tsi->type = PJMEDIA_TRANSPORT_TYPE_ICE;
+	tsi->cbsize = sizeof(*ii);
+
+	ii = (pjmedia_ice_transport_info*) tsi->buffer;
+	pj_bzero(ii, sizeof(*ii));
+
+	if (pj_ice_strans_has_sess(tp_ice->ice_st))
+	    ii->role = pj_ice_strans_get_role(tp_ice->ice_st);
+	else
+	    ii->role = PJ_ICE_SESS_ROLE_UNKNOWN;
+	ii->sess_state = pj_ice_strans_get_state(tp_ice->ice_st);
+	ii->comp_cnt = pj_ice_strans_get_running_comp_cnt(tp_ice->ice_st);
+	
+	for (i=1; i<=ii->comp_cnt && i<=PJ_ARRAY_SIZE(ii->comp); ++i) {
+	    const pj_ice_sess_check *chk;
+
+	    chk = pj_ice_strans_get_valid_pair(tp_ice->ice_st, i);
+	    if (chk) {
+		ii->comp[i-1].lcand_type = chk->lcand->type;
+		ii->comp[i-1].rcand_type = chk->rcand->type;
+	    }
+	}
+    }
+
     return PJ_SUCCESS;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/test/mips_test.c b/sflphone-common/libs/pjproject/pjmedia/src/test/mips_test.c
index 4c734a2071..d5cdcd3112 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/test/mips_test.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/test/mips_test.c
@@ -1,4 +1,4 @@
-/* $Id: mips_test.c 2882 2009-08-15 10:05:36Z bennylp $ */
+/* $Id: mips_test.c 2978 2009-10-30 01:18:28Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -2407,7 +2407,7 @@ int mips_test(void)
 	    struct test_entry *e = &entries[i];
 	    pj_timestamp times[RETRY], tzero;
 	    int usec;
-	    float cpu_pct, mips;
+	    float cpu_pct, mips_val;
 	    unsigned j, clock_rate = clock_rates[c];
 
 	    if ((e->valid_clock_rate & k[c]) == 0)
@@ -2438,10 +2438,10 @@ int mips_test(void)
 
 	    usec = usec / (DURATION / 1000);
 
-	    mips = (float)(CPU_IPS * usec / 1000000.0 / 1000000);
+	    mips_val = (float)(CPU_IPS * usec / 1000000.0 / 1000000);
 	    cpu_pct = (float)(100.0 * usec / 1000000);
 	    PJ_LOG(3,(THIS_FILE, "%2dKHz %-38s % 8d %8.3f %7.2f", 
-		      clock_rate/1000, e->title, usec, cpu_pct, mips));
+		      clock_rate/1000, e->title, usec, cpu_pct, mips_val));
 
 	}
     }
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/test/sdp_neg_test.c b/sflphone-common/libs/pjproject/pjmedia/src/test/sdp_neg_test.c
index 25b9010adb..437bd41301 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/test/sdp_neg_test.c
+++ b/sflphone-common/libs/pjproject/pjmedia/src/test/sdp_neg_test.c
@@ -1,4 +1,4 @@
-/* $Id: sdp_neg_test.c 2675 2009-05-06 14:34:13Z bennylp $ */
+/* $Id: sdp_neg_test.c 3014 2009-11-11 04:18:58Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -129,7 +129,7 @@ static struct test
 	    "m=audio 49170 RTP/AVP 0\r\n"
 	    "a=rtpmap:0 PCMU/8000\r\n"
 	    "m=video 0 RTP/AVP 31\r\n"
-	    "a=rtpmap:31 H261/90000\r\n"	/* <-- this is not necessary */
+	    //"a=rtpmap:31 H261/90000\r\n"	/* <-- this is not necessary */
 	    "m=video 53000 RTP/AVP 32\r\n"
 	    "a=rtpmap:32 MPV/90000\r\n"
 	    "m=audio 0 RTP/AVP 110\r\n"
diff --git a/sflphone-common/libs/pjproject/pjnath/build/Makefile b/sflphone-common/libs/pjproject/pjnath/build/Makefile
index 13bd9f6586..3012659f48 100644
--- a/sflphone-common/libs/pjproject/pjnath/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjnath/build/Makefile
@@ -7,9 +7,9 @@ include $(PJDIR)/build/common.mak
 
 RULES_MAK := $(PJDIR)/build/rules.mak
 
-PJLIB_LIB:=../../pjlib/lib/libpj-sfl-$(TARGET_NAME)$(LIBEXT)
-PJLIB_UTIL_LIB:=../../pjlib-util/lib/libpjlib-util-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJNATH_LIB:=../lib/libpjnath-sfl-$(TARGET_NAME)$(LIBEXT)
+PJLIB_LIB:=../../pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT)
+PJLIB_UTIL_LIB:=../../pjlib-util/lib/libpjlib-util-$(TARGET_NAME)$(LIBEXT)
+export PJNATH_LIB:=../lib/libpjnath-$(TARGET_NAME)$(LIBEXT)
 
 ###############################################################################
 # Gather all flags.
diff --git a/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h b/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h
index 91ab258825..5a5ebac783 100644
--- a/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h
+++ b/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h
@@ -1,5 +1,5 @@
-/* $Id: config.h 2724 2009-05-29 13:04:03Z bennylp $ */
-/*
+/* $Id: config.h 2966 2009-10-25 09:02:07Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #ifndef __PJNATH_CONFIG_H__
 #define __PJNATH_CONFIG_H__
@@ -66,9 +66,9 @@
 
 /**
  * The default initial STUN round-trip time estimation (the RTO value
- * in RFC 3489-bis), in miliseconds.
- * This value is used to control the STUN request
- * retransmit time. The initial value of retransmission interval
+ * in RFC 3489-bis), in miliseconds. 
+ * This value is used to control the STUN request 
+ * retransmit time. The initial value of retransmission interval 
  * would be set to this value, and will be doubled after each
  * retransmission.
  */
@@ -79,7 +79,7 @@
 
 /**
  * The STUN transaction timeout value, in miliseconds.
- * After the last retransmission is sent and if no response is received
+ * After the last retransmission is sent and if no response is received 
  * after this time, the STUN transaction will be considered to have failed.
  *
  * The default value is 16x RTO (as per RFC 3489-bis).
@@ -202,8 +202,8 @@
 
 
 /**
- * Number of seconds to refresh the permission/channel binding before the
- * permission/channel binding expires. This value should be greater than
+ * Number of seconds to refresh the permission/channel binding before the 
+ * permission/channel binding expires. This value should be greater than 
  * PJ_TURN_PERM_TIMEOUT setting.
  */
 #ifndef PJ_TURN_REFRESH_SEC_BEFORE
@@ -212,7 +212,7 @@
 
 
 /**
- * The TURN session timer heart beat interval. When this timer occurs, the
+ * The TURN session timer heart beat interval. When this timer occurs, the 
  * TURN session will scan all the permissions/channel bindings to see which
  * need to be refreshed.
  */
@@ -250,14 +250,14 @@
  * the maximum number of components (PJ_ICE_MAX_COMP) value.
  */
 #ifndef PJ_ICE_COMP_BITS
-#   define PJ_ICE_COMP_BITS			    3
+#   define PJ_ICE_COMP_BITS			    1
 #endif
 
 
 /**
  * Maximum number of ICE components.
  */
-#define PJ_ICE_MAX_COMP		    (2<<PJ_ICE_COMP_BITS)
+#define PJ_ICE_MAX_COMP				    (2<<PJ_ICE_COMP_BITS)
 
 /**
  * Use the priority value according to the ice-draft.
@@ -282,10 +282,10 @@
 /**
  * The number of bits to represent ICE candidate's local preference. The
  * local preference is used to specify preference among candidates with
- * the same type, and ICE draft suggests 65535 as the default local
- * preference, which means we need 16 bits to represent the value. But
+ * the same type, and ICE draft suggests 65535 as the default local 
+ * preference, which means we need 16 bits to represent the value. But 
  * since we don't have the facility to specify local preference, we'll
- * just disable this feature and let the preference sorted by the
+ * just disable this feature and let the preference sorted by the 
  * type only.
  *
  * Default: 0
@@ -316,15 +316,15 @@
 
 
 /**
- * According to ICE Section 8.2. Updating States, if an In-Progress pair in
- * the check list is for the same component as a nominated pair, the agent
+ * According to ICE Section 8.2. Updating States, if an In-Progress pair in 
+ * the check list is for the same component as a nominated pair, the agent 
  * SHOULD cease retransmissions for its check if its pair priority is lower
  * than the lowest priority nominated pair for that component.
  *
  * If a higher priority check is In Progress, this rule would cause that
  * check to be performed even when it most likely will fail.
  *
- * The macro here controls if ICE session should cancel all In Progress
+ * The macro here controls if ICE session should cancel all In Progress 
  * checks for the same component regardless of its priority.
  *
  * Default: 1 (yes, cancel all)
diff --git a/sflphone-common/libs/pjproject/pjnath/include/pjnath/ice_strans.h b/sflphone-common/libs/pjproject/pjnath/include/pjnath/ice_strans.h
index 0182d63b10..c576f4551e 100644
--- a/sflphone-common/libs/pjproject/pjnath/include/pjnath/ice_strans.h
+++ b/sflphone-common/libs/pjproject/pjnath/include/pjnath/ice_strans.h
@@ -1,4 +1,4 @@
-/* $Id: ice_strans.h 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: ice_strans.h 3028 2009-12-08 13:11:25Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -270,6 +270,13 @@ typedef struct pj_ice_strans_cfg
      * TURN specific settings.
      */
     struct {
+	/**
+	 * Optional TURN socket settings. The default values will be
+	 * initialized by #pj_turn_sock_cfg_default(). This contains
+	 * settings such as QoS.
+	 */
+	pj_turn_sock_cfg     cfg;
+
 	/**
 	 * Specify the TURN server domain or hostname or IP address.
 	 * If DNS SRV resolution is required, application must fill
@@ -324,9 +331,82 @@ typedef struct pj_ice_strans_cfg
 
     } turn;
 
+    /**
+     * Component specific settings, which will override the settings in
+     * the STUN and TURN settings above. For example, setting the QoS
+     * parameters here allows the application to have different QoS
+     * traffic type for RTP and RTCP component.
+     */
+    struct {
+	/**
+	 * QoS traffic type to be set on this transport. When application
+	 * wants to apply QoS tagging to the transport, it's preferable to
+	 * set this field rather than \a qos_param fields since this is 
+	 * more portable.
+	 *
+	 * Default value is PJ_QOS_TYPE_BEST_EFFORT.
+	 */
+	pj_qos_type qos_type;
+
+	/**
+	 * Set the low level QoS parameters to the transport. This is a 
+	 * lower level operation than setting the \a qos_type field and
+	 * may not be supported on all platforms.
+	 *
+	 * By default all settings in this structure are disabled.
+	 */
+	pj_qos_params qos_params;
+
+    } comp[PJ_ICE_MAX_COMP];
+
 } pj_ice_strans_cfg;
 
 
+/**
+ * ICE stream transport's state.
+ */
+typedef enum pj_ice_strans_state
+{
+    /**
+     * ICE stream transport is not created.
+     */
+    PJ_ICE_STRANS_STATE_NULL,
+
+    /**
+     * ICE candidate gathering process is in progress.
+     */
+    PJ_ICE_STRANS_STATE_INIT,
+
+    /**
+     * ICE stream transport initialization/candidate gathering process is
+     * complete, ICE session may be created on this stream transport.
+     */
+    PJ_ICE_STRANS_STATE_READY,
+
+    /**
+     * New session has been created and the session is ready.
+     */
+    PJ_ICE_STRANS_STATE_SESS_READY,
+
+    /**
+     * ICE negotiation is in progress.
+     */
+    PJ_ICE_STRANS_STATE_NEGO,
+
+    /**
+     * ICE negotiation has completed successfully and media is ready
+     * to be used.
+     */
+    PJ_ICE_STRANS_STATE_RUNNING,
+
+    /**
+     * ICE negotiation has completed with failure.
+     */
+    PJ_ICE_STRANS_STATE_FAILED
+
+} pj_ice_strans_state;
+
+
 /** 
  * Initialize ICE transport configuration with default values.
  *
@@ -370,6 +450,26 @@ PJ_DECL(pj_status_t) pj_ice_strans_create(const char *name,
 					  const pj_ice_strans_cb *cb,
 					  pj_ice_strans **p_ice_st);
 
+/**
+ * Get ICE session state.
+ *
+ * @param ice_st	The ICE stream transport.
+ *
+ * @return		ICE session state.
+ */
+PJ_DECL(pj_ice_strans_state) pj_ice_strans_get_state(pj_ice_strans *ice_st);
+
+
+/**
+ * Get string representation of ICE state.
+ *
+ * @param state		ICE stream transport state.
+ *
+ * @return		String.
+ */
+PJ_DECL(const char*) pj_ice_strans_state_name(pj_ice_strans_state state);
+
+
 /**
  * Destroy the ICE stream transport. This will destroy the ICE session
  * inside the ICE stream transport, close all sockets and release all
@@ -521,6 +621,17 @@ PJ_DECL(pj_status_t) pj_ice_strans_get_ufrag_pwd(pj_ice_strans *ice_st,
 						 pj_str_t *rem_pwd);
 
 
+/**
+ * Get the number of local candidates for the specified component ID.
+ *
+ * @param ice_st	The ICE stream transport.
+ * @param comp_id	Component ID.
+ *
+ * @return		The number of candidates.
+ */
+PJ_DECL(unsigned) pj_ice_strans_get_cands_count(pj_ice_strans *ice_st,
+					        unsigned comp_id);
+
 /**
  * Enumerate the local candidates for the specified component.
  *
diff --git a/sflphone-common/libs/pjproject/pjnath/include/pjnath/stun_sock.h b/sflphone-common/libs/pjproject/pjnath/include/pjnath/stun_sock.h
index 0e7a2bce0f..a4fd2676c2 100644
--- a/sflphone-common/libs/pjproject/pjnath/include/pjnath/stun_sock.h
+++ b/sflphone-common/libs/pjproject/pjnath/include/pjnath/stun_sock.h
@@ -1,4 +1,4 @@
-/* $Id: stun_sock.h 2642 2009-04-22 17:20:24Z bennylp $ */
+/* $Id: stun_sock.h 2966 2009-10-25 09:02:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -28,6 +28,7 @@
 #include <pjlib-util/resolver.h>
 #include <pj/ioqueue.h>
 #include <pj/sock.h>
+#include <pj/sock_qos.h>
 
 
 PJ_BEGIN_DECL
@@ -247,6 +248,32 @@ typedef struct pj_stun_sock_cfg
      */
     int ka_interval;
 
+    /**
+     * QoS traffic type to be set on this transport. When application wants
+     * to apply QoS tagging to the transport, it's preferable to set this
+     * field rather than \a qos_param fields since this is more portable.
+     *
+     * Default value is PJ_QOS_TYPE_BEST_EFFORT.
+     */
+    pj_qos_type qos_type;
+
+    /**
+     * Set the low level QoS parameters to the transport. This is a lower
+     * level operation than setting the \a qos_type field and may not be
+     * supported on all platforms.
+     *
+     * By default all settings in this structure are disabled.
+     */
+    pj_qos_params qos_params;
+
+    /**
+     * Specify if STUN socket should ignore any errors when setting the QoS
+     * traffic type/parameters.
+     *
+     * Default: PJ_TRUE
+     */
+    pj_bool_t qos_ignore_error;
+
 } pj_stun_sock_cfg;
 
 
diff --git a/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_session.h b/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_session.h
index b083bf7277..7ea6ed2ecc 100644
--- a/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_session.h
+++ b/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_session.h
@@ -1,4 +1,4 @@
-/* $Id: turn_session.h 2642 2009-04-22 17:20:24Z bennylp $ */
+/* $Id: turn_session.h 3028 2009-12-08 13:11:25Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -455,11 +455,19 @@ PJ_DECL(pj_status_t) pj_turn_session_shutdown(pj_turn_session *sess);
  * be notified about the client destruction.
  *
  * @param sess		The TURN client session.
+ * @param last_err	Optional error code to be set to the session,
+ *			which would be returned back in the \a info
+ *			parameter of #pj_turn_session_get_info(). If
+ *			this argument value is PJ_SUCCESS, the error
+ *			code will not be set. If the session already
+ *			has an error code set, this function will not
+ *			overwrite that error code either.
  *
  * @return		PJ_SUCCESS if the operation has been successful,
  *			or the appropriate error code on failure.
  */
-PJ_DECL(pj_status_t) pj_turn_session_destroy(pj_turn_session *sess);
+PJ_DECL(pj_status_t) pj_turn_session_destroy(pj_turn_session *sess,
+					     pj_status_t last_err);
 
 
 /**
diff --git a/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_sock.h b/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_sock.h
index fdad56197b..3bbb26ce13 100644
--- a/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_sock.h
+++ b/sflphone-common/libs/pjproject/pjnath/include/pjnath/turn_sock.h
@@ -1,4 +1,4 @@
-/* $Id: turn_sock.h 2642 2009-04-22 17:20:24Z bennylp $ */
+/* $Id: turn_sock.h 2966 2009-10-25 09:02:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -25,6 +25,7 @@
  * @brief TURN relay using UDP client as transport protocol
  */
 #include <pjnath/turn_session.h>
+#include <pj/sock_qos.h>
 
 
 PJ_BEGIN_DECL
@@ -100,6 +101,48 @@ typedef struct pj_turn_sock_cb
 } pj_turn_sock_cb;
 
 
+/**
+ * This structure describes options that can be specified when creating
+ * the TURN socket. Application should call #pj_turn_sock_cfg_default()
+ * to initialize this structure with its default values before using it.
+ */
+typedef struct pj_turn_sock_cfg
+{
+    /**
+     * QoS traffic type to be set on this transport. When application wants
+     * to apply QoS tagging to the transport, it's preferable to set this
+     * field rather than \a qos_param fields since this is more portable.
+     *
+     * Default value is PJ_QOS_TYPE_BEST_EFFORT.
+     */
+    pj_qos_type qos_type;
+
+    /**
+     * Set the low level QoS parameters to the transport. This is a lower
+     * level operation than setting the \a qos_type field and may not be
+     * supported on all platforms.
+     *
+     * By default all settings in this structure are not set.
+     */
+    pj_qos_params qos_params;
+
+    /**
+     * Specify if STUN socket should ignore any errors when setting the QoS
+     * traffic type/parameters.
+     *
+     * Default: PJ_TRUE
+     */
+    pj_bool_t qos_ignore_error;
+
+} pj_turn_sock_cfg;
+
+
+/**
+ * Initialize pj_turn_sock_cfg structure with default values.
+ */
+PJ_DECL(void) pj_turn_sock_cfg_default(pj_turn_sock_cfg *cfg);
+
+
 /**
  * Create a TURN transport instance with the specified address family and
  * connection type. Once TURN transport instance is created, application
@@ -114,7 +157,9 @@ typedef struct pj_turn_sock_cb
  * @param conn_type	Connection type to the TURN server. Both TCP and
  *			UDP are supported.
  * @param cb		Callback to receive events from the TURN transport.
- * @param options	Option flags, currently this value must be zero.
+ * @param setting	Optional settings to be specified to the transport.
+ *			If this parameter is NULL, default values will be
+ *			used.
  * @param user_data	Arbitrary application data to be associated with
  *			this transport.
  * @param p_turn_sock	Pointer to receive the created instance of the
@@ -127,7 +172,7 @@ PJ_DECL(pj_status_t) pj_turn_sock_create(pj_stun_config *cfg,
 					 int af,
 					 pj_turn_tp_type conn_type,
 					 const pj_turn_sock_cb *cb,
-					 unsigned options,
+					 const pj_turn_sock_cfg *setting,
 					 void *user_data,
 					 pj_turn_sock **p_turn_sock);
 
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath-test/stun.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath-test/stun.c
index 587c5a2e46..bfda94244e 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath-test/stun.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath-test/stun.c
@@ -1,4 +1,4 @@
-/* $Id: stun.c 2775 2009-06-18 14:04:44Z nanang $ */
+/* $Id: stun.c 2938 2009-10-11 05:06:43Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -479,7 +479,9 @@ static struct test_vector
 	"",
 	"",
 	&create_msgint1
-    },
+    }
+    /* disabled: see http://trac.pjsip.org/repos/ticket/960
+    ,
     {
 	PJ_STUN_BINDING_RESPONSE,
 	"\xb7\xe7\xa7\x01\xbc\x34\xd6\x86\xfa\x87\xdf\xae",
@@ -503,6 +505,9 @@ static struct test_vector
 	"",
 	&create_msgint2
     }
+    */
+
+    /* disabled: see http://trac.pjsip.org/repos/ticket/960
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
     ,
     {
@@ -542,6 +547,7 @@ static struct test_vector
 	&create_msgint3
     }
 #endif
+    */
 };
 
 
@@ -591,6 +597,10 @@ static int fingerprint_test_vector()
     unsigned i;
     int rc = 0;
 
+    /* To avoid function not referenced warnings */
+    (void)create_msgint2;
+    (void)create_msgint3;
+
     PJ_LOG(3,(THIS_FILE, "  draft-denis-behave-rfc3489bis-test-vectors-02"));
 
     pool = pj_pool_create(mem, "fingerprint", 1024, 1024, NULL);
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_session.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_session.c
index 80c27358dc..3a7727d0c9 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_session.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_session.c
@@ -1,4 +1,4 @@
-/* $Id: ice_session.c 2827 2009-07-02 11:09:23Z nanang $ */
+/* $Id: ice_session.c 3022 2009-11-23 15:02:18Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -531,7 +531,9 @@ PJ_DEF(pj_status_t) pj_ice_sess_set_prefs(pj_ice_sess *ice,
     ice->prefs = (pj_uint8_t*) pj_pool_calloc(ice->pool, PJ_ARRAY_SIZE(prefs),
 					      sizeof(pj_uint8_t));
     for (i=0; i<4; ++i) {
+#if PJ_ICE_CAND_TYPE_PREF_BITS < 8
 	pj_assert(prefs[i] < (2 << PJ_ICE_CAND_TYPE_PREF_BITS));
+#endif
 	ice->prefs[i] = prefs[i];
     }
     return PJ_SUCCESS;
@@ -947,12 +949,24 @@ static void clist_set_state(pj_ice_sess *ice, pj_ice_sess_checklist *clist,
 }
 
 /* Sort checklist based on priority */
-static void sort_checklist(pj_ice_sess_checklist *clist)
+static void sort_checklist(pj_ice_sess *ice, pj_ice_sess_checklist *clist)
 {
     unsigned i;
+    pj_ice_sess_check **check_ptr[PJ_ICE_MAX_COMP*2];
+    unsigned check_ptr_cnt = 0;
+
+    for (i=0; i<ice->comp_cnt; ++i) {
+	if (ice->comp[i].valid_check) {
+	    check_ptr[check_ptr_cnt++] = &ice->comp[i].valid_check;
+	}
+	if (ice->comp[i].nominated_check) {
+	    check_ptr[check_ptr_cnt++] = &ice->comp[i].nominated_check;
+	}
+    }
 
     for (i=0; i<clist->count-1; ++i) {
 	unsigned j, highest = i;
+
 	for (j=i+1; j<clist->count; ++j) {
 	    if (CMP_CHECK_PRIO(&clist->checks[j], &clist->checks[highest]) > 0) {
 		highest = j;
@@ -961,12 +975,23 @@ static void sort_checklist(pj_ice_sess_checklist *clist)
 
 	if (highest != i) {
 	    pj_ice_sess_check tmp;
+	    unsigned k;
 
 	    pj_memcpy(&tmp, &clist->checks[i], sizeof(pj_ice_sess_check));
 	    pj_memcpy(&clist->checks[i], &clist->checks[highest], 
 		      sizeof(pj_ice_sess_check));
 	    pj_memcpy(&clist->checks[highest], &tmp, 
 		      sizeof(pj_ice_sess_check));
+
+	    /* Update valid and nominated check pointers, since we're moving
+	     * around checks
+	     */
+	    for (k=0; k<check_ptr_cnt; ++k) {
+		if (*check_ptr[k] == &clist->checks[highest])
+		    *check_ptr[k] = &clist->checks[i];
+		else if (*check_ptr[k] == &clist->checks[i])
+		    *check_ptr[k] = &clist->checks[highest];
+	    }
 	}
     }
 }
@@ -1099,6 +1124,7 @@ static void on_timer(pj_timer_heap_t *th, pj_timer_entry *te)
 {
     pj_ice_sess *ice = (pj_ice_sess*) te->user_data;
     enum timer_type type = (enum timer_type)te->id;
+    pj_bool_t has_mutex = PJ_TRUE;
 
     PJ_UNUSED_ARG(th);
 
@@ -1114,16 +1140,27 @@ static void on_timer(pj_timer_heap_t *th, pj_timer_entry *te)
 	on_ice_complete(ice, PJNATH_EICENOMTIMEOUT);
 	break;
     case TIMER_COMPLETION_CALLBACK:
-	/* Start keep-alive timer but don't send any packets yet.
-	 * Need to do it here just in case app destroy the session
-	 * in the callback.
-	 */
-	if (ice->ice_status == PJ_SUCCESS)
-	    ice_keep_alive(ice, PJ_FALSE);
+	{
+	    void (*on_ice_complete)(pj_ice_sess *ice, pj_status_t status);
+	    pj_status_t ice_status;
+
+	    /* Start keep-alive timer but don't send any packets yet.
+	     * Need to do it here just in case app destroy the session
+	     * in the callback.
+	     */
+	    if (ice->ice_status == PJ_SUCCESS)
+		ice_keep_alive(ice, PJ_FALSE);
 
-	/* Notify app about ICE completion*/
-	if (ice->cb.on_ice_complete)
-	    (*ice->cb.on_ice_complete)(ice, ice->ice_status);
+	    /* Release mutex in case app destroy us in the callback */
+	    ice_status = ice->ice_status;
+	    on_ice_complete = ice->cb.on_ice_complete;
+	    has_mutex = PJ_FALSE;
+	    pj_mutex_unlock(ice->mutex);
+
+	    /* Notify app about ICE completion*/
+	    if (on_ice_complete)
+		(*on_ice_complete)(ice, ice_status);
+	}
 	break;
     case TIMER_START_NOMINATED_CHECK:
 	start_nominated_check(ice);
@@ -1136,7 +1173,8 @@ static void on_timer(pj_timer_heap_t *th, pj_timer_entry *te)
 	break;
     }
 
-    pj_mutex_unlock(ice->mutex);
+    if (has_mutex)
+	pj_mutex_unlock(ice->mutex);
 }
 
 /* Send keep-alive */
@@ -1651,7 +1689,7 @@ PJ_DEF(pj_status_t) pj_ice_sess_create_check_list(
     }
 
     /* Sort checklist based on priority */
-    sort_checklist(clist);
+    sort_checklist(ice, clist);
 
     /* Prune the checklist */
     status = prune_checklist(ice, clist);
@@ -1904,7 +1942,7 @@ static void start_nominated_check(pj_ice_sess *ice)
     }
 
     /* And (re)start the periodic check */
-    if (!ice->clist.timer.id) {
+    if (ice->clist.timer.id) {
 	pj_timer_heap_cancel(ice->stun_cfg.timer_heap, &ice->clist.timer);
 	ice->clist.timer.id = PJ_FALSE;
     }
@@ -2313,12 +2351,14 @@ static void on_stun_request_complete(pj_stun_session *stun_sess,
 	ice->valid_list.checks[i].nominated = check->nominated;
     }
 
-    /* Sort valid_list */
-    sort_checklist(&ice->valid_list);
-
     /* Update valid check and nominated check for the component */
     update_comp_check(ice, new_check->lcand->comp_id, new_check);
 
+    /* Sort valid_list (must do so after update_comp_check(), otherwise
+     * new_check will point to something else (#953)
+     */
+    sort_checklist(ice, &ice->valid_list);
+
     /* 7.1.2.2.2.  Updating Pair States
      * 
      * The agent sets the state of the pair that generated the check to
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_strans.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_strans.c
index 1765656534..fa6c067b9a 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_strans.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/ice_strans.c
@@ -1,4 +1,4 @@
-/* $Id: ice_strans.c 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: ice_strans.c 3028 2009-12-08 13:11:25Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -173,6 +173,7 @@ struct pj_ice_strans
     pj_ice_strans_cb	     cb;	/**< Application callback.	*/
     pj_lock_t		    *init_lock; /**< Initialization mutex.	*/
 
+    pj_ice_strans_state	     state;	/**< Session state.		*/
     pj_ice_sess		    *ice;	/**< ICE session.		*/
     pj_time_val		     start_time;/**< Time when ICE was started	*/
 
@@ -210,6 +211,7 @@ PJ_DEF(void) pj_ice_strans_cfg_default(pj_ice_strans_cfg *cfg)
     pj_stun_config_init(&cfg->stun_cfg, NULL, 0, NULL, NULL);
     pj_stun_sock_cfg_default(&cfg->stun.cfg);
     pj_turn_alloc_param_default(&cfg->turn.alloc_param);
+    pj_turn_sock_cfg_default(&cfg->turn.cfg);
 
     pj_ice_sess_options_default(&cfg->opt);
 
@@ -272,6 +274,17 @@ static pj_status_t create_comp(pj_ice_strans *ice_st, unsigned comp_id)
 	stun_sock_cb.on_status = &stun_on_status;
 	stun_sock_cb.on_data_sent = &stun_on_data_sent;
 	
+	/* Override component specific QoS settings, if any */
+	if (ice_st->cfg.comp[comp_id-1].qos_type) {
+	    ice_st->cfg.stun.cfg.qos_type = 
+		ice_st->cfg.comp[comp_id-1].qos_type;
+	}
+	if (ice_st->cfg.comp[comp_id-1].qos_params.flags) {
+	    pj_memcpy(&ice_st->cfg.stun.cfg.qos_params,
+		      &ice_st->cfg.comp[comp_id-1].qos_params,
+		      sizeof(ice_st->cfg.stun.cfg.qos_params));
+	}
+
 	/* Create the STUN transport */
 	status = pj_stun_sock_create(&ice_st->cfg.stun_cfg, NULL,
 				     ice_st->cfg.af, &stun_sock_cb,
@@ -390,10 +403,22 @@ static pj_status_t create_comp(pj_ice_strans *ice_st, unsigned comp_id)
 	turn_sock_cb.on_rx_data = &turn_on_rx_data;
 	turn_sock_cb.on_state = &turn_on_state;
 
+	/* Override with component specific QoS settings, if any */
+	if (ice_st->cfg.comp[comp_id-1].qos_type) {
+	    ice_st->cfg.turn.cfg.qos_type = 
+		ice_st->cfg.comp[comp_id-1].qos_type;
+	}
+	if (ice_st->cfg.comp[comp_id-1].qos_params.flags) {
+	    pj_memcpy(&ice_st->cfg.turn.cfg.qos_params,
+		      &ice_st->cfg.comp[comp_id-1].qos_params,
+		      sizeof(ice_st->cfg.turn.cfg.qos_params));
+	}
+
+	/* Create the TURN transport */
 	status = pj_turn_sock_create(&ice_st->cfg.stun_cfg, ice_st->cfg.af,
 				     ice_st->cfg.turn.conn_type,
-				     &turn_sock_cb, 0, comp, 
-				     &comp->turn_sock);
+				     &turn_sock_cb, &ice_st->cfg.turn.cfg, 
+				     comp, &comp->turn_sock);
 	if (status != PJ_SUCCESS) {
 	    return status;
 	}
@@ -452,7 +477,8 @@ PJ_DEF(pj_status_t) pj_ice_strans_create( const char *name,
     if (status != PJ_SUCCESS)
 	return status;
 
-    PJ_ASSERT_RETURN(comp_cnt && cb && p_ice_st, PJ_EINVAL);
+    PJ_ASSERT_RETURN(comp_cnt && cb && p_ice_st &&
+		     comp_cnt <= PJ_ICE_MAX_COMP , PJ_EINVAL);
 
     if (name == NULL)
 	name = "ice%p";
@@ -488,6 +514,9 @@ PJ_DEF(pj_status_t) pj_ice_strans_create( const char *name,
     ice_st->comp = (pj_ice_strans_comp**) 
 		   pj_pool_calloc(pool, comp_cnt, sizeof(pj_ice_strans_comp*));
 
+    /* Move state to candidate gathering */
+    ice_st->state = PJ_ICE_STRANS_STATE_INIT;
+
     /* Acquire initialization mutex to prevent callback to be 
      * called before we finish initialization.
      */
@@ -561,6 +590,29 @@ static void destroy_ice_st(pj_ice_strans *ice_st)
     pj_pool_release(ice_st->pool);
 }
 
+/* Get ICE session state. */
+PJ_DEF(pj_ice_strans_state) pj_ice_strans_get_state(pj_ice_strans *ice_st)
+{
+    return ice_st->state;
+}
+
+/* State string */
+PJ_DEF(const char*) pj_ice_strans_state_name(pj_ice_strans_state state)
+{
+    const char *names[] = {
+	"Null",
+	"Candidate Gathering",
+	"Candidate Gathering Complete",
+	"Session Initialized",
+	"Negotiation In Progress",
+	"Negotiation Success",
+	"Negotiation Failed"
+    };
+
+    PJ_ASSERT_RETURN(state <= PJ_ICE_STRANS_STATE_FAILED, "???");
+    return names[state];
+}
+
 /* Notification about failure */
 static void sess_fail(pj_ice_strans *ice_st, pj_ice_strans_op op,
 		      const char *title, pj_status_t status)
@@ -603,6 +655,7 @@ static void sess_init_update(pj_ice_strans *ice_st)
 
     /* All candidates have been gathered */
     ice_st->cb_called = PJ_TRUE;
+    ice_st->state = PJ_ICE_STRANS_STATE_READY;
     if (ice_st->cb.on_ice_complete)
 	(*ice_st->cb.on_ice_complete)(ice_st, PJ_ICE_STRANS_OP_INIT, 
 				      PJ_SUCCESS);
@@ -782,6 +835,9 @@ PJ_DEF(pj_status_t) pj_ice_strans_init_ice(pj_ice_strans *ice_st,
 	}
     }
 
+    /* ICE session is ready for negotiation */
+    ice_st->state = PJ_ICE_STRANS_STATE_SESS_READY;
+
     return PJ_SUCCESS;
 
 on_error:
@@ -855,6 +911,27 @@ PJ_DEF(pj_status_t) pj_ice_strans_get_ufrag_pwd( pj_ice_strans *ice_st,
     return PJ_SUCCESS;
 }
 
+/*
+ * Get number of candidates
+ */
+PJ_DEF(unsigned) pj_ice_strans_get_cands_count(pj_ice_strans *ice_st,
+					       unsigned comp_id)
+{
+    unsigned i, cnt;
+
+    PJ_ASSERT_RETURN(ice_st && ice_st->ice && comp_id && 
+		     comp_id <= ice_st->comp_cnt, 0);
+
+    cnt = 0;
+    for (i=0; i<ice_st->ice->lcand_cnt; ++i) {
+	if (ice_st->ice->lcand[i].comp_id != comp_id)
+	    continue;
+	++cnt;
+    }
+
+    return cnt;
+}
+
 /*
  * Enum candidates
  */
@@ -982,6 +1059,7 @@ PJ_DEF(pj_status_t) pj_ice_strans_start_ice( pj_ice_strans *ice_st,
 	return status;
     }
 
+    ice_st->state = PJ_ICE_STRANS_STATE_NEGO;
     return status;
 }
 
@@ -1011,6 +1089,7 @@ PJ_DEF(pj_status_t) pj_ice_strans_stop_ice(pj_ice_strans *ice_st)
 	ice_st->ice = NULL;
     }
 
+    ice_st->state = PJ_ICE_STRANS_STATE_INIT;
     return PJ_SUCCESS;
 }
 
@@ -1169,6 +1248,9 @@ static void on_ice_complete(pj_ice_sess *ice, pj_status_t status)
 	    }
 	}
 
+	ice_st->state = (status==PJ_SUCCESS) ? PJ_ICE_STRANS_STATE_RUNNING :
+					       PJ_ICE_STRANS_STATE_FAILED;
+
 	(*ice_st->cb.on_ice_complete)(ice_st, PJ_ICE_STRANS_OP_NEGOTIATION, 
 				      status);
 
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_msg.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_msg.c
index 00f0cf148f..a90b0aeb98 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_msg.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_msg.c
@@ -1,4 +1,4 @@
-/* $Id: stun_msg.c 2691 2009-05-12 10:01:21Z bennylp $ */
+/* $Id: stun_msg.c 2928 2009-10-07 08:38:02Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -1234,8 +1234,23 @@ static pj_status_t encode_string_attr(const void *a, pj_uint8_t *buf,
     }
 
     PUTVAL16H(buf, 0, ca->hdr.type);
-    PUTVAL16H(buf, 2, (pj_uint16_t)ca->value.slen);
-    
+
+    /* Special treatment for SOFTWARE attribute:
+     * This attribute had caused interop problem when talking to 
+     * legacy RFC 3489 STUN servers, due to different "length"
+     * rules with RFC 5389.
+     */
+    if (msghdr->magic != PJ_STUN_MAGIC ||
+	ca->hdr.type == PJ_STUN_ATTR_SOFTWARE)
+    {
+	/* Set the length to be 4-bytes aligned so that we can
+	 * communicate with RFC 3489 endpoints
+	 */
+	PUTVAL16H(buf, 2, (pj_uint16_t)((ca->value.slen + 3) & (~3)));
+    } else {
+	/* Use RFC 5389 rule */
+	PUTVAL16H(buf, 2, (pj_uint16_t)ca->value.slen);
+    }
 
     /* Copy the string */
     pj_memcpy(buf+ATTR_HDR_LEN, ca->value.ptr, ca->value.slen);
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_session.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_session.c
index 414d422889..5b149d5834 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_session.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_session.c
@@ -1,4 +1,4 @@
-/* $Id: stun_session.c 2773 2009-06-17 19:14:20Z bennylp $ */
+/* $Id: stun_session.c 2938 2009-10-11 05:06:43Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -227,7 +227,7 @@ static pj_status_t apply_msg_options(pj_stun_session *sess,
     if (sess->srv_name.slen && 
 	pj_stun_msg_find_attr(msg, PJ_STUN_ATTR_SOFTWARE, 0)==NULL &&
 	(PJ_STUN_IS_RESPONSE(msg->hdr.type) ||
-	 PJ_STUN_IS_REQUEST(msg->hdr.type) && msg->hdr.magic==PJ_STUN_MAGIC)) 
+	 (PJ_STUN_IS_REQUEST(msg->hdr.type) && msg->hdr.magic==PJ_STUN_MAGIC))) 
     {
 	pj_stun_msg_add_string_attr(pool, msg, PJ_STUN_ATTR_SOFTWARE,
 				    &sess->srv_name);
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_sock.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_sock.c
index 213b05cf2a..2ba37f82e0 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_sock.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/stun_sock.c
@@ -1,4 +1,4 @@
-/* $Id: stun_sock.c 2667 2009-04-30 17:14:50Z bennylp $ */
+/* $Id: stun_sock.c 2993 2009-11-09 04:32:33Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -136,6 +136,8 @@ PJ_DEF(void) pj_stun_sock_cfg_default(pj_stun_sock_cfg *cfg)
     cfg->max_pkt_size = PJ_STUN_SOCK_PKT_LEN;
     cfg->async_cnt = 1;
     cfg->ka_interval = PJ_STUN_KEEP_ALIVE_SEC;
+    cfg->qos_type = PJ_QOS_TYPE_BEST_EFFORT;
+    cfg->qos_ignore_error = PJ_TRUE;
 }
 
 
@@ -200,6 +202,14 @@ PJ_DEF(pj_status_t) pj_stun_sock_create( pj_stun_config *stun_cfg,
     if (status != PJ_SUCCESS)
 	goto on_error;
 
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(stun_sock->sock_fd, cfg->qos_type,
+				&cfg->qos_params, 2, stun_sock->obj_name,
+				NULL);
+    if (status != PJ_SUCCESS && !cfg->qos_ignore_error)
+	goto on_error;
+
+    /* Bind socket */
     if (pj_sockaddr_has_addr(&cfg->bound_addr)) {
 	status = pj_sock_bind(stun_sock->sock_fd, &cfg->bound_addr,
 			      pj_sockaddr_get_len(&cfg->bound_addr));
@@ -429,12 +439,11 @@ static pj_bool_t sess_fail(pj_stun_sock *stun_sock,
 			   pj_stun_sock_op op,
 			   pj_status_t status)
 {
-    char errmsg[PJ_ERR_MSG_SIZE];
     pj_bool_t ret;
 
-    pj_strerror(status, errmsg, sizeof(errmsg));
-    PJ_LOG(4,(stun_sock->obj_name, "Session failed because %s failed: %s",
-	      pj_stun_sock_op_name(op), errmsg));
+    PJ_PERROR(4,(stun_sock->obj_name, status, 
+	         "Session failed because %s failed",
+		 pj_stun_sock_op_name(op)));
 
     ret = (*stun_sock->cb.on_status)(stun_sock, op, status);
 
@@ -758,10 +767,7 @@ static pj_bool_t on_data_recvfrom(pj_activesock_t *asock,
 
     /* Log socket error */
     if (status != PJ_SUCCESS) {
-	char errmsg[PJ_ERR_MSG_SIZE];
-
-	pj_strerror(status, errmsg, sizeof(errmsg));
-	PJ_LOG(2,(stun_sock->obj_name, "recvfrom() error: %s", errmsg));
+	PJ_PERROR(2,(stun_sock->obj_name, status, "recvfrom() error"));
 	return PJ_TRUE;
     }
 
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_session.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_session.c
index 1c264968ac..98a7371cd4 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_session.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_session.c
@@ -1,4 +1,4 @@
-/* $Id: turn_session.c 2774 2009-06-17 19:20:11Z bennylp $ */
+/* $Id: turn_session.c 3028 2009-12-08 13:11:25Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -461,10 +461,13 @@ PJ_DEF(pj_status_t) pj_turn_session_shutdown(pj_turn_session *sess)
 /**
  * Forcefully destroy the TURN session.
  */
-PJ_DEF(pj_status_t) pj_turn_session_destroy( pj_turn_session *sess)
+PJ_DEF(pj_status_t) pj_turn_session_destroy( pj_turn_session *sess,
+					     pj_status_t last_err)
 {
     PJ_ASSERT_RETURN(sess, PJ_EINVAL);
 
+    if (last_err != PJ_SUCCESS && sess->last_status == PJ_SUCCESS)
+	sess->last_status = last_err;
     set_state(sess, PJ_TURN_STATE_DEALLOCATED);
     sess_shutdown(sess, PJ_SUCCESS);
     return PJ_SUCCESS;
@@ -959,12 +962,16 @@ PJ_DEF(pj_status_t) pj_turn_session_sendto( pj_turn_session *sess,
     ch = lookup_ch_by_addr(sess, addr, pj_sockaddr_get_len(addr), 
 			   PJ_FALSE, PJ_FALSE);
     if (ch && ch->num != PJ_TURN_INVALID_CHANNEL && ch->bound) {
+	unsigned total_len;
+
 	/* Peer is assigned a channel number, we can use ChannelData */
 	pj_turn_channel_data *cd = (pj_turn_channel_data*)sess->tx_pkt;
 	
 	pj_assert(sizeof(*cd)==4);
 
-	if (pkt_len > sizeof(sess->tx_pkt)-sizeof(*cd)) {
+	/* Calculate total length, including paddings */
+	total_len = (pkt_len + sizeof(*cd) + 3) & (~3);
+	if (total_len > sizeof(sess->tx_pkt)) {
 	    status = PJ_ETOOBIG;
 	    goto on_return;
 	}
@@ -975,7 +982,7 @@ PJ_DEF(pj_status_t) pj_turn_session_sendto( pj_turn_session *sess,
 
 	pj_assert(sess->srv_addr != NULL);
 
-	status = sess->cb.on_send_pkt(sess, sess->tx_pkt, pkt_len+sizeof(*cd),
+	status = sess->cb.on_send_pkt(sess, sess->tx_pkt, total_len,
 				      sess->srv_addr,
 				      pj_sockaddr_get_len(sess->srv_addr));
 
@@ -1156,7 +1163,8 @@ PJ_DEF(pj_status_t) pj_turn_session_on_rx_pkt(pj_turn_session *sess,
 	    goto on_return;
 	} else {
 	    if (parsed_len) {
-		*parsed_len = cd.length + sizeof(cd);
+		/* Apply padding too */
+		*parsed_len = ((cd.length + 3) & (~3)) + sizeof(cd);
 	    }
 	}
 
diff --git a/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_sock.c b/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_sock.c
index 53a4d2a840..70acf7481d 100644
--- a/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_sock.c
+++ b/sflphone-common/libs/pjproject/pjnath/src/pjnath/turn_sock.c
@@ -1,4 +1,4 @@
-/* $Id: turn_sock.c 2642 2009-04-22 17:20:24Z bennylp $ */
+/* $Id: turn_sock.c 3028 2009-12-08 13:11:25Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -46,6 +46,7 @@ struct pj_turn_sock
 
     pj_turn_alloc_param	 alloc_param;
     pj_stun_config	 cfg;
+    pj_turn_sock_cfg	 setting;
 
     pj_bool_t		 destroy_request;
     pj_timer_entry	 timer;
@@ -92,6 +93,14 @@ static void destroy(pj_turn_sock *turn_sock);
 static void timer_cb(pj_timer_heap_t *th, pj_timer_entry *e);
 
 
+/* Init config */
+PJ_DEF(void) pj_turn_sock_cfg_default(pj_turn_sock_cfg *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+    cfg->qos_type = PJ_QOS_TYPE_BEST_EFFORT;
+    cfg->qos_ignore_error = PJ_TRUE;
+}
+
 /*
  * Create.
  */
@@ -99,21 +108,26 @@ PJ_DEF(pj_status_t) pj_turn_sock_create(pj_stun_config *cfg,
 					int af,
 					pj_turn_tp_type conn_type,
 					const pj_turn_sock_cb *cb,
-					unsigned options,
+					const pj_turn_sock_cfg *setting,
 					void *user_data,
 					pj_turn_sock **p_turn_sock)
 {
     pj_turn_sock *turn_sock;
     pj_turn_session_cb sess_cb;
+    pj_turn_sock_cfg default_setting;
     pj_pool_t *pool;
     const char *name_tmpl;
     pj_status_t status;
 
     PJ_ASSERT_RETURN(cfg && p_turn_sock, PJ_EINVAL);
     PJ_ASSERT_RETURN(af==pj_AF_INET() || af==pj_AF_INET6(), PJ_EINVAL);
-    PJ_ASSERT_RETURN(options==0, PJ_EINVAL);
     PJ_ASSERT_RETURN(conn_type!=PJ_TURN_TP_TCP || PJ_HAS_TCP, PJ_EINVAL);
 
+    if (!setting) {
+	pj_turn_sock_cfg_default(&default_setting);
+	setting = &default_setting;
+    }
+
     switch (conn_type) {
     case PJ_TURN_TP_UDP:
 	name_tmpl = "udprel%p";
@@ -139,6 +153,9 @@ PJ_DEF(pj_status_t) pj_turn_sock_create(pj_stun_config *cfg,
     /* Copy STUN config (this contains ioqueue, timer heap, etc.) */
     pj_memcpy(&turn_sock->cfg, cfg, sizeof(*cfg));
 
+    /* Copy setting (QoS parameters etc */
+    pj_memcpy(&turn_sock->setting, setting, sizeof(*setting));
+
     /* Set callback */
     if (cb) {
 	pj_memcpy(&turn_sock->cb, cb, sizeof(*cb));
@@ -256,14 +273,7 @@ static void timer_cb(pj_timer_heap_t *th, pj_timer_entry *e)
 static void show_err(pj_turn_sock *turn_sock, const char *title,
 		     pj_status_t status)
 {
-    char errmsg[PJ_ERR_MSG_SIZE];
-
-    if (status != PJ_SUCCESS) {
-	pj_strerror(status, errmsg, sizeof(errmsg));
-	PJ_LOG(4,(turn_sock->obj_name, "%s: %s", title, errmsg));
-    } else {
-	PJ_LOG(4,(turn_sock->obj_name, "%s", title, errmsg));
-    }
+    PJ_PERROR(4,(turn_sock->obj_name, status, title));
 }
 
 /* On error, terminate session */
@@ -271,8 +281,9 @@ static void sess_fail(pj_turn_sock *turn_sock, const char *title,
 		      pj_status_t status)
 {
     show_err(turn_sock, title, status);
-    if (turn_sock->sess)
-	pj_turn_session_destroy(turn_sock->sess);
+    if (turn_sock->sess) {
+	pj_turn_session_destroy(turn_sock->sess, status);
+    }
 }
 
 /*
@@ -477,6 +488,49 @@ static pj_bool_t on_connect_complete(pj_activesock_t *asock,
     return PJ_TRUE;
 }
 
+static pj_uint16_t GETVAL16H(const pj_uint8_t *buf, unsigned pos)
+{
+    return (pj_uint16_t) ((buf[pos + 0] << 8) | \
+			  (buf[pos + 1] << 0));
+}
+
+/* Quick check to determine if there is enough packet to process in the
+ * incoming buffer. Return the packet length, or zero if there's no packet.
+ */
+static unsigned has_packet(pj_turn_sock *turn_sock, const void *buf, pj_size_t bufsize)
+{
+    pj_bool_t is_stun;
+
+    if (turn_sock->conn_type == PJ_TURN_TP_UDP)
+	return bufsize;
+
+    /* Quickly check if this is STUN message, by checking the first two bits and
+     * size field which must be multiple of 4 bytes
+     */
+    is_stun = ((((pj_uint8_t*)buf)[0] & 0xC0) == 0) &&
+	      ((GETVAL16H((const pj_uint8_t*)buf, 2) & 0x03)==0);
+
+    if (is_stun) {
+	pj_size_t msg_len = GETVAL16H((const pj_uint8_t*)buf, 2);
+	return (msg_len+20 <= bufsize) ? msg_len+20 : 0;
+    } else {
+	/* This must be ChannelData. */
+	pj_turn_channel_data cd;
+
+	if (bufsize < 4)
+	    return 0;
+
+	/* Decode ChannelData packet */
+	pj_memcpy(&cd, buf, sizeof(pj_turn_channel_data));
+	cd.length = pj_ntohs(cd.length);
+
+	if (bufsize >= cd.length+sizeof(cd)) 
+	    return (cd.length+sizeof(cd)+3) & (~3);
+	else
+	    return 0;
+    }
+}
+
 /*
  * Notification from ioqueue when incoming UDP packet is received.
  */
@@ -487,21 +541,51 @@ static pj_bool_t on_data_read(pj_activesock_t *asock,
 			      pj_size_t *remainder)
 {
     pj_turn_sock *turn_sock;
-    pj_size_t parsed_len;
     pj_bool_t ret = PJ_TRUE;
 
     turn_sock = (pj_turn_sock*) pj_activesock_get_user_data(asock);
     pj_lock_acquire(turn_sock->lock);
 
     if (status == PJ_SUCCESS && turn_sock->sess) {
-	/* Report incoming packet to TURN session */
-	parsed_len = (unsigned)size;
-	pj_turn_session_on_rx_pkt(turn_sock->sess, data,  size, &parsed_len);
-	if (parsed_len < (unsigned)size) {
-	    *remainder = size - parsed_len;
-	    pj_memmove(data, ((char*)data)+parsed_len, *remainder);
-	} else {
-	    *remainder = 0;
+	/* Report incoming packet to TURN session, repeat while we have
+	 * "packet" in the buffer (required for stream-oriented transports)
+	 */
+	unsigned pkt_len;
+
+	//PJ_LOG(5,(turn_sock->pool->obj_name, 
+	//	  "Incoming data, %lu bytes total buffer", size));
+
+	while ((pkt_len=has_packet(turn_sock, data, size)) != 0) {
+	    pj_size_t parsed_len;
+	    //const pj_uint8_t *pkt = (const pj_uint8_t*)data;
+
+	    //PJ_LOG(5,(turn_sock->pool->obj_name, 
+	    //	      "Packet start: %02X %02X %02X %02X", 
+	    //	      pkt[0], pkt[1], pkt[2], pkt[3]));
+
+	    //PJ_LOG(5,(turn_sock->pool->obj_name, 
+	    //	      "Processing %lu bytes packet of %lu bytes total buffer",
+	    //	      pkt_len, size));
+
+	    parsed_len = (unsigned)size;
+	    pj_turn_session_on_rx_pkt(turn_sock->sess, data,  size, &parsed_len);
+
+	    /* parsed_len may be zero if we have parsing error, so use our
+	     * previous calculation to exhaust the bad packet.
+	     */
+	    if (parsed_len == 0)
+		parsed_len = pkt_len;
+
+	    if (parsed_len < (unsigned)size) {
+		*remainder = size - parsed_len;
+		pj_memmove(data, ((char*)data)+parsed_len, *remainder);
+	    } else {
+		*remainder = 0;
+	    }
+	    size = *remainder;
+
+	    //PJ_LOG(5,(turn_sock->pool->obj_name, 
+	    //	      "Buffer size now %lu bytes", size));
 	}
     } else if (status != PJ_SUCCESS && 
 	       turn_sock->conn_type != PJ_TURN_TP_UDP) 
@@ -652,6 +736,16 @@ static void turn_on_state(pj_turn_session *sess,
 	    return;
 	}
 
+        /* Apply QoS, if specified */
+	status = pj_sock_apply_qos2(sock, turn_sock->setting.qos_type,
+				    &turn_sock->setting.qos_params, 
+				    (turn_sock->setting.qos_ignore_error?2:1),
+				    turn_sock->pool->obj_name, NULL);
+	if (status != PJ_SUCCESS && !turn_sock->setting.qos_ignore_error) {
+	    pj_turn_sock_destroy(turn_sock);
+	    return;
+	}
+
 	/* Create active socket */
 	pj_bzero(&asock_cb, sizeof(asock_cb));
 	asock_cb.on_data_read = &on_data_read;
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/build/Makefile b/sflphone-common/libs/pjproject/pjsip-apps/build/Makefile
index 3752b73111..08e2ca00cd 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjsip-apps/build/Makefile
@@ -4,16 +4,16 @@ include $(PJDIR)/build/common.mak
 
 RULES_MAK := $(PJDIR)/build/rules.mak
 
-PJLIB_LIB:=../../pjlib/lib/libpj-sfl-$(TARGET_NAME)$(LIBEXT)
-PJLIB_UTIL_LIB:=../../pjlib-util/lib/libpjlib-util-sfl-$(TARGET_NAME)$(LIBEXT)
-PJNATH_LIB:=../../pjnath/lib/libpjnath-sfl-$(TARGET_NAME)$(LIBEXT)
-PJMEDIA_LIB:=../../pjmedia/lib/libpjmedia-sfl-$(TARGET_NAME)$(LIBEXT)
-PJMEDIA_AUDIODEV_LIB:=../../pjmedia/lib/libpjmedia-audiodev-sfl-$(TARGET_NAME)$(LIBEXT)
-PJMEDIA_CODEC_LIB:=../../pjmedia/lib/libpjmedia-codec-sfl-$(TARGET_NAME)$(LIBEXT)
-PJSIP_LIB:=../../pjsip/lib/libpjsip-sfl-$(TARGET_NAME)$(LIBEXT)
-PJSIP_UA_LIB:=../../pjsip/lib/libpjsip-ua-sfl-$(TARGET_NAME)$(LIBEXT)
-PJSIP_SIMPLE_LIB:=../../pjsip/lib/libpjsip-simple-sfl-$(TARGET_NAME)$(LIBEXT)
-PJSUA_LIB_LIB=../../pjsip/lib/libpjsua-sfl-$(TARGET_NAME)$(LIBEXT)
+PJLIB_LIB:=../../pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT)
+PJLIB_UTIL_LIB:=../../pjlib-util/lib/libpjlib-util-$(TARGET_NAME)$(LIBEXT)
+PJNATH_LIB:=../../pjnath/lib/libpjnath-$(TARGET_NAME)$(LIBEXT)
+PJMEDIA_LIB:=../../pjmedia/lib/libpjmedia-$(TARGET_NAME)$(LIBEXT)
+PJMEDIA_AUDIODEV_LIB:=../../pjmedia/lib/libpjmedia-audiodev-$(TARGET_NAME)$(LIBEXT)
+PJMEDIA_CODEC_LIB:=../../pjmedia/lib/libpjmedia-codec-$(TARGET_NAME)$(LIBEXT)
+PJSIP_LIB:=../../pjsip/lib/libpjsip-$(TARGET_NAME)$(LIBEXT)
+PJSIP_UA_LIB:=../../pjsip/lib/libpjsip-ua-$(TARGET_NAME)$(LIBEXT)
+PJSIP_SIMPLE_LIB:=../../pjsip/lib/libpjsip-simple-$(TARGET_NAME)$(LIBEXT)
+PJSUA_LIB_LIB=../../pjsip/lib/libpjsua-$(TARGET_NAME)$(LIBEXT)
 
 
 ###############################################################################
@@ -39,12 +39,23 @@ export PJSUA_LDFLAGS += $(APP_LDFLAGS) $(APP_LDLIBS) $(LDFLAGS)
 export PJSUA_EXE:=../bin/pjsua-$(TARGET_NAME)$(HOST_EXE)
 
 
+###############################################################################
+# Defines for building pjsystest
+#
+export PJSYSTEST_SRCDIR = ../src/pjsystest
+export PJSYSTEST_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
+			systest.o main_console.o
+export PJSYSTEST_CFLAGS += $(_CFLAGS)
+export PJSYSTEST_LDFLAGS += $(APP_LDFLAGS) $(APP_LDLIBS) $(LDFLAGS)
+export PJSYSTEST_EXE:=../bin/pjsystest-$(TARGET_NAME)$(HOST_EXE)
+
+
 export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
 ###############################################################################
 # Main entry
 #
 #
-TARGETS := pjsua samples
+TARGETS := pjsua pjsystest samples
 
 .PHONY: $(TARGETS)
 
@@ -60,6 +71,9 @@ distclean: realclean
 pjsua:
 	$(MAKE) -f $(RULES_MAK) APP=PJSUA app=pjsua $(PJSUA_EXE)
 
+pjsystest:
+	$(MAKE) -f $(RULES_MAK) APP=PJSYSTEST app=pjsystest $(PJSYSTEST_EXE)
+
 samples:
 	$(MAKE) -f Samples.mak
 
@@ -69,9 +83,11 @@ samples:
 
 clean depend realclean:
 	$(MAKE) -f $(RULES_MAK) APP=PJSUA app=pjsua $@
+	$(MAKE) -f $(RULES_MAK) APP=PJSYSTEST app=pjsystest $@
 	$(MAKE) -f Samples.mak $@
 	@if test "$@" = "depend"; then \
 	  echo '$(PJSUA_EXE): $(APP_LIB_FILES)' >> .pjsua-$(TARGET_NAME).depend; \
+	  echo '$(PJSYSTEST_EXE): $(APP_LIB_FILES)' >> .pjsystest-$(TARGET_NAME).depend; \
 	fi
 
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/confbot/confbot.py b/sflphone-common/libs/pjproject/pjsip-apps/src/confbot/confbot.py
new file mode 100644
index 0000000000..572c50c117
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/confbot/confbot.py
@@ -0,0 +1,575 @@
+# $Id: confbot.py 2912 2009-08-24 11:56:13Z bennylp $
+#
+# SIP Conference Bot
+#
+# Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+#
+import pjsua as pj
+import string
+import sys
+
+CFG_FILE = "config"
+
+INFO = 1
+TRACE = 2
+	
+# Call callback. This would just forward the event to the Member class
+class CallCb(pj.CallCallback):
+	def __init__(self, member, call=None):
+		pj.CallCallback.__init__(self, call)
+		self.member = member
+	
+	def on_state(self):
+		self.member.on_call_state(self.call)
+	
+	def on_media_state(self):
+		self.member.on_call_media_state(self.call)
+
+	def on_dtmf_digit(self, digits):
+		self.member.on_call_dtmf_digit(self.call, digits)
+
+	def on_transfer_request(self, dst, code):
+		return self.member.on_call_transfer_request(self.call, dst, code)
+	
+	def on_transfer_status(self, code, reason, final, cont):
+		return self.member.on_call_transfer_status(self.call, code, reason, final, cont)
+
+	def on_replace_request(self, code, reason):
+		return self.member.on_call_replace_request(self.call, code, reason)
+		
+	def on_replaced(self, new_call):
+		self.member.on_call_replaced(self.call, new_call)
+
+	def on_typing(self, is_typing):
+		self.member.on_typing(is_typing, call=self.call)
+
+	def on_pager(self, mime_type, body):
+		self.member.on_pager(mime_type, body, call=self.call)
+	
+	def on_pager_status(self, body, im_id, code, reason):
+		self.member.on_pager_status(body, im_id, code, reason, call=self.call)
+
+# Buddy callback. This would just forward the event to Member class
+class BuddyCb(pj.BuddyCallback):
+	def __init__(self, member, buddy=None):
+		pj.BuddyCallback.__init__(self, buddy)
+		self.member = member
+	
+	def on_pager(self, mime_type, body):
+		self.member.on_pager(mime_type, body, buddy=self.buddy)
+
+	def on_pager_status(self, body, im_id, code, reason):
+		self.member.on_pager_status(body, im_id, code, reason, buddy=self.buddy)
+
+	def on_state(self):
+		self.member.on_pres_state(self.buddy)
+
+	def on_typing(self, is_typing):
+		self.member.on_typing(is_typing, buddy=self.buddy)
+
+
+
+
+##############################################################################
+#
+#
+# This class represents individual room member (either/both chat and voice conf)
+#
+#
+class Member:
+	def __init__(self, bot, uri):
+		self.uri = uri
+		self.bot = bot
+		self.call = None
+		self.buddy = None
+		self.bi = pj.BuddyInfo()
+		self.in_chat = False
+		self.in_voice = False
+		self.im_error = False
+		self.html = False
+	
+	def __str__(self):
+		str = string.ljust(self.uri, 30) + " -- " 
+		if self.buddy:
+			bi = self.buddy.info()
+			str = str + bi.online_text
+		else:
+			str = str + "Offline"
+		str = str + " ["
+		if (self.in_voice):
+			str = str + " voice"
+		if (self.in_chat):
+			str = str + " chat"
+			if (self.html):
+				str = str + " html"
+			else:
+				str = str + " plain"
+
+		if (self.im_error):
+			str = str + " im_error"
+		str = str + "]"
+		return str
+		
+	def join_call(self, call):
+		if self.call:
+			self.call.hangup(603, "You have been disconnected for making another call")
+		self.call = call
+		call.set_callback(CallCb(self, call))
+		msg = "%(uri)s is attempting to join the voice conference" % \
+			  {'uri': self.uri}
+		self.bot.DEBUG(msg + "\n", INFO)
+		self.bot.broadcast_pager(None, msg)
+	
+	def join_chat(self):
+		if not self.buddy:
+			self.bot.DEBUG(self.uri + " joining chatroom...\n", INFO)
+			self.buddy = self.bot.acc.add_buddy(self.uri)
+			self.buddy.set_callback(BuddyCb(self, self.buddy))
+			self.buddy.subscribe()
+		else:
+			self.bot.DEBUG(self.uri + " already in chatroom, resubscribing..\n", INFO)
+			self.buddy.subscribe()
+
+	def send_pager(self, body, mime="text/plain"):
+		self.bot.DEBUG("send_pager() to " + self.uri)
+		if self.in_chat and not self.im_error and self.buddy:
+			if self.html:
+				#This will make us receive html!
+				#mime = "text/html"
+				body = body.replace("<", "&lt;")
+				body = body.replace(">", "&gt;")
+				body = body.replace('"', "&quot;")
+				body = body.replace("\n", "<BR>\n")
+			self.buddy.send_pager(body, content_type=mime)
+			self.bot.DEBUG("..sent\n")
+		else:
+			self.bot.DEBUG("..not sent!\n")
+		
+	def on_call_state(self, call):
+		ci = call.info()
+		if ci.state==pj.CallState.DISCONNECTED:
+			if self.in_voice:
+				msg = "%(uri)s has left the voice conference (%(1)d/%(2)s)" % \
+					  {'uri': self.uri, '1': ci.last_code, '2': ci.last_reason}
+				self.bot.DEBUG(msg + "\n", INFO)
+				self.bot.broadcast_pager(None, msg)
+			self.in_voice = False
+			self.call = None
+			self.bot.on_member_left(self)
+		elif ci.state==pj.CallState.CONFIRMED:
+			msg = "%(uri)s has joined the voice conference" % \
+				  {'uri': self.uri}
+			self.bot.DEBUG(msg + "\n", INFO)
+			self.bot.broadcast_pager(None, msg)
+	
+	def on_call_media_state(self, call):
+		self.bot.DEBUG("Member.on_call_media_state\n")
+		ci = call.info()
+		if ci.conf_slot!=-1:
+			if not self.in_voice:
+				msg = self.uri + " call media is active"
+				self.bot.broadcast_pager(None, msg)
+			self.in_voice = True
+			self.bot.add_to_voice_conf(self)
+		else:
+			if self.in_voice:
+				msg = self.uri + " call media is inactive"
+				self.bot.broadcast_pager(None, msg)
+			self.in_voice = False
+
+	def on_call_dtmf_digit(self, call, digits):
+		msg = "%(uri)s sent DTMF digits %(dig)s" % \
+			  {'uri': self.uri, 'dig': digits}
+		self.bot.broadcast_pager(None, msg)
+
+	def on_call_transfer_request(self, call, dst, code):
+		msg = "%(uri)s is transfering the call to %(dst)s" % \
+			  {'uri': self.uri, 'dst': dst}
+		self.bot.broadcast_pager(None, msg)
+		return 202
+	
+	def on_call_transfer_status(self, call, code, reason, final, cont):
+		msg = "%(uri)s call transfer status is %(code)d/%(res)s" % \
+			  {'uri': self.uri, 'code': code, 'res': reason}
+		self.bot.broadcast_pager(None, msg)
+		return True
+
+	def on_call_replace_request(self, call, code, reason):
+		msg = "%(uri)s is requesting call replace" % \
+			  {'uri': self.uri}
+		self.bot.broadcast_pager(None, msg)
+		return (code, reason)
+		
+	def on_call_replaced(self, call, new_call):
+		msg = "%(uri)s call is replaced" % \
+			  {'uri': self.uri}
+		self.bot.broadcast_pager(None, msg)
+
+	def on_pres_state(self, buddy):
+		old_bi = self.bi
+		self.bi = buddy.info()
+		msg = "%(uri)s status is %(st)s" % \
+		  {'uri': self.uri, 'st': self.bi.online_text}
+		self.bot.DEBUG(msg + "\n", INFO)
+		self.bot.broadcast_pager(self, msg)
+
+		if self.bi.sub_state==pj.SubscriptionState.ACTIVE:
+			if not self.in_chat:
+				self.in_chat = True
+				buddy.send_pager("Welcome to chatroom")
+				self.bot.broadcast_pager(self, self.uri + " has joined the chat room")
+			else:
+				self.in_chat = True
+		elif self.bi.sub_state==pj.SubscriptionState.NULL or \
+			 self.bi.sub_state==pj.SubscriptionState.TERMINATED or \
+			 self.bi.sub_state==pj.SubscriptionState.UNKNOWN:
+			self.buddy.delete()
+			self.buddy = None
+			if self.in_chat:
+				self.in_chat = False
+				self.bot.broadcast_pager(self, self.uri + " has left the chat room")
+			else:
+				self.in_chat = False
+			self.bot.on_member_left(self)
+		
+	def on_typing(self, is_typing, call=None, buddy=None):
+		if is_typing:
+			msg = self.uri + " is typing..."
+		else:
+			msg = self.uri + " has stopped typing"
+		self.bot.broadcast_pager(self, msg)
+
+	def on_pager(self, mime_type, body, call=None, buddy=None):
+		if not self.bot.handle_cmd(self, None, body):
+			msg = self.uri + ": " + body
+			self.bot.broadcast_pager(self, msg, mime_type)
+	
+	def on_pager_status(self, body, im_id, code, reason, call=None, buddy=None):
+		self.im_error = (code/100 != 2)
+
+
+
+##############################################################################
+#
+#
+# The Bot instance (singleton)
+#
+#
+class Bot(pj.AccountCallback):
+	def __init__(self):
+		pj.AccountCallback.__init__(self, None)
+		self.lib = pj.Lib()
+		self.acc = None
+		self.calls = []
+		self.members = {}
+		self.cfg = None
+
+	def DEBUG(self, msg, level=TRACE):
+		print msg,
+		
+	def helpstring(self):
+		return """
+--h[elp]            Display this help screen
+--j[oin]            Join the chat room
+--html on|off       Set to receive HTML or plain text
+
+Participant commands:
+--s[how]            Show confbot settings
+--leave             Leave the chatroom
+--l[ist]            List all members
+
+Admin commands:
+--a[dmin] <CMD> Where <CMD> are:
+    list            List the admins
+    add <URI>       Add URI as admin
+    del <URI>       Remove URI as admin
+    rr              Reregister account to server
+    call <URI>      Make call to the URI and add to voice conf
+    dc <URI>        Disconnect call to URI
+    hold <URI>      Hold call with that URI
+    update <URI>    Send UPDATE to call with that URI
+    reinvite <URI>  Send re-INVITE to call with that URI
+"""
+
+	def listmembers(self):
+		msg = ""
+		for uri, m in self.members.iteritems():
+			msg = msg + str(m) + "\n"
+		return msg
+	
+	def showsettings(self):
+		ai = self.acc.info()
+		msg = """
+ConfBot status and settings:
+  URI:        %(uri)s
+  Status:     %(pres)s
+  Reg Status: %(reg_st)d
+  Reg Reason: %(reg_res)s
+""" % {'uri': ai.uri, 'pres': ai.online_text, \
+	   'reg_st': ai.reg_status, 'reg_res': ai.reg_reason}
+		return msg
+  
+	def main(self, cfg_file):
+		try:
+			cfg = self.cfg = __import__(cfg_file)
+			
+			self.lib.init(ua_cfg=cfg.ua_cfg, log_cfg=cfg.log_cfg, media_cfg=cfg.media_cfg)
+			self.lib.set_null_snd_dev()
+			
+			transport = None
+			if cfg.udp_cfg:
+				transport = self.lib.create_transport(pj.TransportType.UDP, cfg.udp_cfg)
+			if cfg.tcp_cfg:
+				t = self.lib.create_transport(pj.TransportType.TCP, cfg.tcp_cfg)
+				if not transport:
+					transport = t
+				
+			self.lib.start()
+			
+			if cfg.acc_cfg:
+				self.DEBUG("Creating account %(uri)s..\n" % {'uri': cfg.acc_cfg.id}, INFO)
+				self.acc = self.lib.create_account(cfg.acc_cfg, cb=self)
+			else:
+				self.DEBUG("Creating account for %(t)s..\n" % \
+							{'t': transport.info().description}, INFO)
+				self.acc = self.lib.create_account_for_transport(transport, cb=self)
+			
+			self.acc.set_basic_status(True)
+			
+			# Wait for ENTER before quitting
+			print "Press q to quit or --help/--h for help"
+			while True:
+				input = sys.stdin.readline().strip(" \t\r\n")
+				if not self.handle_cmd(None, None, input):
+					if input=="q":
+						break
+			
+			self.lib.destroy()
+			self.lib = None
+
+		except pj.Error, e:
+			print "Exception: " + str(e)
+			if self.lib:
+				self.lib.destroy()
+				self.lib = None
+	
+	def broadcast_pager(self, exclude_member, body, mime_type="text/plain"):
+		self.DEBUG("Broadcast: " + body + "\n")
+		for uri, m in self.members.iteritems():
+			if m != exclude_member:
+				m.send_pager(body, mime_type)
+
+	def add_to_voice_conf(self, member):
+		if not member.call:
+			return
+		src_ci = member.call.info()
+		self.DEBUG("bot.add_to_voice_conf\n")
+		for uri, m in self.members.iteritems():
+			if m==member:
+				continue
+			if not m.call:
+				continue
+			dst_ci = m.call.info()
+			if dst_ci.media_state==pj.MediaState.ACTIVE and dst_ci.conf_slot!=-1:
+				self.lib.conf_connect(src_ci.conf_slot, dst_ci.conf_slot)
+				self.lib.conf_connect(dst_ci.conf_slot, src_ci.conf_slot)
+	
+	def on_member_left(self, member):
+		if not member.call and not member.buddy:
+			del self.members[member.uri]
+			del member
+			
+	def handle_admin_cmd(self, member, body):
+		if member and self.cfg.admins and not member.uri in self.cfg.admins:
+			member.send_pager("You are not admin")
+			return
+		args = body.split()
+		msg = ""
+
+		if len(args)==1:
+			args.append(" ")
+
+		if args[1]=="list":
+			if not self.cfg.admins:
+				msg = "Everyone is admin!"
+			else:
+				msg = str(self.cfg.admins)
+		elif args[1]=="add":
+			if len(args)!=3:
+				msg = "Usage: add <URI>"
+			else:
+				self.cfg.admins.append(args[2])
+				msg = args[2] + " added as admin"
+		elif args[1]=="del":
+			if len(args)!=3:
+				msg = "Usage: del <URI>"
+			elif args[2] not in self.cfg.admins:
+				msg = args[2] + " is not admin"
+			else:
+				self.cfg.admins.remove(args[2])
+				msg = args[2] + " has been removed from admins"
+		elif args[1]=="rr":
+			msg = "Reregistering.."
+			self.acc.set_registration(True)
+		elif args[1]=="call":
+			if len(args)!=3:
+				msg = "Usage: call <URI>"
+			else:
+				uri = args[2]
+				try:
+					call = self.acc.make_call(uri)
+				except pj.Error, e:
+					msg = "Error: " + str(e)
+					call = None
+
+				if call:
+					if not uri in self.members:
+						m = Member(self, uri)
+						self.members[m.uri] = m
+					else:
+						m = self.members[uri]
+					msg = "Adding " + m.uri + " to voice conference.."
+					m.join_call(call)
+		elif args[1]=="dc" or args[1]=="hold" or args[1]=="update" or args[1]=="reinvite":
+			if len(args)!=3:
+				msg = "Usage: " + args[1] + " <URI>"
+			else:
+				uri = args[2]
+				if not uri in self.members:
+					msg = "Member not found/URI doesn't match (note: case matters!)"
+				else:
+					m = self.members[uri]
+					if m.call:
+						if args[1]=="dc":
+							msg = "Disconnecting.."
+							m.call.hangup(603, "You're disconnected by admin")
+						elif args[1]=="hold":
+							msg = "Holding the call"
+							m.call.hold()
+						elif args[1]=="update":
+							msg = "Sending UPDATE"
+							m.call.update()
+						elif args[1]=="reinvite":
+							msg = "Sending re-INVITE"
+							m.call.reinvite()
+					else:
+						msg = "He is not in call"
+		else:
+			msg = "Unknown admin command " + body
+
+		#print "msg is '%(msg)s'" % {'msg': msg}
+
+		if True:
+			if member:
+				member.send_pager(msg)
+			else:
+				print msg
+
+	def handle_cmd(self, member, from_uri, body):
+		body = body.strip(" \t\r\n")
+		msg = ""
+		handled = True
+		if body=="--l" or body=="--list":
+			msg = self.listmembers()
+			if msg=="":
+				msg = "Nobody is here"
+		elif body[0:3]=="--s":
+			msg = self.showsettings()
+		elif body[0:6]=="--html" and member:
+			if body[8:11]=="off":
+				member.html = False
+			else:
+				member.html = True
+		elif body=="--h" or body=="--help":
+			msg = self.helpstring()
+		elif body=="--leave":
+			if not member or not member.buddy:
+				msg = "You are not in chatroom"
+			else:
+				member.buddy.unsubscribe()
+		elif body[0:3]=="--j":
+			if not from_uri in self.members:
+				m = Member(self, from_uri)
+				self.members[m.uri] = m
+				self.DEBUG("Adding " + m.uri + " to chatroom\n")
+				m.join_chat()
+			else:
+				m = self.members[from_uri]
+				self.DEBUG("Adding " + m.uri + " to chatroom\n")
+				m.join_chat()
+		elif body[0:3]=="--a":
+			self.handle_admin_cmd(member, body)
+			handled = True
+		else:
+			handled = False
+
+		if msg:
+			if member:
+				member.send_pager(msg)
+			elif from_uri:
+				self.acc.send_pager(from_uri, msg);
+			else:
+				print msg
+		return handled
+	
+	def on_incoming_call(self, call):
+		self.DEBUG("on_incoming_call from %(uri)s\n" % {'uri': call.info().remote_uri}, INFO)
+		ci = call.info()
+		if not ci.remote_uri in self.members:
+			m = Member(self, ci.remote_uri)
+			self.members[m.uri] = m
+			m.join_call(call)
+		else:
+			m = self.members[ci.remote_uri]
+			m.join_call(call)
+		call.answer(200)
+	
+	def on_incoming_subscribe(self, buddy, from_uri, contact_uri, pres_obj):
+		self.DEBUG("on_incoming_subscribe from %(uri)s\n" % from_uri, INFO)
+		return (200, 'OK')
+
+	def on_reg_state(self):
+		ai = self.acc.info()
+		self.DEBUG("Registration state: %(code)d/%(reason)s\n" % \
+					{'code': ai.reg_status, 'reason': ai.reg_reason}, INFO)
+		if ai.reg_status/100==2 and ai.reg_expires > 0:
+			self.acc.set_basic_status(True)
+
+	def on_pager(self, from_uri, contact, mime_type, body):
+		body = body.strip(" \t\r\n")
+		if not self.handle_cmd(None, from_uri, body):
+			self.acc.send_pager(from_uri, "You have not joined the chat room. Type '--join' to join or '--help' for the help")
+
+	def on_pager_status(self, to_uri, body, im_id, code, reason):
+		pass
+
+	def on_typing(self, from_uri, contact, is_typing):
+		pass
+
+
+
+
+##############################################################################
+#
+#
+# main()
+#
+#
+if __name__ == "__main__":
+	bot = Bot()
+	bot.main(CFG_FILE)
+
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/confbot/config.py b/sflphone-common/libs/pjproject/pjsip-apps/src/confbot/config.py
new file mode 100644
index 0000000000..9dd31b4a18
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/confbot/config.py
@@ -0,0 +1,41 @@
+# $Id: config.py 2912 2009-08-24 11:56:13Z bennylp $
+#
+# Confbot settings
+#
+import pjsua as pj
+
+# Set of admins. If empty then everyone is admin!
+admins = set([])
+
+# acc_cfg holds the account config (set it to None to disable account)
+acc_cfg = None
+acc_cfg = pj.AccountConfig()
+if acc_cfg:
+	acc_cfg.id = "sip:bot@pjsip.org"
+	acc_cfg.reg_uri = "sip:pjsip.org"
+	acc_cfg.proxy = [ "sip:pjsip.org;lr;transport=tcp" ]
+	acc_cfg.auth_cred = [ pj.AuthCred("*", "bot", "secretpass") ]
+	acc_cfg.publish_enabled = True
+	#acc_cfg.require_timer = True
+
+# Transport configs (set them to None to disable the transport)
+udp_cfg = pj.TransportConfig(5080)
+tcp_cfg = pj.TransportConfig(0)
+#tcp_cfg = None
+
+# Logging Config (you can also set it to None to use default values)
+def log_cb(level, str, len):
+	print str,
+	
+log_cfg = pj.LogConfig()
+#log_cfg.callback = log_cb
+
+# UA Config (you can also set it to None to use default values)
+ua_cfg = pj.UAConfig()
+ua_cfg.user_agent = "PJSIP ConfBot"
+ua_cfg.stun_host = "stun.pjsip.org"
+
+# Media config (you can also set it to None to use default values)
+media_cfg = pj.MediaConfig()
+media_cfg.enable_ice = True
+media_cfg.max_calls = 20
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua/pjsua_app.c b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua/pjsua_app.c
index 275387f9de..5b43b05511 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua/pjsua_app.c
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua/pjsua_app.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_app.c 2897 2009-08-17 20:28:47Z nanang $ */
+/* $Id: pjsua_app.c 3039 2009-12-30 06:35:20Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -59,6 +59,7 @@ static struct app_config
     pjsua_media_config	    media_cfg;
     pj_bool_t		    no_refersub;
     pj_bool_t		    ipv6;
+    pj_bool_t		    enable_qos;
     pj_bool_t		    no_tcp;
     pj_bool_t		    no_udp;
     pj_bool_t		    use_tls;
@@ -103,6 +104,8 @@ static struct app_config
 
 #ifdef STEREO_DEMO
     pjmedia_snd_port	   *snd;
+    pjmedia_port	   *sc, *sc_ch1;
+    pjsua_conf_port_id	    sc_ch1_slot;
 #endif
 
     float		    mic_level,
@@ -190,6 +193,7 @@ static void usage(void)
     puts  ("  --username=string   Set authentication username");
     puts  ("  --password=string   Set authentication password");
     puts  ("  --publish           Send presence PUBLISH for this account");
+    puts  ("  --mwi               Subscribe to message summary/waiting indication");
     puts  ("  --use-100rel        Require reliable provisional response (100rel)");
     puts  ("  --use-timer         Require SIP session timers");
     puts  ("  --timer-se=N        Session timers expiration period, in secs (def:1800)");
@@ -205,6 +209,7 @@ static void usage(void)
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6
     puts  ("  --ipv6              Use IPv6 instead for SIP and media.");
 #endif
+    puts  ("  --set-qos           Enable QoS tagging for SIP and media.");
     puts  ("  --local-port=port   Set TCP/UDP port. This implicitly enables both ");
     puts  ("                      TCP and UDP transports on the specified port, unless");
     puts  ("                      if TCP or UDP is disabled.");
@@ -479,7 +484,7 @@ static pj_status_t parse_args(int argc, char *argv[],
 	   OPT_REGISTRAR, OPT_REG_TIMEOUT, OPT_PUBLISH, OPT_ID, OPT_CONTACT,
 	   OPT_BOUND_ADDR, OPT_CONTACT_PARAMS, OPT_CONTACT_URI_PARAMS,
 	   OPT_100REL, OPT_USE_IMS, OPT_REALM, OPT_USERNAME, OPT_PASSWORD,
-	   OPT_NAMESERVER, OPT_STUN_SRV,
+	   OPT_MWI, OPT_NAMESERVER, OPT_STUN_SRV,
 	   OPT_ADD_BUDDY, OPT_OFFER_X_MS_MSG, OPT_NO_PRESENCE,
 	   OPT_AUTO_ANSWER, OPT_AUTO_PLAY, OPT_AUTO_PLAY_HANGUP, OPT_AUTO_LOOP,
 	   OPT_AUTO_CONF, OPT_CLOCK_RATE, OPT_SND_CLOCK_RATE, OPT_STEREO,
@@ -498,7 +503,7 @@ static pj_status_t parse_args(int argc, char *argv[],
 	   OPT_TLS_NEG_TIMEOUT, OPT_TLS_SRV_NAME,
 	   OPT_CAPTURE_DEV, OPT_PLAYBACK_DEV,
 	   OPT_CAPTURE_LAT, OPT_PLAYBACK_LAT, OPT_NO_TONES, OPT_JB_MAX_SIZE,
-	   OPT_STDOUT_REFRESH, OPT_STDOUT_REFRESH_TEXT, OPT_IPV6,
+	   OPT_STDOUT_REFRESH, OPT_STDOUT_REFRESH_TEXT, OPT_IPV6, OPT_QOS,
 #ifdef _IONBF
 	   OPT_STDOUT_NO_BUF,
 #endif
@@ -531,6 +536,7 @@ static pj_status_t parse_args(int argc, char *argv[],
 	{ "registrar",	1, 0, OPT_REGISTRAR},
 	{ "reg-timeout",1, 0, OPT_REG_TIMEOUT},
 	{ "publish",    0, 0, OPT_PUBLISH},
+	{ "mwi",	0, 0, OPT_MWI},
 	{ "use-100rel", 0, 0, OPT_100REL},
 	{ "use-ims",    0, 0, OPT_USE_IMS},
 	{ "id",		1, 0, OPT_ID},
@@ -614,6 +620,7 @@ static pj_status_t parse_args(int argc, char *argv[],
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6
 	{ "ipv6",	 0, 0, OPT_IPV6},
 #endif
+	{ "set-qos",	 0, 0, OPT_QOS},
 	{ "use-timer",  0, 0, OPT_TIMER},
 	{ "timer-se",   1, 0, OPT_TIMER_SE},
 	{ "timer-min-se", 1, 0, OPT_TIMER_MIN_SE},
@@ -828,6 +835,10 @@ static pj_status_t parse_args(int argc, char *argv[],
 	    cur_acc->publish_enabled = PJ_TRUE;
 	    break;
 
+	case OPT_MWI:	/* mwi */
+	    cur_acc->mwi_enabled = PJ_TRUE;
+	    break;
+
 	case OPT_100REL: /** 100rel */
 	    cur_acc->require_100rel = PJ_TRUE;
 	    cfg->cfg.require_100rel = PJ_TRUE;
@@ -1268,6 +1279,7 @@ static pj_status_t parse_args(int argc, char *argv[],
 
 	case OPT_TLS_VERIFY_CLIENT:
 	    cfg->udp_cfg.tls_setting.verify_client = PJ_TRUE;
+	    cfg->udp_cfg.tls_setting.require_client_cert = PJ_TRUE;
 	    break;
 
 	case OPT_TLS_NEG_TIMEOUT:
@@ -1325,7 +1337,17 @@ static pj_status_t parse_args(int argc, char *argv[],
 	    cfg->ipv6 = PJ_TRUE;
 	    break;
 #endif
-
+	case OPT_QOS:
+	    cfg->enable_qos = PJ_TRUE;
+	    /* Set RTP traffic type to Voice */
+	    cfg->rtp_cfg.qos_type = PJ_QOS_TYPE_VOICE;
+	    /* Directly apply DSCP value to SIP traffic. Say lets
+	     * set it to CS3 (DSCP 011000). Note that this will not 
+	     * work on all platforms.
+	     */
+	    cfg->udp_cfg.qos_params.flags = PJ_QOS_PARAM_HAS_DSCP;
+	    cfg->udp_cfg.qos_params.dscp_val = 0x18;
+	    break;
 	default:
 	    PJ_LOG(1,(THIS_FILE, 
 		      "Argument \"%s\" is not valid. Use --help to see help",
@@ -1535,6 +1557,13 @@ static void write_account_settings(int acc_index, pj_str_t *result)
 	pj_strcat2(result, line);
     }
 
+    /* Publish */
+    if (acc_cfg->publish_enabled)
+	pj_strcat2(result, "--publish\n");
+
+    /* MWI */
+    if (acc_cfg->mwi_enabled)
+	pj_strcat2(result, "--mwi\n");
 }
 
 
@@ -1605,6 +1634,9 @@ static int write_settings(const struct app_config *config,
     if (config->ipv6) {
 	pj_strcat2(&cfg, "--ipv6\n");
     }
+    if (config->enable_qos) {
+	pj_strcat2(&cfg, "--set-qos\n");
+    }
 
     /* UDP Transport. */
     pj_ansi_sprintf(line, "--local-port %d\n", config->udp_cfg.port);
@@ -2617,12 +2649,16 @@ static void on_buddy_state(pjsua_buddy_id buddy_id)
     pjsua_buddy_info info;
     pjsua_buddy_get_info(buddy_id, &info);
 
-    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s (subscription state is %s)",
+    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s, subscription state is %s "
+			 "(last termination reason code=%d %.*s)",
 	      (int)info.uri.slen,
 	      info.uri.ptr,
 	      (int)info.status_text.slen,
 	      info.status_text.ptr,
-	      info.sub_state_name));
+	      info.sub_state_name,
+	      info.sub_term_code,
+	      (int)info.sub_term_reason.slen,
+	      info.sub_term_reason.ptr));
 }
 
 
@@ -2720,6 +2756,37 @@ static void on_nat_detect(const pj_stun_nat_detect_result *res)
 }
 
 
+/*
+ * MWI indication
+ */
+static void on_mwi_info(pjsua_acc_id acc_id, pjsua_mwi_info *mwi_info)
+{
+    pj_str_t body;
+    
+    PJ_LOG(3,(THIS_FILE, "Received MWI for acc %d:", acc_id));
+
+    if (mwi_info->rdata->msg_info.ctype) {
+	const pjsip_ctype_hdr *ctype = mwi_info->rdata->msg_info.ctype;
+
+	PJ_LOG(3,(THIS_FILE, " Content-Type: %.*s/%.*s",
+	          (int)ctype->media.type.slen,
+		  ctype->media.type.ptr,
+		  (int)ctype->media.subtype.slen,
+		  ctype->media.subtype.ptr));
+    }
+
+    if (!mwi_info->rdata->msg_info.msg->body) {
+	PJ_LOG(3,(THIS_FILE, "  no message body"));
+	return;
+    }
+
+    body.ptr = mwi_info->rdata->msg_info.msg->body->data;
+    body.slen = mwi_info->rdata->msg_info.msg->body->len;
+
+    PJ_LOG(3,(THIS_FILE, " Body:\n%.*s", (int)body.slen, body.ptr));
+}
+
+
 /*
  * Print buddy list.
  */
@@ -4315,6 +4382,7 @@ pj_status_t app_init(int argc, char *argv[])
     app_config.cfg.cb.on_call_transfer_status = &on_call_transfer_status;
     app_config.cfg.cb.on_call_replaced = &on_call_replaced;
     app_config.cfg.cb.on_nat_detect = &on_nat_detect;
+    app_config.cfg.cb.on_mwi_info = &on_mwi_info;
 
     /* Set sound device latency */
     if (app_config.capture_lat > 0)
@@ -4533,6 +4601,11 @@ pj_status_t app_init(int argc, char *argv[])
 
 	pjsua_acc_id acc_id;
 
+	/* Copy the QoS settings */
+	tcp_cfg.tls_setting.qos_type = tcp_cfg.qos_type;
+	pj_memcpy(&tcp_cfg.tls_setting.qos_params, &tcp_cfg.qos_params, 
+		  sizeof(tcp_cfg.qos_params));
+
 	/* Set TLS port as TCP port+1 */
 	tcp_cfg.port++;
 	status = pjsua_transport_create(PJSIP_TRANSPORT_TLS,
@@ -4678,6 +4751,16 @@ pj_status_t app_destroy(void)
 	pjmedia_snd_port_destroy(app_config.snd);
 	app_config.snd = NULL;
     }
+    if (app_config.sc_ch1) {
+	pjsua_conf_remove_port(app_config.sc_ch1_slot);
+	app_config.sc_ch1_slot = PJSUA_INVALID_ID;
+	pjmedia_port_destroy(app_config.sc_ch1);
+	app_config.sc_ch1 = NULL;
+    }
+    if (app_config.sc) {
+	pjmedia_port_destroy(app_config.sc);
+	app_config.sc = NULL;
+    }
 #endif
 
     /* Close ringback port */
@@ -4717,9 +4800,25 @@ pj_status_t app_destroy(void)
 
 
 #ifdef STEREO_DEMO
+/*
+ * In this stereo demo, we open the sound device in stereo mode and
+ * arrange the attachment to the PJSUA-LIB conference bridge as such
+ * so that channel0/left channel of the sound device corresponds to
+ * slot 0 in the bridge, and channel1/right channel of the sound
+ * device corresponds to slot 1 in the bridge. Then user can independently
+ * feed different media to/from the speakers/microphones channels, by
+ * connecting them to slot 0 or 1 respectively.
+ *
+ * Here's how the connection looks like:
+ *
+   +-----------+ stereo +-----------------+ 2x mono +-----------+
+   | AUDIO DEV |<------>| SPLITCOMB   left|<------->|#0  BRIDGE |
+   +-----------+        |            right|<------->|#1         |
+                        +-----------------+         +-----------+
+ */
 static void stereo_demo()
 {
-    pjmedia_port *conf, *splitter, *ch1;
+    pjmedia_port *conf;
     pj_status_t status;
 
     /* Disable existing sound device */
@@ -4732,27 +4831,28 @@ static void stereo_demo()
 				      2 * conf->info.samples_per_frame,
 				      conf->info.bits_per_sample,
 				      0	    /* options */,
-				      &splitter);
+				      &app_config.sc);
     pj_assert(status == PJ_SUCCESS);
 
     /* Connect channel0 (left channel?) to conference port slot0 */
-    status = pjmedia_splitcomb_set_channel(splitter, 0 /* ch0 */, 
+    status = pjmedia_splitcomb_set_channel(app_config.sc, 0 /* ch0 */, 
 					   0 /*options*/,
 					   conf);
     pj_assert(status == PJ_SUCCESS);
 
     /* Create reverse channel for channel1 (right channel?)... */
     status = pjmedia_splitcomb_create_rev_channel(app_config.pool,
-						  splitter,
+						  app_config.sc,
 						  1  /* ch1 */,
 						  0  /* options */,
-						  &ch1);
+						  &app_config.sc_ch1);
     pj_assert(status == PJ_SUCCESS);
 
     /* .. and register it to conference bridge (it would be slot1
      * if there's no other devices connected to the bridge)
      */
-    status = pjsua_conf_add_port(app_config.pool, ch1, NULL);
+    status = pjsua_conf_add_port(app_config.pool, app_config.sc_ch1, 
+				 &app_config.sc_ch1_slot);
     pj_assert(status == PJ_SUCCESS);
     
     /* Create sound device */
@@ -4766,7 +4866,7 @@ static void stereo_demo()
 
 
     /* Connect the splitter to the sound device */
-    status = pjmedia_snd_port_connect(app_config.snd, splitter);
+    status = pjmedia_snd_port_connect(app_config.snd, app_config.sc);
     pj_assert(status == PJ_SUCCESS);
 
 }
@@ -4899,3 +4999,4 @@ static pj_status_t create_ipv6_media_transports(void)
 
     return pjsua_media_transports_attach(tp, i, PJ_TRUE);
 }
+
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
index 8609fc5f0e..a10c67f887 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
@@ -54,15 +54,15 @@ static HWND	    hwndActionButton, hwndExitButton;
 //
 // STUN server
 #if 0
-// Use this to have the STUN server resolved normally
+	// Use this to have the STUN server resolved normally
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	"stun.fwdnet.net"
 #elif 0
-// Use this to have the STUN server resolved with DNS SRV
+	// Use this to have the STUN server resolved with DNS SRV
 #   define STUN_DOMAIN	"iptel.org"
 #   define STUN_SERVER	NULL
 #else
-// Use this to disable STUN
+	// Use this to disable STUN
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	NULL
 #endif
@@ -82,14 +82,16 @@ static int	    g_current_acc;
 static int	    g_current_call = PJSUA_INVALID_ID;
 static int	    g_current_action;
 
-enum {
+enum
+{
     ID_GLOBAL_STATUS	= 21,
     ID_URI,
     ID_CALL_STATUS,
     ID_POLL_TIMER,
 };
 
-enum {
+enum
+{
     ID_MENU_NONE	= 64,
     ID_MENU_CALL,
     ID_MENU_ANSWER,
@@ -102,101 +104,85 @@ enum {
 static ATOM		MyRegisterClass	(HINSTANCE, LPTSTR);
 BOOL			InitInstance	(HINSTANCE, int);
 static void		OnCreate	(HWND hWnd);
-static LRESULT CALLBACK	WndProc	(HWND, UINT, WPARAM, LPARAM);
+static LRESULT CALLBACK	WndProc		(HWND, UINT, WPARAM, LPARAM);
 
 
 
 /////////////////////////////////////////////////////////////////////////////
 
-static void OnError (const wchar_t *title, pj_status_t status)
+static void OnError(const wchar_t *title, pj_status_t status)
 {
     char errmsg[PJ_ERR_MSG_SIZE];
-    PJ_DECL_UNICODE_TEMP_BUF (werrmsg, PJ_ERR_MSG_SIZE);
-
-    pj_strerror (status, errmsg, sizeof (errmsg));
+    PJ_DECL_UNICODE_TEMP_BUF(werrmsg, PJ_ERR_MSG_SIZE);
 
-    MessageBox (NULL, PJ_STRING_TO_NATIVE (errmsg, werrmsg, PJ_ERR_MSG_SIZE),
-                title, MB_OK);
+    pj_strerror(status, errmsg, sizeof(errmsg));
+    
+    MessageBox(NULL, PJ_STRING_TO_NATIVE(errmsg, werrmsg, PJ_ERR_MSG_SIZE),
+	       title, MB_OK);
 }
 
 
-static void SetLocalURI (const char *uri, int len, bool enabled=true)
+static void SetLocalURI(const char *uri, int len, bool enabled=true)
 {
     wchar_t tmp[128];
-
-    if (len==-1) len=pj_ansi_strlen (uri);
-
-    pj_ansi_to_unicode (uri, len, tmp, PJ_ARRAY_SIZE (tmp));
-
-    SetDlgItemText (hMainWnd, ID_GLOBAL_STATUS, tmp);
-
-    EnableWindow (hwndGlobalStatus, enabled?TRUE:FALSE);
+    if (len==-1) len=pj_ansi_strlen(uri);
+    pj_ansi_to_unicode(uri, len, tmp, PJ_ARRAY_SIZE(tmp));
+    SetDlgItemText(hMainWnd, ID_GLOBAL_STATUS, tmp);
+    EnableWindow(hwndGlobalStatus, enabled?TRUE:FALSE);
 }
 
 
 
-static void SetURI (const char *uri, int len, bool enabled=true)
+static void SetURI(const char *uri, int len, bool enabled=true)
 {
     wchar_t tmp[128];
-
-    if (len==-1) len=pj_ansi_strlen (uri);
-
-    pj_ansi_to_unicode (uri, len, tmp, PJ_ARRAY_SIZE (tmp));
-
-    SetDlgItemText (hMainWnd, ID_URI, tmp);
-
-    EnableWindow (hwndURI, enabled?TRUE:FALSE);
+    if (len==-1) len=pj_ansi_strlen(uri);
+    pj_ansi_to_unicode(uri, len, tmp, PJ_ARRAY_SIZE(tmp));
+    SetDlgItemText(hMainWnd, ID_URI, tmp);
+    EnableWindow(hwndURI, enabled?TRUE:FALSE);
 }
 
 
-static void SetCallStatus (const char *state, int len)
+static void SetCallStatus(const char *state, int len)
 {
     wchar_t tmp[128];
-
-    if (len==-1) len=pj_ansi_strlen (state);
-
-    pj_ansi_to_unicode (state, len, tmp, PJ_ARRAY_SIZE (tmp));
-
-    SetDlgItemText (hMainWnd, ID_CALL_STATUS, tmp);
+    if (len==-1) len=pj_ansi_strlen(state);
+    pj_ansi_to_unicode(state, len, tmp, PJ_ARRAY_SIZE(tmp));
+    SetDlgItemText(hMainWnd, ID_CALL_STATUS, tmp);
 }
 
-static void SetAction (int action, bool enable=true)
+static void SetAction(int action, bool enable=true)
 {
     HMENU hMenu;
 
-    hMenu = CommandBar_GetMenu (hwndCB, 0);
+    hMenu = CommandBar_GetMenu(hwndCB, 0);
 
-    RemoveMenu (hMenu, ID_MENU_NONE, MF_BYCOMMAND);
-    RemoveMenu (hMenu, ID_MENU_CALL, MF_BYCOMMAND);
-    RemoveMenu (hMenu, ID_MENU_ANSWER, MF_BYCOMMAND);
-    RemoveMenu (hMenu, ID_MENU_DISCONNECT, MF_BYCOMMAND);
+    RemoveMenu(hMenu, ID_MENU_NONE, MF_BYCOMMAND);
+    RemoveMenu(hMenu, ID_MENU_CALL, MF_BYCOMMAND);
+    RemoveMenu(hMenu, ID_MENU_ANSWER, MF_BYCOMMAND);
+    RemoveMenu(hMenu, ID_MENU_DISCONNECT, MF_BYCOMMAND);
 
     switch (action) {
-
-        case ID_MENU_NONE:
-            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("None"));
-            SetWindowText (hwndActionButton, TEXT ("-"));
-            break;
-
-        case ID_MENU_CALL:
-            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("Call"));
-            SetWindowText (hwndActionButton, TEXT ("&Call"));
-            break;
-
-        case ID_MENU_ANSWER:
-            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("Answer"));
-            SetWindowText (hwndActionButton, TEXT ("&Answer"));
-            break;
-
-        case ID_MENU_DISCONNECT:
-            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("Hangup"));
-            SetWindowText (hwndActionButton, TEXT ("&Hangup"));
-            break;
+    case ID_MENU_NONE:
+	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("None"));
+	SetWindowText(hwndActionButton, TEXT("-"));
+	break;
+    case ID_MENU_CALL:
+	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Call"));
+	SetWindowText(hwndActionButton, TEXT("&Call"));
+	break;
+    case ID_MENU_ANSWER:
+	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Answer"));
+	SetWindowText(hwndActionButton, TEXT("&Answer"));
+	break;
+    case ID_MENU_DISCONNECT:
+	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Hangup"));
+	SetWindowText(hwndActionButton, TEXT("&Hangup"));
+	break;
     }
 
-    EnableMenuItem (hMenu, action, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
-
-    DrawMenuBar (hMainWnd);
+    EnableMenuItem(hMenu, action, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
+    DrawMenuBar(hMainWnd);
 
     g_current_action = action;
 }
@@ -205,35 +191,35 @@ static void SetAction (int action, bool enable=true)
 /*
  * Handler when invite state has changed.
  */
-static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
+static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
 {
     pjsua_call_info call_info;
 
-    PJ_UNUSED_ARG (e);
+    PJ_UNUSED_ARG(e);
 
-    pjsua_call_get_info (call_id, &call_info);
+    pjsua_call_get_info(call_id, &call_info);
 
     if (call_info.state == PJSIP_INV_STATE_DISCONNECTED) {
 
-        g_current_call = PJSUA_INVALID_ID;
-        SetURI (SIP_DST_URI, -1);
-        SetAction (ID_MENU_CALL);
-        //SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
-        SetCallStatus (call_info.last_status_text.ptr, call_info.last_status_text.slen);
+	g_current_call = PJSUA_INVALID_ID;
+	SetURI(SIP_DST_URI, -1);
+	SetAction(ID_MENU_CALL);
+	//SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
+	SetCallStatus(call_info.last_status_text.ptr, call_info.last_status_text.slen);
 
     } else {
-        //if (g_current_call == PJSUA_INVALID_ID)
-        //    g_current_call = call_id;
+	//if (g_current_call == PJSUA_INVALID_ID)
+	//    g_current_call = call_id;
 
-        if (call_info.remote_contact.slen)
-            SetURI (call_info.remote_contact.ptr, call_info.remote_contact.slen, false);
-        else
-            SetURI (call_info.remote_info.ptr, call_info.remote_info.slen, false);
+	if (call_info.remote_contact.slen)
+	    SetURI(call_info.remote_contact.ptr, call_info.remote_contact.slen, false);
+	else
+	    SetURI(call_info.remote_info.ptr, call_info.remote_info.slen, false);
 
-        if (call_info.state == PJSIP_INV_STATE_CONFIRMED)
-            SetAction (ID_MENU_DISCONNECT);
+	if (call_info.state == PJSIP_INV_STATE_CONFIRMED)
+	    SetAction(ID_MENU_DISCONNECT);
 
-        SetCallStatus (call_info.state_text.ptr, call_info.state_text.slen);
+	SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
     }
 }
 
@@ -243,15 +229,15 @@ static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
  * The action may connect the call to sound device, to file, or
  * to loop the call.
  */
-static void on_call_media_state (pjsua_call_id call_id)
+static void on_call_media_state(pjsua_call_id call_id)
 {
     pjsua_call_info call_info;
 
-    pjsua_call_get_info (call_id, &call_info);
+    pjsua_call_get_info(call_id, &call_info);
 
     if (call_info.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-        pjsua_conf_connect (call_info.conf_slot, 0);
-        pjsua_conf_connect (0, call_info.conf_slot);
+	pjsua_conf_connect(call_info.conf_slot, 0);
+	pjsua_conf_connect(0, call_info.conf_slot);
     }
 }
 
@@ -259,37 +245,37 @@ static void on_call_media_state (pjsua_call_id call_id)
 /**
  * Handler when there is incoming call.
  */
-static void on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
-                              pjsip_rx_data *rdata)
+static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
+			     pjsip_rx_data *rdata)
 {
     pjsua_call_info call_info;
 
-    PJ_UNUSED_ARG (acc_id);
-    PJ_UNUSED_ARG (rdata);
+    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG(rdata);
 
     if (g_current_call != PJSUA_INVALID_ID) {
-        pj_str_t reason;
-        reason = pj_str ("Another call is in progress");
-        pjsua_call_answer (call_id, PJSIP_SC_BUSY_HERE, &reason, NULL);
-        return;
+	pj_str_t reason;
+	reason = pj_str("Another call is in progress");
+	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, &reason, NULL);
+	return;
     }
 
     g_current_call = call_id;
 
-    pjsua_call_get_info (call_id, &call_info);
+    pjsua_call_get_info(call_id, &call_info);
 
-    SetAction (ID_MENU_ANSWER);
-    SetURI (call_info.remote_info.ptr, call_info.remote_info.slen, false);
-    pjsua_call_answer (call_id, 200, NULL, NULL);
+    SetAction(ID_MENU_ANSWER);
+    SetURI(call_info.remote_info.ptr, call_info.remote_info.slen, false);
+    pjsua_call_answer(call_id, 200, NULL, NULL);
 }
 
 
 /*
  * Handler registration status has changed.
  */
-static void on_reg_state (pjsua_acc_id acc_id)
+static void on_reg_state(pjsua_acc_id acc_id)
 {
-    PJ_UNUSED_ARG (acc_id);
+    PJ_UNUSED_ARG(acc_id);
 
     // Log already written.
 }
@@ -298,65 +284,65 @@ static void on_reg_state (pjsua_acc_id acc_id)
 /*
  * Handler on buddy state changed.
  */
-static void on_buddy_state (pjsua_buddy_id buddy_id)
+static void on_buddy_state(pjsua_buddy_id buddy_id)
 {
     /* Currently this is not processed */
-    PJ_UNUSED_ARG (buddy_id);
+    PJ_UNUSED_ARG(buddy_id);
 }
 
 
 /**
  * Incoming IM message (i.e. MESSAGE request)!
  */
-static void on_pager (pjsua_call_id call_id, const pj_str_t *from,
-                      const pj_str_t *to, const pj_str_t *contact,
-                      const pj_str_t *mime_type, const pj_str_t *text)
+static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
+		     const pj_str_t *to, const pj_str_t *contact,
+		     const pj_str_t *mime_type, const pj_str_t *text)
 {
     /* Currently this is not processed */
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (from);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
-    PJ_UNUSED_ARG (mime_type);
-    PJ_UNUSED_ARG (text);
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(from);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG(mime_type);
+    PJ_UNUSED_ARG(text);
 }
 
 
 /**
  * Received typing indication
  */
-static void on_typing (pjsua_call_id call_id, const pj_str_t *from,
-                       const pj_str_t *to, const pj_str_t *contact,
-                       pj_bool_t is_typing)
+static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
+		      const pj_str_t *to, const pj_str_t *contact,
+		      pj_bool_t is_typing)
 {
     /* Currently this is not processed */
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (from);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
-    PJ_UNUSED_ARG (is_typing);
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(from);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG(is_typing);
 }
 
-/**
- * Callback upon NAT detection completion
+/** 
+ * Callback upon NAT detection completion 
  */
-static void nat_detect_cb (const pj_stun_nat_detect_result *res)
+static void nat_detect_cb(const pj_stun_nat_detect_result *res)
 {
     if (res->status != PJ_SUCCESS) {
-        char msg[250];
-        pj_ansi_snprintf (msg, sizeof (msg), "NAT detection failed: %s",
-                          res->status_text);
-        SetCallStatus (msg, pj_ansi_strlen (msg));
+	char msg[250];
+	pj_ansi_snprintf(msg, sizeof(msg), "NAT detection failed: %s",
+			 res->status_text);
+	SetCallStatus(msg, pj_ansi_strlen(msg));
     } else {
-        char msg[250];
-        pj_ansi_snprintf (msg, sizeof (msg), "NAT type is %s",
-                          res->nat_type_name);
-        SetCallStatus (msg, pj_ansi_strlen (msg));
+	char msg[250];
+	pj_ansi_snprintf(msg, sizeof(msg), "NAT type is %s",
+			 res->nat_type_name);
+	SetCallStatus(msg, pj_ansi_strlen(msg));
     }
 }
 
 
-static BOOL OnInitStack (void)
+static BOOL OnInitStack(void)
 {
     pjsua_config	    cfg;
     pjsua_logging_config    log_cfg;
@@ -370,172 +356,141 @@ static BOOL OnInitStack (void)
 
     /* Create pjsua */
     status = pjsua_create();
-
     if (status != PJ_SUCCESS) {
-        OnError (TEXT ("Error creating pjsua"), status);
-        return FALSE;
+	OnError(TEXT("Error creating pjsua"), status);
+	return FALSE;
     }
 
     /* Create global pool for application */
-    g_pool = pjsua_pool_create ("pjsua", 4000, 4000);
+    g_pool = pjsua_pool_create("pjsua", 4000, 4000);
 
     /* Init configs */
-    pjsua_config_default (&cfg);
-
-    pjsua_media_config_default (&media_cfg);
-
-    pjsua_transport_config_default (&udp_cfg);
-
+    pjsua_config_default(&cfg);
+    pjsua_media_config_default(&media_cfg);
+    pjsua_transport_config_default(&udp_cfg);
     udp_cfg.port = SIP_PORT;
 
-    pjsua_transport_config_default (&rtp_cfg);
-
+    pjsua_transport_config_default(&rtp_cfg);
     rtp_cfg.port = 40000;
 
-    pjsua_logging_config_default (&log_cfg);
-
+    pjsua_logging_config_default(&log_cfg);
     log_cfg.level = 5;
-
-    log_cfg.log_filename = pj_str ("\\pjsua.txt");
-
+    log_cfg.log_filename = pj_str("\\pjsua.txt");
     log_cfg.msg_logging = 1;
-
     log_cfg.decor = pj_log_get_decor() | PJ_LOG_HAS_CR;
 
     /* Setup media */
     media_cfg.clock_rate = 8000;
-
     media_cfg.ec_options = PJMEDIA_ECHO_SIMPLE;
-
     media_cfg.ec_tail_len = 256;
-
     // use default quality setting
     //media_cfg.quality = 1;
     media_cfg.ptime = 20;
-
     media_cfg.enable_ice = USE_ICE;
 
     /* Initialize application callbacks */
     cfg.cb.on_call_state = &on_call_state;
-
     cfg.cb.on_call_media_state = &on_call_media_state;
-
     cfg.cb.on_incoming_call = &on_incoming_call;
-
     cfg.cb.on_reg_state = &on_reg_state;
-
     cfg.cb.on_buddy_state = &on_buddy_state;
-
     cfg.cb.on_pager = &on_pager;
-
     cfg.cb.on_typing = &on_typing;
-
     cfg.cb.on_nat_detect = &nat_detect_cb;
 
     if (SIP_PROXY) {
-        cfg.outbound_proxy_cnt = 1;
-        cfg.outbound_proxy[0] = pj_str (SIP_PROXY);
+	    cfg.outbound_proxy_cnt = 1;
+	    cfg.outbound_proxy[0] = pj_str(SIP_PROXY);
     }
-
+    
     if (NAMESERVER) {
-        cfg.nameserver_count = 1;
-        cfg.nameserver[0] = pj_str (NAMESERVER);
+	    cfg.nameserver_count = 1;
+	    cfg.nameserver[0] = pj_str(NAMESERVER);
     }
-
+    
     if (NAMESERVER && STUN_DOMAIN) {
-        cfg.stun_domain = pj_str (STUN_DOMAIN);
+	    cfg.stun_domain = pj_str(STUN_DOMAIN);
     } else if (STUN_SERVER) {
-        cfg.stun_host = pj_str (STUN_SERVER);
+	    cfg.stun_host = pj_str(STUN_SERVER);
     }
-
-
+    
+    
     /* Initialize pjsua */
-    status = pjsua_init (&cfg, &log_cfg, &media_cfg);
-
+    status = pjsua_init(&cfg, &log_cfg, &media_cfg);
     if (status != PJ_SUCCESS) {
-        OnError (TEXT ("Initialization error"), status);
-        return FALSE;
+	OnError(TEXT("Initialization error"), status);
+	return FALSE;
     }
 
     /* Set codec priority */
-    pjsua_codec_set_priority (pj_cstr (&tmp, "pcmu"), 240);
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "pcma"), 230);
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "speex/8000"), 190);
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "ilbc"), 189);
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "speex/16000"), 180);
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "speex/32000"), 0);
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "gsm"), 100);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "pcmu"), 240);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "pcma"), 230);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/8000"), 190);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "ilbc"), 189);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/16000"), 180);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/32000"), 0);
+    pjsua_codec_set_priority(pj_cstr(&tmp, "gsm"), 100);
 
 
     /* Add UDP transport and the corresponding PJSUA account */
-    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP,
-                                     &udp_cfg, &transport_id);
-
+    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP,
+				    &udp_cfg, &transport_id);
     if (status != PJ_SUCCESS) {
-        OnError (TEXT ("Error starting SIP transport"), status);
-        return FALSE;
+	OnError(TEXT("Error starting SIP transport"), status);
+	return FALSE;
     }
 
-    pjsua_transport_get_info (transport_id, &transport_info);
+    pjsua_transport_get_info(transport_id, &transport_info);
 
-    g_local_uri.ptr = (char*) pj_pool_alloc (g_pool, 128);
-    g_local_uri.slen = pj_ansi_sprintf (g_local_uri.ptr,
-                                        "<sip:%.*s:%d>",
-                                        (int) transport_info.local_name.host.slen,
-                                        transport_info.local_name.host.ptr,
-                                        transport_info.local_name.port);
+    g_local_uri.ptr = (char*)pj_pool_alloc(g_pool, 128);
+    g_local_uri.slen = pj_ansi_sprintf(g_local_uri.ptr,
+				       "<sip:%.*s:%d>",
+				       (int)transport_info.local_name.host.slen,
+				       transport_info.local_name.host.ptr,
+				       transport_info.local_name.port);
 
 
     /* Add local account */
-    pjsua_acc_add_local (transport_id, PJ_TRUE, &g_current_acc);
-    pjsua_acc_set_online_status (g_current_acc, PJ_TRUE);
+    pjsua_acc_add_local(transport_id, PJ_TRUE, &g_current_acc);
+    pjsua_acc_set_online_status(g_current_acc, PJ_TRUE);
 
     /* Add account */
-
     if (HAS_SIP_ACCOUNT) {
-        pjsua_acc_config cfg;
-
-        pjsua_acc_config_default (&cfg);
-        cfg.id = pj_str ("sip:" SIP_USER "@" SIP_DOMAIN);
-        cfg.reg_uri = pj_str ("sip:" SIP_DOMAIN);
-        cfg.cred_count = 1;
-        cfg.cred_info[0].realm = pj_str (SIP_REALM);
-        cfg.cred_info[0].scheme = pj_str ("digest");
-        cfg.cred_info[0].username = pj_str (SIP_USER);
-        cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
-        cfg.cred_info[0].data = pj_str (SIP_PASSWD);
-
-        status = pjsua_acc_add (&cfg, PJ_TRUE, &g_current_acc);
-
-        if (status != PJ_SUCCESS) {
-            pjsua_destroy();
-            return PJ_FALSE;
-        }
+	pjsua_acc_config cfg;
+
+	pjsua_acc_config_default(&cfg);
+	cfg.id = pj_str("sip:" SIP_USER "@" SIP_DOMAIN);
+	cfg.reg_uri = pj_str("sip:" SIP_DOMAIN);
+	cfg.cred_count = 1;
+	cfg.cred_info[0].realm = pj_str(SIP_REALM);
+	cfg.cred_info[0].scheme = pj_str("digest");
+	cfg.cred_info[0].username = pj_str(SIP_USER);
+	cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
+	cfg.cred_info[0].data = pj_str(SIP_PASSWD);
+
+	status = pjsua_acc_add(&cfg, PJ_TRUE, &g_current_acc);
+	if (status != PJ_SUCCESS) {
+	    pjsua_destroy();
+	    return PJ_FALSE;
+	}
     }
 
     /* Add buddy */
     if (SIP_DST_URI) {
-        pjsua_buddy_config bcfg;
-
-        pjsua_buddy_config_default (&bcfg);
-        bcfg.uri = pj_str (SIP_DST_URI);
-        bcfg.subscribe = PJ_FALSE;
-
-        pjsua_buddy_add (&bcfg, NULL);
+    	pjsua_buddy_config bcfg;
+    
+    	pjsua_buddy_config_default(&bcfg);
+    	bcfg.uri = pj_str(SIP_DST_URI);
+    	bcfg.subscribe = PJ_FALSE;
+    	
+    	pjsua_buddy_add(&bcfg, NULL);
     }
 
     /* Start pjsua */
     status = pjsua_start();
-
     if (status != PJ_SUCCESS) {
-        OnError (TEXT ("Error starting pjsua"), status);
-        return FALSE;
+	OnError(TEXT("Error starting pjsua"), status);
+	return FALSE;
     }
 
     return TRUE;
@@ -544,39 +499,40 @@ static BOOL OnInitStack (void)
 
 //////////////////////////////////////////////////////////////////////////////
 
-int WINAPI WinMain (HINSTANCE hInstance,
-                    HINSTANCE hPrevInstance,
-                    LPTSTR    lpCmdLine,
-                    int       nCmdShow)
+int WINAPI WinMain(HINSTANCE hInstance,
+		   HINSTANCE hPrevInstance,
+		   LPTSTR    lpCmdLine,
+		   int       nCmdShow)
 {
     MSG msg;
     HACCEL hAccelTable;
 
-    PJ_UNUSED_ARG (lpCmdLine);
-    PJ_UNUSED_ARG (hPrevInstance);
+    PJ_UNUSED_ARG(lpCmdLine);
+    PJ_UNUSED_ARG(hPrevInstance);
 
     // Perform application initialization:
-
-    if (!InitInstance (hInstance, nCmdShow)) {
-        return FALSE;
+    if (!InitInstance (hInstance, nCmdShow)) 
+    {
+	return FALSE;
     }
-
-    hAccelTable = LoadAccelerators (hInstance, (LPCTSTR) IDC_PJSUA_WINCE);
-
-
+    
+    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_PJSUA_WINCE);
+    
+    
     // Main message loop:
-
-    while (GetMessage (&msg, NULL, 0, 0)) {
-        if (!TranslateAccelerator (msg.hwnd, hAccelTable, &msg)) {
-            TranslateMessage (&msg);
-            DispatchMessage (&msg);
-        }
+    while (GetMessage(&msg, NULL, 0, 0)) 
+    {
+	if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
+	{
+	    TranslateMessage(&msg);
+	    DispatchMessage(&msg);
+	}
     }
-
+    
     return msg.wParam;
 }
 
-static ATOM MyRegisterClass (HINSTANCE hInstance, LPTSTR szWindowClass)
+static ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
 {
     WNDCLASS wc;
 
@@ -585,17 +541,17 @@ static ATOM MyRegisterClass (HINSTANCE hInstance, LPTSTR szWindowClass)
     wc.cbClsExtra	= 0;
     wc.cbWndExtra	= 0;
     wc.hInstance	= hInstance;
-    wc.hIcon		= LoadIcon (hInstance, MAKEINTRESOURCE (IDI_PJSUA_WINCE));
+    wc.hIcon		= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PJSUA_WINCE));
     wc.hCursor		= 0;
-    wc.hbrBackground	= (HBRUSH) GetStockObject (WHITE_BRUSH);
+    wc.hbrBackground	= (HBRUSH) GetStockObject(WHITE_BRUSH);
     wc.lpszMenuName	= 0;
     wc.lpszClassName	= szWindowClass;
 
-    return RegisterClass (&wc);
+    return RegisterClass(&wc);
 }
 
 
-BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
+BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 {
     HWND	hWnd;
     TCHAR	szTitle[MAX_LOADSTRING];
@@ -604,244 +560,221 @@ BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
     hInst = hInstance;
 
     /* Init stack */
-
     if (OnInitStack() == FALSE)
-        return FALSE;
-
-    LoadString (hInstance, IDC_PJSUA_WINCE, szWindowClass, MAX_LOADSTRING);
+	return FALSE;
 
-    MyRegisterClass (hInstance, szWindowClass);
+    LoadString(hInstance, IDC_PJSUA_WINCE, szWindowClass, MAX_LOADSTRING);
+    MyRegisterClass(hInstance, szWindowClass);
 
-    LoadString (hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
+    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
+    hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
+	    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 200, 
+	    NULL, NULL, hInstance, NULL);
 
-    hWnd = CreateWindow (szWindowClass, szTitle, WS_VISIBLE,
-                         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 200,
-                         NULL, NULL, hInstance, NULL);
-
-    if (!hWnd) {
-        return FALSE;
+    if (!hWnd)
+    {	
+	    return FALSE;
     }
 
     hMainWnd = hWnd;
-
-    ShowWindow (hWnd, nCmdShow);
-    UpdateWindow (hWnd);
-
+    ShowWindow(hWnd, nCmdShow);
+    UpdateWindow(hWnd);
     if (hwndCB)
-        CommandBar_Show (hwndCB, TRUE);
+	CommandBar_Show(hwndCB, TRUE);
 
-    SetTimer (hMainWnd, ID_POLL_TIMER, 50, NULL);
+    SetTimer(hMainWnd, ID_POLL_TIMER, 50, NULL);
 
     pjsua_detect_nat_type();
-
     return TRUE;
 }
 
 
-static void OnCreate (HWND hWnd)
+static void OnCreate(HWND hWnd)
 {
-    enum {
-        X = 10,
-        Y = 40,
-        W = 220,
-        H = 30,
+    enum 
+    {
+	X = 10,
+	Y = 40,
+	W = 220,
+	H = 30,
     };
 
     DWORD dwStyle;
 
     hMainWnd = hWnd;
 
-    hwndCB = CommandBar_Create (hInst, hWnd, 1);
-    CommandBar_InsertMenubar (hwndCB, hInst, IDM_MENU, 0);
-    CommandBar_AddAdornments (hwndCB, 0, 0);
+    hwndCB = CommandBar_Create(hInst, hWnd, 1);			
+    CommandBar_InsertMenubar(hwndCB, hInst, IDM_MENU, 0);   
+    CommandBar_AddAdornments(hwndCB, 0, 0);
 
     // Create global status text
-    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED | ES_LEFT;
-    hwndGlobalStatus = CreateWindow (
-                           TEXT ("EDIT"),  // Class name
-                           NULL,           // Window text
-                           dwStyle,        // Window style
-                           X,		// x-coordinate of the upper-left corner
-                           Y+0,            // y-coordinate of the upper-left corner
-                           W,		// Width of the window for the edit
-                           // control
-                           H-5,		// Height of the window for the edit
-                           // control
-                           hWnd,           // Window handle to the parent window
-                           (HMENU) ID_GLOBAL_STATUS, // Control identifier
-                           hInst,           // Instance handle
-                           NULL);          // Specify NULL for this parameter when
-    // you create a control
-    SetLocalURI (g_local_uri.ptr, g_local_uri.slen, false);
+    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED | ES_LEFT;  
+    hwndGlobalStatus = CreateWindow(
+                TEXT("EDIT"),   // Class name
+                NULL,           // Window text
+                dwStyle,        // Window style
+                X,		// x-coordinate of the upper-left corner
+                Y+0,            // y-coordinate of the upper-left corner
+                W,		// Width of the window for the edit
+                                // control
+                H-5,		// Height of the window for the edit
+                                // control
+                hWnd,           // Window handle to the parent window
+                (HMENU) ID_GLOBAL_STATUS, // Control identifier
+                hInst,           // Instance handle
+                NULL);          // Specify NULL for this parameter when 
+                                // you create a control
+    SetLocalURI(g_local_uri.ptr, g_local_uri.slen, false);
 
 
     // Create URI edit
-    dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER;
+    dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER;  
     hwndURI = CreateWindow (
-                  TEXT ("EDIT"),  // Class name
-                  NULL,		// Window text
-                  dwStyle,        // Window style
-                  X,  // x-coordinate of the upper-left corner
-                  Y+H,  // y-coordinate of the upper-left corner
-                  W,  // Width of the window for the edit
-                  // control
-                  H-5,  // Height of the window for the edit
-                  // control
-                  hWnd,           // Window handle to the parent window
-                  (HMENU) ID_URI, // Control identifier
-                  hInst,           // Instance handle
-                  NULL);          // Specify NULL for this parameter when
-    // you create a control
+                TEXT("EDIT"),   // Class name
+                NULL,		// Window text
+                dwStyle,        // Window style
+                X,  // x-coordinate of the upper-left corner
+                Y+H,  // y-coordinate of the upper-left corner
+                W,  // Width of the window for the edit
+                                // control
+                H-5,  // Height of the window for the edit
+                                // control
+                hWnd,           // Window handle to the parent window
+                (HMENU) ID_URI, // Control identifier
+                hInst,           // Instance handle
+                NULL);          // Specify NULL for this parameter when 
+                                // you create a control
 
     // Create action Button
-    hwndActionButton = CreateWindow (L"button", L"Action",
-                                     WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
-                                     X, Y+2*H,
-                                     60, H-5, hWnd,
-                                     (HMENU) ID_BTN_ACTION,
-                                     hInst, NULL);
+    hwndActionButton = CreateWindow( L"button", L"Action", 
+                         WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
+                         X, Y+2*H, 
+			 60, H-5, hWnd, 
+                         (HMENU) ID_BTN_ACTION,
+                         hInst, NULL );
 
     // Create exit button
-    hwndExitButton = CreateWindow (L"button", L"E&xit",
-                                   WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
-                                   X+70, Y+2*H,
-                                   60, H-5, hWnd,
-                                   (HMENU) ID_EXIT,
-                                   hInst, NULL);
+    hwndExitButton = CreateWindow( L"button", L"E&xit", 
+                         WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
+                         X+70, Y+2*H, 
+			 60, H-5, hWnd, 
+                         (HMENU) ID_EXIT,
+                         hInst, NULL );
 
 
     // Create call status edit
-    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED;
+    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED;  
     hwndCallStatus = CreateWindow (
-                         TEXT ("EDIT"),  // Class name
-                         NULL,		// Window text
-                         dwStyle,        // Window style
-                         X,  // x-coordinate of the upper-left corner
-                         Y+3*H,  // y-coordinate of the upper-left corner
-                         W,  // Width of the window for the edit
-                         // control
-                         H-5,  // Height of the window for the edit
-                         // control
-                         hWnd,           // Window handle to the parent window
-                         (HMENU) ID_CALL_STATUS, // Control identifier
-                         hInst,           // Instance handle
-                         NULL);          // Specify NULL for this parameter when
-    // you create a control
-    SetCallStatus ("Ready", 5);
-    SetAction (ID_MENU_CALL);
-    SetURI (SIP_DST_URI, -1);
-    SetFocus (hWnd);
+                TEXT("EDIT"),   // Class name
+                NULL,		// Window text
+                dwStyle,        // Window style
+                X,  // x-coordinate of the upper-left corner
+                Y+3*H,  // y-coordinate of the upper-left corner
+                W,  // Width of the window for the edit
+                                // control
+                H-5,  // Height of the window for the edit
+                                // control
+                hWnd,           // Window handle to the parent window
+                (HMENU) ID_CALL_STATUS, // Control identifier
+                hInst,           // Instance handle
+                NULL);          // Specify NULL for this parameter when 
+                                // you create a control
+    SetCallStatus("Ready", 5);
+    SetAction(ID_MENU_CALL);
+    SetURI(SIP_DST_URI, -1);
+    SetFocus(hWnd);
 
 }
 
 
-static void OnDestroy (void)
+static void OnDestroy(void)
 {
     pjsua_destroy();
 }
 
-static LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
     int wmId, wmEvent;
-
+    
     switch (message) {
-
-        case WM_KEYUP:
-
-            if (wParam==114) {
-                wParam = ID_MENU_CALL;
-            } else if (wParam==115) {
-                if (g_current_call == PJSUA_INVALID_ID)
-                    wParam = ID_EXIT;
-                else
-                    wParam = ID_MENU_DISCONNECT;
-            } else
-                break;
-
-        case WM_COMMAND:
-            wmId    = LOWORD (wParam);
-
-            wmEvent = HIWORD (wParam);
-
-            if (wmId == ID_BTN_ACTION)
-                wmId = g_current_action;
-
-            switch (wmId) {
-
-                case ID_MENU_CALL:
-
-                    if (g_current_call != PJSUA_INVALID_ID) {
-                        MessageBox (NULL, TEXT ("Can not make call"),
-                                    TEXT ("You already have one call active"), MB_OK);
-                    }
-
-                    pj_str_t dst_uri;
-
-                    wchar_t text[256];
-                    char tmp[256];
-                    pj_status_t status;
-
-                    GetWindowText (hwndURI, text, PJ_ARRAY_SIZE (text));
-                    pj_unicode_to_ansi (text, pj_unicode_strlen (text),
-                                        tmp, sizeof (tmp));
-                    dst_uri.ptr = tmp;
-                    dst_uri.slen = pj_ansi_strlen (tmp);
-                    status = pjsua_call_make_call (g_current_acc,
-                                                   &dst_uri, 0, NULL,
-                                                   NULL, &g_current_call);
-
-                    if (status != PJ_SUCCESS)
-                        OnError (TEXT ("Unable to make call"), status);
-
-                    break;
-
-                case ID_MENU_ANSWER:
-                    if (g_current_call == PJSUA_INVALID_ID)
-                        MessageBox (NULL, TEXT ("Can not answer"),
-                                    TEXT ("There is no call!"), MB_OK);
-                    else
-                        pjsua_call_answer (g_current_call, 200, NULL, NULL);
-
-                    break;
-
-                case ID_MENU_DISCONNECT:
-                    if (g_current_call == PJSUA_INVALID_ID)
-                        MessageBox (NULL, TEXT ("Can not disconnect"),
-                                    TEXT ("There is no call!"), MB_OK);
-                    else
-                        pjsua_call_hangup (g_current_call, PJSIP_SC_DECLINE, NULL, NULL);
-
-                    break;
-
-                case ID_EXIT:
-                    DestroyWindow (hWnd);
-
-                    break;
-
-                default:
-                    return DefWindowProc (hWnd, message, wParam, lParam);
-            }
-
-            break;
-
-        case WM_CREATE:
-            OnCreate (hWnd);
-            break;
-
-        case WM_DESTROY:
-            OnDestroy();
-            CommandBar_Destroy (hwndCB);
-            PostQuitMessage (0);
-            break;
-
-        case WM_TIMER:
-            pjsua_handle_events (1);
-            break;
-
-        default:
-            return DefWindowProc (hWnd, message, wParam, lParam);
+    case WM_KEYUP:
+	if (wParam==114) {
+	    wParam = ID_MENU_CALL;
+	} else if (wParam==115) {
+	    if (g_current_call == PJSUA_INVALID_ID)
+		wParam = ID_EXIT;
+	    else
+		wParam = ID_MENU_DISCONNECT;
+	} else
+	    break;
+
+    case WM_COMMAND:
+	wmId    = LOWORD(wParam); 
+	wmEvent = HIWORD(wParam); 
+	if (wmId == ID_BTN_ACTION)
+	    wmId = g_current_action;
+	switch (wmId)
+	{
+	case ID_MENU_CALL:
+	    if (g_current_call != PJSUA_INVALID_ID) {
+		MessageBox(NULL, TEXT("Can not make call"), 
+			   TEXT("You already have one call active"), MB_OK);
+	    }
+	    pj_str_t dst_uri;
+	    wchar_t text[256];
+	    char tmp[256];
+	    pj_status_t status;
+
+	    GetWindowText(hwndURI, text, PJ_ARRAY_SIZE(text));
+	    pj_unicode_to_ansi(text, pj_unicode_strlen(text),
+			       tmp, sizeof(tmp));
+	    dst_uri.ptr = tmp;
+	    dst_uri.slen = pj_ansi_strlen(tmp);
+	    status = pjsua_call_make_call(g_current_acc,
+						      &dst_uri, 0, NULL,
+						      NULL, &g_current_call);
+	    if (status != PJ_SUCCESS)
+		OnError(TEXT("Unable to make call"), status);
+	    break;
+	case ID_MENU_ANSWER:
+	    if (g_current_call == PJSUA_INVALID_ID)
+		MessageBox(NULL, TEXT("Can not answer"), 
+			   TEXT("There is no call!"), MB_OK);
+	    else
+		pjsua_call_answer(g_current_call, 200, NULL, NULL);
+	    break;
+	case ID_MENU_DISCONNECT:
+	    if (g_current_call == PJSUA_INVALID_ID)
+		MessageBox(NULL, TEXT("Can not disconnect"), 
+			   TEXT("There is no call!"), MB_OK);
+	    else
+		pjsua_call_hangup(g_current_call, PJSIP_SC_DECLINE, NULL, NULL);
+	    break;
+	case ID_EXIT:
+	    DestroyWindow(hWnd);
+	    break;
+	default:
+	    return DefWindowProc(hWnd, message, wParam, lParam);
+	}
+	break;
+
+    case WM_CREATE:
+	OnCreate(hWnd);
+	break;
+
+    case WM_DESTROY:
+	OnDestroy();
+	CommandBar_Destroy(hwndCB);
+	PostQuitMessage(0);
+	break;
+
+    case WM_TIMER:
+	pjsua_handle_events(1);
+	break;
+
+    default:
+	return DefWindowProc(hWnd, message, wParam, lParam);
     }
-
-    return 0;
+   return 0;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.c b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.c
index 3b8474357f..0ac9c67d38 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.c
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.c
@@ -1,4 +1,4 @@
-/* $Id: systest.c 2840 2009-07-18 09:18:26Z bennylp $ */
+/* $Id: systest.c 2991 2009-11-08 03:35:41Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  *
@@ -114,7 +114,7 @@ static void systest_perror(const char *title, pj_status_t status)
 	errmsg[0] = '\0';
     
     strcpy(themsg, title);
-    strncat(themsg, errmsg, sizeof(themsg));
+    strncat(themsg, errmsg, sizeof(themsg)-1);
     themsg[sizeof(themsg)-1] = '\0';
 
     gui_msgbox("Error", themsg, WITH_OK);
@@ -245,16 +245,32 @@ on_return:
     return;
 }
 
+/* Util: create file player, each time trying different paths until we get
+ * the file.
+ */
+static pj_status_t create_player(unsigned path_cnt, const char *paths[], 
+				 pjsua_player_id *p_id)
+{
+    pj_str_t name;
+    pj_status_t status = PJ_ENOTFOUND;
+    unsigned i;
+
+    for (i=0; i<path_cnt; ++i) {
+	status = pjsua_player_create(pj_cstr(&name, paths[i]), 0, p_id);
+	if (status == PJ_SUCCESS)
+	    return PJ_SUCCESS;
+    }
+    return status;
+}
 
 /*****************************************************************************
  * test: play WAV file
  */
-static void systest_play_wav(const char *filename)
+static void systest_play_wav(unsigned path_cnt, const char *paths[])
 {
     pjsua_player_id play_id = PJSUA_INVALID_ID;
     enum gui_key key;
     test_item_t *ti;
-    pj_str_t name;
     const char *title = "WAV File Playback Test";
     pj_status_t status;
 
@@ -268,7 +284,7 @@ static void systest_play_wav(const char *filename)
 		     "impairments such as stutter. Let this test run "
 		     "for a while to make sure that everything is okay."
 		     " Press OK to start, CANCEL to skip",
-		     filename);
+		     paths[0]);
 
     key = gui_msgbox(title, textbuf,
 		     WITH_OKCANCEL);
@@ -280,7 +296,7 @@ static void systest_play_wav(const char *filename)
     PJ_LOG(3,(THIS_FILE, "Running %s", title));
 
     /* WAV port */
-    status = pjsua_player_create(pj_cstr(&name, filename), 0, &play_id);
+    status = create_player(path_cnt, paths, &play_id);
     if (status != PJ_SUCCESS)
 	goto on_return;
 
@@ -313,12 +329,16 @@ on_return:
 
 static void systest_play_wav1(void)
 {
-    systest_play_wav(WAV_PLAYBACK_PATH);
+    const char *paths[] = { WAV_PLAYBACK_PATH, 
+			    ALT_PATH1 WAV_PLAYBACK_PATH };
+    systest_play_wav(PJ_ARRAY_SIZE(paths), paths);
 }
 
 static void systest_play_wav2(void)
 {
-    systest_play_wav(WAV_TOCK8_PATH);
+    const char *paths[] = { WAV_TOCK8_PATH, 
+			    ALT_PATH1 WAV_TOCK8_PATH};
+    systest_play_wav(PJ_ARRAY_SIZE(paths), paths);
 }
 
 
@@ -712,7 +732,7 @@ static int calculate_latency(pj_pool_t *pool, pjmedia_port *wav,
 
 static void systest_latency_test(void)
 {
-    const pj_str_t ref_wav_file = pj_str(WAV_TOCK8_PATH);
+    const char *ref_wav_paths[] = { WAV_TOCK8_PATH, ALT_PATH1 WAV_TOCK8_PATH };
     const pj_str_t rec_wav_file = pj_str(WAV_LATENCY_OUT_PATH);
     pjsua_player_id play_id = PJSUA_INVALID_ID;
     pjsua_conf_port_id play_slot = PJSUA_INVALID_ID;
@@ -754,7 +774,8 @@ static void systest_latency_test(void)
 
     PJ_LOG(3,(THIS_FILE, "Running %s", title));
 
-    status = pjsua_player_create(&ref_wav_file, 0, &play_id);
+    status = create_player(PJ_ARRAY_SIZE(ref_wav_paths), ref_wav_paths, 
+			   &play_id);
     if (status != PJ_SUCCESS)
 	goto on_return;
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.h b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.h
index 0f10bd83cd..cb5475c350 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.h
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsystest/systest.h
@@ -1,4 +1,4 @@
-/* $Id: systest.h 2839 2009-07-17 11:37:42Z bennylp $ */
+/* $Id: systest.h 2991 2009-11-08 03:35:41Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  *
@@ -53,6 +53,7 @@
     #define WAV_REC_OUT_PATH		"\\PJSYSTEST_TESTREC.WAV"
     #define WAV_TOCK8_PATH		"\\Program Files\\pjsystest\\tock8.WAV"
     #define WAV_LATENCY_OUT_PATH	"\\PJSYSTEST_LATREC.WAV"
+    #define ALT_PATH1			""
 #else
     #define LOG_OUT_PATH		"PJSYSTEST.LOG"
     #define RESULT_OUT_PATH		"PJSYSTEST_RESULT.TXT"
@@ -60,6 +61,7 @@
     #define WAV_REC_OUT_PATH		"PJSYSTEST_TESTREC.WAV"
     #define WAV_TOCK8_PATH		"tock8.wav"
     #define WAV_LATENCY_OUT_PATH	"PJSYSTEST_LATREC.WAV"
+    #define ALT_PATH1			"../../tests/pjsua/wavs/"
 #endif
 
 #ifdef __cplusplus
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp
index cc75d884ba..2d42d96e2e 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp
@@ -14,21 +14,21 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // CPocketPJApp
 
-BEGIN_MESSAGE_MAP (CPocketPJApp, CWinApp)
-    //{{AFX_MSG_MAP(CPocketPJApp)
-    // NOTE - the ClassWizard will add and remove mapping macros here.
-    //    DO NOT EDIT what you see in these blocks of generated code!
-    //}}AFX_MSG_MAP
+BEGIN_MESSAGE_MAP(CPocketPJApp, CWinApp)
+	//{{AFX_MSG_MAP(CPocketPJApp)
+		// NOTE - the ClassWizard will add and remove mapping macros here.
+		//    DO NOT EDIT what you see in these blocks of generated code!
+	//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CPocketPJApp construction
 
 CPocketPJApp::CPocketPJApp()
-        : CWinApp()
+	: CWinApp()
 {
-    // TODO: add construction code here,
-    // Place all significant initialization in InitInstance
+	// TODO: add construction code here,
+	// Place all significant initialization in InitInstance
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -41,24 +41,26 @@ CPocketPJApp theApp;
 
 BOOL CPocketPJApp::InitInstance()
 {
-    // Standard initialization
-    // If you are not using these features and wish to reduce the size
-    //  of your final executable, you should remove from the following
-    //  the specific initialization routines you do not need.
+	// Standard initialization
+	// If you are not using these features and wish to reduce the size
+	//  of your final executable, you should remove from the following
+	//  the specific initialization routines you do not need.
 
-    CPocketPJDlg dlg;
-    m_pMainWnd = &dlg;
-    int nResponse = dlg.DoModal();
+	CPocketPJDlg dlg;
+	m_pMainWnd = &dlg;
+	int nResponse = dlg.DoModal();
+	if (nResponse == IDOK)
+	{
+		// TODO: Place code here to handle when the dialog is
+		//  dismissed with OK
+	}
+	else if (nResponse == IDCANCEL)
+	{
+		// TODO: Place code here to handle when the dialog is
+		//  dismissed with Cancel
+	}
 
-    if (nResponse == IDOK) {
-        // TODO: Place code here to handle when the dialog is
-        //  dismissed with OK
-    } else if (nResponse == IDCANCEL) {
-        // TODO: Place code here to handle when the dialog is
-        //  dismissed with Cancel
-    }
-
-    // Since the dialog has been closed, return FALSE so that we exit the
-    //  application, rather than start the application's message pump.
-    return FALSE;
+	// Since the dialog has been closed, return FALSE so that we exit the
+	//  application, rather than start the application's message pump.
+	return FALSE;
 }
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
index ecec2641ab..b8a6bf2f1e 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
@@ -18,65 +18,64 @@ static CPocketPJDlg *theDlg;
 /////////////////////////////////////////////////////////////////////////////
 // CPocketPJDlg dialog
 
-CPocketPJDlg::CPocketPJDlg (CWnd* pParent /*=NULL*/)
-        : CDialog (CPocketPJDlg::IDD, pParent), m_PopUp (NULL)
+CPocketPJDlg::CPocketPJDlg(CWnd* pParent /*=NULL*/)
+	: CDialog(CPocketPJDlg::IDD, pParent), m_PopUp(NULL)
 {
-    //{{AFX_DATA_INIT(CPocketPJDlg)
-    // NOTE: the ClassWizard will add member initialization here
-    //}}AFX_DATA_INIT
-    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
-    m_hIcon = AfxGetApp()->LoadIcon (IDR_MAINFRAME);
-
-    theDlg = this;
-
-    m_PopUp = new CPopUpWnd (this);
-    m_PopUp->Hide();
-
-    unsigned i;
-    m_PopUpCount = 0;
-
-    for (i=0; i<POPUP_MAX_TYPE; ++i) {
-        m_PopUpState[i] = FALSE;
-    }
+	//{{AFX_DATA_INIT(CPocketPJDlg)
+		// NOTE: the ClassWizard will add member initialization here
+	//}}AFX_DATA_INIT
+	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
+	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
+
+	theDlg = this;
+
+	m_PopUp = new CPopUpWnd(this);
+	m_PopUp->Hide();
+
+	unsigned i;
+	m_PopUpCount = 0;
+	for (i=0; i<POPUP_MAX_TYPE; ++i) {
+	    m_PopUpState[i] = FALSE;
+	}
 }
 
-void CPocketPJDlg::DoDataExchange (CDataExchange* pDX)
+void CPocketPJDlg::DoDataExchange(CDataExchange* pDX)
 {
-    CDialog::DoDataExchange (pDX);
-    //{{AFX_DATA_MAP(CPocketPJDlg)
-    DDX_Control (pDX, IDC_URL, m_Url);
-    DDX_Control (pDX, IDC_BUDDY_LIST, m_BuddyList);
-    DDX_Control (pDX, IDC_BTN_ACTION, m_BtnUrlAction);
-    DDX_Control (pDX, IDC_BTN_ACC, m_BtnAcc);
-    DDX_Control (pDX, IDC_ACC_ID, m_AccId);
-    //}}AFX_DATA_MAP
+	CDialog::DoDataExchange(pDX);
+	//{{AFX_DATA_MAP(CPocketPJDlg)
+	DDX_Control(pDX, IDC_URL, m_Url);
+	DDX_Control(pDX, IDC_BUDDY_LIST, m_BuddyList);
+	DDX_Control(pDX, IDC_BTN_ACTION, m_BtnUrlAction);
+	DDX_Control(pDX, IDC_BTN_ACC, m_BtnAcc);
+	DDX_Control(pDX, IDC_ACC_ID, m_AccId);
+	//}}AFX_DATA_MAP
 }
 
-BEGIN_MESSAGE_MAP (CPocketPJDlg, CDialog)
-    //{{AFX_MSG_MAP(CPocketPJDlg)
-    ON_BN_CLICKED (IDC_BTN_ACC, OnBtnAcc)
-    ON_BN_CLICKED (IDC_BTN_ACTION, OnBtnAction)
-    ON_COMMAND (IDC_ACC_SETTINGS, OnSettings)
-    ON_COMMAND (IDC_URI_CALL, OnUriCall)
-    ON_WM_TIMER()
-    ON_COMMAND (IDC_URI_ADD_BUDDY, OnUriAddBuddy)
-    ON_COMMAND (IDC_URI_DEL_BUDDY, OnUriDelBuddy)
-    ON_COMMAND (IDC_ACC_ONLINE, OnAccOnline)
-    ON_COMMAND (IDC_ACC_INVISIBLE, OnAccInvisible)
-    ON_NOTIFY (NM_CLICK, IDC_BUDDY_LIST, OnClickBuddyList)
-    //}}AFX_MSG_MAP
+BEGIN_MESSAGE_MAP(CPocketPJDlg, CDialog)
+	//{{AFX_MSG_MAP(CPocketPJDlg)
+	ON_BN_CLICKED(IDC_BTN_ACC, OnBtnAcc)
+	ON_BN_CLICKED(IDC_BTN_ACTION, OnBtnAction)
+	ON_COMMAND(IDC_ACC_SETTINGS, OnSettings)
+	ON_COMMAND(IDC_URI_CALL, OnUriCall)
+	ON_WM_TIMER()
+	ON_COMMAND(IDC_URI_ADD_BUDDY, OnUriAddBuddy)
+	ON_COMMAND(IDC_URI_DEL_BUDDY, OnUriDelBuddy)
+	ON_COMMAND(IDC_ACC_ONLINE, OnAccOnline)
+	ON_COMMAND(IDC_ACC_INVISIBLE, OnAccInvisible)
+	ON_NOTIFY(NM_CLICK, IDC_BUDDY_LIST, OnClickBuddyList)
+	//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 
-void CPocketPJDlg::Error (const CString &title, pj_status_t rc)
+void CPocketPJDlg::Error(const CString &title, pj_status_t rc)
 {
     char errmsg[PJ_ERR_MSG_SIZE];
     wchar_t werrmsg[PJ_ERR_MSG_SIZE];
 
-    pj_strerror (rc, errmsg, sizeof (errmsg));
-    pj_ansi_to_unicode (errmsg, strlen (errmsg), werrmsg, PJ_ARRAY_SIZE (werrmsg));
+    pj_strerror(rc, errmsg, sizeof(errmsg));
+    pj_ansi_to_unicode(errmsg, strlen(errmsg), werrmsg, PJ_ARRAY_SIZE(werrmsg));
 
-    AfxMessageBox (title + _T (": ") + werrmsg);
+    AfxMessageBox(title + _T(": ") + werrmsg);
 }
 
 BOOL CPocketPJDlg::Restart()
@@ -85,43 +84,41 @@ BOOL CPocketPJDlg::Restart()
     pj_status_t status;
 
     char ver[80];
-    sprintf (ver, "PocketPJ/%s", pj_get_version());
+    sprintf(ver, "PocketPJ/%s", pj_get_version());
 
-    ShowWindow (SW_SHOW);
-    PopUp_Show (POPUP_REGISTRATION, ver,
-                "Starting up....", "", "", "", 0);
+    ShowWindow(SW_SHOW);
+    PopUp_Show(POPUP_REGISTRATION, ver,
+	       "Starting up....", "", "", "", 0);
 
-    KillTimer (TIMER_ID);
+    KillTimer(TIMER_ID);
 
     // Destroy first.
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Cleaning up..");
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Cleaning up..");
     pjsua_destroy();
 
-    m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_OFFLINE)));
+    m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_OFFLINE)) );
     UpdateWindow();
 
 
     // Create
-    PopUp_Show (POPUP_REGISTRATION, ver,
-                "Starting up....", "Creating stack..", "", "", 0);
+    PopUp_Show(POPUP_REGISTRATION, ver,
+	       "Starting up....", "Creating stack..", "", "", 0);
 
     status = pjsua_create();
-
     if (status != PJ_SUCCESS) {
-        Error (_T ("Error in creating library"), status);
-        PopUp_Hide (POPUP_REGISTRATION);
-        return FALSE;
+	Error(_T("Error in creating library"), status);
+	PopUp_Hide(POPUP_REGISTRATION);
+	return FALSE;
     }
 
     pjsua_config cfg;
-
     pjsua_logging_config log_cfg;
     pjsua_media_config media_cfg;
 
-    pjsua_config_default (&cfg);
+    pjsua_config_default(&cfg);
     cfg.max_calls = 1;
     cfg.thread_cnt = 0;
-    cfg.user_agent = pj_str (ver);
+    cfg.user_agent = pj_str(ver);
 
     cfg.cb.on_call_state = &on_call_state;
     cfg.cb.on_call_media_state = &on_call_media_state;
@@ -133,50 +130,53 @@ BOOL CPocketPJDlg::Restart()
     /* Configure nameserver */
     char nameserver[60];
     {
-        FIXED_INFO fi;
-        ULONG len = sizeof (fi);
-        CString err;
-
-        PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Retrieving network parameters..");
-
-        if (GetNetworkParams (&fi, &len) != ERROR_SUCCESS) {
-            err = _T ("Info: Error querying network parameters. You must configure DNS server.");
-        } else if (fi.CurrentDnsServer == NULL) {
-            err = _T ("Info: DNS server not configured. You must configure DNS server.");
-        }
-
-        if (err.GetLength()) {
-            if (m_Cfg.m_DNS.GetLength()) {
-                pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_DNS, m_Cfg.m_DNS.GetLength(),
-                                     nameserver, sizeof (nameserver));
-                cfg.nameserver_count = 1;
-                cfg.nameserver[0] = pj_str (nameserver);
-            } else {
-                AfxMessageBox (err);
-                pjsua_destroy();
-                PopUp_Hide (POPUP_REGISTRATION);
-                return FALSE;
-            }
-        } else {
-            strcpy (nameserver, fi.CurrentDnsServer->IpAddress.String);
-            cfg.nameserver_count = 1;
-            cfg.nameserver[0] = pj_str (nameserver);
-        }
+	FIXED_INFO fi;
+	PIP_ADDR_STRING pDNS = NULL;
+	ULONG len = sizeof(fi);
+	CString err;
+
+	PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Retrieving network parameters..");
+	if (GetNetworkParams(&fi, &len) != ERROR_SUCCESS) {
+	    err = _T("Info: Error querying network parameters. You must configure DNS server.");
+	} else if (fi.CurrentDnsServer) {
+	    pDNS = fi.CurrentDnsServer;
+	} else if (fi.DnsServerList.IpAddress.String[0] != 0) {
+	    pDNS = &fi.DnsServerList;
+	} else {
+	    err = _T("Info: DNS server not configured. You must configure DNS server.");
+	} 
+	
+	if (err.GetLength()) {
+	    if (m_Cfg.m_DNS.GetLength()) {
+		pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_DNS, m_Cfg.m_DNS.GetLength(),
+				   nameserver, sizeof(nameserver));
+		cfg.nameserver_count = 1;
+		cfg.nameserver[0] = pj_str(nameserver);
+	    } else {
+		AfxMessageBox(err);
+		pjsua_destroy();
+		PopUp_Hide(POPUP_REGISTRATION);
+		return FALSE;
+	    }
+	} else {
+	    strcpy(nameserver, pDNS->IpAddress.String);
+	    cfg.nameserver_count = 1;
+	    cfg.nameserver[0] = pj_str(nameserver);
+	}
     }
 
     char tmp_stun[80];
-
     if (m_Cfg.m_UseStun) {
-        pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_StunSrv, m_Cfg.m_StunSrv.GetLength(),
-                             tmp_stun, sizeof (tmp_stun));
-        cfg.stun_host = pj_str (tmp_stun);
+	pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_StunSrv, m_Cfg.m_StunSrv.GetLength(),
+			   tmp_stun, sizeof(tmp_stun));
+	cfg.stun_host = pj_str(tmp_stun);
     }
 
-    pjsua_logging_config_default (&log_cfg);
-
-    log_cfg.log_filename = pj_str ("\\PocketPJ.TXT");
+    pjsua_logging_config_default(&log_cfg);
+    log_cfg.msg_logging = PJ_TRUE;
+    log_cfg.log_filename = pj_str("\\PocketPJ.TXT");
 
-    pjsua_media_config_default (&media_cfg);
+    pjsua_media_config_default(&media_cfg);
     media_cfg.clock_rate = 8000;
     media_cfg.audio_frame_ptime = 40;
     media_cfg.ec_tail_len = 0;
@@ -189,246 +189,208 @@ BOOL CPocketPJDlg::Restart()
     media_cfg.no_vad = !m_Cfg.m_VAD;
 
     if (m_Cfg.m_EchoSuppress) {
-        media_cfg.ec_options = PJMEDIA_ECHO_SIMPLE;
-        media_cfg.ec_tail_len = m_Cfg.m_EcTail;
+	media_cfg.ec_options = PJMEDIA_ECHO_SIMPLE;
+	media_cfg.ec_tail_len = m_Cfg.m_EcTail;
     }
 
     // Init
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Initializing..");
-
-    status = pjsua_init (&cfg, &log_cfg, &media_cfg);
-
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Initializing..");
+    status = pjsua_init(&cfg, &log_cfg, &media_cfg);
     if (status != PJ_SUCCESS) {
-        Error (_T ("Error initializing library"), status);
-        pjsua_destroy();
-        PopUp_Hide (POPUP_REGISTRATION);
-        return FALSE;
+	Error(_T("Error initializing library"), status);
+	pjsua_destroy();
+	PopUp_Hide(POPUP_REGISTRATION);
+	return FALSE;
     }
 
     // Create one UDP transport
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding UDP transport..");
-
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding UDP transport..");
     pjsua_transport_id transport_id;
-
     pjsua_transport_config udp_cfg;
 
-    pjsua_transport_config_default (&udp_cfg);
-
+    pjsua_transport_config_default(&udp_cfg);
     udp_cfg.port = 0;
-
-    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP,
-                                     &udp_cfg, &transport_id);
-
+    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP,
+					&udp_cfg, &transport_id);
     if (status != PJ_SUCCESS) {
-        Error (_T ("Error creating UDP transport"), status);
-        pjsua_destroy();
-        PopUp_Hide (POPUP_REGISTRATION);
-        return FALSE;
+	Error(_T("Error creating UDP transport"), status);
+	pjsua_destroy();
+	PopUp_Hide(POPUP_REGISTRATION);
+	return FALSE;
     }
 
-    if (m_Cfg.m_TCP) {
-        // Create one TCP transport
-        PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding TCP transport..");
-        pjsua_transport_id transport_id;
-        pjsua_transport_config tcp_cfg;
-
-        pjsua_transport_config_default (&tcp_cfg);
-        tcp_cfg.port = 0;
-        status = pjsua_transport_create (PJSIP_TRANSPORT_TCP,
-                                         &tcp_cfg, &transport_id);
-
-        if (status != PJ_SUCCESS) {
-            Error (_T ("Error creating TCP transport"), status);
-            pjsua_destroy();
-            PopUp_Hide (POPUP_REGISTRATION);
-            return FALSE;
-        }
+    // Always instantiate TCP to support auto-switching to TCP when
+    // packet is larger than 1300 bytes. If TCP is disabled when
+    // no auto-switching will occur
+    if (1) {
+	// Create one TCP transport
+	PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding TCP transport..");
+	pjsua_transport_id transport_id;
+	pjsua_transport_config tcp_cfg;
+
+	pjsua_transport_config_default(&tcp_cfg);
+	tcp_cfg.port = 0;
+	status = pjsua_transport_create(PJSIP_TRANSPORT_TCP,
+					&tcp_cfg, &transport_id);
+	if (status != PJ_SUCCESS) {
+	    Error(_T("Error creating TCP transport"), status);
+	    pjsua_destroy();
+	    PopUp_Hide(POPUP_REGISTRATION);
+	    return FALSE;
+	}
     }
 
     // Adjust codecs priority
     pj_str_t tmp;
-
-    pjsua_codec_set_priority (pj_cstr (&tmp, "*"), 0);
-
-    for (i=0; i< (unsigned) m_Cfg.m_Codecs.GetSize(); ++i) {
-        CString codec = m_Cfg.m_Codecs.GetAt (i);
-        char tmp_nam[80];
-
-        pj_unicode_to_ansi ( (LPCTSTR) codec, codec.GetLength(),
-                             tmp_nam, sizeof (tmp_nam));
-        pjsua_codec_set_priority (pj_cstr (&tmp, tmp_nam), (pj_uint8_t) (200-i));
+    pjsua_codec_set_priority(pj_cstr(&tmp, "*"), 0);
+    for (i=0; i<(unsigned)m_Cfg.m_Codecs.GetSize(); ++i) {
+	CString codec = m_Cfg.m_Codecs.GetAt(i);
+	char tmp_nam[80];
+
+	pj_unicode_to_ansi((LPCTSTR)codec, codec.GetLength(),
+			   tmp_nam, sizeof(tmp_nam));
+	pjsua_codec_set_priority(pj_cstr(&tmp, tmp_nam), (pj_uint8_t)(200-i));
     }
 
     // Start!
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Starting..");
-
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Starting..");
     status = pjsua_start();
-
     if (status != PJ_SUCCESS) {
-        Error (_T ("Error starting library"), status);
-        pjsua_destroy();
-        PopUp_Hide (POPUP_REGISTRATION);
-        return FALSE;
+	Error(_T("Error starting library"), status);
+	pjsua_destroy();
+	PopUp_Hide(POPUP_REGISTRATION);
+	return FALSE;
     }
 
     // Add account
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding account..");
-
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding account..");
     char domain[80], username[80], passwd[80];
-
     char id[80], reg_uri[80];
-
     pjsua_acc_config acc_cfg;
 
-    pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_Domain, m_Cfg.m_Domain.GetLength(),
-                         domain, sizeof (domain));
-
-    pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_User, m_Cfg.m_User.GetLength(),
-                         username, sizeof (username));
-
-    pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_Password, m_Cfg.m_Password.GetLength(),
-                         passwd, sizeof (passwd));
-
-    snprintf (id, sizeof (id), "<sip:%s@%s>", username, domain);
-
-    snprintf (reg_uri, sizeof (reg_uri), "sip:%s", domain);
-
-    pjsua_acc_config_default (&acc_cfg);
-
-    acc_cfg.id = pj_str (id);
+    pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_Domain, m_Cfg.m_Domain.GetLength(),
+		       domain, sizeof(domain));
+    pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_User, m_Cfg.m_User.GetLength(),
+		       username, sizeof(username));
+    pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_Password, m_Cfg.m_Password.GetLength(),
+		       passwd, sizeof(passwd));
 
-    acc_cfg.reg_uri = pj_str (reg_uri);
+    snprintf(id, sizeof(id), "<sip:%s@%s>", username, domain);
+    snprintf(reg_uri, sizeof(reg_uri), "sip:%s", domain);
 
+    pjsua_acc_config_default(&acc_cfg);
+    acc_cfg.id = pj_str(id);
+    acc_cfg.reg_uri = pj_str(reg_uri);
     acc_cfg.cred_count = 1;
-
-    acc_cfg.cred_info[0].scheme = pj_str ("Digest");
-
-    acc_cfg.cred_info[0].realm = pj_str ("*");
-
-    acc_cfg.cred_info[0].username = pj_str (username);
-
+    acc_cfg.cred_info[0].scheme = pj_str("Digest");
+    acc_cfg.cred_info[0].realm = pj_str("*");
+    acc_cfg.cred_info[0].username = pj_str(username);
     acc_cfg.cred_info[0].data_type = 0;
-
-    acc_cfg.cred_info[0].data = pj_str (passwd);
+    acc_cfg.cred_info[0].data = pj_str(passwd);
 
 #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
     acc_cfg.use_srtp = (m_Cfg.m_UseSrtp ? PJMEDIA_SRTP_OPTIONAL : PJMEDIA_SRTP_DISABLED);
-
     acc_cfg.srtp_secure_signaling = 0;
-
 #endif
 
     acc_cfg.publish_enabled = m_Cfg.m_UsePublish;
-
+    
     char route[80];
-
     if (m_Cfg.m_TCP) {
-        snprintf (route, sizeof (route), "<sip:%s;lr;transport=tcp>", domain);
-        acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str (route);
+	snprintf(route, sizeof(route), "<sip:%s;lr;transport=tcp>", domain);
+	acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str(route);
     } else {
-        snprintf (route, sizeof (route), "<sip:%s;lr>", domain);
-        acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str (route);
+	snprintf(route, sizeof(route), "<sip:%s;lr>", domain);
+	acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str(route);
     }
 
-    status = pjsua_acc_add (&acc_cfg, PJ_TRUE, &m_PjsuaAccId);
-
+    status = pjsua_acc_add(&acc_cfg, PJ_TRUE, &m_PjsuaAccId);
     if (status != PJ_SUCCESS) {
-        Error (_T ("Invalid account settings"), status);
-        pjsua_destroy();
-        PopUp_Hide (POPUP_REGISTRATION);
-        return FALSE;
+	Error(_T("Invalid account settings"), status);
+	pjsua_destroy();
+	PopUp_Hide(POPUP_REGISTRATION);
+	return FALSE;
     }
 
-    CString acc_text = m_Cfg.m_User + _T ("@") + m_Cfg.m_Domain;
-
-    m_AccId.SetWindowText (acc_text);
+    CString acc_text = m_Cfg.m_User + _T("@") + m_Cfg.m_Domain;
+    m_AccId.SetWindowText(acc_text);
 
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE1, acc_text);
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE2, "Registering..");
-    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "");
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE1, acc_text);
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE2, "Registering..");
+    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "");
 
-    SetTimer (TIMER_ID, 100, NULL);
+    SetTimer(TIMER_ID, 100, NULL);
     return TRUE;
 }
 
 
-void CPocketPJDlg::PopUp_Show (PopUpType type,
-                               const CString& title1,
-                               const CString& title2,
-                               const CString& title3,
-                               const CString& btn1,
-                               const CString& btn2,
-                               unsigned userData)
+void CPocketPJDlg::PopUp_Show( PopUpType type, 
+			        const CString& title1,
+				const CString& title2,
+				const CString& title3,
+				const CString& btn1,
+				const CString& btn2,
+				unsigned userData)
 {
-    PJ_UNUSED_ARG (userData);
+    PJ_UNUSED_ARG(userData);
 
     if (!m_PopUpState[type])
-        ++m_PopUpCount;
+	++m_PopUpCount;
 
     m_PopUpState[type] = TRUE;
 
     m_PopUpContent[type].m_Title1 = title1;
-
     m_PopUpContent[type].m_Title2 = title2;
-
     m_PopUpContent[type].m_Title3 = title3;
-
     m_PopUpContent[type].m_Btn1 = btn1;
-
     m_PopUpContent[type].m_Btn2 = btn2;
 
-    m_PopUp->SetContent (m_PopUpContent[type]);
-
+    m_PopUp->SetContent(m_PopUpContent[type]);
     m_PopUp->Show();
 }
 
-void CPocketPJDlg::PopUp_Modify (PopUpType type,
-                                 PopUpElement el,
-                                 const CString& text)
+void CPocketPJDlg::PopUp_Modify(PopUpType type,
+				PopUpElement el,
+				const CString& text)
 {
     switch (el) {
-
-        case POPUP_EL_TITLE1:
-            m_PopUpContent[type].m_Title1 = text;
-            break;
-
-        case POPUP_EL_TITLE2:
-            m_PopUpContent[type].m_Title2 = text;
-            break;
-
-        case POPUP_EL_TITLE3:
-            m_PopUpContent[type].m_Title3 = text;
-            break;
-
-        case POPUP_EL_BUTTON1:
-            m_PopUpContent[type].m_Btn1 = text;
-            break;
-
-        case POPUP_EL_BUTTON2:
-            m_PopUpContent[type].m_Btn1 = text;
-            break;
+    case POPUP_EL_TITLE1:
+	m_PopUpContent[type].m_Title1 = text;
+	break;
+    case POPUP_EL_TITLE2:
+	m_PopUpContent[type].m_Title2 = text;
+	break;
+    case POPUP_EL_TITLE3:
+	m_PopUpContent[type].m_Title3 = text;
+	break;
+    case POPUP_EL_BUTTON1:
+	m_PopUpContent[type].m_Btn1 = text;
+	break;
+    case POPUP_EL_BUTTON2:
+	m_PopUpContent[type].m_Btn1 = text;
+	break;
     }
 
-    m_PopUp->SetContent (m_PopUpContent[type]);
+    m_PopUp->SetContent(m_PopUpContent[type]);
 }
 
-void CPocketPJDlg::PopUp_Hide (PopUpType type)
+void CPocketPJDlg::PopUp_Hide(PopUpType type)
 {
     if (m_PopUpState[type])
-        --m_PopUpCount;
+	--m_PopUpCount;
 
     m_PopUpState[type] = FALSE;
 
     if (m_PopUpCount == 0) {
-        m_PopUp->Hide();
-        UpdateWindow();
+	m_PopUp->Hide();
+	UpdateWindow();
     } else {
-        for (int i=POPUP_MAX_TYPE-1; i>=0; --i) {
-            if (m_PopUpState[i]) {
-                m_PopUp->SetContent (m_PopUpContent[i]);
-                break;
-            }
-        }
+	for (int i=POPUP_MAX_TYPE-1; i>=0; --i) {
+	    if (m_PopUpState[i]) {
+		m_PopUp->SetContent(m_PopUpContent[i]);
+		break;
+	    }
+	}
     }
 }
 
@@ -436,120 +398,109 @@ void CPocketPJDlg::OnCallState()
 {
     pjsua_call_info ci;
 
-    pjsua_call_get_info (0, &ci);
-
+    pjsua_call_get_info(0, &ci);
+    
     switch (ci.state) {
-
-        case PJSIP_INV_STATE_NULL:	    /**< Before INVITE is sent or received  */
-            break;
-
-        case PJSIP_INV_STATE_CALLING:   /**< After INVITE is sent		    */
-            PopUp_Show (POPUP_CALL, "Calling..", ci.remote_info.ptr, "",
-                        "", "Hangup", 0);
-            break;
-
-        case PJSIP_INV_STATE_INCOMING:  /**< After INVITE is received.	    */
-            PopUp_Show (POPUP_CALL, "Incoming call..", ci.remote_info.ptr, "",
-                        "Answer", "Hangup", 0);
-            pjsua_call_answer (0, 180, NULL, NULL);
-
-            if (m_Cfg.m_AutoAnswer)
-                OnPopUpButton (1);
-
-            break;
-
-        case PJSIP_INV_STATE_EARLY:	    /**< After response with To tag.	    */
-
-        case PJSIP_INV_STATE_CONNECTING:/**< After 2xx is sent/received.	    */
-
-        case PJSIP_INV_STATE_CONFIRMED: { /**< After ACK is sent/received.	    */
-            CString stateText = ci.state_text.ptr;
-            PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE3, stateText);
-        }
-
-        break;
-
-        case PJSIP_INV_STATE_DISCONNECTED:/**< Session is terminated.	    */
-            PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE3, "Disconnected");
-            PopUp_Hide (POPUP_CALL);
-            break;
-    }
+    case PJSIP_INV_STATE_NULL:	    /**< Before INVITE is sent or received  */
+	break;
+    case PJSIP_INV_STATE_CALLING:   /**< After INVITE is sent		    */
+	PopUp_Show(POPUP_CALL, "Calling..", ci.remote_info.ptr, "",
+		   "", "Hangup", 0);
+	break;
+    case PJSIP_INV_STATE_INCOMING:  /**< After INVITE is received.	    */
+	PopUp_Show(POPUP_CALL, "Incoming call..", ci.remote_info.ptr, "",
+		   "Answer", "Hangup", 0);
+	pjsua_call_answer(0, 180, NULL, NULL);
+	if (m_Cfg.m_AutoAnswer)
+	    OnPopUpButton(1);
+	break;
+    case PJSIP_INV_STATE_EARLY:	    /**< After response with To tag.	    */
+    case PJSIP_INV_STATE_CONNECTING:/**< After 2xx is sent/received.	    */
+    case PJSIP_INV_STATE_CONFIRMED:  /**< After ACK is sent/received.	    */
+	{
+	    CString stateText = ci.state_text.ptr;
+	    PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE3, stateText);
+	}
+	break;
+    case PJSIP_INV_STATE_DISCONNECTED:/**< Session is terminated.	    */
+	PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE3, "Disconnected");
+	PopUp_Hide(POPUP_CALL);
+	break;
+    }    
 }
 
-void CPocketPJDlg::on_call_state (pjsua_call_id call_id, pjsip_event *e)
+void CPocketPJDlg::on_call_state(pjsua_call_id call_id, pjsip_event *e)
 {
-    PJ_UNUSED_ARG (e);
-    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG(e);
+    PJ_UNUSED_ARG(call_id);
 
     theDlg->OnCallState();
 }
 
-void CPocketPJDlg::on_call_media_state (pjsua_call_id call_id)
+void CPocketPJDlg::on_call_media_state(pjsua_call_id call_id)
 {
     pjsua_call_info call_info;
 
-    pjsua_call_get_info (call_id, &call_info);
-
+    pjsua_call_get_info(call_id, &call_info);
     if (call_info.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-        pjsua_conf_connect (call_info.conf_slot, 0);
-        pjsua_conf_connect (0, call_info.conf_slot);
+	pjsua_conf_connect(call_info.conf_slot, 0);
+	pjsua_conf_connect(0, call_info.conf_slot);
     }
 }
 
-void CPocketPJDlg::on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
-                                     pjsip_rx_data *rdata)
+void CPocketPJDlg::on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
+				    pjsip_rx_data *rdata)
 {
-    PJ_UNUSED_ARG (acc_id);
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (rdata);
+    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(rdata);
 }
 
 void CPocketPJDlg::OnRegState()
 {
     pjsua_acc_info ai;
-    pjsua_acc_get_info (m_PjsuaAccId, &ai);
+    pjsua_acc_get_info(m_PjsuaAccId, &ai);
 
-    CString acc_text = m_Cfg.m_User + _T ("@") + m_Cfg.m_Domain;
+    CString acc_text = m_Cfg.m_User + _T("@") + m_Cfg.m_Domain;
 
     if (ai.expires>0 && ai.status/100==2) {
-        /* Registration success */
-        HBITMAP old = m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_ONLINE)));
-        PJ_UNUSED_ARG (old);
-        acc_text += " (OK)";
-        m_AccId.SetWindowText (acc_text);
+	/* Registration success */
+	HBITMAP old = m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_ONLINE)) );
+	PJ_UNUSED_ARG(old);
+	acc_text += " (OK)";
+	m_AccId.SetWindowText(acc_text);
     } else if (ai.status/100 != 2) {
-        acc_text += " (err)";
-        Error (_T ("SIP registration error"), PJSIP_ERRNO_FROM_SIP_STATUS (ai.status));
-        m_AccId.SetWindowText (acc_text);
+	acc_text += " (err)";
+	Error(_T("SIP registration error"), PJSIP_ERRNO_FROM_SIP_STATUS(ai.status));
+	m_AccId.SetWindowText(acc_text);
     }
-
-    PopUp_Hide (POPUP_REGISTRATION);
+    PopUp_Hide(POPUP_REGISTRATION);
 }
 
-void CPocketPJDlg::on_reg_state (pjsua_acc_id acc_id)
+void CPocketPJDlg::on_reg_state(pjsua_acc_id acc_id)
 {
-    PJ_UNUSED_ARG (acc_id);
+    PJ_UNUSED_ARG(acc_id);
 
     theDlg->OnRegState();
 }
 
-void CPocketPJDlg::on_buddy_state (pjsua_buddy_id buddy_id)
+void CPocketPJDlg::on_buddy_state(pjsua_buddy_id buddy_id)
 {
-    PJ_UNUSED_ARG (buddy_id);
+    PJ_UNUSED_ARG(buddy_id);
 
     theDlg->RedrawBuddyList();
 }
 
-void CPocketPJDlg::on_pager (pjsua_call_id call_id, const pj_str_t *from,
-                             const pj_str_t *to, const pj_str_t *contact,
-                             const pj_str_t *mime_type, const pj_str_t *text)
+void CPocketPJDlg::on_pager(pjsua_call_id call_id, const pj_str_t *from, 
+			    const pj_str_t *to, const pj_str_t *contact,
+			    const pj_str_t *mime_type, const pj_str_t *text)
 {
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (from);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
-    PJ_UNUSED_ARG (mime_type);
-    PJ_UNUSED_ARG (text);
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(from);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG(mime_type);
+    PJ_UNUSED_ARG(text);
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -557,150 +508,143 @@ void CPocketPJDlg::on_pager (pjsua_call_id call_id, const pj_str_t *from,
 
 BOOL CPocketPJDlg::OnInitDialog()
 {
-    CDialog::OnInitDialog();
-
-    // Set the icon for this dialog.  The framework does this automatically
-    //  when the application's main window is not a dialog
-    SetIcon (m_hIcon, TRUE);			// Set big icon
-    SetIcon (m_hIcon, FALSE);		// Set small icon
-
-    CenterWindow (GetDesktopWindow());	// center to the hpc screen
-
-    // TODO: Add extra initialization here
-
-    m_Cfg.LoadRegistry();
-    //ShowWindow(SW_SHOW);
-    m_AccId.SetWindowText (m_Cfg.m_User);
-
-    CImageList *il = new CImageList;
-    VERIFY (il->Create (16, 16, ILC_COLOR|ILC_MASK, 2, 4));
-
-    CBitmap *bmp = new CBitmap;
-    bmp->LoadBitmap (MAKEINTRESOURCE (IDB_BLANK));
-    il->Add (bmp, RGB (255,255,255));
-    bmp = new CBitmap;
-    bmp->LoadBitmap (MAKEINTRESOURCE (IDB_ONLINE));
-    il->Add (bmp, RGB (255,255,255));
-
-    m_BuddyList.SetImageList (il, LVSIL_SMALL);
-
-    if (m_Cfg.m_Domain.GetLength() ==0 || Restart() == FALSE) {
-        for (;;) {
-            CSettingsDlg dlg (m_Cfg);
-
-            if (dlg.DoModal() != IDOK) {
-                EndDialog (IDOK);
-                return TRUE;
-            }
-
-            m_Cfg.SaveRegistry();
-
-            if (Restart())
-                break;
-        }
-    }
-
-    RedrawBuddyList();
-
-    return TRUE;  // return TRUE  unless you set the focus to a control
+	CDialog::OnInitDialog();
+
+	// Set the icon for this dialog.  The framework does this automatically
+	//  when the application's main window is not a dialog
+	SetIcon(m_hIcon, TRUE);			// Set big icon
+	SetIcon(m_hIcon, FALSE);		// Set small icon
+	
+	CenterWindow(GetDesktopWindow());	// center to the hpc screen
+ 
+	// TODO: Add extra initialization here
+	
+	m_Cfg.LoadRegistry();
+	//ShowWindow(SW_SHOW);
+	m_AccId.SetWindowText(m_Cfg.m_User);
+
+	CImageList *il = new CImageList;
+	VERIFY(il->Create(16, 16, ILC_COLOR|ILC_MASK, 2, 4));
+
+	CBitmap *bmp = new CBitmap;
+	bmp->LoadBitmap(MAKEINTRESOURCE(IDB_BLANK));
+	il->Add(bmp, RGB(255,255,255));
+	bmp = new CBitmap;
+	bmp->LoadBitmap(MAKEINTRESOURCE(IDB_ONLINE));
+	il->Add(bmp, RGB(255,255,255));
+	
+	m_BuddyList.SetImageList(il, LVSIL_SMALL);
+
+	if (m_Cfg.m_Domain.GetLength()==0 || Restart() == FALSE) {
+	    for (;;) {
+		CSettingsDlg dlg(m_Cfg);
+		if (dlg.DoModal() != IDOK) {
+		    EndDialog(IDOK);
+		    return TRUE;
+		}
+
+		m_Cfg.SaveRegistry();
+
+		if (Restart())
+		    break;
+	    }
+	}
+
+	RedrawBuddyList();
+	return TRUE;  // return TRUE  unless you set the focus to a control
 }
 
 
 
-void CPocketPJDlg::OnBtnAcc()
+void CPocketPJDlg::OnBtnAcc() 
 {
     CMenu menu;
-    VERIFY (menu.LoadMenu (IDR_ACC_MENU));
-    CMenu* pPopup = menu.GetSubMenu (0);
-    ASSERT (pPopup != NULL);
+    VERIFY(menu.LoadMenu(IDR_ACC_MENU));
+    CMenu* pPopup = menu.GetSubMenu(0);
+    ASSERT(pPopup != NULL);
 
     RECT r;
-    m_BtnAcc.GetWindowRect (&r);
-    pPopup->TrackPopupMenu (TPM_LEFTALIGN, r.left+4, r.top+4, this);
+    m_BtnAcc.GetWindowRect(&r);
+    pPopup->TrackPopupMenu(TPM_LEFTALIGN, r.left+4, r.top+4, this);
 }
 
-void CPocketPJDlg::OnBtnAction()
+void CPocketPJDlg::OnBtnAction() 
 {
     CMenu menu;
-    VERIFY (menu.LoadMenu (IDR_URI_MENU));
-    CMenu* pPopup = menu.GetSubMenu (0);
-    ASSERT (pPopup != NULL);
+    VERIFY(menu.LoadMenu(IDR_URI_MENU));
+    CMenu* pPopup = menu.GetSubMenu(0);
+    ASSERT(pPopup != NULL);
 
     RECT r;
-    this->m_BtnUrlAction.GetWindowRect (&r);
-    pPopup->TrackPopupMenu (TPM_LEFTALIGN, r.left+4, r.top+4, this);
+    this->m_BtnUrlAction.GetWindowRect(&r);
+    pPopup->TrackPopupMenu(TPM_LEFTALIGN, r.left+4, r.top+4, this);
 }
 
-void CPocketPJDlg::OnSettings()
+void CPocketPJDlg::OnSettings() 
 {
     for (;;) {
-        CSettingsDlg dlg (m_Cfg);
-
-        if (dlg.DoModal() != IDOK) {
-            return;
-        }
+	CSettingsDlg dlg(m_Cfg);
+	if (dlg.DoModal() != IDOK) {
+	    return;
+	}
 
-        m_Cfg.SaveRegistry();
+	m_Cfg.SaveRegistry();
 
-        if (Restart())
-            break;
+	if (Restart())
+	    break;
     }
 }
 
 void CPocketPJDlg::OnOK()
 {
-    if (AfxMessageBox (_T ("Quit PocketPJ?"), MB_YESNO) ==IDYES) {
-        KillTimer (TIMER_ID);
-        PopUp_Show (POPUP_REGISTRATION, "", "Shutting down..", "", "", "", 0);
-        pjsua_destroy();
-        CDialog::OnOK();
-        PopUp_Hide (POPUP_REGISTRATION);
-        m_Cfg.SaveRegistry();
-        return;
+    if (AfxMessageBox(_T("Quit PocketPJ?"), MB_YESNO)==IDYES) {
+	KillTimer(TIMER_ID);
+	PopUp_Show(POPUP_REGISTRATION, "", "Shutting down..", "", "", "", 0);
+	pjsua_destroy();
+	CDialog::OnOK();
+	PopUp_Hide(POPUP_REGISTRATION);
+	m_Cfg.SaveRegistry();
+	return;
     }
 }
 
-void CPocketPJDlg::OnTimer (UINT nIDEvent)
+void CPocketPJDlg::OnTimer(UINT nIDEvent) 
 {
-    pjsua_handle_events (10);
-    CDialog::OnTimer (nIDEvent);
+    pjsua_handle_events(10);
+    CDialog::OnTimer(nIDEvent);
 }
 
-int  CPocketPJDlg::FindBuddyInPjsua (const CString &Uri)
+int  CPocketPJDlg::FindBuddyInPjsua(const CString &Uri)
 {
     char uri[80];
     pjsua_buddy_id  id[128];
-    unsigned i, count = PJ_ARRAY_SIZE (id);
-
-    if (pjsua_enum_buddies (id, &count) != PJ_SUCCESS)
-        return PJSUA_INVALID_ID;
+    unsigned i, count = PJ_ARRAY_SIZE(id);
 
+    if (pjsua_enum_buddies(id, &count) != PJ_SUCCESS)
+	return PJSUA_INVALID_ID;
     if (count==0)
-        return PJSUA_INVALID_ID;
+	return PJSUA_INVALID_ID;
 
-    pj_unicode_to_ansi ( (LPCTSTR) Uri, Uri.GetLength(), uri, sizeof (uri));
+    pj_unicode_to_ansi((LPCTSTR)Uri, Uri.GetLength(), uri, sizeof(uri));
 
     for (i=0; i<count; ++i) {
-        pjsua_buddy_info bi;
-        pjsua_buddy_get_info (id[i], &bi);
-
-        if (pj_strcmp2 (&bi.uri, uri) ==0)
-            return i;
+	pjsua_buddy_info bi;
+	pjsua_buddy_get_info(id[i], &bi);
+	if (pj_strcmp2(&bi.uri, uri)==0)
+	    return i;
     }
 
     return PJSUA_INVALID_ID;
 }
 
-int  CPocketPJDlg::FindBuddyInCfg (const CString &uri)
+int  CPocketPJDlg::FindBuddyInCfg(const CString &uri)
 {
     int i;
-
     for (i=0; i<m_Cfg.m_BuddyList.GetSize(); ++i) {
-        if (m_Cfg.m_BuddyList.GetAt (0) == uri) {
-            return i;
-        }
+	if (m_Cfg.m_BuddyList.GetAt(0) == uri) {
+	    return i;
+	}
     }
-
     return -1;
 }
 
@@ -711,136 +655,127 @@ void CPocketPJDlg::RedrawBuddyList()
     m_BuddyList.DeleteAllItems();
 
     for (i=0; i<m_Cfg.m_BuddyList.GetSize(); ++i) {
-        int isOnline;
-        int id;
-
-        id = FindBuddyInPjsua (m_Cfg.m_BuddyList.GetAt (i));
-
-        if (id != PJSUA_INVALID_ID) {
-            pjsua_buddy_info bi;
-            pjsua_buddy_get_info (id, &bi);
-            isOnline = (bi.status == PJSUA_BUDDY_STATUS_ONLINE);
-        } else {
-            isOnline = 0;
-        }
-
-        LVITEM lvi;
-
-        memset (&lvi, 0, sizeof (lvi));
-        lvi.mask = LVIF_TEXT  | LVIF_IMAGE;
-        lvi.iItem = i;
-        lvi.iImage = isOnline;
-        lvi.pszText = (LPTSTR) (LPCTSTR) m_Cfg.m_BuddyList.GetAt (i);
-
-        m_BuddyList.InsertItem (&lvi);
+	int isOnline;
+	int id;
+
+	id = FindBuddyInPjsua(m_Cfg.m_BuddyList.GetAt(i));
+	if (id != PJSUA_INVALID_ID) {
+	    pjsua_buddy_info bi;
+	    pjsua_buddy_get_info(id, &bi);
+	    isOnline = (bi.status == PJSUA_BUDDY_STATUS_ONLINE);
+	} else {
+	    isOnline = 0;
+	}
+
+	LVITEM lvi;
+	memset(&lvi, 0, sizeof(lvi));
+	lvi.mask = LVIF_TEXT  | LVIF_IMAGE;
+	lvi.iItem = i;
+	lvi.iImage = isOnline;
+	lvi.pszText = (LPTSTR)(LPCTSTR)m_Cfg.m_BuddyList.GetAt(i);
+
+	m_BuddyList.InsertItem(&lvi);
     }
 }
 
-void CPocketPJDlg::OnUriCall()
+void CPocketPJDlg::OnUriCall() 
 {
     char tmp[120];
     CString uri;
     pj_status_t status;
 
-    m_Url.GetWindowText (uri);
-    pj_unicode_to_ansi ( (LPCTSTR) uri, uri.GetLength(), tmp, sizeof (tmp));
-
-    if ( (status=pjsua_verify_sip_url (tmp)) != PJ_SUCCESS) {
-        Error ("The URL is not valid SIP URL", status);
-        return;
+    m_Url.GetWindowText(uri);
+    pj_unicode_to_ansi((LPCTSTR)uri, uri.GetLength(), tmp, sizeof(tmp));
+    if ((status=pjsua_verify_sip_url(tmp)) != PJ_SUCCESS) {
+	Error("The URL is not valid SIP URL", status);
+	return;
     }
 
-    pj_str_t dest_uri = pj_str (tmp);
-
+    pj_str_t dest_uri = pj_str(tmp);
     pjsua_call_id call_id;
 
-    status = pjsua_call_make_call (m_PjsuaAccId, &dest_uri, 0, NULL, NULL, &call_id);
+    status = pjsua_call_make_call(m_PjsuaAccId, &dest_uri, 0, NULL, NULL, &call_id);
 
     if (status != PJ_SUCCESS)
-        Error ("Unable to make call", status);
+	Error("Unable to make call", status);
 }
 
-void CPocketPJDlg::OnUriAddBuddy()
+void CPocketPJDlg::OnUriAddBuddy() 
 {
     int i;
     char tmp[120];
     CString uri;
     pj_status_t status;
 
-    m_Url.GetWindowText (uri);
-    pj_unicode_to_ansi ( (LPCTSTR) uri, uri.GetLength(), tmp, sizeof (tmp));
-
-    if ( (status=pjsua_verify_sip_url (tmp)) != PJ_SUCCESS) {
-        Error ("The URL is not valid SIP URL", status);
-        return;
+    m_Url.GetWindowText(uri);
+    pj_unicode_to_ansi((LPCTSTR)uri, uri.GetLength(), tmp, sizeof(tmp));
+    if ((status=pjsua_verify_sip_url(tmp)) != PJ_SUCCESS) {
+	Error("The URL is not valid SIP URL", status);
+	return;
     }
 
     for (i=0; i<m_Cfg.m_BuddyList.GetSize(); ++i) {
-        if (m_Cfg.m_BuddyList.GetAt (0) == uri) {
-            AfxMessageBox (_T ("The URI is already in the buddy list"));
-            return;
-        }
+	if (m_Cfg.m_BuddyList.GetAt(0) == uri) {
+	    AfxMessageBox(_T("The URI is already in the buddy list"));
+	    return;
+	}
     }
 
-    m_Cfg.m_BuddyList.Add (uri);
-
+    m_Cfg.m_BuddyList.Add(uri);
     RedrawBuddyList();
 }
 
-void CPocketPJDlg::OnUriDelBuddy()
+void CPocketPJDlg::OnUriDelBuddy() 
 {
     CString uri;
 
-    m_Url.GetWindowText (uri);
-    int i = FindBuddyInCfg (uri);
-
+    m_Url.GetWindowText(uri);
+    int i = FindBuddyInCfg(uri);
     if (i<0) {
-        /* Buddy not found */
-        return;
+	/* Buddy not found */
+	return;
     }
 
-    m_Cfg.m_BuddyList.RemoveAt (i);
-
+    m_Cfg.m_BuddyList.RemoveAt(i);
     RedrawBuddyList();
-    AfxMessageBox (_T ("Buddy " + uri + " deleted"));
+    AfxMessageBox(_T("Buddy " + uri + " deleted"));
 }
 
-void CPocketPJDlg::OnAccOnline()
+void CPocketPJDlg::OnAccOnline() 
 {
-    pjsua_acc_set_online_status (m_PjsuaAccId, PJ_TRUE);
-    m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_ONLINE)));
+    pjsua_acc_set_online_status(m_PjsuaAccId, PJ_TRUE);
+    m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_ONLINE)) );
 }
 
-void CPocketPJDlg::OnAccInvisible()
+void CPocketPJDlg::OnAccInvisible() 
 {
-    pjsua_acc_set_online_status (m_PjsuaAccId, PJ_FALSE);
-    m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_INVISIBLE)));
+    pjsua_acc_set_online_status(m_PjsuaAccId, PJ_FALSE);
+    m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_INVISIBLE)) );
 }
 
-void CPocketPJDlg::OnPopUpButton (int btnNo)
+void CPocketPJDlg::OnPopUpButton(int btnNo)
 {
     if (btnNo == 1) {
-        pjsua_call_answer (0, 200, NULL, 0);
-        PopUp_Modify (POPUP_CALL, POPUP_EL_BUTTON1, "");
+	pjsua_call_answer(0, 200, NULL, 0);
+	PopUp_Modify(POPUP_CALL, POPUP_EL_BUTTON1, "");
     } else if (btnNo == 2) {
-        // Hangup button
-        PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE2, "Hang up..");
-        PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE3, "");
-        pjsua_call_hangup (0, PJSIP_SC_DECLINE, 0, 0);
+	// Hangup button
+	PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE2, "Hang up..");
+	PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE3, "");
+	pjsua_call_hangup(0, PJSIP_SC_DECLINE, 0, 0);
     }
 }
 
-void CPocketPJDlg::OnClickBuddyList (NMHDR* pNMHDR, LRESULT* pResult)
+void CPocketPJDlg::OnClickBuddyList(NMHDR* pNMHDR, LRESULT* pResult) 
 {
     POSITION pos = m_BuddyList.GetFirstSelectedItemPosition();
 
-    PJ_UNUSED_ARG (pNMHDR);
+    PJ_UNUSED_ARG(pNMHDR);
 
     if (pos != NULL) {
-        int iItem = m_BuddyList.GetNextSelectedItem (pos);
-        CString uri = m_BuddyList.GetItemText (iItem, 0);
-        m_Url.SetWindowText (uri);
+	int iItem = m_BuddyList.GetNextSelectedItem(pos);
+	CString uri = m_BuddyList.GetItemText(iItem, 0);
+	m_Url.SetWindowText(uri);
     }
-
     *pResult = 0;
 }
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp
index a92d2454e2..1f1654f062 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp
@@ -16,9 +16,9 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // CPopUpWnd
 
-CPopUpWnd::CPopUpWnd (CPocketPJDlg* pParent)
+CPopUpWnd::CPopUpWnd(CPocketPJDlg* pParent)
 {
-    Create (pParent);
+    Create(pParent);
 }
 
 CPopUpWnd::~CPopUpWnd()
@@ -26,95 +26,81 @@ CPopUpWnd::~CPopUpWnd()
     DestroyWindow();
 }
 
-BOOL CPopUpWnd::Create (CPocketPJDlg* pParent)
+BOOL CPopUpWnd::Create(CPocketPJDlg* pParent)
 {
     BOOL bSuccess;
 
     m_ParentWnd = pParent;
 
     // Register window class
-    CString csClassName = AfxRegisterWndClass (CS_HREDRAW|CS_VREDRAW,
-                          0,
-                          CBrush (::GetSysColor (COLOR_BTNFACE)));
+    CString csClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
+                                              0,
+                                              CBrush(::GetSysColor(COLOR_BTNFACE)));
 
     // Create popup window
-    bSuccess = CreateEx (WS_EX_DLGMODALFRAME|WS_EX_TOPMOST, // Extended style
-                         csClassName,                       // Classname
-                         _T ("PocketPJ"),                   // Title
-                         WS_POPUP|WS_BORDER|WS_CAPTION,     // style
-                         0,0,                               // position - updated soon.
-                         1,1,				   // Size - updated soon
-                         pParent->GetSafeHwnd(),            // handle to parent
-                         0,                                 // No menu
-                         NULL);
-
-    if (!bSuccess)
-        return FALSE;
-
-    ShowWindow (SW_HIDE);
+    bSuccess = CreateEx(WS_EX_DLGMODALFRAME|WS_EX_TOPMOST, // Extended style
+                        csClassName,                       // Classname
+                        _T("PocketPJ"),                    // Title
+                        WS_POPUP|WS_BORDER|WS_CAPTION,     // style
+                        0,0,                               // position - updated soon.
+                        1,1,				   // Size - updated soon
+                        pParent->GetSafeHwnd(),            // handle to parent
+                        0,                                 // No menu
+                        NULL);    
+    if (!bSuccess) 
+	return FALSE;
+
+    ShowWindow(SW_HIDE);
 
     // Now create the controls
-    CRect TempRect (0,0,10,10);
+    CRect TempRect(0,0,10,10);
 
     /* |SS_LEFTNOWORDWRAP */
-    bSuccess = m_Title1.Create (_T ("Title1"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
-                                TempRect, this, IDC_TITLE1);
-
+    bSuccess = m_Title1.Create(_T("Title1"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
+			       TempRect, this, IDC_TITLE1);
     if (!bSuccess)
-        return FALSE;
-
-    bSuccess = m_Title2.Create (_T ("Title2"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
-                                TempRect, this, IDC_TITLE2);
+	return FALSE;
 
+    bSuccess = m_Title2.Create(_T("Title2"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
+			       TempRect, this, IDC_TITLE2);
     if (!bSuccess)
-        return FALSE;
-
-    bSuccess = m_Title3.Create (_T ("Title3"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
-                                TempRect, this, IDC_TITLE3);
+	return FALSE;
 
+    bSuccess = m_Title3.Create(_T("Title3"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
+			       TempRect, this, IDC_TITLE3);
     if (!bSuccess)
-        return FALSE;
-
-    bSuccess = m_Btn1.Create (_T ("Button1"),
-                              WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON,
-                              TempRect, this, IDC_BTN1);
+	return FALSE;
 
+    bSuccess = m_Btn1.Create(_T("Button1"), 
+                             WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON, 
+                             TempRect, this, IDC_BTN1);
     if (!bSuccess)
-        return FALSE;
-
-    bSuccess = m_Btn2.Create (_T ("Button2"),
-                              WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON,
-                              TempRect, this, IDC_BTN2);
+	return FALSE;
 
+    bSuccess = m_Btn2.Create(_T("Button2"), 
+                             WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON, 
+                             TempRect, this, IDC_BTN2);
     if (!bSuccess)
-        return FALSE;
+	return FALSE;
 
-    CFont *ft1 = new CFont,
-    *ft2 = new CFont,
-    *ft3 = new CFont;
+    CFont *ft1 = new CFont, 
+	  *ft2 = new CFont, 
+	  *ft3 = new CFont;
 
 
     LOGFONT lf;
-
-    memset (&lf, 0, sizeof (LOGFONT));
-
+    memset(&lf, 0, sizeof(LOGFONT));
     lf.lfHeight = 12;
-
-    lstrcpy (lf.lfFaceName, _T ("Arial"));
-
-    VERIFY (ft1->CreateFontIndirect (&lf));
-
-    VERIFY (ft3->CreateFontIndirect (&lf));
+    lstrcpy(lf.lfFaceName, _T("Arial"));
+    VERIFY(ft1->CreateFontIndirect(&lf));
+    VERIFY(ft3->CreateFontIndirect(&lf));
 
     lf.lfHeight = 20;
+    VERIFY(ft2->CreateFontIndirect(&lf));
 
-    VERIFY (ft2->CreateFontIndirect (&lf));
-
-    m_Title1.SetFont (ft1, TRUE);
-
-    m_Title2.SetFont (ft2, TRUE);
-
-    m_Title3.SetFont (ft3, TRUE);
+    m_Title1.SetFont(ft1, TRUE);
+    m_Title2.SetFont(ft2, TRUE);
+    m_Title3.SetFont(ft3, TRUE);
 
 
     SetWindowSize();
@@ -127,111 +113,109 @@ BOOL CPopUpWnd::Create (CPocketPJDlg* pParent)
     return TRUE;
 }
 
-void CPopUpWnd::SetContent (const CPopUpContent &content)
+void CPopUpWnd::SetContent(const CPopUpContent &content)
 {
-    m_Title1.SetWindowText (content.m_Title1);
-    m_Title2.SetWindowText (content.m_Title2);
-    m_Title3.SetWindowText (content.m_Title3);
+    m_Title1.SetWindowText(content.m_Title1);
+    m_Title2.SetWindowText(content.m_Title2);
+    m_Title3.SetWindowText(content.m_Title3);
 
     if (content.m_Btn1 != "") {
-        m_Btn1.SetWindowText (content.m_Btn1);
-        m_Btn1.ShowWindow (SW_SHOW);
+	m_Btn1.SetWindowText(content.m_Btn1);
+	m_Btn1.ShowWindow(SW_SHOW);
     } else {
-        m_Btn1.ShowWindow (SW_HIDE);
+	m_Btn1.ShowWindow(SW_HIDE);
     }
 
     if (content.m_Btn2 != "") {
-        m_Btn2.SetWindowText (content.m_Btn2);
-        m_Btn2.ShowWindow (SW_SHOW);
+	m_Btn2.SetWindowText(content.m_Btn2);
+	m_Btn2.ShowWindow(SW_SHOW);
     } else {
-        m_Btn2.ShowWindow (SW_HIDE);
+	m_Btn2.ShowWindow(SW_HIDE);
     }
 
     UpdateWindow();
-
-    ShowWindow (SW_SHOW);
+    ShowWindow(SW_SHOW);
 }
 
-void CPopUpWnd::SetWindowSize (int width, int height)
+void CPopUpWnd::SetWindowSize(int width, int height)
 {
     enum { H1 = 16, H2 = 40, H3 = 16, S = 5, G = 10, BW=60, BH=20, BG=40};
 
-    CRect rootRect (0, 0, 320, 240);
+    CRect rootRect(0, 0, 320, 240);
     int Y;
 
-    MoveWindow ( (rootRect.Width() - width) /2, (rootRect.Height() - height) /2,
-                 width, height);
+    MoveWindow((rootRect.Width() - width)/2, (rootRect.Height() - height)/2,
+	       width, height);
 
-    m_Title1.MoveWindow (10, Y=S, width-20, H1);
-    m_Title2.MoveWindow (10, Y+=H1+G, width-20, H2);
-    m_Title3.MoveWindow (10, Y+=H2+G, width-20, H3);
+    m_Title1.MoveWindow(10, Y=S, width-20, H1);
+    m_Title2.MoveWindow(10, Y+=H1+G, width-20, H2);
+    m_Title3.MoveWindow(10, Y+=H2+G, width-20, H3);
 
-    m_Btn1.MoveWindow ( (width-2*BW-BG) /2, Y+=H3+G, BW, BH);
-    m_Btn2.MoveWindow ( (width-2*BW-BG) /2+BW+BG, Y, BW, BH);
+    m_Btn1.MoveWindow((width-2*BW-BG)/2, Y+=H3+G, BW, BH);
+    m_Btn2.MoveWindow((width-2*BW-BG)/2+BW+BG, Y, BW, BH);
 }
 
-void CPopUpWnd::Hide()
-{
-    if (!::IsWindow (GetSafeHwnd()))
+void CPopUpWnd::Hide()  
+{ 
+    if (!::IsWindow(GetSafeHwnd())) 
         return;
 
-    if (IsWindowVisible()) {
-        ShowWindow (SW_HIDE);
-        ModifyStyle (WS_VISIBLE, 0);
+    if (IsWindowVisible())
+    {
+        ShowWindow(SW_HIDE);
+        ModifyStyle(WS_VISIBLE, 0);
     }
 }
 
-void CPopUpWnd::Show()
-{
-    if (!::IsWindow (GetSafeHwnd()))
+void CPopUpWnd::Show()  
+{ 
+    if (!::IsWindow(GetSafeHwnd()))
         return;
 
-    ModifyStyle (0, WS_VISIBLE);
-
-    ShowWindow (SW_SHOWNA);
-
-    RedrawWindow (NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW);
+    ModifyStyle(0, WS_VISIBLE);
+    ShowWindow(SW_SHOWNA);
+    RedrawWindow(NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW);
 }
 
-BEGIN_MESSAGE_MAP (CPopUpWnd, CWnd)
+BEGIN_MESSAGE_MAP(CPopUpWnd, CWnd)
     //{{AFX_MSG_MAP(CPopUpWnd)
     ON_WM_ERASEBKGND()
-    //}}AFX_MSG_MAP
-    ON_BN_CLICKED (IDC_BTN1, OnCancel1)
-    ON_BN_CLICKED (IDC_BTN2, OnCancel2)
+	//}}AFX_MSG_MAP
+    ON_BN_CLICKED(IDC_BTN1, OnCancel1)
+    ON_BN_CLICKED(IDC_BTN2, OnCancel2)
 END_MESSAGE_MAP()
 
 
 /////////////////////////////////////////////////////////////////////////////
 // CPopUpWnd message handlers
 
-BOOL CPopUpWnd::OnEraseBkgnd (CDC* pDC)
+BOOL CPopUpWnd::OnEraseBkgnd(CDC* pDC) 
 {
     CBrush backBrush;
-    backBrush.CreateSolidBrush (RGB (255,255,255));
-    CBrush* pOldBrush = pDC->SelectObject (&backBrush);
+    backBrush.CreateSolidBrush(RGB(255,255,255));
+    CBrush* pOldBrush = pDC->SelectObject(&backBrush);
 
     CRect rect;
-    pDC->GetClipBox (&rect);    // Erase the area needed
-    pDC->PatBlt (rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
-    pDC->SelectObject (pOldBrush);
+    pDC->GetClipBox(&rect);     // Erase the area needed
+    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
+    pDC->SelectObject(pOldBrush);
 
     return TRUE;
 }
 
-void CPopUpWnd::OnCancel1()
+void CPopUpWnd::OnCancel1() 
 {
-    m_ParentWnd->OnPopUpButton (1);
+    m_ParentWnd->OnPopUpButton(1);
 }
 
 
-void CPopUpWnd::OnCancel2()
+void CPopUpWnd::OnCancel2() 
 {
-    m_ParentWnd->OnPopUpButton (2);
+    m_ParentWnd->OnPopUpButton(2);
 }
 
 
-BOOL CPopUpWnd::DestroyWindow()
+BOOL CPopUpWnd::DestroyWindow() 
 {
     return CWnd::DestroyWindow();
 }
@@ -239,12 +223,13 @@ BOOL CPopUpWnd::DestroyWindow()
 void CPopUpWnd::PeekAndPump()
 {
     MSG msg;
-
-    while (::PeekMessage (&msg, NULL,0,0,PM_NOREMOVE)) {
-        if (!AfxGetApp()->PumpMessage()) {
-            ::PostQuitMessage (0);
+    while (::PeekMessage(&msg, NULL,0,0,PM_NOREMOVE)) 
+    {
+        if (!AfxGetApp()->PumpMessage()) 
+        {
+            ::PostQuitMessage(0);
             return;
-        }
+        } 
     }
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp
index 6d963f81fa..1357044ae2 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp
@@ -37,20 +37,20 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // Settings
 CPocketPJSettings::CPocketPJSettings()
-        : m_UseStun (FALSE), m_UseIce (FALSE), m_UseSrtp (FALSE), m_UsePublish (FALSE),
-        m_EchoSuppress (TRUE), m_EcTail (200), m_TCP (FALSE), m_VAD (FALSE),
-        m_AutoAnswer (FALSE)
+: m_UseStun(FALSE), m_UseIce(FALSE), m_UseSrtp(FALSE), m_UsePublish(FALSE),
+  m_EchoSuppress(TRUE), m_EcTail(200), m_TCP(FALSE), m_VAD(FALSE),
+  m_AutoAnswer(FALSE)
 {
     /* Init codec list */
 #if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC
-    m_Codecs.Add (_T ("GSM"));
+    m_Codecs.Add(_T("GSM"));
 #endif
 #if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC
-    m_Codecs.Add (_T ("PCMU"));
-    m_Codecs.Add (_T ("PCMA"));
+    m_Codecs.Add(_T("PCMU"));
+    m_Codecs.Add(_T("PCMA"));
 #endif
 #if defined(PJMEDIA_HAS_SPEEX_CODEC) && PJMEDIA_HAS_SPEEX_CODEC
-    m_Codecs.Add (_T ("Speex"));
+    m_Codecs.Add(_T("Speex"));
 #endif
 }
 
@@ -63,131 +63,113 @@ void CPocketPJSettings::LoadRegistry()
     DWORD cbData;
 
 
-    if (key.Open (HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
-        return;
+    if (key.Open(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
+	return;
 
-    cbData = sizeof (textVal);
-
-    if (key.QueryValue (textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) {
-        m_Domain = textVal;
+    cbData = sizeof(textVal);
+    if (key.QueryValue(textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) {
+	m_Domain = textVal;
     }
 
-    cbData = sizeof (textVal);
-
-    if (key.QueryValue (textVal, REG_USER, &cbData) == ERROR_SUCCESS) {
-        m_User = textVal;
+    cbData = sizeof(textVal);
+    if (key.QueryValue(textVal, REG_USER, &cbData) == ERROR_SUCCESS) {
+	m_User = textVal;
     }
 
-    cbData = sizeof (textVal);
-
-    if (key.QueryValue (textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) {
-        m_Password = textVal;
+    cbData = sizeof(textVal);
+    if (key.QueryValue(textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) {
+	m_Password = textVal;
     }
 
-    cbData = sizeof (textVal);
-
-    if (key.QueryValue (textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) {
-        m_StunSrv = textVal;
+    cbData = sizeof(textVal);
+    if (key.QueryValue(textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) {
+	m_StunSrv = textVal;
     }
 
-    cbData = sizeof (textVal);
-
-    if (key.QueryValue (textVal, REG_DNS, &cbData) == ERROR_SUCCESS) {
-        m_DNS = textVal;
+    cbData = sizeof(textVal);
+    if (key.QueryValue(textVal, REG_DNS, &cbData) == ERROR_SUCCESS) {
+	m_DNS = textVal;
     }
 
     dwordVal = 0;
-
-    if (key.QueryValue (dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
-        m_UseStun = dwordVal != 0;
+    if (key.QueryValue(dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
+	m_UseStun = dwordVal != 0;
     }
 
-    if (key.QueryValue (dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
-        m_UseIce = dwordVal != 0;
+    if (key.QueryValue(dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
+	m_UseIce = dwordVal != 0;
     }
 
 
-    if (key.QueryValue (dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
-        m_UseSrtp = dwordVal != 0;
+    if (key.QueryValue(dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
+	m_UseSrtp = dwordVal != 0;
     }
 
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) {
-        m_UsePublish = dwordVal != 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) {
+	m_UsePublish = dwordVal != 0;
     }
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
-        m_EchoSuppress = dwordVal != 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
+	m_EchoSuppress = dwordVal != 0;
     }
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
-        m_EcTail = dwordVal;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
+	m_EcTail = dwordVal;
     }
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
-        m_TCP = dwordVal != 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
+	m_TCP = dwordVal != 0;
     }
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
-        m_VAD = dwordVal != 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
+	m_VAD = dwordVal != 0;
     }
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
-        m_AutoAnswer = dwordVal != 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
+	m_AutoAnswer = dwordVal != 0;
     }
 
     m_BuddyList.RemoveAll();
 
     DWORD buddyCount = 0;
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) {
-        buddyCount = dwordVal;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) {
+	buddyCount = dwordVal;
     }
 
     unsigned i;
-
     for (i=0; i<buddyCount; ++i) {
-        CString entry;
-        entry.Format (REG_BUDDY_X, i);
+	CString entry;
+	entry.Format(REG_BUDDY_X, i);
 
-        cbData = sizeof (textVal);
-
-        if (key.QueryValue (textVal, entry, &cbData) == ERROR_SUCCESS) {
-            m_BuddyList.Add (textVal);
-        }
+	cbData = sizeof(textVal);
+	if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
+	    m_BuddyList.Add(textVal);
+	}
     }
 
     DWORD codecCount = 0;
+    cbData = sizeof(dwordVal);
+    if (key.QueryValue(codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
 
-    cbData = sizeof (dwordVal);
-
-    if (key.QueryValue (codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
+	m_Codecs.RemoveAll();
 
-        m_Codecs.RemoveAll();
+	for (i=0; i<codecCount; ++i) {
+	    CString entry;
+	    entry.Format(REG_CODEC_X, i);
 
-        for (i=0; i<codecCount; ++i) {
-            CString entry;
-            entry.Format (REG_CODEC_X, i);
-
-            cbData = sizeof (textVal);
-
-            if (key.QueryValue (textVal, entry, &cbData) == ERROR_SUCCESS) {
-                m_Codecs.Add (textVal);
-            }
-        }
+	    cbData = sizeof(textVal);
+	    if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
+		m_Codecs.Add(textVal);
+	    }
+	}
     }
 
     key.Close();
@@ -198,55 +180,42 @@ void CPocketPJSettings::SaveRegistry()
 {
     CRegKey key;
 
-    if (key.Create (HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
-        return;
-
-    key.SetValue (m_Domain, REG_DOMAIN);
-
-    key.SetValue (m_User, REG_USER);
-
-    key.SetValue (m_Password, REG_PASSWD);
+    if (key.Create(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
+	return;
 
-    key.SetValue (m_StunSrv, REG_STUN_SRV);
+    key.SetValue(m_Domain, REG_DOMAIN);
+    key.SetValue(m_User, REG_USER);
+    key.SetValue(m_Password, REG_PASSWD);
+    key.SetValue(m_StunSrv, REG_STUN_SRV);
+    key.SetValue(m_DNS, REG_DNS);
+    
+    key.SetValue(m_UseStun, REG_USE_STUN);
+    key.SetValue(m_UseIce, REG_USE_ICE);
+    key.SetValue(m_UseSrtp, REG_USE_SRTP);
+    key.SetValue(m_UsePublish, REG_USE_PUBLISH);
 
-    key.SetValue (m_DNS, REG_DNS);
+    key.SetValue(m_EchoSuppress, REG_ENABLE_EC);
+    key.SetValue(m_EcTail, REG_EC_TAIL);
 
-    key.SetValue (m_UseStun, REG_USE_STUN);
+    key.SetValue(m_TCP, REG_ENABLE_TCP);
+    key.SetValue(m_VAD, REG_ENABLE_VAD);
+    key.SetValue(m_AutoAnswer, REG_AUTO_ANSWER);
 
-    key.SetValue (m_UseIce, REG_USE_ICE);
-
-    key.SetValue (m_UseSrtp, REG_USE_SRTP);
-
-    key.SetValue (m_UsePublish, REG_USE_PUBLISH);
-
-    key.SetValue (m_EchoSuppress, REG_ENABLE_EC);
-
-    key.SetValue (m_EcTail, REG_EC_TAIL);
-
-    key.SetValue (m_TCP, REG_ENABLE_TCP);
-
-    key.SetValue (m_VAD, REG_ENABLE_VAD);
-
-    key.SetValue (m_AutoAnswer, REG_AUTO_ANSWER);
-
-    key.SetValue (m_BuddyList.GetSize(), REG_BUDDY_CNT);
+    key.SetValue(m_BuddyList.GetSize(), REG_BUDDY_CNT);
 
     int i;
-
     for (i=0; i<m_BuddyList.GetSize(); ++i) {
-        CString entry;
-        entry.Format (REG_BUDDY_X, i);
-        key.SetValue (m_BuddyList.GetAt (i), entry);
+	CString entry;
+	entry.Format(REG_BUDDY_X, i);
+	key.SetValue(m_BuddyList.GetAt(i), entry);
     }
 
     DWORD N = m_Codecs.GetSize();
-
-    key.SetValue (N, REG_CODEC_CNT);
-
+    key.SetValue(N, REG_CODEC_CNT);
     for (i=0; i<m_Codecs.GetSize(); ++i) {
-        CString entry;
-        entry.Format (REG_CODEC_X, i);
-        key.SetValue (m_Codecs.GetAt (i), entry);
+	CString entry;
+	entry.Format(REG_CODEC_X, i);
+	key.SetValue(m_Codecs.GetAt(i), entry);
     }
 
     key.Close();
@@ -257,137 +226,127 @@ void CPocketPJSettings::SaveRegistry()
 // CSettingsDlg dialog
 
 
-CSettingsDlg::CSettingsDlg (CPocketPJSettings &cfg, CWnd* pParent)
-        : CDialog (CSettingsDlg::IDD, pParent), m_Cfg (cfg)
+CSettingsDlg::CSettingsDlg(CPocketPJSettings &cfg, CWnd* pParent)
+	: CDialog(CSettingsDlg::IDD, pParent), m_Cfg(cfg)
 {
-    //{{AFX_DATA_INIT(CSettingsDlg)
-    m_Domain = _T ("");
-    m_ICE = FALSE;
-    m_Passwd = _T ("");
-    m_PUBLISH = FALSE;
-    m_SRTP = FALSE;
-    m_STUN = FALSE;
-    m_StunSrv = _T ("");
-    m_User = _T ("");
-    m_Dns = _T ("");
-    m_EchoSuppress = FALSE;
-    m_EcTail = _T ("");
-    m_TCP = FALSE;
-    m_VAD = FALSE;
-    m_AutoAnswer = FALSE;
-    //}}AFX_DATA_INIT
-
-    m_Domain    = m_Cfg.m_Domain;
-    m_ICE	    = m_Cfg.m_UseIce;
-    m_Passwd    = m_Cfg.m_Password;
-    m_PUBLISH   = m_Cfg.m_UsePublish;
-    m_SRTP	    = m_Cfg.m_UseSrtp;
-    m_STUN	    = m_Cfg.m_UseStun;
-    m_StunSrv   = m_Cfg.m_StunSrv;
-    m_User	    = m_Cfg.m_User;
-    m_Dns	    = m_Cfg.m_DNS;
-    m_EchoSuppress = m_Cfg.m_EchoSuppress;
-    m_TCP	    = m_Cfg.m_TCP;
-    m_VAD	    = m_Cfg.m_VAD;
-    m_AutoAnswer= m_Cfg.m_AutoAnswer;
-
-    CString s;
-    s.Format (_T ("%d"), m_Cfg.m_EcTail);
-    m_EcTail    = s;
+	//{{AFX_DATA_INIT(CSettingsDlg)
+	m_Domain = _T("");
+	m_ICE = FALSE;
+	m_Passwd = _T("");
+	m_PUBLISH = FALSE;
+	m_SRTP = FALSE;
+	m_STUN = FALSE;
+	m_StunSrv = _T("");
+	m_User = _T("");
+	m_Dns = _T("");
+	m_EchoSuppress = FALSE;
+	m_EcTail = _T("");
+	m_TCP = FALSE;
+	m_VAD = FALSE;
+	m_AutoAnswer = FALSE;
+	//}}AFX_DATA_INIT
+
+	m_Domain    = m_Cfg.m_Domain;
+	m_ICE	    = m_Cfg.m_UseIce;
+	m_Passwd    = m_Cfg.m_Password;
+	m_PUBLISH   = m_Cfg.m_UsePublish;
+	m_SRTP	    = m_Cfg.m_UseSrtp;
+	m_STUN	    = m_Cfg.m_UseStun;
+	m_StunSrv   = m_Cfg.m_StunSrv;
+	m_User	    = m_Cfg.m_User;
+	m_Dns	    = m_Cfg.m_DNS;
+	m_EchoSuppress = m_Cfg.m_EchoSuppress;
+	m_TCP	    = m_Cfg.m_TCP;
+	m_VAD	    = m_Cfg.m_VAD;
+	m_AutoAnswer= m_Cfg.m_AutoAnswer;
+
+	CString s;
+	s.Format(_T("%d"), m_Cfg.m_EcTail);
+	m_EcTail    = s;
 
 }
 
 
-void CSettingsDlg::DoDataExchange (CDataExchange* pDX)
+void CSettingsDlg::DoDataExchange(CDataExchange* pDX)
 {
-    CDialog::DoDataExchange (pDX);
-    //{{AFX_DATA_MAP(CSettingsDlg)
-    DDX_Control (pDX, IDC_CODECS, m_Codecs);
-    DDX_Text (pDX, IDC_DOMAIN, m_Domain);
-    DDX_Check (pDX, IDC_ICE, m_ICE);
-    DDX_Text (pDX, IDC_PASSWD, m_Passwd);
-    DDX_Check (pDX, IDC_PUBLISH, m_PUBLISH);
-    DDX_Check (pDX, IDC_SRTP, m_SRTP);
-    DDX_Check (pDX, IDC_STUN, m_STUN);
-    DDX_Text (pDX, IDC_STUN_SRV, m_StunSrv);
-    DDX_Text (pDX, IDC_USER, m_User);
-    DDX_Text (pDX, IDC_DNS, m_Dns);
-    DDX_Check (pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
-    DDX_Text (pDX, IDC_EC_TAIL, m_EcTail);
-    DDX_Check (pDX, IDC_TCP, m_TCP);
-    DDX_Check (pDX, IDC_VAD, m_VAD);
-    DDX_Check (pDX, IDC_AA, m_AutoAnswer);
-    //}}AFX_DATA_MAP
-
-
-    if (m_Codecs.GetCount() == 0) {
-        int i;
-
-        for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
-            m_Codecs.AddString (m_Cfg.m_Codecs.GetAt (i));
-        }
-
-        m_Codecs.SetCurSel (0);
-    }
+	CDialog::DoDataExchange(pDX);
+	//{{AFX_DATA_MAP(CSettingsDlg)
+	DDX_Control(pDX, IDC_CODECS, m_Codecs);
+	DDX_Text(pDX, IDC_DOMAIN, m_Domain);
+	DDX_Check(pDX, IDC_ICE, m_ICE);
+	DDX_Text(pDX, IDC_PASSWD, m_Passwd);
+	DDX_Check(pDX, IDC_PUBLISH, m_PUBLISH);
+	DDX_Check(pDX, IDC_SRTP, m_SRTP);
+	DDX_Check(pDX, IDC_STUN, m_STUN);
+	DDX_Text(pDX, IDC_STUN_SRV, m_StunSrv);
+	DDX_Text(pDX, IDC_USER, m_User);
+	DDX_Text(pDX, IDC_DNS, m_Dns);
+	DDX_Check(pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
+	DDX_Text(pDX, IDC_EC_TAIL, m_EcTail);
+	DDX_Check(pDX, IDC_TCP, m_TCP);
+	DDX_Check(pDX, IDC_VAD, m_VAD);
+	DDX_Check(pDX, IDC_AA, m_AutoAnswer);
+	//}}AFX_DATA_MAP
+
+	
+	if (m_Codecs.GetCount() == 0) {
+	    int i;
+	    for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
+		m_Codecs.AddString(m_Cfg.m_Codecs.GetAt(i));
+	    }
+	    m_Codecs.SetCurSel(0);
+	}
 }
 
 
-BEGIN_MESSAGE_MAP (CSettingsDlg, CDialog)
-    //{{AFX_MSG_MAP(CSettingsDlg)
-    ON_BN_CLICKED (IDC_STUN, OnStun)
-    ON_BN_CLICKED (IDC_ECHO_SUPPRESS, OnEchoSuppress)
-    ON_CBN_SELCHANGE (IDC_CODECS, OnSelchangeCodecs)
-    //}}AFX_MSG_MAP
+BEGIN_MESSAGE_MAP(CSettingsDlg, CDialog)
+	//{{AFX_MSG_MAP(CSettingsDlg)
+	ON_BN_CLICKED(IDC_STUN, OnStun)
+	ON_BN_CLICKED(IDC_ECHO_SUPPRESS, OnEchoSuppress)
+	ON_CBN_SELCHANGE(IDC_CODECS, OnSelchangeCodecs)
+	//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CSettingsDlg message handlers
 
-int CSettingsDlg::DoModal()
+int CSettingsDlg::DoModal() 
 {
-    int rc = CDialog::DoModal();
+    int rc = CDialog::DoModal();	
 
     return rc;
 }
 
-void CSettingsDlg::OnStun()
+void CSettingsDlg::OnStun() 
 {
 }
 
-void CSettingsDlg::OnEchoSuppress()
+void CSettingsDlg::OnEchoSuppress() 
 {
 }
 
-void CSettingsDlg::OnSelchangeCodecs()
+void CSettingsDlg::OnSelchangeCodecs() 
 {
     int cur = m_Codecs.GetCurSel();
-
     if (cur < 1)
-        return;
+	return;
 
     CString codec;
-
     DWORD N;
 
-    m_Codecs.GetLBText (cur, codec);
-
+    m_Codecs.GetLBText(cur, codec);
     N = m_Codecs.GetCount();
-
-    m_Codecs.DeleteString (cur);
-
+    m_Codecs.DeleteString(cur);
     N = m_Codecs.GetCount();
-
-    m_Codecs.InsertString (0, codec);
-
+    m_Codecs.InsertString(0, codec);
     N = m_Codecs.GetCount();
-
-    m_Codecs.SetCurSel (0);
+    m_Codecs.SetCurSel(0);
 }
 
 
-void CSettingsDlg::OnOK()
+void CSettingsDlg::OnOK() 
 {
-    UpdateData (TRUE);
+    UpdateData(TRUE);
 
     m_Cfg.m_Domain	= m_Domain;
     m_Cfg.m_UseIce	= m_ICE != 0;
@@ -399,7 +358,7 @@ void CSettingsDlg::OnOK()
     m_Cfg.m_User	= m_User;
     m_Cfg.m_DNS		= m_Dns;
     m_Cfg.m_EchoSuppress= m_EchoSuppress != 0;
-    m_Cfg.m_EcTail	= _ttoi (m_EcTail);
+    m_Cfg.m_EcTail	= _ttoi(m_EcTail);
     m_Cfg.m_TCP		= m_TCP != 0;
     m_Cfg.m_VAD		= m_VAD != 0;
     m_Cfg.m_AutoAnswer	= m_AutoAnswer != 0;
@@ -407,11 +366,10 @@ void CSettingsDlg::OnOK()
     unsigned i;
     m_Cfg.m_Codecs.RemoveAll();
     DWORD N = m_Codecs.GetCount();
-
     for (i=0; i<N; ++i) {
-        CString codec;
-        m_Codecs.GetLBText (i, codec);
-        m_Cfg.m_Codecs.Add (codec);
+	CString codec;
+	m_Codecs.GetLBText(i, codec);
+	m_Cfg.m_Codecs.Add(codec);
     }
 
     CDialog::OnOK();
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.c b/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.c
index 0eb7e8009c..3b5c580a2a 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.c
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.c
@@ -1,4 +1,4 @@
-/* $Id: _pjsua.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: _pjsua.c 3010 2009-11-10 10:57:29Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -630,6 +630,33 @@ static void cb_on_typing(pjsua_call_id call_id, const pj_str_t *from,
 }
 
 
+/*
+ * on_mwi_info
+ */
+static void cb_on_mwi_info(pjsua_acc_id acc_id, pjsua_mwi_info *mwi_info)
+{
+    if (PyCallable_Check(g_obj_callback->on_mwi_info)) {
+	PyObject *param_acc_id, *param_body;
+	pj_str_t body;
+
+	ENTER_PYTHON();
+
+	body.ptr = mwi_info->rdata->msg_info.msg->body->data;
+	body.slen = mwi_info->rdata->msg_info.msg->body->len;
+
+        PyObject_CallFunctionObjArgs(
+		g_obj_callback->on_mwi_info,
+		param_acc_id	= Py_BuildValue("i",acc_id),
+		param_body	= PyString_FromPJ(&body),
+		NULL
+	    );
+
+	Py_DECREF(param_acc_id);
+	Py_DECREF(param_body);
+
+	LEAVE_PYTHON();
+    }
+}
 
 /* 
  * translate_hdr
@@ -901,6 +928,7 @@ static PyObject *py_pjsua_init(PyObject *pSelf, PyObject *pArgs)
     	cfg_ua.cb.on_pager2 = &cb_on_pager;
     	cfg_ua.cb.on_pager_status2 = &cb_on_pager_status;
     	cfg_ua.cb.on_typing2 = &cb_on_typing;
+	cfg_ua.cb.on_mwi_info = &cb_on_mwi_info;
 
         p_cfg_ua = &cfg_ua;
 
@@ -2033,6 +2061,10 @@ static PyObject *py_pjsua_buddy_set_user_data(PyObject *pSelf, PyObject *pArgs)
         return NULL;
     }
 
+    if (!pjsua_buddy_is_valid(buddy_id)) {
+	return Py_BuildValue("i", 0);
+    }
+
     old_user_data = (PyObject*) pjsua_buddy_get_user_data(buddy_id);
 
     status = pjsua_buddy_set_user_data(buddy_id, (void*)user_data);
@@ -3875,6 +3907,7 @@ static PyObject *py_pj_parse_simple_sip(PyObject *pSelf, PyObject *pArgs)
     item = PyString_FromPJ(&sip_uri->transport_param);
     PyTuple_SetItem(ret, 4, item);
 
+    pj_pool_release(pool);
     return ret;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.h b/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.h
index 06fc700ef9..8f89464f4d 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.h
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/python/_pjsua.h
@@ -1,4 +1,4 @@
-/* $Id: _pjsua.h 2859 2009-08-11 16:26:20Z nanang $ */
+/* $Id: _pjsua.h 3007 2009-11-10 10:06:58Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -235,6 +235,7 @@ typedef struct PyObj_pjsua_callback
     PyObject * on_pager;
     PyObject * on_pager_status;
     PyObject * on_typing;
+    PyObject * on_mwi_info;
 } PyObj_pjsua_callback;
 
 
@@ -258,6 +259,7 @@ static void PyObj_pjsua_callback_delete(PyObj_pjsua_callback* self)
     Py_XDECREF(self->on_pager);
     Py_XDECREF(self->on_pager_status);
     Py_XDECREF(self->on_typing);
+    Py_XDECREF(self->on_mwi_info);
     self->ob_type->tp_free((PyObject*)self);
 }
 
@@ -291,6 +293,7 @@ static PyObject * PyObj_pjsua_callback_new(PyTypeObject *type,
         self->on_pager = Py_BuildValue("");
         self->on_pager_status = Py_BuildValue("");
         self->on_typing = Py_BuildValue("");
+	self->on_mwi_info = Py_BuildValue("");
     }
 
     return (PyObject *)self;
@@ -394,6 +397,11 @@ static PyMemberDef PyObj_pjsua_callback_members[] =
 	offsetof(PyObj_pjsua_callback, on_typing), 0,
         "Notify application about typing indication."
     },
+    {
+        "on_mwi_info", T_OBJECT_EX, 
+	offsetof(PyObj_pjsua_callback, on_mwi_info), 0,
+        "Notify application about MWI indication."
+    },
     {NULL}  /* Sentinel */
 };
 
@@ -1337,6 +1345,7 @@ static void PyObj_pjsua_transport_config_delete(PyObj_pjsua_transport_config* se
 static void PyObj_pjsua_transport_config_export(pjsua_transport_config *cfg,
 						PyObj_pjsua_transport_config *obj)
 {
+    pjsua_transport_config_default(cfg);
     cfg->public_addr	= PyString_ToPJ(obj->public_addr);
     cfg->bound_addr	= PyString_ToPJ(obj->bound_addr);
     cfg->port		= obj->port;
@@ -1645,6 +1654,7 @@ typedef struct
     PyObject	    *id;
     PyObject	    *reg_uri;
     int		     publish_enabled;
+    int		     mwi_enabled;
     PyObject	    *force_contact;
     PyListObject    *proxy;
     unsigned	     reg_timeout;
@@ -1698,6 +1708,7 @@ static void PyObj_pjsua_acc_config_import(PyObj_pjsua_acc_config *obj,
     Py_XDECREF(obj->reg_uri);
     obj->reg_uri    = PyString_FromPJ(&cfg->reg_uri);
     obj->publish_enabled = cfg->publish_enabled;
+    obj->mwi_enabled = cfg->mwi_enabled;
     Py_XDECREF(obj->force_contact);
     obj->force_contact = PyString_FromPJ(&cfg->force_contact);
     Py_XDECREF(obj->proxy);
@@ -1753,6 +1764,7 @@ static void PyObj_pjsua_acc_config_export(pjsua_acc_config *cfg,
     cfg->id	    = PyString_ToPJ(obj->id);
     cfg->reg_uri    = PyString_ToPJ(obj->reg_uri);
     cfg->publish_enabled = obj->publish_enabled;
+    cfg->mwi_enabled = obj->mwi_enabled;
     cfg->force_contact = PyString_ToPJ(obj->force_contact);
 
     cfg->proxy_cnt = PyList_Size((PyObject*)obj->proxy);
@@ -1857,6 +1869,11 @@ static PyMemberDef PyObj_pjsua_acc_config_members[] =
         offsetof(PyObj_pjsua_acc_config, publish_enabled), 0,
         "Publish presence? "
     },
+    {
+        "mwi_enabled", T_INT, 
+        offsetof(PyObj_pjsua_acc_config, mwi_enabled), 0,
+        "Enable MWI subscription "
+    },
     {
         "force_contact", T_OBJECT_EX,
         offsetof(PyObj_pjsua_acc_config, force_contact), 0,
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/python/pjsua.py b/sflphone-common/libs/pjproject/pjsip-apps/src/python/pjsua.py
index f653fc06e3..183ce0e70b 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/python/pjsua.py
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/python/pjsua.py
@@ -1,4 +1,4 @@
-# $Id: pjsua.py 2375 2008-12-11 11:18:33Z bennylp $
+# $Id: pjsua.py 2976 2009-10-29 08:16:46Z bennylp $
 #
 # Object oriented PJSUA wrapper.
 #
@@ -993,6 +993,19 @@ class AccountCallback:
         """
         pass
 
+    def on_mwi_info(self, body):
+        """
+        Notification about change in Message Summary / Message Waiting
+	Indication (RFC 3842) status. MWI subscription must be enabled
+	in the account config to receive this notification.
+
+        Keyword arguments:
+        body      -- String containing message body as received in the
+                     NOTIFY request.
+
+        """
+        pass
+
 
 
 class Account:
@@ -1222,6 +1235,28 @@ class Account:
         lck = self._lib().auto_lock()
         _pjsua.acc_pres_notify(self._id, pres_obj, state, reason, 
                                Lib._create_msg_data(hdr_list))
+    
+    def send_pager(self, uri, text, im_id=0, content_type="text/plain", \
+                   hdr_list=None):
+        """Send instant message to arbitrary URI.
+
+        Keyword arguments:
+        text         -- Instant message to be sent
+        uri          -- URI to send the Instant Message to.
+        im_id        -- Optional instant message ID to identify this
+                        instant message when delivery status callback
+                        is called.
+        content_type -- MIME type identifying the instant message
+        hdr_list     -- Optional list of headers to be sent with the
+                        request.
+
+        """
+        lck = self._lib().auto_lock()
+        err = _pjsua.im_send(self._id, uri, \
+                             content_type, text, \
+                             Lib._create_msg_data(hdr_list), \
+                             im_id)
+        self._lib()._err_check("send_pager()", self, err)
 
 class CallCallback:
     """Class to receive event notification from Call objects. 
@@ -1658,7 +1693,7 @@ class Call:
 
         """
         lck = self._lib().auto_lock()
-        if hdr_list and body:
+        if hdr_list or body:
             msg_data = _pjsua.Msg_Data()
             if hdr_list:
                 msg_data.hdr_list = hdr_list
@@ -2091,6 +2126,7 @@ class Lib:
         py_ua_cfg.cb.on_pager = _cb_on_pager
         py_ua_cfg.cb.on_pager_status = _cb_on_pager_status
         py_ua_cfg.cb.on_typing = _cb_on_typing
+	py_ua_cfg.cb.on_mwi_info = _cb_on_mwi_info;
 
         err = _pjsua.init(py_ua_cfg, log_cfg._cvt_to_pjsua(), 
                           media_cfg._cvt_to_pjsua())
@@ -2741,6 +2777,11 @@ class Lib:
             else:
                 acc._cb.on_typing(from_uri, contact, is_typing)
 
+    def _cb_on_mwi_info(self, acc_id, body):
+        acc = self._lookup_account(acc_id)
+        if acc:
+            return acc._cb.on_mwi_info(body)
+
     def _cb_on_buddy_state(self, buddy_id):
         buddy = self._lookup_buddy(buddy_id)
         if buddy:
@@ -2794,6 +2835,8 @@ def _cb_on_pager_status(call_id, to, body, user_data, status, reason, acc_id):
 def _cb_on_typing(call_id, from_uri, to, contact, is_typing, acc_id):
     _lib._cb_on_typing(call_id, from_uri, to, contact, is_typing, acc_id)
 
+def _cb_on_mwi_info(acc_id, body):
+    _lib._cb_on_mwi_info(acc_id, body)
 
 # Worker thread
 def _worker_thread_main(arg):
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/samples/debug.c b/sflphone-common/libs/pjproject/pjsip-apps/src/samples/debug.c
index e9ae2fa0e2..895991fcbc 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/samples/debug.c
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/samples/debug.c
@@ -1,4 +1,4 @@
-/* $Id: debug.c 2846 2009-07-29 12:28:31Z bennylp $ */
+/* $Id: debug.c 3028 2009-12-08 13:11:25Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -28,5 +28,5 @@
  * E.g.:
  *  #include "playfile.c"
  */
-#include "jbsim.c"
+#include "icedemo.c"
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/samples/icedemo.c b/sflphone-common/libs/pjproject/pjsip-apps/src/samples/icedemo.c
index 44f0ed824f..027a0536f7 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/samples/icedemo.c
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/samples/icedemo.c
@@ -1,4 +1,4 @@
-/* $Id: icedemo.c 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: icedemo.c 3043 2010-01-04 14:20:22Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  *
@@ -47,6 +47,7 @@ static struct app_t
 	pj_str_t    turn_username;
 	pj_str_t    turn_password;
 	pj_bool_t   turn_fingerprint;
+	const char *log_file;
     } opt;
 
     /* Our global variables */
@@ -56,6 +57,7 @@ static struct app_t
     pj_bool_t		 thread_quit_flag;
     pj_ice_strans_cfg	 ice_cfg;
     pj_ice_strans	*icest;
+    FILE		*log_fhnd;
 
     /* Variables to store parsed remote ICE info */
     struct rem_info
@@ -109,6 +111,12 @@ static void err_exit(const char *title, pj_status_t status)
     pj_caching_pool_destroy(&icedemo.cp);
 
     pj_shutdown();
+
+    if (icedemo.log_fhnd) {
+	fclose(icedemo.log_fhnd);
+	icedemo.log_fhnd = NULL;
+    }
+
     exit(status != PJ_SUCCESS);
 }
 
@@ -216,11 +224,13 @@ static void cb_on_rx_data(pj_ice_strans *ice_st,
     PJ_UNUSED_ARG(src_addr_len);
     PJ_UNUSED_ARG(pkt);
 
-    ((char*)pkt)[size] = '\0';
+    // Don't do this! It will ruin the packet buffer in case TCP is used!
+    //((char*)pkt)[size] = '\0';
 
-    PJ_LOG(3,(THIS_FILE, "Component %d: received %d bytes data from %s: \"%s\"",
+    PJ_LOG(3,(THIS_FILE, "Component %d: received %d bytes data from %s: \"%.*s\"",
 	      comp_id, size,
 	      pj_sockaddr_print(src_addr, ipstr, sizeof(ipstr), 3),
+	      (unsigned)size,
 	      (char*)pkt));
 }
 
@@ -236,8 +246,6 @@ static void cb_on_ice_complete(pj_ice_strans *ice_st,
 	(op==PJ_ICE_STRANS_OP_INIT? "initialization" :
 	    (op==PJ_ICE_STRANS_OP_NEGOTIATION ? "negotiation" : "unknown_op"));
 
-    PJ_UNUSED_ARG(ice_st);
-
     if (status == PJ_SUCCESS) {
 	PJ_LOG(3,(THIS_FILE, "ICE %s successful", opname));
     } else {
@@ -245,9 +253,20 @@ static void cb_on_ice_complete(pj_ice_strans *ice_st,
 
 	pj_strerror(status, errmsg, sizeof(errmsg));
 	PJ_LOG(1,(THIS_FILE, "ICE %s failed: %s", opname, errmsg));
+	pj_ice_strans_destroy(ice_st);
+	icedemo.icest = NULL;
     }
 }
 
+/* log callback to write to file */
+static void log_func(int level, const char *data, int len)
+{
+    pj_log_write(level, data, len);
+    if (icedemo.log_fhnd) {
+	if (fwrite(data, len, 1, icedemo.log_fhnd) != 1)
+	    return;
+    }
+}
 
 /*
  * This is the main application initialization function. It is called
@@ -258,6 +277,11 @@ static pj_status_t icedemo_init(void)
 {
     pj_status_t status;
 
+    if (icedemo.opt.log_file) {
+	icedemo.log_fhnd = fopen(icedemo.opt.log_file, "a");
+	pj_log_set_log_func(&log_func);
+    }
+
     /* Initialize the libraries before anything else */
     CHECK( pj_init() );
     CHECK( pjlib_util_init() );
@@ -1147,6 +1171,7 @@ static void icedemo_usage()
     puts("                           resolution");
     puts(" --max-host, -H N          Set max number of host candidates to N");
     puts(" --regular, -R             Use regular nomination (default aggressive)");
+    puts(" --log-file, -L FILE       Save output to log FILE");
     puts(" --help, -h                Display this screen.");
     puts("");
     puts("STUN related options:");
@@ -1182,7 +1207,8 @@ int main(int argc, char *argv[])
 	{ "turn-username",	1, 0, 'u'},
 	{ "turn-password",	1, 0, 'p'},
 	{ "turn-fingerprint",	0, 0, 'F'},
-	{ "regular",		0, 0, 'R'}
+	{ "regular",		0, 0, 'R'},
+	{ "log-file",		1, 0, 'L'},
     };
     int c, opt_id;
     pj_status_t status;
@@ -1190,7 +1216,7 @@ int main(int argc, char *argv[])
     icedemo.opt.comp_cnt = 1;
     icedemo.opt.max_host = -1;
 
-    while((c=pj_getopt_long(argc,argv, "c:n:s:t:u:p:H:hTFR", long_options, &opt_id))!=-1) {
+    while((c=pj_getopt_long(argc,argv, "c:n:s:t:u:p:H:L:hTFR", long_options, &opt_id))!=-1) {
 	switch (c) {
 	case 'c':
 	    icedemo.opt.comp_cnt = atoi(pj_optarg);
@@ -1229,6 +1255,9 @@ int main(int argc, char *argv[])
 	case 'R':
 	    icedemo.opt.regular = PJ_TRUE;
 	    break;
+	case 'L':
+	    icedemo.opt.log_file = pj_optarg;
+	    break;
 	default:
 	    printf("Argument \"%s\" is not valid. Use -h to see help",
 		   argv[pj_optind]);
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/samples/jbsim.c b/sflphone-common/libs/pjproject/pjsip-apps/src/samples/jbsim.c
index 5ff871aa61..6815730d34 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/samples/jbsim.c
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/samples/jbsim.c
@@ -1,4 +1,4 @@
-/* $Id: jbsim.c 2854 2009-08-05 17:10:35Z bennylp $ */
+/* $Id: jbsim.c 2938 2009-10-11 05:06:43Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  *
@@ -310,7 +310,7 @@ static pj_status_t stream_init(const struct stream_cfg *cfg, struct stream **p_s
     struct stream *stream = NULL;
     pjmedia_codec_mgr *cm;
     unsigned count;
-    pjmedia_codec_info *ci;
+    const pjmedia_codec_info *ci;
     pjmedia_stream_info si;
     pj_status_t status;
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp
index 75b85cab1c..b1b884286c 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: main_symbian.cpp 2673 2009-05-05 10:46:51Z nanang $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include "ua.h"
 
@@ -30,7 +30,7 @@ CConsoleBase* console;
 
 // Needed by APS
 //TPtrC APP_UID = _L("200235D3");
-TPtrC APP_UID = _L ("A000000D");
+TPtrC APP_UID = _L("A000000D");
 
 
 ////////////////////////////////////////////////////////////////////////////
@@ -38,13 +38,13 @@ TPtrC APP_UID = _L ("A000000D");
 LOCAL_C void DoStartL()
 {
     CActiveScheduler *scheduler = new (ELeave) CActiveScheduler;
-    CleanupStack::PushL (scheduler);
-    CActiveScheduler::Install (scheduler);
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
 
     ua_main();
-
-    CActiveScheduler::Install (NULL);
-    CleanupStack::Pop (scheduler);
+    
+    CActiveScheduler::Install(NULL);
+    CleanupStack::Pop(scheduler);
     delete scheduler;
 }
 
@@ -61,26 +61,22 @@ GLDEF_C TInt E32Main()
     CTrapCleanup* cleanup = CTrapCleanup::New();
 
     // Create output console
-    TRAPD (createError, console = Console::NewL (_L ("Console"), TSize (KConsFullScreen,KConsFullScreen)));
-
+    TRAPD(createError, console = Console::NewL(_L("Console"), TSize(KConsFullScreen,KConsFullScreen)));
     if (createError)
         return createError;
 
-    TRAPD (startError, DoStartL());
-
-    console->Printf (_L ("[press any key to close]\n"));
+    TRAPD(startError, DoStartL());
 
+    console->Printf(_L("[press any key to close]\n"));
     console->Getch();
-
+    
     delete console;
-
     delete cleanup;
 
-    CloseSTDLIB();
+    CloseSTDLIB(); 
 
     // Mark end of heap usage, detect memory leaks
     __UHEAP_MARKEND;
-
     return KErrNone;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp
index 3b2182bc11..7b5de03db3 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp
@@ -1,5 +1,5 @@
-/* $Id: ua.cpp 2781 2009-06-22 14:06:40Z nanang $ */
-/*
+/* $Id: ua.cpp 2999 2009-11-09 09:52:23Z bennylp $ */
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pjsua-lib/pjsua.h>
 #include <pjsua-lib/pjsua_internal.h>
@@ -35,7 +35,7 @@
 //
 // Destination URI (to make call, or to subscribe presence)
 //
-#define SIP_DST_URI	"sip:100@pjsip.lab"
+#define SIP_DST_URI	"<sip:100@pjsip.lab>"
 
 //
 // Account
@@ -52,9 +52,14 @@
 //#define SIP_PROXY	"<sip:192.168.0.8;lr>"
 
 //
-// Set to 1 if TCP is desired (experimental)
+// SIP transports
 //
-#define ENABLE_SIP_TCP	0
+#define ENABLE_SIP_UDP	1
+#define ENABLE_SIP_TCP	0 // experimental
+#define ENABLE_SIP_TLS	0 // experimental
+
+#define TLS_SRV_NAME	"pjsip.org"	// TLS servername (required for
+					// TLS transport)
 
 //
 // Configure nameserver if DNS SRV is to be used with both SIP
@@ -66,15 +71,15 @@
 //
 // STUN server
 #if 0
-// Use this to have the STUN server resolved normally
+	// Use this to have the STUN server resolved normally
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	"stun.pjsip.org"
 #elif 0
-// Use this to have the STUN server resolved with DNS SRV
+	// Use this to have the STUN server resolved with DNS SRV
 #   define STUN_DOMAIN	"pjsip.org"
 #   define STUN_SERVER	NULL
 #else
-// Use this to disable STUN
+	// Use this to disable STUN
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	NULL
 #endif
@@ -89,6 +94,16 @@
 //
 #define USE_SRTP 	PJSUA_DEFAULT_USE_SRTP
 
+//
+// Set QoS on transports? Yes!
+// As an example, we set SIP transports DSCP value to CS3 (DSCP
+// value 24 or 0x18), for no reason, and tag RTP/RTCP packets 
+// with VOICE type.
+//
+#define SIP_QOS_DSCP	0x18
+#define RTP_QOS_TYPE	PJ_QOS_TYPE_VOICE
+
+
 //
 // Globals
 //
@@ -98,180 +113,179 @@ static pjsua_buddy_id g_buddy_id = PJSUA_INVALID_ID;
 
 
 /* Callback called by the library upon receiving incoming call */
-static void on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
-                              pjsip_rx_data *rdata)
+static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
+			     pjsip_rx_data *rdata)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG (acc_id);
-    PJ_UNUSED_ARG (rdata);
+    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG(rdata);
 
     if (g_call_id != PJSUA_INVALID_ID) {
-        pjsua_call_answer (call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
-        return;
+    	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
+    	return;
     }
+    
+    pjsua_call_get_info(call_id, &ci);
 
-    pjsua_call_get_info (call_id, &ci);
-
-    PJ_LOG (3, (THIS_FILE, "Incoming call from %.*s!!",
-                (int) ci.remote_info.slen,
-                ci.remote_info.ptr));
+    PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
+			 (int)ci.remote_info.slen,
+			 ci.remote_info.ptr));
 
     g_call_id = call_id;
-
+    
     /* Automatically answer incoming calls with 180/Ringing */
-    pjsua_call_answer (call_id, 180, NULL, NULL);
+    pjsua_call_answer(call_id, 180, NULL, NULL);
 }
 
 /* Callback called by the library when call's state has changed */
-static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
+static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG (e);
-
-    pjsua_call_get_info (call_id, &ci);
+    PJ_UNUSED_ARG(e);
 
+    pjsua_call_get_info(call_id, &ci);
+    
     if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
-        if (call_id == g_call_id)
-            g_call_id = PJSUA_INVALID_ID;
+    	if (call_id == g_call_id)
+    	    g_call_id = PJSUA_INVALID_ID;
     } else if (ci.state != PJSIP_INV_STATE_INCOMING) {
-        if (g_call_id == PJSUA_INVALID_ID)
-            g_call_id = call_id;
+    	if (g_call_id == PJSUA_INVALID_ID)
+    	    g_call_id = call_id;
     }
-
-    PJ_LOG (3, (THIS_FILE, "Call %d state=%.*s", call_id,
-
-                (int) ci.state_text.slen,
-                ci.state_text.ptr));
+    
+    PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,
+			 (int)ci.state_text.slen,
+			 ci.state_text.ptr));
 }
 
 /* Callback called by the library when call's media state has changed */
-static void on_call_media_state (pjsua_call_id call_id)
+static void on_call_media_state(pjsua_call_id call_id)
 {
     pjsua_call_info ci;
 
-    pjsua_call_get_info (call_id, &ci);
+    pjsua_call_get_info(call_id, &ci);
 
     if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-        // When media is active, connect call to sound device.
-        pjsua_conf_connect (ci.conf_slot, 0);
-        pjsua_conf_connect (0, ci.conf_slot);
+	// When media is active, connect call to sound device.
+	pjsua_conf_connect(ci.conf_slot, 0);
+	pjsua_conf_connect(0, ci.conf_slot);
     }
 }
 
 
 /* Handler on buddy state changed. */
-static void on_buddy_state (pjsua_buddy_id buddy_id)
+static void on_buddy_state(pjsua_buddy_id buddy_id)
 {
     pjsua_buddy_info info;
-    pjsua_buddy_get_info (buddy_id, &info);
+    pjsua_buddy_get_info(buddy_id, &info);
 
-    PJ_LOG (3, (THIS_FILE, "%.*s status is %.*s",
-                (int) info.uri.slen,
-                info.uri.ptr,
-                (int) info.status_text.slen,
-                info.status_text.ptr));
+    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s",
+	      (int)info.uri.slen,
+	      info.uri.ptr,
+	      (int)info.status_text.slen,
+	      info.status_text.ptr));
 }
 
 
 /* Incoming IM message (i.e. MESSAGE request)!  */
-static void on_pager (pjsua_call_id call_id, const pj_str_t *from,
-                      const pj_str_t *to, const pj_str_t *contact,
-                      const pj_str_t *mime_type, const pj_str_t *text)
+static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
+		     const pj_str_t *to, const pj_str_t *contact,
+		     const pj_str_t *mime_type, const pj_str_t *text)
 {
     /* Note: call index may be -1 */
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
-    PJ_UNUSED_ARG (mime_type);
-
-    PJ_LOG (3, (THIS_FILE,"MESSAGE from %.*s: %.*s",
-                (int) from->slen, from->ptr,
-                (int) text->slen, text->ptr));
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG(mime_type);
+
+    PJ_LOG(3,(THIS_FILE,"MESSAGE from %.*s: %.*s",
+	      (int)from->slen, from->ptr,
+	      (int)text->slen, text->ptr));
 }
 
 
 /* Received typing indication  */
-static void on_typing (pjsua_call_id call_id, const pj_str_t *from,
-                       const pj_str_t *to, const pj_str_t *contact,
-                       pj_bool_t is_typing)
+static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
+		      const pj_str_t *to, const pj_str_t *contact,
+		      pj_bool_t is_typing)
 {
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
 
-    PJ_LOG (3, (THIS_FILE, "IM indication: %.*s %s",
-                (int) from->slen, from->ptr,
-                (is_typing?"is typing..":"has stopped typing")));
+    PJ_LOG(3,(THIS_FILE, "IM indication: %.*s %s",
+	      (int)from->slen, from->ptr,
+	      (is_typing?"is typing..":"has stopped typing")));
 }
 
 
 /* Call transfer request status. */
-static void on_call_transfer_status (pjsua_call_id call_id,
-                                     int status_code,
-                                     const pj_str_t *status_text,
-                                     pj_bool_t final,
-                                     pj_bool_t *p_cont)
+static void on_call_transfer_status(pjsua_call_id call_id,
+				    int status_code,
+				    const pj_str_t *status_text,
+				    pj_bool_t final,
+				    pj_bool_t *p_cont)
 {
-    PJ_LOG (3, (THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
-                call_id, status_code,
-                (int) status_text->slen, status_text->ptr,
-                (final ? "[final]" : "")));
+    PJ_LOG(3,(THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
+	      call_id, status_code,
+	      (int)status_text->slen, status_text->ptr,
+	      (final ? "[final]" : "")));
 
     if (status_code/100 == 2) {
-        PJ_LOG (3, (THIS_FILE,
-                    "Call %d: call transfered successfully, disconnecting call",
-                    call_id));
-        pjsua_call_hangup (call_id, PJSIP_SC_GONE, NULL, NULL);
-        *p_cont = PJ_FALSE;
+	PJ_LOG(3,(THIS_FILE, 
+	          "Call %d: call transfered successfully, disconnecting call",
+		  call_id));
+	pjsua_call_hangup(call_id, PJSIP_SC_GONE, NULL, NULL);
+	*p_cont = PJ_FALSE;
     }
 }
 
 
 /* NAT detection result */
-static void on_nat_detect (const pj_stun_nat_detect_result *res)
+static void on_nat_detect(const pj_stun_nat_detect_result *res) 
 {
     if (res->status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "NAT detection failed", res->status);
+	pjsua_perror(THIS_FILE, "NAT detection failed", res->status);
     } else {
-        PJ_LOG (3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
-    }
+	PJ_LOG(3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
+    }    
 }
 
 /* Notification that call is being replaced. */
-static void on_call_replaced (pjsua_call_id old_call_id,
-                              pjsua_call_id new_call_id)
+static void on_call_replaced(pjsua_call_id old_call_id,
+			     pjsua_call_id new_call_id)
 {
     pjsua_call_info old_ci, new_ci;
 
-    pjsua_call_get_info (old_call_id, &old_ci);
-    pjsua_call_get_info (new_call_id, &new_ci);
+    pjsua_call_get_info(old_call_id, &old_ci);
+    pjsua_call_get_info(new_call_id, &new_ci);
 
-    PJ_LOG (3, (THIS_FILE, "Call %d with %.*s is being replaced by "
-                "call %d with %.*s",
-                old_call_id,
-                (int) old_ci.remote_info.slen, old_ci.remote_info.ptr,
-                new_call_id,
-                (int) new_ci.remote_info.slen, new_ci.remote_info.ptr));
+    PJ_LOG(3,(THIS_FILE, "Call %d with %.*s is being replaced by "
+			 "call %d with %.*s",
+			 old_call_id, 
+			 (int)old_ci.remote_info.slen, old_ci.remote_info.ptr,
+			 new_call_id,
+			 (int)new_ci.remote_info.slen, new_ci.remote_info.ptr));
 }
 
 
 //#include<e32debug.h>
 
 /* Logging callback */
-static void log_writer (int level, const char *buf, int len)
+static void log_writer(int level, const char *buf, int len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG (level);
+    PJ_UNUSED_ARG(level);
+    
+    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
 
-    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
-
-    TPtrC16 aBuf ( (const TUint16*) buf16, (TInt) len);
+    TPtrC16 aBuf((const TUint16*)buf16, (TInt)len);
     //RDebug::Print(aBuf);
-    console->Write (aBuf);
-
+    console->Write(aBuf);
+    
 }
 
 /*
@@ -284,79 +298,63 @@ static pj_status_t app_startup()
     pj_status_t status;
 
     /* Redirect log before pjsua_init() */
-    pj_log_set_log_func (&log_writer);
-
+    pj_log_set_log_func(&log_writer);
+    
     /* Set log level */
-    pj_log_set_level (CON_LOG_LEVEL);
+    pj_log_set_level(CON_LOG_LEVEL);
 
     /* Create pjsua first! */
     status = pjsua_create();
-
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pjsua_create() error", status);
-        return status;
+    	pjsua_perror(THIS_FILE, "pjsua_create() error", status);
+    	return status;
     }
 
     /* Init pjsua */
     pjsua_config cfg;
-
     pjsua_logging_config log_cfg;
-
     pjsua_media_config med_cfg;
 
-    pjsua_config_default (&cfg);
-
+    pjsua_config_default(&cfg);
     cfg.max_calls = 2;
-
     cfg.thread_cnt = 0; // Disable threading on Symbian
-
     cfg.use_srtp = USE_SRTP;
-
     cfg.srtp_secure_signaling = 0;
-
+    
     cfg.cb.on_incoming_call = &on_incoming_call;
-
     cfg.cb.on_call_media_state = &on_call_media_state;
-
     cfg.cb.on_call_state = &on_call_state;
-
     cfg.cb.on_buddy_state = &on_buddy_state;
-
     cfg.cb.on_pager = &on_pager;
-
     cfg.cb.on_typing = &on_typing;
-
     cfg.cb.on_call_transfer_status = &on_call_transfer_status;
-
     cfg.cb.on_call_replaced = &on_call_replaced;
-
     cfg.cb.on_nat_detect = &on_nat_detect;
-
+    
     if (SIP_PROXY) {
-        cfg.outbound_proxy_cnt = 1;
-        cfg.outbound_proxy[0] = pj_str (SIP_PROXY);
+	    cfg.outbound_proxy_cnt = 1;
+	    cfg.outbound_proxy[0] = pj_str(SIP_PROXY);
     }
-
+    
     if (NAMESERVER) {
-        cfg.nameserver_count = 1;
-        cfg.nameserver[0] = pj_str (NAMESERVER);
+	    cfg.nameserver_count = 1;
+	    cfg.nameserver[0] = pj_str(NAMESERVER);
     }
-
+    
     if (NAMESERVER && STUN_DOMAIN) {
-        cfg.stun_domain = pj_str (STUN_DOMAIN);
+	    cfg.stun_domain = pj_str(STUN_DOMAIN);
     } else if (STUN_SERVER) {
-        cfg.stun_host = pj_str (STUN_SERVER);
+	    cfg.stun_host = pj_str(STUN_SERVER);
     }
-
-
-    pjsua_logging_config_default (&log_cfg);
-
+    
+    
+    pjsua_logging_config_default(&log_cfg);
     log_cfg.level = FILE_LOG_LEVEL;
     log_cfg.console_level = CON_LOG_LEVEL;
     log_cfg.cb = &log_writer;
-    log_cfg.log_filename = pj_str ("C:\\data\\symbian_ua.log");
+    log_cfg.log_filename = pj_str("C:\\data\\symbian_ua.log");
 
-    pjsua_media_config_default (&med_cfg);
+    pjsua_media_config_default(&med_cfg);
     med_cfg.thread_cnt = 0; // Disable threading on Symbian
     med_cfg.has_ioqueue = PJ_FALSE;
     med_cfg.clock_rate = 8000;
@@ -365,112 +363,140 @@ static pj_status_t app_startup()
     med_cfg.enable_ice = USE_ICE;
     med_cfg.snd_auto_close_time = 0; // wait for 0 seconds idle before sound dev get auto-closed
     //med_cfg.no_vad = PJ_TRUE;
-
-    status = pjsua_init (&cfg, &log_cfg, &med_cfg);
-
+    
+    status = pjsua_init(&cfg, &log_cfg, &med_cfg);
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pjsua_init() error", status);
-        pjsua_destroy();
-        return status;
+	    pjsua_perror(THIS_FILE, "pjsua_init() error", status);
+	    pjsua_destroy();
+	    return status;
     }
-
+    
     /* Adjust Speex priority and enable only the narrowband */
     {
-        pj_str_t codec_id = pj_str ("speex/8000");
-        pjmedia_codec_mgr_set_codec_priority (
-            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
-            &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
-
-        codec_id = pj_str ("speex/16000");
-        pjmedia_codec_mgr_set_codec_priority (
-            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
-            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
-
-        codec_id = pj_str ("speex/32000");
-        pjmedia_codec_mgr_set_codec_priority (
-            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
-            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+        pj_str_t codec_id = pj_str("speex/8000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
+
+        codec_id = pj_str("speex/16000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+
+        codec_id = pj_str("speex/32000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
     }
 
-    /* Add UDP transport. */
+    
     pjsua_transport_config tcfg;
-
     pjsua_transport_id tid;
 
-    pjsua_transport_config_default (&tcfg);
-
+#if ENABLE_SIP_UDP
+    /* Add UDP transport. */
+    pjsua_transport_config_default(&tcfg);
     tcfg.port = SIP_PORT;
-
-    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP, &tcfg, &tid);
-
+    if (SIP_QOS_DSCP) {
+	tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
+	tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
+    }
+    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid);
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "Error creating UDP transport", status);
-        pjsua_destroy();
-        return status;
+	    pjsua_perror(THIS_FILE, "Error creating UDP transport", status);
+	    pjsua_destroy();
+	    return status;
     }
-
-    /* Add TCP transport */
+#endif
+    
 #if ENABLE_SIP_TCP
-    pjsua_transport_config_default (&tcfg);
-
+    /* Add TCP transport */
+    pjsua_transport_config_default(&tcfg);
     tcfg.port = SIP_PORT;
-
-    status = pjsua_transport_create (PJSIP_TRANSPORT_TCP, &tcfg, &tid);
-
+    if (SIP_QOS_DSCP) {
+	tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
+	tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
+    }
+    status = pjsua_transport_create(PJSIP_TRANSPORT_TCP, &tcfg, &tid);
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "Error creating TCP transport", status);
-        pjsua_destroy();
-        return status;
+	    pjsua_perror(THIS_FILE, "Error creating TCP transport", status);
+	    pjsua_destroy();
+	    return status;
     }
-
 #endif
-
+    
+#if ENABLE_SIP_TLS
+    /* Add TLS transport */
+    pjsua_transport_config_default(&tcfg);
+    tcfg.port = SIP_PORT + 1;
+    if (SIP_QOS_DSCP) {
+	tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
+	tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
+	tcfg.tls_setting.qos_params = tcfg.qos_params;
+    }
+    tcfg.tls_setting.server_name = pj_str(TLS_SRV_NAME);
+    status = pjsua_transport_create(PJSIP_TRANSPORT_TLS, &tcfg, &tid);
+    if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "Error creating TLS transport", status);
+	    pjsua_destroy();
+	    return status;
+    }
+#endif
+    
     /* Add account for the transport */
-    pjsua_acc_add_local (tid, PJ_TRUE, &g_acc_id);
-
-
+    pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id);
+
+    /* Create media transports */
+    pjsua_transport_config mtcfg;
+    pjsua_transport_config_default(&mtcfg);
+    mtcfg.port = 4000;
+    mtcfg.qos_type = RTP_QOS_TYPE;
+    status = pjsua_media_transports_create(&mtcfg);
+    if (status != PJ_SUCCESS) {
+    	pjsua_perror(THIS_FILE, "Error creating media transports", status);
+    	pjsua_destroy();
+    	return status;
+    }
+    
     /* Initialization is done, now start pjsua */
     status = pjsua_start();
-
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "Error starting pjsua", status);
-        pjsua_destroy();
-        return status;
+    	pjsua_perror(THIS_FILE, "Error starting pjsua", status);
+    	pjsua_destroy();
+    	return status;
     }
 
     /* Register to SIP server by creating SIP account. */
     if (HAS_SIP_ACCOUNT) {
-        pjsua_acc_config cfg;
-
-        pjsua_acc_config_default (&cfg);
-        cfg.id = pj_str ("sip:" SIP_USER "@" SIP_DOMAIN);
-        cfg.reg_uri = pj_str ("sip:" SIP_DOMAIN);
-        cfg.cred_count = 1;
-        cfg.cred_info[0].realm = pj_str ("*");
-        cfg.cred_info[0].scheme = pj_str ("digest");
-        cfg.cred_info[0].username = pj_str (SIP_USER);
-        cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
-        cfg.cred_info[0].data = pj_str (SIP_PASSWD);
-
-        status = pjsua_acc_add (&cfg, PJ_TRUE, &g_acc_id);
-
-        if (status != PJ_SUCCESS) {
-            pjsua_perror (THIS_FILE, "Error adding account", status);
-            pjsua_destroy();
-            return status;
-        }
+	pjsua_acc_config cfg;
+
+	pjsua_acc_config_default(&cfg);
+	cfg.id = pj_str("sip:" SIP_USER "@" SIP_DOMAIN);
+	cfg.reg_uri = pj_str("sip:" SIP_DOMAIN);
+	cfg.cred_count = 1;
+	cfg.cred_info[0].realm = pj_str("*");
+	cfg.cred_info[0].scheme = pj_str("digest");
+	cfg.cred_info[0].username = pj_str(SIP_USER);
+	cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
+	cfg.cred_info[0].data = pj_str(SIP_PASSWD);
+
+	status = pjsua_acc_add(&cfg, PJ_TRUE, &g_acc_id);
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "Error adding account", status);
+		pjsua_destroy();
+		return status;
+	}
     }
 
     if (SIP_DST_URI) {
-        pjsua_buddy_config bcfg;
-
-        pjsua_buddy_config_default (&bcfg);
-        bcfg.uri = pj_str (SIP_DST_URI);
-        bcfg.subscribe = PJ_FALSE;
-
-        pjsua_buddy_add (&bcfg, &g_buddy_id);
+    	pjsua_buddy_config bcfg;
+    
+    	pjsua_buddy_config_default(&bcfg);
+    	bcfg.uri = pj_str(SIP_DST_URI);
+    	bcfg.subscribe = PJ_FALSE;
+    	
+    	pjsua_buddy_add(&bcfg, &g_buddy_id);
     }
-
     return PJ_SUCCESS;
 }
 
@@ -481,486 +507,445 @@ static pj_status_t app_startup()
  */
 #include <e32base.h>
 
-class ConsoleUI : public CActive
+class ConsoleUI : public CActive 
 {
-
-    public:
-        ConsoleUI (CConsoleBase *con);
-        ~ConsoleUI();
-
-        // Run console UI
-        void Run();
-
-        // Stop
-        void Stop();
-
-    protected:
-        // Cancel asynchronous read.
-        void DoCancel();
-
-        // Implementation: called when read has completed.
-        void RunL();
-
-    private:
-        CConsoleBase *con_;
+public:
+    ConsoleUI(CConsoleBase *con);
+    ~ConsoleUI();
+
+    // Run console UI
+    void Run();
+
+    // Stop
+    void Stop();
+    
+protected:
+    // Cancel asynchronous read.
+    void DoCancel();
+
+    // Implementation: called when read has completed.
+    void RunL();
+    
+private:
+    CConsoleBase *con_;
 };
 
 
-ConsoleUI::ConsoleUI (CConsoleBase *con)
-        : CActive (EPriorityStandard), con_ (con)
+ConsoleUI::ConsoleUI(CConsoleBase *con) 
+: CActive(EPriorityStandard), con_(con)
 {
-    CActiveScheduler::Add (this);
+    CActiveScheduler::Add(this);
 }
 
-ConsoleUI::~ConsoleUI()
+ConsoleUI::~ConsoleUI() 
 {
     Stop();
 }
 
 // Run console UI
-void ConsoleUI::Run()
+void ConsoleUI::Run() 
 {
-    con_->Read (iStatus);
+    con_->Read(iStatus);
     SetActive();
 }
 
 // Stop console UI
-void ConsoleUI::Stop()
+void ConsoleUI::Stop() 
 {
     Cancel();
 }
 
 // Cancel asynchronous read.
-void ConsoleUI::DoCancel()
+void ConsoleUI::DoCancel() 
 {
     con_->ReadCancel();
 }
 
-static void PrintMainMenu()
+static void PrintMainMenu() 
 {
     const char *menu =
-        "\n\n"
-        "Main Menu:\n"
-        "  d    Enable/disable codecs\n"
-        "  m    Call " SIP_DST_URI "\n"
-        "  a    Answer call\n"
-        "  g    Hangup all calls\n"
-        "  t    Toggle audio route\n"
+	    "\n\n"
+	    "Main Menu:\n"
+	    "  d    Enable/disable codecs\n"
+	    "  m    Call " SIP_DST_URI "\n"
+	    "  a    Answer call\n"
+	    "  g    Hangup all calls\n"
+   	    "  t    Toggle audio route\n"
 #if !defined(PJMEDIA_CONF_USE_SWITCH_BOARD) || PJMEDIA_CONF_USE_SWITCH_BOARD==0
-        "  j    Toggle loopback audio\n"
+   	    "  j    Toggle loopback audio\n"
 #endif
-        "up/dn  Increase/decrease output volume\n"
-        "  s    Subscribe " SIP_DST_URI "\n"
-        "  S    Unsubscribe presence\n"
-        "  o    Set account online\n"
-        "  O    Set account offline\n"
-        "  w    Quit\n";
-
-    PJ_LOG (3, (THIS_FILE, menu));
+   	    "up/dn  Increase/decrease output volume\n"
+	    "  s    Subscribe " SIP_DST_URI "\n"
+	    "  S    Unsubscribe presence\n"
+	    "  o    Set account online\n"
+	    "  O    Set account offline\n"
+	    "  w    Quit\n";
+    
+    PJ_LOG(3, (THIS_FILE, menu));
 }
 
-static void PrintCodecMenu()
+static void PrintCodecMenu() 
 {
-    const char *menu =
-        "\n\n"
-        "Codec Menu:\n"
-        "  a    Enable all codecs\n"
+    const char *menu = 
+	    "\n\n"
+	    "Codec Menu:\n"
+	    "  a    Enable all codecs\n"
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR
-        "  d    Enable only AMR\n"
+	    "  d    Enable only AMR\n"
 #endif
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_G729
-        "  g    Enable only G.729\n"
+	    "  g    Enable only G.729\n"
 #endif
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC
-        "  j    Enable only iLBC\n"
+	    "  j    Enable only iLBC\n"
 #endif
-        "  m    Enable only Speex\n"
-        "  p    Enable only GSM\n"
-        "  t    Enable only PCMU\n"
-        "  w    Enable only PCMA\n";
-
-    PJ_LOG (3, (THIS_FILE, menu));
+	    "  m    Enable only Speex\n"
+	    "  p    Enable only GSM\n"
+	    "  t    Enable only PCMU\n"
+	    "  w    Enable only PCMA\n";
+    
+    PJ_LOG(3, (THIS_FILE, menu));
 }
 
-static void HandleMainMenu (TKeyCode kc)
-{
+static void HandleMainMenu(TKeyCode kc) {
     switch (kc) {
-
-        case EKeyUpArrow:
-
-        case EKeyDownArrow: {
-            unsigned vol;
-            pj_status_t status;
-
-            status = pjsua_snd_get_setting (
-                         PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, &vol);
-
-            if (status == PJ_SUCCESS) {
-                if (kc == EKeyUpArrow)
-                    vol = PJ_MIN (100, vol+10);
-                else
-                    vol = (vol>=10 ? vol-10 : 0);
-
-                status = pjsua_snd_set_setting (
-                             PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-                             &vol, PJ_TRUE);
-            }
-
-            if (status == PJ_SUCCESS) {
-                PJ_LOG (3, (THIS_FILE, "Output volume set to %d", vol));
-            } else {
-                pjsua_perror (THIS_FILE, "Error setting volume", status);
-            }
-        }
-
-        break;
-
-        case 't': {
-            pjmedia_aud_dev_route route;
-            pj_status_t status;
-
-            status = pjsua_snd_get_setting (PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
-                                            &route);
-
-            if (status == PJ_SUCCESS) {
-                if (route == PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER)
-                    route = PJMEDIA_AUD_DEV_ROUTE_EARPIECE;
-                else
-                    route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
-
-                status = pjsua_snd_set_setting (
-                             PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
-                             &route, PJ_TRUE);
-            }
-
-            if (status != PJ_SUCCESS)
-                pjsua_perror (THIS_FILE, "Error switch audio route", status);
-        }
-
-        break;
-
-        case 'j': {
-            static pj_bool_t loopback_active = PJ_FALSE;
-
-            if (!loopback_active)
-                pjsua_conf_connect (0, 0);
-            else
-                pjsua_conf_disconnect (0, 0);
-
-            loopback_active = !loopback_active;
-        }
-
-        break;
-
-        case 'm':
-
-            if (g_call_id != PJSUA_INVALID_ID) {
-                PJ_LOG (3, (THIS_FILE, "Another call is active"));
-                break;
-            }
-
-            if (pjsua_verify_sip_url (SIP_DST_URI) == PJ_SUCCESS) {
-                pj_str_t dst = pj_str (SIP_DST_URI);
-                pjsua_call_make_call (g_acc_id, &dst, 0, NULL,
-                                      NULL, &g_call_id);
-            } else {
-                PJ_LOG (3, (THIS_FILE, "Invalid SIP URI"));
-            }
-
-            break;
-
-        case 'a':
-
-            if (g_call_id != PJSUA_INVALID_ID)
-                pjsua_call_answer (g_call_id, 200, NULL, NULL);
-
-            break;
-
-        case 'g':
-            pjsua_call_hangup_all();
-
-            break;
-
-        case 's':
-
-        case 'S':
-            if (g_buddy_id != PJSUA_INVALID_ID)
-                pjsua_buddy_subscribe_pres (g_buddy_id, kc=='s');
-
-            break;
-
-        case 'o':
-
-        case 'O':
-            pjsua_acc_set_online_status (g_acc_id, kc=='o');
-
-            break;
-
-        default:
-            PJ_LOG (3, (THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
-
-            break;
+    
+    case EKeyUpArrow:
+    case EKeyDownArrow:
+	{
+	    unsigned vol;
+	    pj_status_t status;
+	    
+	    status = pjsua_snd_get_setting(
+			     PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, &vol);
+	    if (status == PJ_SUCCESS) {
+		if (kc == EKeyUpArrow)
+		    vol = PJ_MIN(100, vol+10);
+		else
+		    vol = (vol>=10 ? vol-10 : 0);
+		status = pjsua_snd_set_setting(
+				    PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+				    &vol, PJ_TRUE);
+	    }
+
+	    if (status == PJ_SUCCESS) {
+		PJ_LOG(3,(THIS_FILE, "Output volume set to %d", vol));
+	    } else {
+		pjsua_perror(THIS_FILE, "Error setting volume", status);
+	    }
+	}
+	break;
+    
+    case 't':
+	{
+	    pjmedia_aud_dev_route route;
+	    pj_status_t status;
+	    
+	    status = pjsua_snd_get_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE, 
+					   &route);
+	    
+	    if (status == PJ_SUCCESS) {
+		if (route == PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER)
+		    route = PJMEDIA_AUD_DEV_ROUTE_EARPIECE;
+		else
+		    route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+
+		status = pjsua_snd_set_setting(
+				    PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
+				    &route, PJ_TRUE);
+	    }
+
+	    if (status != PJ_SUCCESS)
+		pjsua_perror(THIS_FILE, "Error switch audio route", status);
+	}
+	break;
+	
+    case 'j':
+	{
+	    static pj_bool_t loopback_active = PJ_FALSE;
+	    if (!loopback_active)
+		pjsua_conf_connect(0, 0);
+	    else
+		pjsua_conf_disconnect(0, 0);
+	    loopback_active = !loopback_active;
+	}
+	break;
+	
+    case 'm':
+	if (g_call_id != PJSUA_INVALID_ID) {
+		PJ_LOG(3,(THIS_FILE, "Another call is active"));	
+		break;
+	}
+
+	if (pjsua_verify_sip_url(SIP_DST_URI) == PJ_SUCCESS) {
+		pj_str_t dst = pj_str(SIP_DST_URI);
+		pjsua_call_make_call(g_acc_id, &dst, 0, NULL,
+				     NULL, &g_call_id);
+	} else {
+		PJ_LOG(3,(THIS_FILE, "Invalid SIP URI"));
+	}
+	break;
+    case 'a':
+	if (g_call_id != PJSUA_INVALID_ID)
+		pjsua_call_answer(g_call_id, 200, NULL, NULL);
+	break;
+    case 'g':
+	pjsua_call_hangup_all();
+	break;
+    case 's':
+    case 'S':
+	if (g_buddy_id != PJSUA_INVALID_ID)
+		pjsua_buddy_subscribe_pres(g_buddy_id, kc=='s');
+	break;
+    case 'o':
+    case 'O':
+	pjsua_acc_set_online_status(g_acc_id, kc=='o');
+	break;
+	    
+    default:
+	PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
+	break;
     }
 
     PrintMainMenu();
 }
 
-static void HandleCodecMenu (TKeyCode kc)
-{
+static void HandleCodecMenu(TKeyCode kc) {
     const pj_str_t ID_ALL = {"*", 1};
     pj_str_t codec = {NULL, 0};
-
+    
     if (kc == 'a') {
-        pjsua_codec_set_priority (&ID_ALL, PJMEDIA_CODEC_PRIO_NORMAL);
-        PJ_LOG (3, (THIS_FILE, "All codecs activated"));
+	pjsua_codec_set_priority(&ID_ALL, PJMEDIA_CODEC_PRIO_NORMAL);
+	PJ_LOG(3,(THIS_FILE, "All codecs activated"));
     } else {
-        switch (kc) {
-
-            case 'd':
-                codec = pj_str ("AMR");
-                break;
-
-            case 'g':
-                codec = pj_str ("G729");
-                break;
-
-            case 'j':
-                codec = pj_str ("ILBC");
-                break;
-
-            case 'm':
-                codec = pj_str ("SPEEX/8000");
-                break;
-
-            case 'p':
-                codec = pj_str ("GSM");
-                break;
-
-            case 't':
-                codec = pj_str ("PCMU");
-                break;
-
-            case 'w':
-                codec = pj_str ("PCMA");
-                break;
-
-            default:
-                PJ_LOG (3, (THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
-                break;
-        }
-
-        if (codec.slen) {
-            pj_status_t status;
-
-            pjsua_codec_set_priority (&ID_ALL, PJMEDIA_CODEC_PRIO_DISABLED);
-
-            status = pjsua_codec_set_priority (&codec,
-                                               PJMEDIA_CODEC_PRIO_NORMAL);
-
-            if (status == PJ_SUCCESS)
-                PJ_LOG (3, (THIS_FILE, "%s activated", codec.ptr));
-            else
-                PJ_LOG (3, (THIS_FILE, "Failed activating %s, err=%d",
-                            codec.ptr, status));
-        }
+	switch (kc) {
+	case 'd':
+	    codec = pj_str("AMR");
+	    break;
+	case 'g':
+	    codec = pj_str("G729");
+	    break;
+	case 'j':
+	    codec = pj_str("ILBC");
+	    break;
+	case 'm':
+	    codec = pj_str("SPEEX/8000");
+	    break;
+	case 'p':
+	    codec = pj_str("GSM");
+	    break;
+	case 't':
+	    codec = pj_str("PCMU");
+	    break;
+	case 'w':
+	    codec = pj_str("PCMA");
+	    break;
+	default:
+	    PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
+	    break;
+	}
+
+	if (codec.slen) {
+	    pj_status_t status;
+	    
+	    pjsua_codec_set_priority(&ID_ALL, PJMEDIA_CODEC_PRIO_DISABLED);
+		
+	    status = pjsua_codec_set_priority(&codec, 
+					      PJMEDIA_CODEC_PRIO_NORMAL);
+	    if (status == PJ_SUCCESS)
+		PJ_LOG(3,(THIS_FILE, "%s activated", codec.ptr));
+	    else
+		PJ_LOG(3,(THIS_FILE, "Failed activating %s, err=%d", 
+			  codec.ptr, status));
+	}
     }
 }
 
 // Implementation: called when read has completed.
-void ConsoleUI::RunL()
+void ConsoleUI::RunL() 
 {
     enum {
-        MENU_TYPE_MAIN = 0,
-        MENU_TYPE_CODEC = 1
+	MENU_TYPE_MAIN = 0,
+	MENU_TYPE_CODEC = 1
     };
     static int menu_type = MENU_TYPE_MAIN;
     TKeyCode kc = con_->KeyCode();
     pj_bool_t reschedule = PJ_TRUE;
-
+    
     if (menu_type == MENU_TYPE_MAIN) {
-        if (kc == 'w') {
-            CActiveScheduler::Stop();
-            reschedule = PJ_FALSE;
-        } else if (kc == 'd') {
-            menu_type = MENU_TYPE_CODEC;
-            PrintCodecMenu();
-        } else {
-            HandleMainMenu (kc);
-        }
+	if (kc == 'w') {
+	    CActiveScheduler::Stop();
+	    reschedule = PJ_FALSE;
+	} else if (kc == 'd') {
+	    menu_type = MENU_TYPE_CODEC;
+	    PrintCodecMenu();
+	} else {
+	    HandleMainMenu(kc);
+	}
     } else {
-        HandleCodecMenu (kc);
-
-        menu_type = MENU_TYPE_MAIN;
-        PrintMainMenu();
+	HandleCodecMenu(kc);
+	
+	menu_type = MENU_TYPE_MAIN;
+	PrintMainMenu();
     }
-
+    
     if (reschedule)
-        Run();
+	Run();
 }
 
 #if 0
 // IP networking related testing
-static pj_status_t test_addr (void)
+static pj_status_t test_addr(void)
 {
-    int af;
-    unsigned i, count;
-    pj_addrinfo ai[8];
-    pj_sockaddr ifs[8];
-    const pj_str_t *hostname;
-    pj_hostent he;
-    pj_status_t status;
-
-    pj_log_set_log_func (&log_writer);
-
-    status = pj_init();
-
-    if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pj_init() error", status);
-        return status;
-    }
-
-    af = pj_AF_INET();
-
+	int af;
+	unsigned i, count;
+	pj_addrinfo ai[8];
+	pj_sockaddr ifs[8];
+	const pj_str_t *hostname;
+	pj_hostent he;
+	pj_status_t status;
+	
+	pj_log_set_log_func(&log_writer);
+	
+	status = pj_init();
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "pj_init() error", status);
+		return status;
+	}
+	
+	af = pj_AF_INET();
+	
 #if 0
-    pj_in_addr in_addr;
-    pj_str_t aa = pj_str ("1.1.1.1");
-    in_addr = pj_inet_addr (&aa);
-    char *the_addr = pj_inet_ntoa (in_addr);
-    PJ_LOG (3, (THIS_FILE, "IP addr=%s", the_addr));
-
-    aa = pj_str ("192.168.0.15");
-    in_addr = pj_inet_addr (&aa);
-    the_addr = pj_inet_ntoa (in_addr);
-    PJ_LOG (3, (THIS_FILE, "IP addr=%s", the_addr));
-
-    aa = pj_str ("2.2.2.2");
-    in_addr = pj_inet_addr (&aa);
-    the_addr = pj_inet_ntoa (in_addr);
-    PJ_LOG (3, (THIS_FILE, "IP addr=%s", the_addr));
-
-    return -1;
+	pj_in_addr in_addr;
+	pj_str_t aa = pj_str("1.1.1.1");
+	in_addr = pj_inet_addr(&aa);
+	char *the_addr = pj_inet_ntoa(in_addr);
+	PJ_LOG(3,(THIS_FILE, "IP addr=%s", the_addr));
+
+	aa = pj_str("192.168.0.15");
+	in_addr = pj_inet_addr(&aa);
+	the_addr = pj_inet_ntoa(in_addr);
+	PJ_LOG(3,(THIS_FILE, "IP addr=%s", the_addr));
+
+	aa = pj_str("2.2.2.2");
+	in_addr = pj_inet_addr(&aa);
+	the_addr = pj_inet_ntoa(in_addr);
+	PJ_LOG(3,(THIS_FILE, "IP addr=%s", the_addr));
+	
+	return -1;
 #endif
-
-    // Hostname
-    hostname = pj_gethostname();
-
-    if (hostname == NULL) {
-        status = PJ_ERESOLVE;
-        pjsua_perror (THIS_FILE, "pj_gethostname() error", status);
-        goto on_return;
-    }
-
-    PJ_LOG (3, (THIS_FILE, "Hostname: %.*s", hostname->slen, hostname->ptr));
-
-    // Gethostbyname
-    status = pj_gethostbyname (hostname, &he);
-
-    if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pj_gethostbyname() error", status);
-    } else {
-        PJ_LOG (3, (THIS_FILE, "gethostbyname: %s",
-                    pj_inet_ntoa (* (pj_in_addr*) he.h_addr)));
-    }
-
-    // Getaddrinfo
-    count = PJ_ARRAY_SIZE (ai);
-
-    status = pj_getaddrinfo (af, hostname, &count, ai);
-
-    if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pj_getaddrinfo() error", status);
-    } else {
-        for (i=0; i<count; ++i) {
-            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-            PJ_LOG (3, (THIS_FILE, "Addrinfo: %s",
-                        pj_sockaddr_print (&ai[i].ai_addr, ipaddr, sizeof (ipaddr), 2)));
-        }
-    }
-
-    // Enum interface
-    count = PJ_ARRAY_SIZE (ifs);
-
-    status = pj_enum_ip_interface (af, &count, ifs);
-
-    if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pj_enum_ip_interface() error", status);
-    } else {
-        for (i=0; i<count; ++i) {
-            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-            PJ_LOG (3, (THIS_FILE, "Interface: %s",
-                        pj_sockaddr_print (&ifs[i], ipaddr, sizeof (ipaddr), 2)));
-        }
-    }
-
-    // Get default iinterface
-    status = pj_getdefaultipinterface (af, &ifs[0]);
-
-    if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pj_getdefaultipinterface() error", status);
-    } else {
-        char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-        PJ_LOG (3, (THIS_FILE, "Default IP: %s",
-                    pj_sockaddr_print (&ifs[0], ipaddr, sizeof (ipaddr), 2)));
-    }
-
-    // Get default IP address
-    status = pj_gethostip (af, &ifs[0]);
-
-    if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pj_gethostip() error", status);
-    } else {
-        char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-        PJ_LOG (3, (THIS_FILE, "Host IP: %s",
-                    pj_sockaddr_print (&ifs[0], ipaddr, sizeof (ipaddr), 2)));
-    }
-
-    status = -1;
-
+	
+	// Hostname
+	hostname = pj_gethostname();
+	if (hostname == NULL) {
+		status = PJ_ERESOLVE;
+		pjsua_perror(THIS_FILE, "pj_gethostname() error", status);
+		goto on_return;
+	}
+	
+	PJ_LOG(3,(THIS_FILE, "Hostname: %.*s", hostname->slen, hostname->ptr));
+	
+	// Gethostbyname
+	status = pj_gethostbyname(hostname, &he);
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "pj_gethostbyname() error", status);
+	} else {
+		PJ_LOG(3,(THIS_FILE, "gethostbyname: %s", 
+				  pj_inet_ntoa(*(pj_in_addr*)he.h_addr)));
+	}
+	
+	// Getaddrinfo
+	count = PJ_ARRAY_SIZE(ai);
+	status = pj_getaddrinfo(af, hostname, &count, ai);
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "pj_getaddrinfo() error", status);
+	} else {
+		for (i=0; i<count; ++i) {
+			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+			PJ_LOG(3,(THIS_FILE, "Addrinfo: %s", 
+					  pj_sockaddr_print(&ai[i].ai_addr, ipaddr, sizeof(ipaddr), 2)));
+		}
+	}
+	
+	// Enum interface
+	count = PJ_ARRAY_SIZE(ifs);
+	status = pj_enum_ip_interface(af, &count, ifs);
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "pj_enum_ip_interface() error", status);
+	} else {
+		for (i=0; i<count; ++i) {
+			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+			PJ_LOG(3,(THIS_FILE, "Interface: %s", 
+					  pj_sockaddr_print(&ifs[i], ipaddr, sizeof(ipaddr), 2)));
+		}
+	}
+
+	// Get default iinterface
+	status = pj_getdefaultipinterface(af, &ifs[0]);
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "pj_getdefaultipinterface() error", status);
+	} else {
+		char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+		PJ_LOG(3,(THIS_FILE, "Default IP: %s", 
+				  pj_sockaddr_print(&ifs[0], ipaddr, sizeof(ipaddr), 2)));
+	}
+	
+	// Get default IP address
+	status = pj_gethostip(af, &ifs[0]);
+	if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "pj_gethostip() error", status);
+	} else {
+		char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+		PJ_LOG(3,(THIS_FILE, "Host IP: %s", 
+				  pj_sockaddr_print(&ifs[0], ipaddr, sizeof(ipaddr), 2)));
+	}
+	
+	status = -1;
+	
 on_return:
-    pj_shutdown();
-    return status;
+	pj_shutdown();
+	return status;
 }
-
 #endif
 
 
 #include <es_sock.h>
 
 #if 0
-// Force network connection to use the first IAP,
-// this is useful for debugging on emulator without GUI.
+// Force network connection to use the first IAP, 
+// this is useful for debugging on emulator without GUI. 
 // Include commdb.lib & apengine.lib in symbian_ua.mmp file
 // if this is enabled.
 
 #include <apdatahandler.h>
 
-inline void ForceUseFirstIAP()
+inline void ForceUseFirstIAP() 
 {
     TUint32 rank = 1;
     TUint32 bearers;
     TUint32 prompt;
     TUint32 iap;
 
-    CCommsDatabase* commDb = CCommsDatabase::NewL (EDatabaseTypeIAP);
-    CleanupStack::PushL (commDb);
-
-    CApDataHandler* apDataHandler = CApDataHandler::NewLC (*commDb);
+    CCommsDatabase* commDb = CCommsDatabase::NewL(EDatabaseTypeIAP);
+    CleanupStack::PushL(commDb);
 
+    CApDataHandler* apDataHandler = CApDataHandler::NewLC(*commDb);
+    
     TCommDbConnectionDirection direction = ECommDbConnectionDirectionOutgoing;
-    apDataHandler->GetPreferredIfDbIapTypeL (rank, direction, bearers, prompt, iap);
+    apDataHandler->GetPreferredIfDbIapTypeL(rank, direction, bearers, prompt, iap);
     prompt = ECommDbDialogPrefDoNotPrompt;
-    apDataHandler->SetPreferredIfDbIapTypeL (rank, direction, bearers, (TCommDbDialogPref) prompt, iap, ETrue);
-    CleanupStack::PopAndDestroy (2); // apDataHandler, commDb
+    apDataHandler->SetPreferredIfDbIapTypeL(rank, direction, bearers, (TCommDbDialogPref)prompt, iap, ETrue);
+    CleanupStack::PopAndDestroy(2); // apDataHandler, commDb
 }
 
-static void SelectIAP()
+static void SelectIAP() 
 {
     ForceUseFirstIAP();
 }
 
 #else
 
-static void SelectIAP()
+static void SelectIAP() 
 {
 }
 
@@ -969,108 +954,96 @@ static void SelectIAP()
 
 // Class CConnMon to monitor network connection (RConnection). Whenever
 // the connection is down, it will notify PJLIB and restart PJSUA-LIB.
+class CConnMon : public CActive {
+public:
+    static CConnMon* NewL(RConnection &conn, RSocketServ &sserver) {
+	CConnMon *self = new (ELeave) CConnMon(conn, sserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
+    
+    void Start() {
+	conn_.ProgressNotification(nif_progress_, iStatus);
+	SetActive();
+    }
+    
+    void Stop() {
+	Cancel();
+    }
+    
+    ~CConnMon() { Stop(); }
+    
+private:
+    CConnMon(RConnection &conn, RSocketServ &sserver) : 
+	CActive(EPriorityHigh), 
+	conn_(conn), 
+	sserver_(sserver)
+    {
+	CActiveScheduler::Add(this);
+    }
+    
+    void ConstructL() {}
 
-class CConnMon : public CActive
-{
-
-    public:
-        static CConnMon* NewL (RConnection &conn, RSocketServ &sserver) {
-            CConnMon *self = new (ELeave) CConnMon (conn, sserver);
-            CleanupStack::PushL (self);
-            self->ConstructL();
-            CleanupStack::Pop (self);
-            return self;
-        }
-
-        void Start() {
-            conn_.ProgressNotification (nif_progress_, iStatus);
-            SetActive();
-        }
-
-        void Stop() {
-            Cancel();
-        }
-
-        ~CConnMon() {
-            Stop();
-        }
-
-    private:
-        CConnMon (RConnection &conn, RSocketServ &sserver) :
-                CActive (EPriorityHigh),
-                conn_ (conn),
-                sserver_ (sserver) {
-            CActiveScheduler::Add (this);
-        }
-
-        void ConstructL() {}
-
-        void DoCancel() {
-            conn_.CancelProgressNotification();
-        }
-
-        void RunL() {
-            int stage = nif_progress_().iStage;
-
-            if (stage == KLinkLayerClosed) {
-                pj_status_t status;
-                TInt err;
-
-                // Tell pjlib that connection is down.
-                pj_symbianos_set_connection_status (PJ_FALSE);
-
-                PJ_LOG (3, (THIS_FILE, "RConnection closed, restarting PJSUA.."));
-
-                // Destroy pjsua
-                pjsua_destroy();
-                PJ_LOG (3, (THIS_FILE, "PJSUA destroyed."));
-
-                // Reopen the connection
-                err = conn_.Open (sserver_);
-
-                if (err == KErrNone)
-                    err = conn_.Start();
-
-                if (err != KErrNone) {
-                    CActiveScheduler::Stop();
-                    return;
-                }
-
-                // Reinit Symbian OS param before pj_init()
-                pj_symbianos_params sym_params;
-
-                pj_bzero (&sym_params, sizeof (sym_params));
-
-                sym_params.rsocketserv = &sserver_;
-
-                sym_params.rconnection = &conn_;
-
-                pj_symbianos_set_params (&sym_params);
-
-                // Reinit pjsua
-                status = app_startup();
-
-                if (status != PJ_SUCCESS) {
-                    pjsua_perror (THIS_FILE, "app_startup() error", status);
-                    CActiveScheduler::Stop();
-                    return;
-                }
-
-                PJ_LOG (3, (THIS_FILE, "PJSUA restarted."));
-
-                PrintMainMenu();
-            }
-
-            Start();
-        }
+    void DoCancel() {
+	conn_.CancelProgressNotification();
+    }
 
-        RConnection& conn_;
-        RSocketServ& sserver_;
-        TNifProgressBuf nif_progress_;
+    void RunL() {
+	int stage = nif_progress_().iStage;
+	
+	if (stage == KLinkLayerClosed) {
+	    pj_status_t status;
+	    TInt err;
+
+	    // Tell pjlib that connection is down.
+	    pj_symbianos_set_connection_status(PJ_FALSE);
+	    
+	    PJ_LOG(3, (THIS_FILE, "RConnection closed, restarting PJSUA.."));
+	    
+	    // Destroy pjsua
+	    pjsua_destroy();
+	    PJ_LOG(3, (THIS_FILE, "PJSUA destroyed."));
+
+	    // Reopen the connection
+	    err = conn_.Open(sserver_);
+	    if (err == KErrNone)
+		err = conn_.Start();
+	    if (err != KErrNone) {
+		CActiveScheduler::Stop();
+		return;
+	    }
+
+	    // Reinit Symbian OS param before pj_init()
+	    pj_symbianos_params sym_params;
+	    pj_bzero(&sym_params, sizeof(sym_params));
+	    sym_params.rsocketserv = &sserver_;
+	    sym_params.rconnection = &conn_;
+	    pj_symbianos_set_params(&sym_params);
+
+	    // Reinit pjsua
+	    status = app_startup();
+	    if (status != PJ_SUCCESS) {
+		pjsua_perror(THIS_FILE, "app_startup() error", status);
+		CActiveScheduler::Stop();
+		return;
+	    }
+	    
+	    PJ_LOG(3, (THIS_FILE, "PJSUA restarted."));
+	    PrintMainMenu();
+	}
+	
+	Start();
+    }
+    
+    RConnection& conn_;
+    RSocketServ& sserver_;
+    TNifProgressBuf nif_progress_;
 };
 
 ////////////////////////////////////////////////////////////////////////////
-int ua_main()
+int ua_main() 
 {
     RSocketServ aSocketServer;
     RConnection aConn;
@@ -1079,94 +1052,81 @@ int ua_main()
     pj_status_t status;
 
     SelectIAP();
-
+    
     // Initialize RSocketServ
-
-    if ( (err=aSocketServer.Connect()) != KErrNone)
-        return PJ_STATUS_FROM_OS (err);
-
+    if ((err=aSocketServer.Connect()) != KErrNone)
+    	return PJ_STATUS_FROM_OS(err);
+    
     // Open up a connection
-    if ( (err=aConn.Open (aSocketServer)) != KErrNone) {
-        aSocketServer.Close();
-        return PJ_STATUS_FROM_OS (err);
+    if ((err=aConn.Open(aSocketServer)) != KErrNone) {
+	aSocketServer.Close();
+	return PJ_STATUS_FROM_OS(err);
     }
-
-    if ( (err=aConn.Start()) != KErrNone) {
-        aSocketServer.Close();
-        return PJ_STATUS_FROM_OS (err);
+    
+    if ((err=aConn.Start()) != KErrNone) {
+    	aSocketServer.Close();
+    	return PJ_STATUS_FROM_OS(err);
     }
-
+    
     // Set Symbian OS parameters in pjlib.
     // This must be done before pj_init() is called.
-    pj_bzero (&sym_params, sizeof (sym_params));
-
+    pj_bzero(&sym_params, sizeof(sym_params));
     sym_params.rsocketserv = &aSocketServer;
-
     sym_params.rconnection = &aConn;
-
-    pj_symbianos_set_params (&sym_params);
-
+    pj_symbianos_set_params(&sym_params);
+    
     // Initialize pjsua
     status  = app_startup();
-
     //status = test_addr();
     if (status != PJ_SUCCESS) {
-        aConn.Close();
-        aSocketServer.Close();
-        return status;
+    	aConn.Close();
+    	aSocketServer.Close();
+	return status;
     }
 
-
+    
     // Run the UI
-    ConsoleUI *con = new ConsoleUI (console);
-
+    ConsoleUI *con = new ConsoleUI(console);
+    
     con->Run();
-
     PrintMainMenu();
 
     // Init & start connection monitor
-    CConnMon *connmon = CConnMon::NewL (aConn, aSocketServer);
-
+    CConnMon *connmon = CConnMon::NewL(aConn, aSocketServer);
     connmon->Start();
 
     CActiveScheduler::Start();
-
+    
     delete connmon;
-
     delete con;
 
     // Dump memory statistics
-    PJ_LOG (3, (THIS_FILE, "Max heap usage: %u.%03uMB",
-                pjsua_var.cp.peak_used_size / 1000000,
-                (pjsua_var.cp.peak_used_size % 1000000) /1000));
-
+    PJ_LOG(3,(THIS_FILE, "Max heap usage: %u.%03uMB",
+	      pjsua_var.cp.peak_used_size / 1000000,
+	      (pjsua_var.cp.peak_used_size % 1000000)/1000));
+    
     // check max stack usage
 #if defined(PJ_OS_HAS_CHECK_STACK) && PJ_OS_HAS_CHECK_STACK!=0
-    pj_thread_t* this_thread = pj_thread_this();
-
-    if (!this_thread)
-        return status;
-
-    const char* max_stack_file;
-
-    int max_stack_line;
-
-    status = pj_thread_get_stack_info (this_thread, &max_stack_file, &max_stack_line);
-
-    PJ_LOG (3, (THIS_FILE, "Max stack usage: %u at %s:%d",
-                pj_thread_get_stack_max_usage (this_thread),
-                max_stack_file, max_stack_line));
-
+	pj_thread_t* this_thread = pj_thread_this();
+	if (!this_thread)
+	    return status;
+	
+	const char* max_stack_file;
+	int max_stack_line;
+	status = pj_thread_get_stack_info(this_thread, &max_stack_file, &max_stack_line);
+	
+	PJ_LOG(3,(THIS_FILE, "Max stack usage: %u at %s:%d", 
+		  pj_thread_get_stack_max_usage(this_thread), 
+		  max_stack_file, max_stack_line));
 #endif
-
+	
     // Shutdown pjsua
     pjsua_destroy();
-
+    
     // Close connection and socket server
     aConn.Close();
-
     aSocketServer.Close();
-
+    
     return status;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
index 69d842c37d..6d7522938b 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
@@ -3,16 +3,16 @@
  Name        : Symbian_ua_guiSettingItemListSettings.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 /**
- *	Generated helper class which manages the settings contained
+ *	Generated helper class which manages the settings contained 
  *	in 'symbian_ua_guiSettingItemList'.  Each CAknSettingItem maintains
  *	a reference to data in this class so that changes in the setting
  *	item list can be synchronized with this storage.
  */
-
+ 
 // [[[ begin generated region: do not modify [Generated Includes]
 #include <e32base.h>
 #include <stringloader.h>
@@ -25,123 +25,120 @@
  * C/C++ constructor for settings data, cannot throw
  */
 TSymbian_ua_guiSettingItemListSettings::TSymbian_ua_guiSettingItemListSettings()
-{
-}
+	{
+	}
 
 /**
  * Two-phase constructor for settings data
  */
 TSymbian_ua_guiSettingItemListSettings* TSymbian_ua_guiSettingItemListSettings::NewL()
-{
-    TSymbian_ua_guiSettingItemListSettings* data = new (ELeave) TSymbian_ua_guiSettingItemListSettings;
-    CleanupStack::PushL (data);
-    data->ConstructL();
-    CleanupStack::Pop (data);
-    return data;
-}
-
+	{
+	TSymbian_ua_guiSettingItemListSettings* data = new( ELeave ) TSymbian_ua_guiSettingItemListSettings;
+	CleanupStack::PushL( data );
+	data->ConstructL();
+	CleanupStack::Pop( data );
+	return data;
+	}
+	
 /**
  *	Second phase for initializing settings data
  */
 void TSymbian_ua_guiSettingItemListSettings::ConstructL()
-{
-    // [[[ begin generated region: do not modify [Generated Initializers]
-    {
-        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_REGISTRAR);
-        SetEd_registrar (text->Des());
-        CleanupStack::PopAndDestroy (text);
-    }
-
-    {
-        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_USER);
-        SetEd_user (text->Des());
-        CleanupStack::PopAndDestroy (text);
-    }
-
-    SetB_srtp (0);
-    SetB_ice (0);
-    {
-        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_STUN_SERVER);
-        SetEd_stun_server (text->Des());
-        CleanupStack::PopAndDestroy (text);
-    }
-
-    // ]]] end generated region [Generated Initializers]
-
-}
-
+	{
+	// [[[ begin generated region: do not modify [Generated Initializers]
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_REGISTRAR );
+		SetEd_registrar( text->Des() );
+		CleanupStack::PopAndDestroy( text );
+		}
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_USER );
+		SetEd_user( text->Des() );
+		CleanupStack::PopAndDestroy( text );
+		}
+	SetB_srtp( 0 );
+	SetB_ice( 0 );
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_STUN_SERVER );
+		SetEd_stun_server( text->Des() );
+		CleanupStack::PopAndDestroy( text );
+		}
+	// ]]] end generated region [Generated Initializers]
+	
+	}
+	
 // [[[ begin generated region: do not modify [Generated Contents]
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_registrar()
-{
-    return iEd_registrar;
-}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_registrar (const TDesC& aValue)
-{
-    if (aValue.Length() < KEd_registrarMaxLength)
-        iEd_registrar.Copy (aValue);
-    else
-        iEd_registrar.Copy (aValue.Ptr(), KEd_registrarMaxLength);
-}
+	{
+	return iEd_registrar;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_registrar(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_registrarMaxLength)
+		iEd_registrar.Copy( aValue );
+	else
+		iEd_registrar.Copy( aValue.Ptr(), KEd_registrarMaxLength);
+	}
 
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_user()
-{
-    return iEd_user;
-}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_user (const TDesC& aValue)
-{
-    if (aValue.Length() < KEd_userMaxLength)
-        iEd_user.Copy (aValue);
-    else
-        iEd_user.Copy (aValue.Ptr(), KEd_userMaxLength);
-}
+	{
+	return iEd_user;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_user(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_userMaxLength)
+		iEd_user.Copy( aValue );
+	else
+		iEd_user.Copy( aValue.Ptr(), KEd_userMaxLength);
+	}
 
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_password()
-{
-    return iEd_password;
-}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_password (const TDesC& aValue)
-{
-    if (aValue.Length() < KEd_passwordMaxLength)
-        iEd_password.Copy (aValue);
-    else
-        iEd_password.Copy (aValue.Ptr(), KEd_passwordMaxLength);
-}
+	{
+	return iEd_password;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_password(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_passwordMaxLength)
+		iEd_password.Copy( aValue );
+	else
+		iEd_password.Copy( aValue.Ptr(), KEd_passwordMaxLength);
+	}
 
 TBool& TSymbian_ua_guiSettingItemListSettings::B_srtp()
-{
-    return iB_srtp;
-}
+	{
+	return iB_srtp;
+	}
 
-void TSymbian_ua_guiSettingItemListSettings::SetB_srtp (const TBool& aValue)
-{
-    iB_srtp = aValue;
-}
+void TSymbian_ua_guiSettingItemListSettings::SetB_srtp(const TBool& aValue)
+	{
+	iB_srtp = aValue;
+	}
 
 TBool& TSymbian_ua_guiSettingItemListSettings::B_ice()
-{
-    return iB_ice;
-}
+	{
+	return iB_ice;
+	}
 
-void TSymbian_ua_guiSettingItemListSettings::SetB_ice (const TBool& aValue)
-{
-    iB_ice = aValue;
-}
+void TSymbian_ua_guiSettingItemListSettings::SetB_ice(const TBool& aValue)
+	{
+	iB_ice = aValue;
+	}
 
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_stun_server()
-{
-    return iEd_stun_server;
-}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_stun_server (const TDesC& aValue)
-{
-    if (aValue.Length() < KEd_stun_serverMaxLength)
-        iEd_stun_server.Copy (aValue);
-    else
-        iEd_stun_server.Copy (aValue.Ptr(), KEd_stun_serverMaxLength);
-}
+	{
+	return iEd_stun_server;
+	}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_stun_server(const TDesC& aValue)
+	{
+	if ( aValue.Length() < KEd_stun_serverMaxLength)
+		iEd_stun_server.Copy( aValue );
+	else
+		iEd_stun_server.Copy( aValue.Ptr(), KEd_stun_serverMaxLength);
+	}
 
 // ]]] end generated region [Generated Contents]
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
index 1e56a4f9fe..f722336a1b 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
@@ -1,5 +1,5 @@
 /* $Id: ua.cpp 1793 2008-02-14 13:39:24Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pjsua-lib/pjsua.h>
 #include <pjsua-lib/pjsua_internal.h>
@@ -38,230 +38,222 @@ static pjsua_buddy_id g_buddy_id = PJSUA_INVALID_ID;
 
 static symbian_ua_info_cb_t g_cb =  {NULL, NULL, NULL, NULL, NULL};
 
-static void log_writer (int level, const char *buf, int len)
+static void log_writer(int level, const char *buf, int len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG (level);
-
+    PJ_UNUSED_ARG(level);
+    
     if (!g_cb.on_info)
-        return;
-
-    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
+	return;
 
-    g_cb.on_info (buf16);
+    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
+    g_cb.on_info(buf16);
 }
 
-static void on_reg_state (pjsua_acc_id acc_id)
+static void on_reg_state(pjsua_acc_id acc_id)
 {
     pjsua_acc_info acc_info;
     pj_status_t status;
 
-    status = pjsua_acc_get_info (acc_id, &acc_info);
-
+    status = pjsua_acc_get_info(acc_id, &acc_info);
     if (status != PJ_SUCCESS)
-        return;
+	return;
 
     if (acc_info.status == 200) {
-        if (acc_info.expires) {
-            PJ_LOG (3, (THIS_FILE, "Registration success!"));
-
-            if (g_cb.on_reg_state) g_cb.on_reg_state (true);
-        } else {
-            PJ_LOG (3, (THIS_FILE, "Unregistration success!"));
-
-            if (g_cb.on_unreg_state) g_cb.on_unreg_state (true);
-        }
+	if (acc_info.expires) {
+	    PJ_LOG(3,(THIS_FILE, "Registration success!"));
+	    if (g_cb.on_reg_state) g_cb.on_reg_state(true);
+	} else {
+	    PJ_LOG(3,(THIS_FILE, "Unregistration success!"));
+	    if (g_cb.on_unreg_state) g_cb.on_unreg_state(true);
+	}
     } else {
-        if (acc_info.expires) {
-            PJ_LOG (3, (THIS_FILE, "Registration failed!"));
-
-            if (g_cb.on_reg_state) g_cb.on_reg_state (false);
-        } else {
-            PJ_LOG (3, (THIS_FILE, "Unregistration failed!"));
-
-            if (g_cb.on_unreg_state) g_cb.on_unreg_state (false);
-        }
+	if (acc_info.expires) {
+	    PJ_LOG(3,(THIS_FILE, "Registration failed!"));
+	    if (g_cb.on_reg_state) g_cb.on_reg_state(false);
+	} else {
+	    PJ_LOG(3,(THIS_FILE, "Unregistration failed!"));
+	    if (g_cb.on_unreg_state) g_cb.on_unreg_state(false);
+	}
     }
 }
 
 /* Callback called by the library upon receiving incoming call */
-static void on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
-                              pjsip_rx_data *rdata)
+static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
+			     pjsip_rx_data *rdata)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG (acc_id);
-    PJ_UNUSED_ARG (rdata);
+    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG(rdata);
 
     if (g_call_id != PJSUA_INVALID_ID) {
-        pjsua_call_answer (call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
-        return;
+    	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
+    	return;
     }
+    
+    pjsua_call_get_info(call_id, &ci);
 
-    pjsua_call_get_info (call_id, &ci);
-
-    PJ_LOG (3, (THIS_FILE, "Incoming call from %.*s!!",
-                (int) ci.remote_info.slen,
-                ci.remote_info.ptr));
+    PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
+			 (int)ci.remote_info.slen,
+			 ci.remote_info.ptr));
 
     g_call_id = call_id;
-
+    
     /* Automatically answer incoming calls with 180/Ringing */
-    pjsua_call_answer (call_id, 180, NULL, NULL);
+    pjsua_call_answer(call_id, 180, NULL, NULL);
 
     if (g_cb.on_incoming_call) {
-        static wchar_t disp[256];
-        static wchar_t uri[PJSIP_MAX_URL_SIZE];
+	static wchar_t disp[256];
+	static wchar_t uri[PJSIP_MAX_URL_SIZE];
 
-        pj_ansi_to_unicode (ci.remote_info.ptr, ci.remote_info.slen,
-                            disp, PJ_ARRAY_SIZE (disp));
-        pj_ansi_to_unicode (ci.remote_contact.ptr, ci.remote_contact.slen,
-                            uri, PJ_ARRAY_SIZE (uri));
+	pj_ansi_to_unicode(ci.remote_info.ptr, ci.remote_info.slen, 
+	    disp, PJ_ARRAY_SIZE(disp));
+	pj_ansi_to_unicode(ci.remote_contact.ptr, ci.remote_contact.slen, 
+	    uri, PJ_ARRAY_SIZE(uri));
 
-        g_cb.on_incoming_call (disp, uri);
+	g_cb.on_incoming_call(disp, uri);
     }
 }
 
 /* Callback called by the library when call's state has changed */
-static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
+static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG (e);
-
-    pjsua_call_get_info (call_id, &ci);
+    PJ_UNUSED_ARG(e);
 
+    pjsua_call_get_info(call_id, &ci);
+    
     if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
-        if (call_id == g_call_id)
-            g_call_id = PJSUA_INVALID_ID;
-
-        if (g_cb.on_call_end) {
-            static wchar_t reason[256];
-            pj_ansi_to_unicode (ci.last_status_text.ptr, ci.last_status_text.slen,
-                                reason, PJ_ARRAY_SIZE (reason));
-            g_cb.on_call_end (reason);
-        }
+    	if (call_id == g_call_id)
+    	    g_call_id = PJSUA_INVALID_ID;
+	if (g_cb.on_call_end) {
+	    static wchar_t reason[256];
+	    pj_ansi_to_unicode(ci.last_status_text.ptr, ci.last_status_text.slen, 
+		    reason, PJ_ARRAY_SIZE(reason));
+	    g_cb.on_call_end(reason);
+	}
 
     } else if (ci.state != PJSIP_INV_STATE_INCOMING) {
-        if (g_call_id == PJSUA_INVALID_ID)
-            g_call_id = call_id;
+    	if (g_call_id == PJSUA_INVALID_ID)
+    	    g_call_id = call_id;
     }
-
-    PJ_LOG (3, (THIS_FILE, "Call %d state=%.*s", call_id,
-
-                (int) ci.state_text.slen,
-                ci.state_text.ptr));
+    
+    PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,
+			 (int)ci.state_text.slen,
+			 ci.state_text.ptr));
 }
 
 /* Callback called by the library when call's media state has changed */
-static void on_call_media_state (pjsua_call_id call_id)
+static void on_call_media_state(pjsua_call_id call_id)
 {
     pjsua_call_info ci;
 
-    pjsua_call_get_info (call_id, &ci);
+    pjsua_call_get_info(call_id, &ci);
 
     if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-        // When media is active, connect call to sound device.
-        pjsua_conf_connect (ci.conf_slot, 0);
-        pjsua_conf_connect (0, ci.conf_slot);
+	// When media is active, connect call to sound device.
+	pjsua_conf_connect(ci.conf_slot, 0);
+	pjsua_conf_connect(0, ci.conf_slot);
     }
 }
 
 
 /* Handler on buddy state changed. */
-static void on_buddy_state (pjsua_buddy_id buddy_id)
+static void on_buddy_state(pjsua_buddy_id buddy_id)
 {
     pjsua_buddy_info info;
-    pjsua_buddy_get_info (buddy_id, &info);
+    pjsua_buddy_get_info(buddy_id, &info);
 
-    PJ_LOG (3, (THIS_FILE, "%.*s status is %.*s",
-                (int) info.uri.slen,
-                info.uri.ptr,
-                (int) info.status_text.slen,
-                info.status_text.ptr));
+    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s",
+	      (int)info.uri.slen,
+	      info.uri.ptr,
+	      (int)info.status_text.slen,
+	      info.status_text.ptr));
 }
 
 
 /* Incoming IM message (i.e. MESSAGE request)!  */
-static void on_pager (pjsua_call_id call_id, const pj_str_t *from,
-                      const pj_str_t *to, const pj_str_t *contact,
-                      const pj_str_t *mime_type, const pj_str_t *text)
+static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
+		     const pj_str_t *to, const pj_str_t *contact,
+		     const pj_str_t *mime_type, const pj_str_t *text)
 {
     /* Note: call index may be -1 */
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
-    PJ_UNUSED_ARG (mime_type);
-
-    PJ_LOG (3, (THIS_FILE,"MESSAGE from %.*s: %.*s",
-                (int) from->slen, from->ptr,
-                (int) text->slen, text->ptr));
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG(mime_type);
+
+    PJ_LOG(3,(THIS_FILE,"MESSAGE from %.*s: %.*s",
+	      (int)from->slen, from->ptr,
+	      (int)text->slen, text->ptr));
 }
 
 
 /* Received typing indication  */
-static void on_typing (pjsua_call_id call_id, const pj_str_t *from,
-                       const pj_str_t *to, const pj_str_t *contact,
-                       pj_bool_t is_typing)
+static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
+		      const pj_str_t *to, const pj_str_t *contact,
+		      pj_bool_t is_typing)
 {
-    PJ_UNUSED_ARG (call_id);
-    PJ_UNUSED_ARG (to);
-    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG(to);
+    PJ_UNUSED_ARG(contact);
 
-    PJ_LOG (3, (THIS_FILE, "IM indication: %.*s %s",
-                (int) from->slen, from->ptr,
-                (is_typing?"is typing..":"has stopped typing")));
+    PJ_LOG(3,(THIS_FILE, "IM indication: %.*s %s",
+	      (int)from->slen, from->ptr,
+	      (is_typing?"is typing..":"has stopped typing")));
 }
 
 
 /* Call transfer request status. */
-static void on_call_transfer_status (pjsua_call_id call_id,
-                                     int status_code,
-                                     const pj_str_t *status_text,
-                                     pj_bool_t final,
-                                     pj_bool_t *p_cont)
+static void on_call_transfer_status(pjsua_call_id call_id,
+				    int status_code,
+				    const pj_str_t *status_text,
+				    pj_bool_t final,
+				    pj_bool_t *p_cont)
 {
-    PJ_LOG (3, (THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
-                call_id, status_code,
-                (int) status_text->slen, status_text->ptr,
-                (final ? "[final]" : "")));
+    PJ_LOG(3,(THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
+	      call_id, status_code,
+	      (int)status_text->slen, status_text->ptr,
+	      (final ? "[final]" : "")));
 
     if (status_code/100 == 2) {
-        PJ_LOG (3, (THIS_FILE,
-                    "Call %d: call transfered successfully, disconnecting call",
-                    call_id));
-        pjsua_call_hangup (call_id, PJSIP_SC_GONE, NULL, NULL);
-        *p_cont = PJ_FALSE;
+	PJ_LOG(3,(THIS_FILE, 
+	          "Call %d: call transfered successfully, disconnecting call",
+		  call_id));
+	pjsua_call_hangup(call_id, PJSIP_SC_GONE, NULL, NULL);
+	*p_cont = PJ_FALSE;
     }
 }
 
 
 /* NAT detection result */
-static void on_nat_detect (const pj_stun_nat_detect_result *res)
+static void on_nat_detect(const pj_stun_nat_detect_result *res) 
 {
     if (res->status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "NAT detection failed", res->status);
+	pjsua_perror(THIS_FILE, "NAT detection failed", res->status);
     } else {
-        PJ_LOG (3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
-    }
+	PJ_LOG(3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
+    }    
 }
 
 /* Notification that call is being replaced. */
-static void on_call_replaced (pjsua_call_id old_call_id,
-                              pjsua_call_id new_call_id)
+static void on_call_replaced(pjsua_call_id old_call_id,
+			     pjsua_call_id new_call_id)
 {
     pjsua_call_info old_ci, new_ci;
 
-    pjsua_call_get_info (old_call_id, &old_ci);
-    pjsua_call_get_info (new_call_id, &new_ci);
+    pjsua_call_get_info(old_call_id, &old_ci);
+    pjsua_call_get_info(new_call_id, &new_ci);
 
-    PJ_LOG (3, (THIS_FILE, "Call %d with %.*s is being replaced by "
-                "call %d with %.*s",
-                old_call_id,
-                (int) old_ci.remote_info.slen, old_ci.remote_info.ptr,
-                new_call_id,
-                (int) new_ci.remote_info.slen, new_ci.remote_info.ptr));
+    PJ_LOG(3,(THIS_FILE, "Call %d with %.*s is being replaced by "
+			 "call %d with %.*s",
+			 old_call_id, 
+			 (int)old_ci.remote_info.slen, old_ci.remote_info.ptr,
+			 new_call_id,
+			 (int)new_ci.remote_info.slen, new_ci.remote_info.ptr));
 }
 
 int symbian_ua_init()
@@ -269,167 +261,132 @@ int symbian_ua_init()
     TInt err;
     pj_symbianos_params sym_params;
     pj_status_t status;
-
+    
     // Initialize RSocketServ
-
-    if ( (err=aSocketServer.Connect()) != KErrNone)
-        return PJ_STATUS_FROM_OS (err);
-
+    if ((err=aSocketServer.Connect()) != KErrNone)
+    	return PJ_STATUS_FROM_OS(err);
+    
     // Open up a connection
-    if ( (err=aConn.Open (aSocketServer)) != KErrNone) {
-        aSocketServer.Close();
-        return PJ_STATUS_FROM_OS (err);
+    if ((err=aConn.Open(aSocketServer)) != KErrNone) {
+	    aSocketServer.Close();
+		return PJ_STATUS_FROM_OS(err);
     }
-
-    if ( (err=aConn.Start()) != KErrNone) {
-        aConn.Close();
-        aSocketServer.Close();
-        return PJ_STATUS_FROM_OS (err);
+    
+    if ((err=aConn.Start()) != KErrNone) {
+	aConn.Close();
+    	aSocketServer.Close();
+    	return PJ_STATUS_FROM_OS(err);
     }
-
+    
     // Set Symbian OS parameters in pjlib.
     // This must be done before pj_init() is called.
-    pj_bzero (&sym_params, sizeof (sym_params));
-
+    pj_bzero(&sym_params, sizeof(sym_params));
     sym_params.rsocketserv = &aSocketServer;
-
     sym_params.rconnection = &aConn;
-
-    pj_symbianos_set_params (&sym_params);
+    pj_symbianos_set_params(&sym_params);
 
     /* Redirect log before pjsua_init() */
-    pj_log_set_log_func (&log_writer);
-
+    pj_log_set_log_func(&log_writer);
+    
     /* Set log level */
-    pj_log_set_level (LOG_LEVEL);
+    pj_log_set_level(LOG_LEVEL);
 
     /* Create pjsua first! */
     status = pjsua_create();
-
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pjsua_create() error", status);
-        return status;
+    	pjsua_perror(THIS_FILE, "pjsua_create() error", status);
+    	return status;
     }
 
     /* Init pjsua */
     pjsua_config cfg;
 
-    pjsua_config_default (&cfg);
-
+    pjsua_config_default(&cfg);
     cfg.max_calls = 2;
-
     cfg.thread_cnt = 0; // Disable threading on Symbian
-
     cfg.use_srtp = USE_SRTP;
-
     cfg.srtp_secure_signaling = 0;
 
     cfg.cb.on_incoming_call = &on_incoming_call;
-
     cfg.cb.on_call_media_state = &on_call_media_state;
-
     cfg.cb.on_call_state = &on_call_state;
-
     cfg.cb.on_buddy_state = &on_buddy_state;
-
     cfg.cb.on_pager = &on_pager;
-
     cfg.cb.on_typing = &on_typing;
-
     cfg.cb.on_call_transfer_status = &on_call_transfer_status;
-
     cfg.cb.on_call_replaced = &on_call_replaced;
-
     cfg.cb.on_nat_detect = &on_nat_detect;
-
     cfg.cb.on_reg_state = &on_reg_state;
 
     pjsua_media_config med_cfg;
 
-    pjsua_media_config_default (&med_cfg);
-
+    pjsua_media_config_default(&med_cfg);
     med_cfg.thread_cnt = 0; // Disable threading on Symbian
-
     med_cfg.has_ioqueue = PJ_FALSE;
-
     med_cfg.clock_rate = 8000;
-
 #if defined(PJMEDIA_SYM_SND_USE_APS) && (PJMEDIA_SYM_SND_USE_APS==1)
     med_cfg.audio_frame_ptime = 20;
-
 #else
     med_cfg.audio_frame_ptime = 40;
-
 #endif
     med_cfg.ec_tail_len = 0;
-
     med_cfg.enable_ice = USE_ICE;
-
     med_cfg.snd_auto_close_time = 5; // wait for 5 seconds idle before sound dev get auto-closed
 
     pjsua_logging_config log_cfg;
 
-    pjsua_logging_config_default (&log_cfg);
-
+    pjsua_logging_config_default(&log_cfg);
     log_cfg.console_level = LOG_LEVEL;
-
     log_cfg.cb = &log_writer;
-
     log_cfg.decor = 0;
 
-    status = pjsua_init (&cfg, &log_cfg, &med_cfg);
-
+    status = pjsua_init(&cfg, &log_cfg, &med_cfg);
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "pjsua_init() error", status);
-        pjsua_destroy();
-        return status;
+	    pjsua_perror(THIS_FILE, "pjsua_init() error", status);
+	    pjsua_destroy();
+	    return status;
     }
 
     /* Add UDP transport. */
     pjsua_transport_config tcfg;
-
     pjsua_transport_id tid;
 
-    pjsua_transport_config_default (&tcfg);
-
+    pjsua_transport_config_default(&tcfg);
     tcfg.port = SIP_PORT;
-
-    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP, &tcfg, &tid);
-
+    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid);
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "Error creating transport", status);
-        pjsua_destroy();
-        return status;
+	    pjsua_perror(THIS_FILE, "Error creating transport", status);
+	    pjsua_destroy();
+	    return status;
     }
 
     /* Add account for the transport */
-    pjsua_acc_add_local (tid, PJ_TRUE, &g_acc_id);
+    pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id);
 
     /* Initialization is done, now start pjsua */
     status = pjsua_start();
-
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "Error starting pjsua", status);
-        pjsua_destroy();
-        return status;
+    	pjsua_perror(THIS_FILE, "Error starting pjsua", status);
+    	pjsua_destroy();
+    	return status;
     }
 
     /* Adjust Speex priority and enable only the narrowband */
     {
-        pj_str_t codec_id = pj_str ("speex/8000");
-        pjmedia_codec_mgr_set_codec_priority (
-            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
-            &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
-
-        codec_id = pj_str ("speex/16000");
-        pjmedia_codec_mgr_set_codec_priority (
-            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
-            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
-
-        codec_id = pj_str ("speex/32000");
-        pjmedia_codec_mgr_set_codec_priority (
-            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
-            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+        pj_str_t codec_id = pj_str("speex/8000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
+
+        codec_id = pj_str("speex/16000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+
+        codec_id = pj_str("speex/32000");
+        pjmedia_codec_mgr_set_codec_priority( 
+        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
+        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
     }
 
     return PJ_SUCCESS;
@@ -440,104 +397,97 @@ int symbian_ua_destroy()
 {
     // Shutdown pjsua
     pjsua_destroy();
-
+    
     // Close connection and socket server
     aConn.Close();
     aSocketServer.Close();
-
+    
     CloseSTDLIB();
 
     return PJ_SUCCESS;
 }
 
-void symbian_ua_set_info_callback (const symbian_ua_info_cb_t *cb)
+void symbian_ua_set_info_callback(const symbian_ua_info_cb_t *cb)
 {
     if (cb)
-        g_cb = *cb;
+	g_cb = *cb;
     else
-        pj_bzero (&g_cb, sizeof (g_cb));
+	pj_bzero(&g_cb, sizeof(g_cb));
 }
 
-int symbian_ua_set_account (const char *domain, const char *username,
-                            const char *password,
-                            bool use_srtp, bool use_ice)
+int symbian_ua_set_account(const char *domain, const char *username, 
+			   const char *password,
+			   bool use_srtp, bool use_ice)
 {
     pj_status_t status;
 
-    PJ_ASSERT_RETURN (username && password && domain, PJ_EINVAL);
-    PJ_UNUSED_ARG (use_srtp);
-    PJ_UNUSED_ARG (use_ice);
+    PJ_ASSERT_RETURN(username && password && domain, PJ_EINVAL);
+    PJ_UNUSED_ARG(use_srtp);
+    PJ_UNUSED_ARG(use_ice);
 
     if (domain[0] == 0) {
-        pjsua_acc_info acc_info;
-        pj_status_t status;
-
-        status = pjsua_acc_get_info (g_acc_id, &acc_info);
-
-        if (status != PJ_SUCCESS)
-            return status;
-
-        if (acc_info.status == 200) {
-            PJ_LOG (3, (THIS_FILE, "Unregistering.."));
-            pjsua_acc_set_registration (g_acc_id, PJ_FALSE);
-            g_acc_id = 0;
-        }
-
-        return PJ_SUCCESS;
+	    pjsua_acc_info acc_info;
+	    pj_status_t status;
+
+	    status = pjsua_acc_get_info(g_acc_id, &acc_info);
+	    if (status != PJ_SUCCESS)
+		return status;
+
+	    if (acc_info.status == 200) {
+			PJ_LOG(3,(THIS_FILE, "Unregistering.."));
+			pjsua_acc_set_registration(g_acc_id, PJ_FALSE);
+			g_acc_id = 0;
+	    }
+	    return PJ_SUCCESS;
     }
 
     if (pjsua_acc_get_count() > 1) {
-        status = pjsua_acc_del (g_acc_id);
-
-        if (status != PJ_SUCCESS) {
-            pjsua_perror (THIS_FILE, "Error removing account", status);
-            return status;
-        }
-
-        g_acc_id = 0;
+	status = pjsua_acc_del(g_acc_id);
+	if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "Error removing account", status);
+	    return status;
+	}
+	g_acc_id = 0;
     }
 
     pjsua_acc_config cfg;
-
     char tmp_id[PJSIP_MAX_URL_SIZE];
     char tmp_reg_uri[PJSIP_MAX_URL_SIZE];
 
-    if (!pj_ansi_strnicmp (domain, "sip:", 4)) {
-        domain += 4;
+    if (!pj_ansi_strnicmp(domain, "sip:", 4)) {
+	domain += 4;
     }
 
-    pjsua_acc_config_default (&cfg);
-
-    pj_ansi_sprintf (tmp_id, "sip:%s@%s", username, domain);
-    cfg.id = pj_str (tmp_id);
-    pj_ansi_sprintf (tmp_reg_uri, "sip:%s", domain);
-    cfg.reg_uri = pj_str (tmp_reg_uri);
+    pjsua_acc_config_default(&cfg);
+    pj_ansi_sprintf(tmp_id, "sip:%s@%s", username, domain);
+    cfg.id = pj_str(tmp_id);
+    pj_ansi_sprintf(tmp_reg_uri, "sip:%s", domain);
+    cfg.reg_uri = pj_str(tmp_reg_uri);
     cfg.cred_count = 1;
-    cfg.cred_info[0].realm = pj_str ("*");
-    cfg.cred_info[0].scheme = pj_str ("digest");
-    cfg.cred_info[0].username = pj_str ( (char*) username);
+    cfg.cred_info[0].realm = pj_str("*");
+    cfg.cred_info[0].scheme = pj_str("digest");
+    cfg.cred_info[0].username = pj_str((char*)username);
     cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
-    cfg.cred_info[0].data = pj_str ( (char*) password);
-
-    status = pjsua_acc_add (&cfg, PJ_TRUE, &g_acc_id);
+    cfg.cred_info[0].data = pj_str((char*)password);
 
+    status = pjsua_acc_add(&cfg, PJ_TRUE, &g_acc_id);
     if (status != PJ_SUCCESS) {
-        pjsua_perror (THIS_FILE, "Error setting account", status);
-        pjsua_destroy();
-        return status;
+	    pjsua_perror(THIS_FILE, "Error setting account", status);
+	    pjsua_destroy();
+	    return status;
     }
 
     return PJ_SUCCESS;
 }
 
-int symbian_ua_makecall (const char* dest_url)
+int symbian_ua_makecall(const char* dest_url)
 {
-    if (pjsua_verify_sip_url (dest_url) == PJ_SUCCESS) {
-        pj_str_t dst = pj_str ( (char*) dest_url);
-        pjsua_call_make_call (g_acc_id, &dst, 0, NULL,
-                              NULL, &g_call_id);
+    if (pjsua_verify_sip_url(dest_url) == PJ_SUCCESS) {
+	    pj_str_t dst = pj_str((char*)dest_url);
+	    pjsua_call_make_call(g_acc_id, &dst, 0, NULL,
+				 NULL, &g_call_id);
 
-        return PJ_SUCCESS;
+	    return PJ_SUCCESS;
     }
 
     return PJ_EINVAL;
@@ -552,13 +502,13 @@ int symbian_ua_endcall()
 
 bool symbian_ua_anycall()
 {
-    return (pjsua_call_get_count() >0);
+    return (pjsua_call_get_count()>0);
 }
 
 int symbian_ua_answercall()
 {
     PJ_ASSERT_RETURN (g_call_id != PJSUA_INVALID_ID, PJ_EINVAL);
 
-    return pjsua_call_answer (g_call_id, 200, NULL, NULL);
+    return pjsua_call_answer(g_call_id, 200, NULL, NULL);
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
index ab66bb2780..ac399510b2 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiAppUi.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -29,168 +29,167 @@
 
 /**
  * Construct the Csymbian_ua_guiAppUi instance
- */
-Csymbian_ua_guiAppUi::Csymbian_ua_guiAppUi() : CTimer (0)
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
+ */ 
+Csymbian_ua_guiAppUi::Csymbian_ua_guiAppUi() : CTimer(0)
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
 
-}
+	}
 
-/**
+/** 
  * The appui's destructor removes the container from the control
  * stack and destroys it.
  */
 Csymbian_ua_guiAppUi::~Csymbian_ua_guiAppUi()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    TRAPD (err_Dlg_wait_init, RemoveDlg_wait_initL());
-    // ]]] end generated region [Generated Contents]
-}
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	TRAPD( err_Dlg_wait_init, RemoveDlg_wait_initL() );
+	// ]]] end generated region [Generated Contents]
+	}
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiAppUi::InitializeContainersL()
-{
-    iSymbian_ua_guiContainerView = Csymbian_ua_guiContainerView::NewL();
-    AddViewL (iSymbian_ua_guiContainerView);
-    iSymbian_ua_guiSettingItemListView = Csymbian_ua_guiSettingItemListView::NewL();
-    AddViewL (iSymbian_ua_guiSettingItemListView);
-    SetDefaultViewL (*iSymbian_ua_guiSettingItemListView);
-}
-
+	{
+	iSymbian_ua_guiContainerView = Csymbian_ua_guiContainerView::NewL();
+	AddViewL( iSymbian_ua_guiContainerView );
+	iSymbian_ua_guiSettingItemListView = Csymbian_ua_guiSettingItemListView::NewL();
+	AddViewL( iSymbian_ua_guiSettingItemListView );
+	SetDefaultViewL( *iSymbian_ua_guiSettingItemListView );
+	}
 // ]]] end generated function
 
 /**
  * Handle a command for this appui (override)
  * @param aCommand command id to be handled
  */
-void Csymbian_ua_guiAppUi::HandleCommandL (TInt aCommand)
-{
-    // [[[ begin generated region: do not modify [Generated Code]
-    TBool commandHandled = EFalse;
-
-    switch (aCommand) { // code to dispatch to the AppUi's menu and CBA commands is generated here
-
-        default:
-            break;
-    }
-
-
-    if (!commandHandled) {
-        if (aCommand == EAknSoftkeyExit || aCommand == EEikCmdExit) {
-            symbian_ua_destroy();
-            Exit();
-        }
-    }
-
-    // ]]] end generated region [Generated Code]
-
-}
-
-/**
+void Csymbian_ua_guiAppUi::HandleCommandL( TInt aCommand )
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	TBool commandHandled = EFalse;
+	switch ( aCommand )
+		{ // code to dispatch to the AppUi's menu and CBA commands is generated here
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+		if ( aCommand == EAknSoftkeyExit || aCommand == EEikCmdExit )
+			{
+		    	symbian_ua_destroy();
+			Exit();
+			}
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
+
+/** 
  * Override of the HandleResourceChangeL virtual function
  */
-void Csymbian_ua_guiAppUi::HandleResourceChangeL (TInt aType)
-{
-    CAknViewAppUi::HandleResourceChangeL (aType);
-    // [[[ begin generated region: do not modify [Generated Code]
-    // ]]] end generated region [Generated Code]
-
-}
-
-/**
+void Csymbian_ua_guiAppUi::HandleResourceChangeL( TInt aType )
+	{
+	CAknViewAppUi::HandleResourceChangeL( aType );
+	// [[[ begin generated region: do not modify [Generated Code]
+	// ]]] end generated region [Generated Code]
+	
+	}
+				
+/** 
  * Override of the HandleKeyEventL virtual function
  * @return EKeyWasConsumed if event was handled, EKeyWasNotConsumed if not
- * @param aKeyEvent
- * @param aType
+ * @param aKeyEvent 
+ * @param aType 
  */
-TKeyResponse Csymbian_ua_guiAppUi::HandleKeyEventL (
-    const TKeyEvent& aKeyEvent,
-    TEventCode aType)
-{
-    // The inherited HandleKeyEventL is private and cannot be called
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-    return EKeyWasNotConsumed;
-}
-
-/**
+TKeyResponse Csymbian_ua_guiAppUi::HandleKeyEventL(
+		const TKeyEvent& aKeyEvent,
+		TEventCode aType )
+	{
+	// The inherited HandleKeyEventL is private and cannot be called
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	return EKeyWasNotConsumed;
+	}
+
+/** 
  * Override of the HandleViewDeactivation virtual function
  *
- * @param aViewIdToBeDeactivated
- * @param aNewlyActivatedViewId
+ * @param aViewIdToBeDeactivated 
+ * @param aNewlyActivatedViewId 
  */
-void Csymbian_ua_guiAppUi::HandleViewDeactivation (
-    const TVwsViewId& aViewIdToBeDeactivated,
-    const TVwsViewId& aNewlyActivatedViewId)
-{
-    CAknViewAppUi::HandleViewDeactivation (
-        aViewIdToBeDeactivated,
-        aNewlyActivatedViewId);
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
+void Csymbian_ua_guiAppUi::HandleViewDeactivation( 
+		const TVwsViewId& aViewIdToBeDeactivated, 
+		const TVwsViewId& aNewlyActivatedViewId )
+	{
+	CAknViewAppUi::HandleViewDeactivation( 
+			aViewIdToBeDeactivated, 
+			aNewlyActivatedViewId );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
 
 /**
- * @brief Completes the second phase of Symbian object construction.
- * Put initialization code that could leave here.
- */
+ * @brief Completes the second phase of Symbian object construction. 
+ * Put initialization code that could leave here. 
+ */ 
 void Csymbian_ua_guiAppUi::ConstructL()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    BaseConstructL (EAknEnableSkin);
-    InitializeContainersL();
-    // ]]] end generated region [Generated Contents]
-
-    // Create private folder
-    RProcess process;
-    TFileName path;
-
-    path.Copy (process.FileName().Left (2));
-
-    if (path.Compare (_L ("c")) || path.Compare (_L ("C")))
-        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveC);
-    else if (path.Compare (_L ("e")) || path.Compare (_L ("E")))
-        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveE);
-
-    // Init PJSUA
-    if (symbian_ua_init() != 0) {
-        symbian_ua_destroy();
-        Exit();
-    }
-
-    ExecuteDlg_wait_initLD();
-
-    CTimer::ConstructL();
-    CActiveScheduler::Add (this);
-    After (4000000);
-}
-
-/**
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	BaseConstructL( EAknEnableSkin );
+	InitializeContainersL();
+	// ]]] end generated region [Generated Contents]
+
+	// Create private folder
+	RProcess process;
+	TFileName path;
+	
+	path.Copy( process.FileName().Left(2) );
+	
+	if(path.Compare(_L("c")) || path.Compare(_L("C")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveC);
+	else if(path.Compare(_L("e")) || path.Compare(_L("E")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveE);	
+	
+	// Init PJSUA
+	if (symbian_ua_init() != 0) {
+	    symbian_ua_destroy();
+	    Exit();
+	}
+	
+	ExecuteDlg_wait_initLD();
+
+	CTimer::ConstructL();
+	CActiveScheduler::Add( this );
+	After(4000000);
+	}
+
+/** 
  * Override of the HandleApplicationSpecificEventL virtual function
  */
-void Csymbian_ua_guiAppUi::HandleApplicationSpecificEventL (
-    TInt aType,
-    const TWsEvent& anEvent)
-{
-    CAknViewAppUi::HandleApplicationSpecificEventL (aType, anEvent);
-    // [[[ begin generated region: do not modify [Generated Code]
-    // ]]] end generated region [Generated Code]
-
-}
-
-/**
+void Csymbian_ua_guiAppUi::HandleApplicationSpecificEventL( 
+		TInt aType, 
+		const TWsEvent& anEvent )
+	{
+	CAknViewAppUi::HandleApplicationSpecificEventL( aType, anEvent );
+	// [[[ begin generated region: do not modify [Generated Code]
+	// ]]] end generated region [Generated Code]
+	
+	}
+				
+/** 
  * Handle the applicationSpecificEvent event.
  */
-void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL (
-    TInt /* aType */,
-    const TWsEvent& /* anEvent */)
-{
-    // TODO: implement applicationSpecificEvent event handler
-}
-
+void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL( 
+		TInt /* aType */, 
+		const TWsEvent& /* anEvent */ )
+	{
+	// TODO: implement applicationSpecificEvent event handler
+	}
+				
 // [[[ begin generated function: do not modify
 /**
  * Execute the wait dialog for dlg_wait_init. This routine returns
@@ -199,22 +198,19 @@ void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL (
  * @param aOverrideText optional override text. When null the text configured
  * in the UI Designer is used.
  */
-void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD (const TDesC* aOverrideText)
-{
-    iDlg_wait_init = new (ELeave) CAknWaitDialog (
-        reinterpret_cast< CEikDialog** > (&iDlg_wait_init), EFalse);
-
-    if (aOverrideText != NULL) {
-        iDlg_wait_init->SetTextL (*aOverrideText);
-    }
-
-    iDlg_wait_init->ExecuteLD (R_APPLICATION_DLG_WAIT_INIT);
-
-    iDlg_wait_initCallback = new (ELeave) CProgressDialogCallback (
-        this, iDlg_wait_init, &Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL);
-    iDlg_wait_init->SetCallback (iDlg_wait_initCallback);
-}
-
+void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD( const TDesC* aOverrideText )
+	{
+	iDlg_wait_init = new ( ELeave ) CAknWaitDialog( 
+			reinterpret_cast< CEikDialog** >( &iDlg_wait_init ), EFalse );
+	if ( aOverrideText != NULL )
+		{
+		iDlg_wait_init->SetTextL( *aOverrideText );
+		}
+	iDlg_wait_init->ExecuteLD( R_APPLICATION_DLG_WAIT_INIT );
+	iDlg_wait_initCallback = new ( ELeave ) CProgressDialogCallback( 
+		this, iDlg_wait_init, &Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL );
+	iDlg_wait_init->SetCallback( iDlg_wait_initCallback );
+	}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -222,32 +218,30 @@ void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD (const TDesC* aOverrideText)
  * Close and dispose of the wait dialog for dlg_wait_init
  */
 void Csymbian_ua_guiAppUi::RemoveDlg_wait_initL()
-{
-    if (iDlg_wait_init != NULL) {
-        iDlg_wait_init->SetCallback (NULL);
-        iDlg_wait_init->ProcessFinishedL();    // deletes the dialog
-        iDlg_wait_init = NULL;
-    }
-
-    delete iDlg_wait_initCallback;
-
-    iDlg_wait_initCallback = NULL;
-
-}
-
+	{
+	if ( iDlg_wait_init != NULL )
+		{
+		iDlg_wait_init->SetCallback( NULL );
+		iDlg_wait_init->ProcessFinishedL();    // deletes the dialog
+		iDlg_wait_init = NULL;
+		}
+	delete iDlg_wait_initCallback;
+	iDlg_wait_initCallback = NULL;
+	
+	}
 // ]]] end generated function
 
-/**
+/** 
  * Handle the canceled event.
  */
-void Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL (CAknProgressDialog* /* aDialog */)
-{
-    // TODO: implement canceled event handler
-
-}
-
+void Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL( CAknProgressDialog* /* aDialog */ )
+	{
+	// TODO: implement canceled event handler
+	
+	}
+				
 void Csymbian_ua_guiAppUi::RunL()
-{
-    RemoveDlg_wait_initL();
-    iSymbian_ua_guiSettingItemListView->HandleCommandL (EAknSoftkeySave);
-}
+	{
+	RemoveDlg_wait_initL();
+	iSymbian_ua_guiSettingItemListView->HandleCommandL(EAknSoftkeySave);
+	}
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
index d32c672d6c..dc60fecd64 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiApplication.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -19,50 +19,50 @@
 
 
 // Needed by APS
-TPtrC APP_UID = _L ("EBD12EE4");
+TPtrC APP_UID = _L("EBD12EE4");
 
 /**
  * @brief Returns the application's UID (override from CApaApplication::AppDllUid())
  * @return UID for this application (KUidsymbian_ua_guiApplication)
  */
 TUid Csymbian_ua_guiApplication::AppDllUid() const
-{
-    return KUidsymbian_ua_guiApplication;
-}
+	{
+	return KUidsymbian_ua_guiApplication;
+	}
 
 /**
  * @brief Creates the application's document (override from CApaApplication::CreateDocumentL())
  * @return Pointer to the created document object (Csymbian_ua_guiDocument)
  */
 CApaDocument* Csymbian_ua_guiApplication::CreateDocumentL()
-{
-    return Csymbian_ua_guiDocument::NewL (*this);
-}
+	{
+	return Csymbian_ua_guiDocument::NewL( *this );
+	}
 
 #ifdef EKA2
 
 /**
  *	@brief Called by the application framework to construct the application object
  *  @return The application (Csymbian_ua_guiApplication)
- */
+ */	
 LOCAL_C CApaApplication* NewApplication()
-{
-    return new Csymbian_ua_guiApplication;
-}
+	{
+	return new Csymbian_ua_guiApplication;
+	}
 
 /**
 * @brief This standard export is the entry point for all Series 60 applications
 * @return error code
- */
+ */	
 GLDEF_C TInt E32Main()
-{
-    TInt err;
-
-    err = EikStart::RunApplication (NewApplication);
-
-    return err;
-}
+	{
+	TInt err;
+	
+	err = EikStart::RunApplication( NewApplication );
 
+	return err;
+	}
+	
 #else 	// Series 60 2.x main DLL program code
 
 /**
@@ -70,17 +70,17 @@ GLDEF_C TInt E32Main()
 * @return The application (Csymbian_ua_guiApplication)
 */
 EXPORT_C CApaApplication* NewApplication()
-{
-    return new Csymbian_ua_guiApplication;
-}
+	{
+	return new Csymbian_ua_guiApplication;
+	}
 
 /**
 * @brief This standard export is the entry point for all Series 60 applications
 * @return error code
 */
-GLDEF_C TInt E32Dll (TDllReason /*reason*/)
-{
-    return KErrNone;
-}
+GLDEF_C TInt E32Dll(TDllReason /*reason*/)
+	{
+	return KErrNone;
+	}
 
 #endif // EKA2
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
index 1ff6ff8bd9..777217c7de 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiContainer.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -30,35 +30,34 @@
 // ]]] end generated region [Generated Constants]
 
 /**
- * First phase of Symbian two-phase construction. Should not
+ * First phase of Symbian two-phase construction. Should not 
  * contain any code that could leave.
  */
 CSymbian_ua_guiContainer::CSymbian_ua_guiContainer()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    iLabel1 = NULL;
-    iEd_url = NULL;
-    iEd_info = NULL;
-    // ]]] end generated region [Generated Contents]
-
-}
-
-/**
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iLabel1 = NULL;
+	iEd_url = NULL;
+	iEd_info = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
  * Destroy child controls.
  */
 CSymbian_ua_guiContainer::~CSymbian_ua_guiContainer()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    delete iLabel1;
-    iLabel1 = NULL;
-    delete iEd_url;
-    iEd_url = NULL;
-    delete iEd_info;
-    iEd_info = NULL;
-    // ]]] end generated region [Generated Contents]
-
-}
-
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iLabel1;
+	iLabel1 = NULL;
+	delete iEd_url;
+	iEd_url = NULL;
+	delete iEd_info;
+	iEd_info = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
 /**
  * Construct the control (first phase).
  *  Creates an instance and initializes it.
@@ -68,18 +67,18 @@ CSymbian_ua_guiContainer::~CSymbian_ua_guiContainer()
  * @param aCommandObserver command observer
  * @return initialized instance of CSymbian_ua_guiContainer
  */
-CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL (
-    const TRect& aRect,
-    const CCoeControl* aParent,
-    MEikCommandObserver* aCommandObserver)
-{
-    CSymbian_ua_guiContainer* self = CSymbian_ua_guiContainer::NewLC (
-                                         aRect,
-                                         aParent,
-                                         aCommandObserver);
-    CleanupStack::Pop (self);
-    return self;
-}
+CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CSymbian_ua_guiContainer* self = CSymbian_ua_guiContainer::NewLC( 
+			aRect, 
+			aParent, 
+			aCommandObserver );
+	CleanupStack::Pop( self );
+	return self;
+	}
 
 /**
  * Construct the control (first phase).
@@ -90,205 +89,197 @@ CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL (
  * @param aCommandObserver command observer
  * @return new instance of CSymbian_ua_guiContainer
  */
-CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewLC (
-    const TRect& aRect,
-    const CCoeControl* aParent,
-    MEikCommandObserver* aCommandObserver)
-{
-    CSymbian_ua_guiContainer* self = new (ELeave) CSymbian_ua_guiContainer();
-    CleanupStack::PushL (self);
-    self->ConstructL (aRect, aParent, aCommandObserver);
-    return self;
-}
-
+CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CSymbian_ua_guiContainer* self = new ( ELeave ) CSymbian_ua_guiContainer();
+	CleanupStack::PushL( self );
+	self->ConstructL( aRect, aParent, aCommandObserver );
+	return self;
+	}
+			
 /**
  * Construct the control (second phase).
  *  Creates a window to contain the controls and activates it.
  * @param aRect bounding rectangle
  * @param aCommandObserver command observer
  * @param aParent owning parent, or NULL
- */
-void CSymbian_ua_guiContainer::ConstructL (
-    const TRect& aRect,
-    const CCoeControl* aParent,
-    MEikCommandObserver* aCommandObserver)
-{
-    if (aParent == NULL) {
-        CreateWindowL();
-    } else {
-        SetContainerWindowL (*aParent);
-    }
-
-    iFocusControl = NULL;
-
-    iCommandObserver = aCommandObserver;
-    InitializeControlsL();
-    SetRect (aRect);
-    ActivateL();
-    // [[[ begin generated region: do not modify [Post-ActivateL initializations]
-    // ]]] end generated region [Post-ActivateL initializations]
-
-}
-
+ */ 
+void CSymbian_ua_guiContainer::ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	InitializeControlsL();
+	SetRect( aRect );
+	ActivateL();
+	// [[[ begin generated region: do not modify [Post-ActivateL initializations]
+	// ]]] end generated region [Post-ActivateL initializations]
+	
+	}
+			
 /**
 * Return the number of controls in the container (override)
 * @return count
 */
 TInt CSymbian_ua_guiContainer::CountComponentControls() const
-{
-    return (int) ELastControl;
-}
-
+	{
+	return ( int ) ELastControl;
+	}
+				
 /**
 * Get the control with the given index (override)
 * @param aIndex Control index [0...n) (limited by #CountComponentControls)
 * @return Pointer to control
 */
-CCoeControl* CSymbian_ua_guiContainer::ComponentControl (TInt aIndex) const
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    switch (aIndex) {
-
-        case ELabel1:
-            return iLabel1;
-
-        case EEd_url:
-            return iEd_url;
-
-        case EEd_info:
-            return iEd_info;
-    }
-
-    // ]]] end generated region [Generated Contents]
-
-    // handle any user controls here...
-
-    return NULL;
-}
-
+CCoeControl* CSymbian_ua_guiContainer::ComponentControl( TInt aIndex ) const
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	switch ( aIndex )
+		{
+		case ELabel1:
+			return iLabel1;
+		case EEd_url:
+			return iEd_url;
+		case EEd_info:
+			return iEd_info;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	// handle any user controls here...
+	
+	return NULL;
+	}
+				
 /**
  *	Handle resizing of the container. This implementation will lay out
  *  full-sized controls like list boxes for any screen size, and will layout
  *  labels, editors, etc. to the size they were given in the UI designer.
  *  This code will need to be modified to adjust arbitrary controls to
  *  any screen size.
- */
+ */				
 void CSymbian_ua_guiContainer::SizeChanged()
-{
-    CCoeControl::SizeChanged();
-    LayoutControls();
-    // [[[ begin generated region: do not modify [Generated Contents]
-
-    // ]]] end generated region [Generated Contents]
-
-}
-
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+	// [[[ begin generated region: do not modify [Generated Contents]
+			
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
 // [[[ begin generated function: do not modify
 /**
  * Layout components as specified in the UI Designer
  */
 void CSymbian_ua_guiContainer::LayoutControls()
-{
-    iLabel1->SetExtent (TPoint (2, 23), TSize (32, 28));
-    iEd_url->SetExtent (TPoint (49, 25), TSize (197, 28));
-    iEd_info->SetExtent (TPoint (3, 78), TSize (235, 143));
-}
-
+	{
+	iLabel1->SetExtent( TPoint( 2, 23 ), TSize( 32, 28 ) );
+	iEd_url->SetExtent( TPoint( 49, 25 ), TSize( 197, 28 ) );
+	iEd_info->SetExtent( TPoint( 3, 78 ), TSize( 235, 143 ) );
+	}
 // ]]] end generated function
 
 /**
  *	Handle key events.
- */
-TKeyResponse CSymbian_ua_guiContainer::OfferKeyEventL (
-    const TKeyEvent& aKeyEvent,
-    TEventCode aType)
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-
-    // ]]] end generated region [Generated Contents]
-
-    if (iFocusControl != NULL
-            && iFocusControl->OfferKeyEventL (aKeyEvent, aType) == EKeyWasConsumed) {
-        return EKeyWasConsumed;
-    }
-
-    return CCoeControl::OfferKeyEventL (aKeyEvent, aType);
-}
-
+ */				
+TKeyResponse CSymbian_ua_guiContainer::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	
+	// ]]] end generated region [Generated Contents]
+	
+	if ( iFocusControl != NULL
+		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+		{
+		return EKeyWasConsumed;
+		}
+	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
 // [[[ begin generated function: do not modify
 /**
  *	Initialize each control upon creation.
- */
+ */				
 void CSymbian_ua_guiContainer::InitializeControlsL()
-{
-    iLabel1 = new (ELeave) CEikLabel;
-    iLabel1->SetContainerWindowL (*this);
-    {
-        TResourceReader reader;
-        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_LABEL1);
-        iLabel1->ConstructFromResourceL (reader);
-        CleanupStack::PopAndDestroy(); // reader internal state
-    }
-
-    iEd_url = new (ELeave) CEikEdwin;
-    iEd_url->SetContainerWindowL (*this);
-    {
-        TResourceReader reader;
-        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_URL);
-        iEd_url->ConstructFromResourceL (reader);
-        CleanupStack::PopAndDestroy(); // reader internal state
-    }
-
-    {
-        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_ED_URL_2);
-        iEd_url->SetTextL (text);
-        CleanupStack::PopAndDestroy (text);
-    }
-
-    iEd_info = new (ELeave) CEikEdwin;
-    iEd_info->SetContainerWindowL (*this);
-    {
-        TResourceReader reader;
-        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO);
-        iEd_info->ConstructFromResourceL (reader);
-        CleanupStack::PopAndDestroy(); // reader internal state
-    }
-
-    {
-        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO_2);
-        iEd_info->SetTextL (text);
-        CleanupStack::PopAndDestroy (text);
-    }
-
-    iEd_url->SetFocus (ETrue);
-    iFocusControl = iEd_url;
-
-}
-
+	{
+	iLabel1 = new ( ELeave ) CEikLabel;
+	iLabel1->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_LABEL1 );
+		iLabel1->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+	iEd_url = new ( ELeave ) CEikEdwin;
+	iEd_url->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_URL );
+		iEd_url->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_ED_URL_2 );
+		iEd_url->SetTextL( text );
+		CleanupStack::PopAndDestroy( text );
+		}
+	iEd_info = new ( ELeave ) CEikEdwin;
+	iEd_info->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO );
+		iEd_info->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+		{
+		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO_2 );
+		iEd_info->SetTextL( text );
+		CleanupStack::PopAndDestroy( text );
+		}
+	
+	iEd_url->SetFocus( ETrue );
+	iFocusControl = iEd_url;
+	
+	}
 // ]]] end generated function
 
-/**
+/** 
  * Handle global resource changes, such as scalable UI or skin events (override)
  */
-void CSymbian_ua_guiContainer::HandleResourceChange (TInt aType)
-{
-    CCoeControl::HandleResourceChange (aType);
-    SetRect (iAvkonViewAppUi->View (TUid::Uid (ESymbian_ua_guiContainerViewId))->ClientRect());
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
-
+void CSymbian_ua_guiContainer::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ESymbian_ua_guiContainerViewId ) )->ClientRect() );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
 /**
  *	Draw container contents.
- */
-void CSymbian_ua_guiContainer::Draw (const TRect& aRect) const
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    CWindowGc& gc = SystemGc();
-    gc.Clear (aRect);
-
-    // ]]] end generated region [Generated Contents]
-
-}
-
+ */				
+void CSymbian_ua_guiContainer::Draw( const TRect& aRect ) const
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+	
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
index a01d8f353c..661c210eac 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiContainerView.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -39,111 +39,106 @@
 // ]]] end generated region [Generated Constants]
 
 Csymbian_ua_guiContainerView *myinstance = NULL;
-_LIT (KStCall, "Call");
-_LIT (KStHangUp, "Hang Up");
+_LIT(KStCall, "Call");
+_LIT(KStHangUp, "Hang Up");
 
-void on_info (const wchar_t* buf)
+void on_info(const wchar_t* buf)
 {
-    TPtrC aBuf ( (const TUint16*) buf);
-
-    if (myinstance)
-        myinstance->PutMessage (aBuf);
+	TPtrC aBuf((const TUint16*)buf);
+	
+	if (myinstance)
+		myinstance->PutMessage(aBuf);
 }
 
-void on_incoming_call (const wchar_t* caller_disp, const wchar_t* caller_uri)
+void on_incoming_call(const wchar_t* caller_disp, const wchar_t* caller_uri)
 {
-    TBuf<512> buf;
-    TPtrC aDisp ( (const TUint16*) caller_disp);
-    TPtrC aUri ( (const TUint16*) caller_uri);
-    _LIT (KFormat, "Incoming call from %S, accept?");
-
-    buf.Format (KFormat, &aDisp);
-
-    if (Csymbian_ua_guiContainerView::RunQry_accept_callL (&buf) == EAknSoftkeyYes) {
-        CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-
-        if (cba != NULL) {
-            TRAPD (result, cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp));
-            cba->DrawDeferred();
-        }
-
-        symbian_ua_answercall();
-    } else {
-        symbian_ua_endcall();
-    }
+	TBuf<512> buf;
+	TPtrC aDisp((const TUint16*)caller_disp);
+	TPtrC aUri((const TUint16*)caller_uri);
+	_LIT(KFormat, "Incoming call from %S, accept?");
+	
+	buf.Format(KFormat, &aDisp);
+	if (Csymbian_ua_guiContainerView::RunQry_accept_callL(&buf) == EAknSoftkeyYes)
+	{
+		CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+		if (cba != NULL) {
+			TRAPD(result, cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp));
+			cba->DrawDeferred();
+		}
+		symbian_ua_answercall();
+	} else {
+		symbian_ua_endcall();	
+	}
 }
 
-void on_call_end (const wchar_t* reason)
+void on_call_end(const wchar_t* reason)
 {
-    TPtrC aReason ( (const TUint16*) reason);
-
-    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-
-    if (cba != NULL) {
-        TRAPD (result, cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStCall));
-        cba->DrawDeferred();
-    }
-
-    Csymbian_ua_guiContainerView::RunNote_infoL (&aReason);
+	TPtrC aReason((const TUint16*)reason);
+	
+	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+	if (cba != NULL) {
+		TRAPD(result, cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStCall));
+		cba->DrawDeferred();
+	}
+	
+	Csymbian_ua_guiContainerView::RunNote_infoL(&aReason);
 }
 
-void on_reg_state (bool success)
+void on_reg_state(bool success)
 {
-    if (success)
-        Csymbian_ua_guiContainerView::RunNote_infoL();
-    else
-        Csymbian_ua_guiContainerView::RunNote_warningL();
+	if (success)
+		Csymbian_ua_guiContainerView::RunNote_infoL();
+	else
+		Csymbian_ua_guiContainerView::RunNote_warningL();
 }
 
-void on_unreg_state (bool success)
+void on_unreg_state(bool success)
 {
-    TPtrC st_success (_L ("Unregistration Success!"));
-    TPtrC st_failed (_L ("Unregistration Failed!"));
-
-    if (success)
-        Csymbian_ua_guiContainerView::RunNote_infoL (&st_success);
-    else
-        Csymbian_ua_guiContainerView::RunNote_warningL (&st_failed);
+	TPtrC st_success(_L("Unregistration Success!"));
+	TPtrC st_failed(_L("Unregistration Failed!"));
+	
+	if (success)
+		Csymbian_ua_guiContainerView::RunNote_infoL(&st_success);
+	else
+		Csymbian_ua_guiContainerView::RunNote_warningL(&st_failed);
 }
 
-void Csymbian_ua_guiContainerView::PutMessage (const TDesC &msg)
-{
-    if (!iSymbian_ua_guiContainer)
-        return;
-
-    CEikEdwin *obj_info = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl (iSymbian_ua_guiContainer->EEd_info);
+void Csymbian_ua_guiContainerView::PutMessage(const TDesC &msg)
+	{
+	if (!iSymbian_ua_guiContainer)
+		return;
+	
+	CEikEdwin *obj_info = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl(iSymbian_ua_guiContainer->EEd_info);
 
-    obj_info->SetTextL (&msg);
-
-    obj_info->DrawDeferred();
-}
+	obj_info->SetTextL(&msg);
+	obj_info->DrawDeferred();
+	}
 
 /**
  * First phase of Symbian two-phase construction. Should not contain any
  * code that could leave.
  */
 Csymbian_ua_guiContainerView::Csymbian_ua_guiContainerView()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    iSymbian_ua_guiContainer = NULL;
-    // ]]] end generated region [Generated Contents]
-
-}
-
-/**
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	iSymbian_ua_guiContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
  * The view's destructor removes the container from the control
  * stack and destroys it.
  */
 Csymbian_ua_guiContainerView::~Csymbian_ua_guiContainerView()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    delete iSymbian_ua_guiContainer;
-    iSymbian_ua_guiContainer = NULL;
-    // ]]] end generated region [Generated Contents]
-
-    symbian_ua_set_info_callback (NULL);
-    myinstance = NULL;
-}
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	delete iSymbian_ua_guiContainer;
+	iSymbian_ua_guiContainer = NULL;
+	// ]]] end generated region [Generated Contents]
+	
+	symbian_ua_set_info_callback(NULL);
+	myinstance = NULL;
+	}
 
 /**
  * Symbian two-phase constructor.
@@ -152,11 +147,11 @@ Csymbian_ua_guiContainerView::~Csymbian_ua_guiContainerView()
  * @return new instance of Csymbian_ua_guiContainerView
  */
 Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewL()
-{
-    Csymbian_ua_guiContainerView* self = Csymbian_ua_guiContainerView::NewLC();
-    CleanupStack::Pop (self);
-    return self;
-}
+	{
+	Csymbian_ua_guiContainerView* self = Csymbian_ua_guiContainerView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
 
 /**
  * Symbian two-phase constructor.
@@ -165,266 +160,259 @@ Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewL()
  * @return new instance of Csymbian_ua_guiContainerView
  */
 Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewLC()
-{
-    Csymbian_ua_guiContainerView* self = new (ELeave) Csymbian_ua_guiContainerView();
-    CleanupStack::PushL (self);
-    self->ConstructL();
-    return self;
-}
+	{
+	Csymbian_ua_guiContainerView* self = new ( ELeave ) Csymbian_ua_guiContainerView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
 
 
 /**
- * Second-phase constructor for view.
+ * Second-phase constructor for view.  
  * Initialize contents from resource.
- */
+ */ 
 void Csymbian_ua_guiContainerView::ConstructL()
-{
-    // [[[ begin generated region: do not modify [Generated Code]
-    BaseConstructL (R_SYMBIAN_UA_GUI_CONTAINER_SYMBIAN_UA_GUI_CONTAINER_VIEW);
-    // ]]] end generated region [Generated Code]
-
-    // add your own initialization code here
-    symbian_ua_info_cb_t cb;
-    Mem::FillZ (&cb, sizeof (cb));
-
-    cb.on_info = &on_info;
-    cb.on_incoming_call = &on_incoming_call;
-    cb.on_reg_state = &on_reg_state;
-    cb.on_unreg_state = &on_unreg_state;
-    cb.on_call_end = &on_call_end;
-
-    symbian_ua_set_info_callback (&cb);
-    myinstance = this;
-}
-
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	BaseConstructL( R_SYMBIAN_UA_GUI_CONTAINER_SYMBIAN_UA_GUI_CONTAINER_VIEW );
+	// ]]] end generated region [Generated Code]
+	
+	// add your own initialization code here
+	symbian_ua_info_cb_t cb;
+	Mem::FillZ(&cb, sizeof(cb));
+
+	cb.on_info = &on_info;
+	cb.on_incoming_call = &on_incoming_call;
+	cb.on_reg_state = &on_reg_state;
+	cb.on_unreg_state = &on_unreg_state;
+	cb.on_call_end = &on_call_end;
+	
+	symbian_ua_set_info_callback(&cb);
+	myinstance = this;
+	}
+	
 /**
  * @return The UID for this view
  */
 TUid Csymbian_ua_guiContainerView::Id() const
-{
-    return TUid::Uid (ESymbian_ua_guiContainerViewId);
-}
+	{
+	return TUid::Uid( ESymbian_ua_guiContainerViewId );
+	}
 
 /**
  * Handle a command for this view (override)
  * @param aCommand command id to be handled
  */
-void Csymbian_ua_guiContainerView::HandleCommandL (TInt aCommand)
-{
-    // [[[ begin generated region: do not modify [Generated Code]
-    TBool commandHandled = EFalse;
-
-    switch (aCommand) {	// code to dispatch to the AknView's menu and CBA commands is generated here
-
-        case ESymbian_ua_guiContainerViewControlPaneRightId:
-            commandHandled = CallSoftKeyPressedL (aCommand);
-            break;
-
-        case ESymbian_ua_guiContainerViewSettingMenuItemCommand:
-            commandHandled = HandleSettingMenuItemSelectedL (aCommand);
-            break;
-
-        default:
-            break;
-    }
-
-
-    if (!commandHandled) {
-
-        if (aCommand == ESymbian_ua_guiContainerViewControlPaneRightId) {
-            AppUi()->HandleCommandL (EEikCmdExit);
-        }
-
-    }
-
-    // ]]] end generated region [Generated Code]
-
-}
+void Csymbian_ua_guiContainerView::HandleCommandL( TInt aCommand )
+	{   
+	// [[[ begin generated region: do not modify [Generated Code]
+	TBool commandHandled = EFalse;
+	switch ( aCommand )
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+	
+		case ESymbian_ua_guiContainerViewControlPaneRightId:
+			commandHandled = CallSoftKeyPressedL( aCommand );
+			break;
+		case ESymbian_ua_guiContainerViewSettingMenuItemCommand:
+			commandHandled = HandleSettingMenuItemSelectedL( aCommand );
+			break;
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+	
+		if ( aCommand == ESymbian_ua_guiContainerViewControlPaneRightId )
+			{
+			AppUi()->HandleCommandL( EEikCmdExit );
+			}
+	
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
 
 /**
- *	Handles user actions during activation of the view,
+ *	Handles user actions during activation of the view, 
  *	such as initializing the content.
  */
-void Csymbian_ua_guiContainerView::DoActivateL (
-    const TVwsViewId& /*aPrevViewId*/,
-    TUid /*aCustomMessageId*/,
-    const TDesC8& /*aCustomMessage*/)
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    SetupStatusPaneL();
-
-    CEikButtonGroupContainer* cba = AppUi()->Cba();
-
-    if (cba != NULL) {
-        cba->MakeVisible (EFalse);
-    }
-
-    if (iSymbian_ua_guiContainer == NULL) {
-        iSymbian_ua_guiContainer = CSymbian_ua_guiContainer::NewL (ClientRect(), NULL, this);
-        iSymbian_ua_guiContainer->SetMopParent (this);
-        AppUi()->AddToStackL (*this, iSymbian_ua_guiContainer);
-    }
-
-    // ]]] end generated region [Generated Contents]
-
-    cba = CEikButtonGroupContainer::Current();
-
-    if (cba != NULL) {
-        if (symbian_ua_anycall())
-            cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp);
-        else
-            cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStCall);
-    }
-
-}
+void Csymbian_ua_guiContainerView::DoActivateL(
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	SetupStatusPaneL();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( EFalse );
+		}
+	
+	if ( iSymbian_ua_guiContainer == NULL )
+		{
+		iSymbian_ua_guiContainer = CSymbian_ua_guiContainer::NewL( ClientRect(), NULL, this );
+		iSymbian_ua_guiContainer->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iSymbian_ua_guiContainer );
+		} 
+	// ]]] end generated region [Generated Contents]
+	
+	cba = CEikButtonGroupContainer::Current();
+	if (cba != NULL) {
+		if (symbian_ua_anycall())
+			cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp);
+		else
+			cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStCall);
+	}
+	
+	}
 
 /**
  */
 void Csymbian_ua_guiContainerView::DoDeactivate()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    CleanupStatusPane();
-
-    CEikButtonGroupContainer* cba = AppUi()->Cba();
-
-    if (cba != NULL) {
-        cba->MakeVisible (ETrue);
-        cba->DrawDeferred();
-    }
-
-    if (iSymbian_ua_guiContainer != NULL) {
-        AppUi()->RemoveFromViewStack (*this, iSymbian_ua_guiContainer);
-        delete iSymbian_ua_guiContainer;
-        iSymbian_ua_guiContainer = NULL;
-    }
-
-    // ]]] end generated region [Generated Contents]
-
-}
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CleanupStatusPane();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( ETrue );
+		cba->DrawDeferred();
+		}
+	
+	if ( iSymbian_ua_guiContainer != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iSymbian_ua_guiContainer );
+		delete iSymbian_ua_guiContainer;
+		iSymbian_ua_guiContainer = NULL;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	}
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiContainerView::SetupStatusPaneL()
-{
-    // reset the context pane
-    TUid contextPaneUid = TUid::Uid (EEikStatusPaneUidContext);
-    CEikStatusPaneBase::TPaneCapabilities subPaneContext =
-        StatusPane()->PaneCapabilities (contextPaneUid);
-
-    if (subPaneContext.IsPresent() && subPaneContext.IsAppOwned()) {
-        CAknContextPane* context = static_cast< CAknContextPane* > (
-                                       StatusPane()->ControlL (contextPaneUid));
-        context->SetPictureToDefaultL();
-    }
-
-    // setup the title pane
-    TUid titlePaneUid = TUid::Uid (EEikStatusPaneUidTitle);
-
-    CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
-        StatusPane()->PaneCapabilities (titlePaneUid);
-
-    if (subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned()) {
-        CAknTitlePane* title = static_cast< CAknTitlePane* > (
-                                   StatusPane()->ControlL (titlePaneUid));
-        TResourceReader reader;
-        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_TITLE_RESOURCE);
-        title->SetFromResourceL (reader);
-        CleanupStack::PopAndDestroy(); // reader internal state
-    }
-
-}
-
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiContainerView::CleanupStatusPane()
-{
-}
-
+	{
+	}
 // ]]] end generated function
 
-/**
+/** 
  * Handle status pane size change for this view (override)
  */
 void Csymbian_ua_guiContainerView::HandleStatusPaneSizeChange()
-{
-    CAknView::HandleStatusPaneSizeChange();
-
-    // this may fail, but we're not able to propagate exceptions here
-    TInt result;
-    TRAP (result, SetupStatusPaneL());
-}
-
-/**
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TInt result;
+	TRAP( result, SetupStatusPaneL() ); 
+	}
+	
+/** 
  * Handle the rightSoftKeyPressed event.
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiContainerView::CallSoftKeyPressedL (TInt aCommand)
-{
-    CEikEdwin *obj_url = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl (iSymbian_ua_guiContainer->EEd_url);
-    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-
-    if (symbian_ua_anycall()) {
-        symbian_ua_endcall();
-        return ETrue;
-    }
-
-    PutMessage (_L ("Making call..."));
-
-    if (cba != NULL) {
-        cba->SetCommandL (aCommand, KStHangUp);
-        cba->DrawDeferred();
-    }
-
-
-    TUint8 url[256];
-
-    TPtr8 aUrl (url, 256);
-
-    HBufC *buf = obj_url->GetTextInHBufL();
-    CnvUtfConverter::ConvertFromUnicodeToUtf8 (aUrl, *buf);
-    delete buf;
-
-    if (symbian_ua_makecall ( (char *) aUrl.PtrZ()) != 0) {
-        PutMessage (_L ("Making call failed!"));
-
-        if (cba != NULL) {
-            cba->SetCommandL (aCommand, KStCall);
-            cba->DrawDeferred();
-        }
-    }
-
-    return ETrue;
-}
-
-/**
+TBool Csymbian_ua_guiContainerView::CallSoftKeyPressedL( TInt aCommand )
+	{
+	CEikEdwin *obj_url = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl(iSymbian_ua_guiContainer->EEd_url);
+	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+	
+	if (symbian_ua_anycall()) {
+		symbian_ua_endcall();
+		return ETrue;
+	}
+
+	PutMessage(_L("Making call..."));
+	if ( cba != NULL ) {
+		cba->SetCommandL(aCommand, KStHangUp);
+		cba->DrawDeferred();
+	}
+	
+
+	TUint8 url[256];
+	TPtr8 aUrl(url, 256);
+
+	HBufC *buf = obj_url->GetTextInHBufL();
+	CnvUtfConverter::ConvertFromUnicodeToUtf8(aUrl, *buf);
+	delete buf;
+
+	if (symbian_ua_makecall((char *)aUrl.PtrZ()) != 0) {
+		PutMessage(_L("Making call failed!"));
+		if ( cba != NULL ) {
+			cba->SetCommandL(aCommand, KStCall);
+			cba->DrawDeferred();
+		}
+	}
+	
+	return ETrue;
+	}
+				
+/** 
  * Handle the selected event.
  * @param aCommand the command id invoked
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiContainerView::HandleSettingMenuItemSelectedL (TInt aCommand)
-{
-    AppUi()->ActivateLocalViewL (TUid::Uid (ESymbian_ua_guiSettingItemListViewId));
-    return ETrue;
-}
-
+TBool Csymbian_ua_guiContainerView::HandleSettingMenuItemSelectedL( TInt aCommand )
+	{
+	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiSettingItemListViewId));
+	return ETrue;
+	}
+				
 // [[[ begin generated function: do not modify
 /**
  * Show the popup note for note_error
  * @param aOverrideText optional override text
  */
-void Csymbian_ua_guiContainerView::RunNote_errorL (const TDesC* aOverrideText)
-{
-    CAknErrorNote* note = new (ELeave) CAknErrorNote();
-
-    if (aOverrideText == NULL) {
-        HBufC* noteText = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_NOTE_ERROR);
-        note->ExecuteLD (*noteText);
-        CleanupStack::PopAndDestroy (noteText);
-    } else {
-        note->ExecuteLD (*aOverrideText);
-    }
-}
-
+void Csymbian_ua_guiContainerView::RunNote_errorL( const TDesC* aOverrideText )
+	{
+	CAknErrorNote* note = new ( ELeave ) CAknErrorNote();
+	if ( aOverrideText == NULL )
+		{
+		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_ERROR );
+		note->ExecuteLD( *noteText );
+		CleanupStack::PopAndDestroy( noteText );
+		}
+	else
+		{
+		note->ExecuteLD( *aOverrideText );
+		}
+	}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -432,19 +420,20 @@ void Csymbian_ua_guiContainerView::RunNote_errorL (const TDesC* aOverrideText)
  * Show the popup note for note_info
  * @param aOverrideText optional override text
  */
-void Csymbian_ua_guiContainerView::RunNote_infoL (const TDesC* aOverrideText)
-{
-    CAknInformationNote* note = new (ELeave) CAknInformationNote();
-
-    if (aOverrideText == NULL) {
-        HBufC* noteText = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_NOTE_INFO);
-        note->ExecuteLD (*noteText);
-        CleanupStack::PopAndDestroy (noteText);
-    } else {
-        note->ExecuteLD (*aOverrideText);
-    }
-}
-
+void Csymbian_ua_guiContainerView::RunNote_infoL( const TDesC* aOverrideText )
+	{
+	CAknInformationNote* note = new ( ELeave ) CAknInformationNote();
+	if ( aOverrideText == NULL )
+		{
+		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_INFO );
+		note->ExecuteLD( *noteText );
+		CleanupStack::PopAndDestroy( noteText );
+		}
+	else
+		{
+		note->ExecuteLD( *aOverrideText );
+		}
+	}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -452,19 +441,20 @@ void Csymbian_ua_guiContainerView::RunNote_infoL (const TDesC* aOverrideText)
  * Show the popup note for note_warning
  * @param aOverrideText optional override text
  */
-void Csymbian_ua_guiContainerView::RunNote_warningL (const TDesC* aOverrideText)
-{
-    CAknWarningNote* note = new (ELeave) CAknWarningNote();
-
-    if (aOverrideText == NULL) {
-        HBufC* noteText = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_NOTE_WARNING);
-        note->ExecuteLD (*noteText);
-        CleanupStack::PopAndDestroy (noteText);
-    } else {
-        note->ExecuteLD (*aOverrideText);
-    }
-}
-
+void Csymbian_ua_guiContainerView::RunNote_warningL( const TDesC* aOverrideText )
+	{
+	CAknWarningNote* note = new ( ELeave ) CAknWarningNote();
+	if ( aOverrideText == NULL )
+		{
+		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_WARNING );
+		note->ExecuteLD( *noteText );
+		CleanupStack::PopAndDestroy( noteText );
+		}
+	else
+		{
+		note->ExecuteLD( *aOverrideText );
+		}
+	}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -473,17 +463,16 @@ void Csymbian_ua_guiContainerView::RunNote_warningL (const TDesC* aOverrideText)
  * @param aOverrideText optional override text
  * @return EAknSoftkeyYes (left soft key id) or 0
  */
-TInt Csymbian_ua_guiContainerView::RunQry_accept_callL (const TDesC* aOverrideText)
-{
-
-    CAknQueryDialog* queryDialog = CAknQueryDialog::NewL();
-
-    if (aOverrideText != NULL) {
-        queryDialog->SetPromptL (*aOverrideText);
-    }
-
-    return queryDialog->ExecuteLD (R_SYMBIAN_UA_GUI_CONTAINER_QRY_ACCEPT_CALL);
-}
-
+TInt Csymbian_ua_guiContainerView::RunQry_accept_callL( const TDesC* aOverrideText )
+	{
+				
+	CAknQueryDialog* queryDialog = CAknQueryDialog::NewL();	
+	
+	if ( aOverrideText != NULL )
+		{
+		queryDialog->SetPromptL( *aOverrideText );
+		}
+	return queryDialog->ExecuteLD( R_SYMBIAN_UA_GUI_CONTAINER_QRY_ACCEPT_CALL );
+	}
 // ]]] end generated function
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
index 209c9ebcec..8eb54f8d74 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiDocument.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated User Includes]
@@ -15,19 +15,19 @@
  * @brief Constructs the document class for the application.
  * @param anApplication the application instance
  */
-Csymbian_ua_guiDocument::Csymbian_ua_guiDocument (CEikApplication& anApplication)
-        : CAknDocument (anApplication)
-{
-}
+Csymbian_ua_guiDocument::Csymbian_ua_guiDocument( CEikApplication& anApplication )
+	: CAknDocument( anApplication )
+	{
+	}
 
 /**
- * @brief Completes the second phase of Symbian object construction.
- * Put initialization code that could leave here.
- */
+ * @brief Completes the second phase of Symbian object construction. 
+ * Put initialization code that could leave here.  
+ */ 
 void Csymbian_ua_guiDocument::ConstructL()
-{
-}
-
+	{
+	}
+	
 /**
  * Symbian OS two-phase constructor.
  *
@@ -37,21 +37,21 @@ void Csymbian_ua_guiDocument::ConstructL()
  * @param aApp the application instance
  * @return the new Csymbian_ua_guiDocument
  */
-Csymbian_ua_guiDocument* Csymbian_ua_guiDocument::NewL (CEikApplication& aApp)
-{
-    Csymbian_ua_guiDocument* self = new (ELeave) Csymbian_ua_guiDocument (aApp);
-    CleanupStack::PushL (self);
-    self->ConstructL();
-    CleanupStack::Pop (self);
-    return self;
-}
+Csymbian_ua_guiDocument* Csymbian_ua_guiDocument::NewL( CEikApplication& aApp )
+	{
+	Csymbian_ua_guiDocument* self = new ( ELeave ) Csymbian_ua_guiDocument( aApp );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
 
 /**
  * @brief Creates the application UI object for this document.
  * @return the new instance
- */
+ */	
 CEikAppUi* Csymbian_ua_guiDocument::CreateAppUiL()
-{
-    return new (ELeave) Csymbian_ua_guiAppUi;
-}
-
+	{
+	return new ( ELeave ) Csymbian_ua_guiAppUi;
+	}
+				
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
index 15fba37ca3..27f3d6e5ce 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiSettingItemList.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 
@@ -22,7 +22,7 @@
 #include <aknpopupfieldtext.h>
 #include <eikappui.h>
 #include <aknviewappui.h>
-#include <akntextsettingpage.h>
+#include <akntextsettingpage.h> 
 #include <symbian_ua_gui.rsg>
 // ]]] end generated region [Generated System Includes]
 
@@ -43,8 +43,8 @@
 // ]]] end generated region [Generated Constants]
 
 
-_LIT (KtxDicFileName			,"settings.ini");
-
+_LIT(KtxDicFileName			,"settings.ini" );
+ 
 const TInt KRegistrar		= 2;
 const TInt KUsername		= 3;
 const TInt KPassword		= 4;
@@ -55,36 +55,36 @@ const TInt KIce				= 7;
 /**
  * Construct the CSymbian_ua_guiSettingItemList instance
  * @param aCommandObserver command observer
- */
-CSymbian_ua_guiSettingItemList::CSymbian_ua_guiSettingItemList (
-    TSymbian_ua_guiSettingItemListSettings& aSettings,
-    MEikCommandObserver* aCommandObserver)
-        : iSettings (aSettings), iCommandObserver (aCommandObserver)
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
-
-/**
+ */ 
+CSymbian_ua_guiSettingItemList::CSymbian_ua_guiSettingItemList( 
+		TSymbian_ua_guiSettingItemListSettings& aSettings, 
+		MEikCommandObserver* aCommandObserver )
+	: iSettings( aSettings ), iCommandObserver( aCommandObserver )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
  * Destroy any instance variables
  */
 CSymbian_ua_guiSettingItemList::~CSymbian_ua_guiSettingItemList()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
 
 /**
  * Handle system notification that the container's size has changed.
  */
 void CSymbian_ua_guiSettingItemList::SizeChanged()
-{
-    if (ListBox()) {
-        ListBox()->SetRect (Rect());
-    }
-}
+	{
+	if ( ListBox() ) 
+		{
+		ListBox()->SetRect( Rect() );
+		}
+	}
 
 /**
  * Create one setting item at a time, identified by id.
@@ -93,73 +93,73 @@ void CSymbian_ua_guiSettingItemList::SizeChanged()
  * a reference to the underlying data, which EditItemL() uses
  * to edit and store the value.
  */
-CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL (TInt aId)
-{
-    switch (aId) {
-            // [[[ begin generated region: do not modify [Initializers]
-
-        case ESymbian_ua_guiSettingItemListViewEd_registrar: {
-            CAknTextSettingItem* item = new (ELeave)
-            CAknTextSettingItem (
-                aId,
-                iSettings.Ed_registrar());
-            item->SetSettingPageFlags (CAknTextSettingPage::EZeroLengthAllowed);
-            return item;
-        }
-
-        case ESymbian_ua_guiSettingItemListViewEd_user: {
-            CAknTextSettingItem* item = new (ELeave)
-            CAknTextSettingItem (
-                aId,
-                iSettings.Ed_user());
-            item->SetSettingPageFlags (CAknTextSettingPage::EZeroLengthAllowed);
-            return item;
-        }
-
-        case ESymbian_ua_guiSettingItemListViewEd_password: {
-            CAknPasswordSettingItem* item = new (ELeave)
-            CAknPasswordSettingItem (
-                aId,
-                CAknPasswordSettingItem::EAlpha,
-                iSettings.Ed_password());
-            item->SetSettingPageFlags (CAknTextSettingPage::EZeroLengthAllowed);
-            return item;
-        }
-
-        case ESymbian_ua_guiSettingItemListViewB_srtp: {
-            CAknBinaryPopupSettingItem* item = new (ELeave)
-            CAknBinaryPopupSettingItem (
-                aId,
-                iSettings.B_srtp());
-            item->SetHidden (ETrue);
-            return item;
-        }
-
-        case ESymbian_ua_guiSettingItemListViewB_ice: {
-            CAknBinaryPopupSettingItem* item = new (ELeave)
-            CAknBinaryPopupSettingItem (
-                aId,
-                iSettings.B_ice());
-            item->SetHidden (ETrue);
-            return item;
-        }
-
-        case ESymbian_ua_guiSettingItemListViewEd_stun_server: {
-            CAknTextSettingItem* item = new (ELeave)
-            CAknTextSettingItem (
-                aId,
-                iSettings.Ed_stun_server());
-            item->SetHidden (ETrue);
-            return item;
-        }
-
-        // ]]] end generated region [Initializers]
-
-    }
-
-    return NULL;
-}
-
+CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL( TInt aId )
+	{
+	switch ( aId )
+		{
+	// [[[ begin generated region: do not modify [Initializers]
+		case ESymbian_ua_guiSettingItemListViewEd_registrar:
+			{			
+			CAknTextSettingItem* item = new ( ELeave ) 
+				CAknTextSettingItem( 
+					aId,
+					iSettings.Ed_registrar() );
+			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewEd_user:
+			{			
+			CAknTextSettingItem* item = new ( ELeave ) 
+				CAknTextSettingItem( 
+					aId,
+					iSettings.Ed_user() );
+			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewEd_password:
+			{			
+			CAknPasswordSettingItem* item = new ( ELeave ) 
+				CAknPasswordSettingItem( 
+					aId,
+					CAknPasswordSettingItem::EAlpha,
+					iSettings.Ed_password() );
+			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewB_srtp:
+			{			
+			CAknBinaryPopupSettingItem* item = new ( ELeave ) 
+				CAknBinaryPopupSettingItem( 
+					aId,
+					iSettings.B_srtp() );
+			item->SetHidden( ETrue ); 
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewB_ice:
+			{			
+			CAknBinaryPopupSettingItem* item = new ( ELeave ) 
+				CAknBinaryPopupSettingItem( 
+					aId,
+					iSettings.B_ice() );
+			item->SetHidden( ETrue ); 
+			return item;
+			}
+		case ESymbian_ua_guiSettingItemListViewEd_stun_server:
+			{			
+			CAknTextSettingItem* item = new ( ELeave ) 
+				CAknTextSettingItem( 
+					aId,
+					iSettings.Ed_stun_server() );
+			item->SetHidden( ETrue ); 
+			return item;
+			}
+	// ]]] end generated region [Initializers]
+	
+		}
+		
+	return NULL;
+	}
+	
 /**
  * Edit the setting item identified by the given id and store
  * the changes into the store.
@@ -168,256 +168,256 @@ CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL (TInt aId)
  *	always show the edit page and interactively edit the item;
  *	false: change the item in place if possible, else show the edit page
  */
-void CSymbian_ua_guiSettingItemList::EditItemL (TInt aIndex, TBool aCalledFromMenu)
-{
-    CAknSettingItem* item = (*SettingItemArray()) [aIndex];
-
-    switch (item->Identifier()) {
-            // [[[ begin generated region: do not modify [Editing Started Invoker]
-            // ]]] end generated region [Editing Started Invoker]
-
-    }
-
-    CAknSettingItemList::EditItemL (aIndex, aCalledFromMenu);
-
-    TBool storeValue = ETrue;
-
-    switch (item->Identifier()) {
-            // [[[ begin generated region: do not modify [Editing Stopped Invoker]
-            // ]]] end generated region [Editing Stopped Invoker]
-
-    }
-
-    if (storeValue) {
-        item->StoreL();
-        SaveSettingValuesL();
-    }
-}
-
+void CSymbian_ua_guiSettingItemList::EditItemL ( TInt aIndex, TBool aCalledFromMenu )
+	{
+	CAknSettingItem* item = ( *SettingItemArray() )[aIndex];
+	switch ( item->Identifier() )
+		{
+	// [[[ begin generated region: do not modify [Editing Started Invoker]
+	// ]]] end generated region [Editing Started Invoker]
+	
+		}
+	
+	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+	
+	TBool storeValue = ETrue;
+	switch ( item->Identifier() )
+		{
+	// [[[ begin generated region: do not modify [Editing Stopped Invoker]
+	// ]]] end generated region [Editing Stopped Invoker]
+	
+		}
+		
+	if ( storeValue )
+		{
+		item->StoreL();
+		SaveSettingValuesL();
+		}	
+	}
 /**
  *	Handle the "Change" option on the Options menu.  This is an
  *	alternative to the Selection key that forces the settings page
  *	to come up rather than changing the value in place (if possible).
  */
 void CSymbian_ua_guiSettingItemList::ChangeSelectedItemL()
-{
-    if (ListBox()->CurrentItemIndex() >= 0) {
-        EditItemL (ListBox()->CurrentItemIndex(), ETrue);
-    }
-}
+	{
+	if ( ListBox()->CurrentItemIndex() >= 0 )
+		{
+		EditItemL( ListBox()->CurrentItemIndex(), ETrue );
+		}
+	}
 
 /**
  *	Load the initial contents of the setting items.  By default,
  *	the setting items are populated with the default values from
  * 	the design.  You can override those values here.
  *	<p>
- *	Note: this call alone does not update the UI.
+ *	Note: this call alone does not update the UI.  
  *	LoadSettingsL() must be called afterwards.
  */
 void CSymbian_ua_guiSettingItemList::LoadSettingValuesL()
-{
-    // load values into iSettings
+	{
+	// load values into iSettings
 
-    TFileName path;
-    TFileName pathWithoutDrive;
-    CEikonEnv::Static()->FsSession().PrivatePath (pathWithoutDrive);
+	TFileName path;
+	TFileName pathWithoutDrive;
+	CEikonEnv::Static()->FsSession().PrivatePath( pathWithoutDrive );
 
-    // Extract drive letter into appDrive:
+	// Extract drive letter into appDrive:
 #ifdef __WINS__
-    path.Copy (_L ("c:"));
+	path.Copy( _L("c:") );
 #else
-    RProcess process;
-    path.Copy (process.FileName().Left (2));
+	RProcess process;
+	path.Copy( process.FileName().Left(2) );
 #endif
 
-    path.Append (pathWithoutDrive);
-    path.Append (KtxDicFileName);
-
-    TFindFile AufFolder (CCoeEnv::Static()->FsSession());
-
-    if (KErrNone == AufFolder.FindByDir (path, KNullDesC)) {
-        CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC (CCoeEnv::Static()->FsSession(),AufFolder.File(), TUid::Uid (1));
-        TUid FileUid;
-
-        FileUid.iUid = KRegistrar;
-
-        if (MyDStore->IsPresentL (FileUid)) {
-            RDictionaryReadStream in;
-            in.OpenLC (*MyDStore,FileUid);
-            in >> iSettings.Ed_registrar();
-            CleanupStack::PopAndDestroy (1);// in
-        }
-
-        FileUid.iUid = KUsername;
-
-        if (MyDStore->IsPresentL (FileUid)) {
-            RDictionaryReadStream in;
-            in.OpenLC (*MyDStore,FileUid);
-            in >> iSettings.Ed_user();
-            CleanupStack::PopAndDestroy (1);// in
-        }
-
-        FileUid.iUid = KPassword;
-
-        if (MyDStore->IsPresentL (FileUid)) {
-            RDictionaryReadStream in;
-            in.OpenLC (*MyDStore,FileUid);
-            in >> iSettings.Ed_password();
-            CleanupStack::PopAndDestroy (1);// in
-        }
-
-        FileUid.iUid = KStunServer;
-
-        if (MyDStore->IsPresentL (FileUid)) {
-            RDictionaryReadStream in;
-            in.OpenLC (*MyDStore,FileUid);
-            in >> iSettings.Ed_stun_server();
-            CleanupStack::PopAndDestroy (1);// in
-        }
-
-        FileUid.iUid = KSrtp;
-
-        if (MyDStore->IsPresentL (FileUid)) {
-            RDictionaryReadStream in;
-            in.OpenLC (*MyDStore,FileUid);
-            iSettings.SetB_srtp ( (TBool) in.ReadInt32L());
-            CleanupStack::PopAndDestroy (1);// in
-        }
-
-        FileUid.iUid = KIce;
-
-        if (MyDStore->IsPresentL (FileUid)) {
-            RDictionaryReadStream in;
-            in.OpenLC (*MyDStore,FileUid);
-            iSettings.SetB_ice ( (TBool) in.ReadInt32L());
-            CleanupStack::PopAndDestroy (1);// in
-        }
-
-        CleanupStack::PopAndDestroy (1);// Store
-    }
-
-}
-
+	path.Append( pathWithoutDrive );
+	path.Append( KtxDicFileName );
+	
+	TFindFile AufFolder(CCoeEnv::Static()->FsSession());
+	if(KErrNone == AufFolder.FindByDir(path, KNullDesC))
+	{
+		CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC(CCoeEnv::Static()->FsSession(),AufFolder.File(), TUid::Uid(1));
+		TUid FileUid;
+		
+		FileUid.iUid = KRegistrar;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_registrar();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+			
+		FileUid.iUid = KUsername;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_user();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		FileUid.iUid = KPassword;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_password();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		FileUid.iUid = KStunServer;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			in >> iSettings.Ed_stun_server();
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		FileUid.iUid = KSrtp;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			iSettings.SetB_srtp((TBool)in.ReadInt32L());
+			CleanupStack::PopAndDestroy(1);// in
+		}
+		
+		FileUid.iUid = KIce;
+		if(MyDStore->IsPresentL(FileUid))
+		{
+			RDictionaryReadStream in;
+			in.OpenLC(*MyDStore,FileUid);
+			iSettings.SetB_ice((TBool)in.ReadInt32L());
+			CleanupStack::PopAndDestroy(1);// in
+		}
+
+		CleanupStack::PopAndDestroy(1);// Store		
+	}
+
+	}
+	
 /**
  *	Save the contents of the setting items.  Note, this is called
  *	whenever an item is changed and stored to the model, so it
  *	may be called multiple times or not at all.
  */
 void CSymbian_ua_guiSettingItemList::SaveSettingValuesL()
-{
-    // store values from iSettings
+	{
+	// store values from iSettings
 
-    TFileName path;
-    TFileName pathWithoutDrive;
-    CEikonEnv::Static()->FsSession().PrivatePath (pathWithoutDrive);
+	TFileName path;
+	TFileName pathWithoutDrive;
+	CEikonEnv::Static()->FsSession().PrivatePath( pathWithoutDrive );
 
-    // Extract drive letter into appDrive:
+	// Extract drive letter into appDrive:
 #ifdef __WINS__
-    path.Copy (_L ("c:"));
+	path.Copy( _L("c:") );
 #else
-    RProcess process;
-    path.Copy (process.FileName().Left (2));
-
-    if (path.Compare (_L ("c")) || path.Compare (_L ("C")))
-        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveC);
-    else if (path.Compare (_L ("e")) || path.Compare (_L ("E")))
-        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveE);
-
+	RProcess process;
+	path.Copy( process.FileName().Left(2) );
+	
+	if(path.Compare(_L("c")) || path.Compare(_L("C")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveC);
+	else if(path.Compare(_L("e")) || path.Compare(_L("E")))
+		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveE);	
 #endif
 
-    path.Append (pathWithoutDrive);
-
-    path.Append (KtxDicFileName);
-
-    TFindFile AufFolder (CCoeEnv::Static()->FsSession());
-
-    if (KErrNone == AufFolder.FindByDir (path, KNullDesC)) {
-        User::LeaveIfError (CCoeEnv::Static()->FsSession().Delete (AufFolder.File()));
-    }
-
-    CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC (CCoeEnv::Static()->FsSession(),path, TUid::Uid (1));
-
-    TUid FileUid = {0x0};
-
-    FileUid.iUid = KRegistrar;
-    RDictionaryWriteStream out1;
-    out1.AssignLC (*MyDStore,FileUid);
-    out1 << iSettings.Ed_registrar();
-    out1.CommitL();
-    CleanupStack::PopAndDestroy (1);// out2
-
-    FileUid.iUid = KUsername;
-    RDictionaryWriteStream out2;
-    out2.AssignLC (*MyDStore,FileUid);
-    out2 << iSettings.Ed_user();
-    out2.CommitL();
-    CleanupStack::PopAndDestroy (1);// out2
-
-    FileUid.iUid = KPassword;
-    RDictionaryWriteStream out3;
-    out3.AssignLC (*MyDStore,FileUid);
-    out3 << iSettings.Ed_password();
-    out3.CommitL();
-    CleanupStack::PopAndDestroy (1);// out2
-
-    FileUid.iUid = KStunServer;
-    RDictionaryWriteStream out4;
-    out4.AssignLC (*MyDStore,FileUid);
-    out4 << iSettings.Ed_stun_server();
-    out4.CommitL();
-    CleanupStack::PopAndDestroy (1);// out2
-
-    FileUid.iUid = KSrtp;
-    RDictionaryWriteStream out5;
-    out5.AssignLC (*MyDStore,FileUid);
-    out5.WriteInt32L (iSettings.B_srtp());
-    out5.CommitL();
-    CleanupStack::PopAndDestroy (1);// out1
-
-    FileUid.iUid = KIce;
-    RDictionaryWriteStream out6;
-    out6.AssignLC (*MyDStore,FileUid);
-    out6.WriteInt32L (iSettings.B_ice());
-    out6.CommitL();
-    CleanupStack::PopAndDestroy (1);// out1
-
-    MyDStore->CommitL();
-    CleanupStack::PopAndDestroy (1);// Store
-
-}
-
-
-/**
+	path.Append( pathWithoutDrive );
+	path.Append( KtxDicFileName );
+	
+	TFindFile AufFolder(CCoeEnv::Static()->FsSession());
+	if(KErrNone == AufFolder.FindByDir(path, KNullDesC))
+	{
+		User::LeaveIfError(CCoeEnv::Static()->FsSession().Delete(AufFolder.File()));
+	}
+ 
+	CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC(CCoeEnv::Static()->FsSession(),path, TUid::Uid(1));
+ 
+	TUid FileUid = {0x0};
+		
+	FileUid.iUid = KRegistrar;
+	RDictionaryWriteStream out1;
+	out1.AssignLC(*MyDStore,FileUid);
+	out1 << iSettings.Ed_registrar();
+	out1.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KUsername;
+	RDictionaryWriteStream out2;
+	out2.AssignLC(*MyDStore,FileUid);
+	out2 << iSettings.Ed_user();
+	out2.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KPassword;
+	RDictionaryWriteStream out3;
+	out3.AssignLC(*MyDStore,FileUid);
+	out3 << iSettings.Ed_password();
+	out3.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KStunServer;
+	RDictionaryWriteStream out4;
+	out4.AssignLC(*MyDStore,FileUid);
+	out4 << iSettings.Ed_stun_server();
+	out4.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out2	
+	
+	FileUid.iUid = KSrtp;
+	RDictionaryWriteStream out5;
+	out5.AssignLC(*MyDStore,FileUid);
+	out5.WriteInt32L(iSettings.B_srtp());
+	out5.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out1
+	
+	FileUid.iUid = KIce;
+	RDictionaryWriteStream out6;
+	out6.AssignLC(*MyDStore,FileUid);
+	out6.WriteInt32L(iSettings.B_ice());
+	out6.CommitL(); 	
+	CleanupStack::PopAndDestroy(1);// out1
+	 
+	MyDStore->CommitL();
+	CleanupStack::PopAndDestroy(1);// Store
+
+	}
+
+
+/** 
  * Handle global resource changes, such as scalable UI or skin events (override)
  */
-void CSymbian_ua_guiSettingItemList::HandleResourceChange (TInt aType)
-{
-    CAknSettingItemList::HandleResourceChange (aType);
-    SetRect (iAvkonViewAppUi->View (TUid::Uid (ESymbian_ua_guiSettingItemListViewId))->ClientRect());
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
-
-/**
+void CSymbian_ua_guiSettingItemList::HandleResourceChange( TInt aType )
+	{
+	CAknSettingItemList::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ESymbian_ua_guiSettingItemListViewId ) )->ClientRect() );
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+				
+/** 
  * Handle key event (override)
  * @param aKeyEvent key event
  * @param aType event code
  * @return EKeyWasConsumed if the event was handled, else EKeyWasNotConsumed
  */
-TKeyResponse CSymbian_ua_guiSettingItemList::OfferKeyEventL (
-    const TKeyEvent& aKeyEvent,
-    TEventCode aType)
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-    if (aKeyEvent.iCode == EKeyLeftArrow
-            || aKeyEvent.iCode == EKeyRightArrow) {
-        // allow the tab control to get the arrow keys
-        return EKeyWasNotConsumed;
-    }
-
-    return CAknSettingItemList::OfferKeyEventL (aKeyEvent, aType);
-}
-
+TKeyResponse CSymbian_ua_guiSettingItemList::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	if ( aKeyEvent.iCode == EKeyLeftArrow 
+		|| aKeyEvent.iCode == EKeyRightArrow )
+		{
+		// allow the tab control to get the arrow keys
+		return EKeyWasNotConsumed;
+		}
+	
+	return CAknSettingItemList::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
index 2a158b4bb5..243ff994c5 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiSettingItemListView.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description :
+ Description : 
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -36,22 +36,21 @@
  * code that could leave.
  */
 Csymbian_ua_guiSettingItemListView::Csymbian_ua_guiSettingItemListView()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
-
-/**
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
+/** 
  * The view's destructor removes the container from the control
  * stack and destroys it.
  */
 Csymbian_ua_guiSettingItemListView::~Csymbian_ua_guiSettingItemListView()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    // ]]] end generated region [Generated Contents]
-
-}
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	// ]]] end generated region [Generated Contents]
+	
+	}
 
 /**
  * Symbian two-phase constructor.
@@ -60,11 +59,11 @@ Csymbian_ua_guiSettingItemListView::~Csymbian_ua_guiSettingItemListView()
  * @return new instance of Csymbian_ua_guiSettingItemListView
  */
 Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewL()
-{
-    Csymbian_ua_guiSettingItemListView* self = Csymbian_ua_guiSettingItemListView::NewLC();
-    CleanupStack::Pop (self);
-    return self;
-}
+	{
+	Csymbian_ua_guiSettingItemListView* self = Csymbian_ua_guiSettingItemListView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
 
 /**
  * Symbian two-phase constructor.
@@ -73,219 +72,214 @@ Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewL()
  * @return new instance of Csymbian_ua_guiSettingItemListView
  */
 Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewLC()
-{
-    Csymbian_ua_guiSettingItemListView* self = new (ELeave) Csymbian_ua_guiSettingItemListView();
-    CleanupStack::PushL (self);
-    self->ConstructL();
-    return self;
-}
+	{
+	Csymbian_ua_guiSettingItemListView* self = new ( ELeave ) Csymbian_ua_guiSettingItemListView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
 
 
 /**
- * Second-phase constructor for view.
+ * Second-phase constructor for view.  
  * Initialize contents from resource.
- */
+ */ 
 void Csymbian_ua_guiSettingItemListView::ConstructL()
-{
-    // [[[ begin generated region: do not modify [Generated Code]
-    BaseConstructL (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_VIEW);
-    // ]]] end generated region [Generated Code]
-
-    // add your own initialization code here
-}
-
+	{
+	// [[[ begin generated region: do not modify [Generated Code]
+	BaseConstructL( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_VIEW );
+	// ]]] end generated region [Generated Code]
+	
+	// add your own initialization code here
+	}
+	
 /**
  * @return The UID for this view
  */
 TUid Csymbian_ua_guiSettingItemListView::Id() const
-{
-    return TUid::Uid (ESymbian_ua_guiSettingItemListViewId);
-}
+	{
+	return TUid::Uid( ESymbian_ua_guiSettingItemListViewId );
+	}
 
 /**
  * Handle a command for this view (override)
  * @param aCommand command id to be handled
  */
-void Csymbian_ua_guiSettingItemListView::HandleCommandL (TInt aCommand)
-{
-    // [[[ begin generated region: do not modify [Generated Code]
-    TBool commandHandled = EFalse;
-
-    switch (aCommand) {	// code to dispatch to the AknView's menu and CBA commands is generated here
-
-        case EAknSoftkeySave:
-            commandHandled = HandleControlPaneRightSoftKeyPressedL (aCommand);
-            break;
-
-        case ESymbian_ua_guiSettingItemListViewMenuItem1Command:
-            commandHandled = HandleChangeSelectedSettingItemL (aCommand);
-            break;
-
-        default:
-            break;
-    }
-
-
-    if (!commandHandled) {
-
-    }
-
-    // ]]] end generated region [Generated Code]
-
-}
+void Csymbian_ua_guiSettingItemListView::HandleCommandL( TInt aCommand )
+	{   
+	// [[[ begin generated region: do not modify [Generated Code]
+	TBool commandHandled = EFalse;
+	switch ( aCommand )
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+	
+		case EAknSoftkeySave:
+			commandHandled = HandleControlPaneRightSoftKeyPressedL( aCommand );
+			break;
+		case ESymbian_ua_guiSettingItemListViewMenuItem1Command:
+			commandHandled = HandleChangeSelectedSettingItemL( aCommand );
+			break;
+		default:
+			break;
+		}
+	
+		
+	if ( !commandHandled ) 
+		{
+	
+		}
+	// ]]] end generated region [Generated Code]
+	
+	}
 
 /**
- *	Handles user actions during activation of the view,
+ *	Handles user actions during activation of the view, 
  *	such as initializing the content.
  */
-void Csymbian_ua_guiSettingItemListView::DoActivateL (
-    const TVwsViewId& /*aPrevViewId*/,
-    TUid /*aCustomMessageId*/,
-    const TDesC8& /*aCustomMessage*/)
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    SetupStatusPaneL();
-
-    CEikButtonGroupContainer* cba = AppUi()->Cba();
-
-    if (cba != NULL) {
-        cba->MakeVisible (EFalse);
-    }
-
-    if (iSymbian_ua_guiSettingItemList == NULL) {
-        iSettings = TSymbian_ua_guiSettingItemListSettings::NewL();
-        iSymbian_ua_guiSettingItemList = new (ELeave) CSymbian_ua_guiSettingItemList (*iSettings, this);
-        iSymbian_ua_guiSettingItemList->SetMopParent (this);
-        iSymbian_ua_guiSettingItemList->ConstructFromResourceL (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST);
-        iSymbian_ua_guiSettingItemList->ActivateL();
-        iSymbian_ua_guiSettingItemList->LoadSettingValuesL();
-        iSymbian_ua_guiSettingItemList->LoadSettingsL();
-        AppUi()->AddToStackL (*this, iSymbian_ua_guiSettingItemList);
-    }
-
-    // ]]] end generated region [Generated Contents]
-
-}
+void Csymbian_ua_guiSettingItemListView::DoActivateL(
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	SetupStatusPaneL();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( EFalse );
+		}
+	
+	if ( iSymbian_ua_guiSettingItemList == NULL )
+		{
+		iSettings = TSymbian_ua_guiSettingItemListSettings::NewL();
+		iSymbian_ua_guiSettingItemList = new ( ELeave ) CSymbian_ua_guiSettingItemList( *iSettings, this );
+		iSymbian_ua_guiSettingItemList->SetMopParent( this );
+		iSymbian_ua_guiSettingItemList->ConstructFromResourceL( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST );
+		iSymbian_ua_guiSettingItemList->ActivateL();
+		iSymbian_ua_guiSettingItemList->LoadSettingValuesL();
+		iSymbian_ua_guiSettingItemList->LoadSettingsL();
+		AppUi()->AddToStackL( *this, iSymbian_ua_guiSettingItemList );
+		} 
+	// ]]] end generated region [Generated Contents]
+	
+	}
 
 /**
  */
 void Csymbian_ua_guiSettingItemListView::DoDeactivate()
-{
-    // [[[ begin generated region: do not modify [Generated Contents]
-    CleanupStatusPane();
-
-    CEikButtonGroupContainer* cba = AppUi()->Cba();
-
-    if (cba != NULL) {
-        cba->MakeVisible (ETrue);
-        cba->DrawDeferred();
-    }
-
-    if (iSymbian_ua_guiSettingItemList != NULL) {
-        AppUi()->RemoveFromStack (iSymbian_ua_guiSettingItemList);
-        delete iSymbian_ua_guiSettingItemList;
-        iSymbian_ua_guiSettingItemList = NULL;
-        delete iSettings;
-        iSettings = NULL;
-    }
-
-    // ]]] end generated region [Generated Contents]
-
-}
+	{
+	// [[[ begin generated region: do not modify [Generated Contents]
+	CleanupStatusPane();
+	
+	CEikButtonGroupContainer* cba = AppUi()->Cba();
+	if ( cba != NULL ) 
+		{
+		cba->MakeVisible( ETrue );
+		cba->DrawDeferred();
+		}
+	
+	if ( iSymbian_ua_guiSettingItemList != NULL )
+		{
+		AppUi()->RemoveFromStack( iSymbian_ua_guiSettingItemList );
+		delete iSymbian_ua_guiSettingItemList;
+		iSymbian_ua_guiSettingItemList = NULL;
+		delete iSettings;
+		iSettings = NULL;
+		}
+	// ]]] end generated region [Generated Contents]
+	
+	}
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiSettingItemListView::SetupStatusPaneL()
-{
-    // reset the context pane
-    TUid contextPaneUid = TUid::Uid (EEikStatusPaneUidContext);
-    CEikStatusPaneBase::TPaneCapabilities subPaneContext =
-        StatusPane()->PaneCapabilities (contextPaneUid);
-
-    if (subPaneContext.IsPresent() && subPaneContext.IsAppOwned()) {
-        CAknContextPane* context = static_cast< CAknContextPane* > (
-                                       StatusPane()->ControlL (contextPaneUid));
-        context->SetPictureToDefaultL();
-    }
-
-    // setup the title pane
-    TUid titlePaneUid = TUid::Uid (EEikStatusPaneUidTitle);
-
-    CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
-        StatusPane()->PaneCapabilities (titlePaneUid);
-
-    if (subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned()) {
-        CAknTitlePane* title = static_cast< CAknTitlePane* > (
-                                   StatusPane()->ControlL (titlePaneUid));
-        TResourceReader reader;
-        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_TITLE_RESOURCE);
-        title->SetFromResourceL (reader);
-        CleanupStack::PopAndDestroy(); // reader internal state
-    }
-
-}
-
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiSettingItemListView::CleanupStatusPane()
-{
-}
-
+	{
+	}
 // ]]] end generated function
 
-/**
+/** 
  * Handle status pane size change for this view (override)
  */
 void Csymbian_ua_guiSettingItemListView::HandleStatusPaneSizeChange()
-{
-    CAknView::HandleStatusPaneSizeChange();
-
-    // this may fail, but we're not able to propagate exceptions here
-    TInt result;
-    TRAP (result, SetupStatusPaneL());
-}
-
-/**
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TInt result;
+	TRAP( result, SetupStatusPaneL() ); 
+	}
+	
+/** 
  * Handle the selected event.
  * @param aCommand the command id invoked
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiSettingItemListView::HandleChangeSelectedSettingItemL (TInt aCommand)
-{
-    iSymbian_ua_guiSettingItemList->ChangeSelectedItemL();
-    return ETrue;
-}
-
-/**
+TBool Csymbian_ua_guiSettingItemListView::HandleChangeSelectedSettingItemL( TInt aCommand )
+	{
+	iSymbian_ua_guiSettingItemList->ChangeSelectedItemL();
+	return ETrue;
+	}
+								
+/** 
  * Handle the rightSoftKeyPressed event.
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiSettingItemListView::HandleControlPaneRightSoftKeyPressedL (TInt aCommand)
-{
-    TUint8 domain[256] = {0};
-    TPtr8 cDomain (domain, sizeof (domain));
-    TUint8 user[64] = {0};
-    TPtr8 cUser (user, sizeof (user));
-    TUint8 pass[64] = {0};
-    TPtr8 cPass (pass, sizeof (pass));
-
-    cDomain.Copy (iSettings->Ed_registrar());
-    cUser.Copy (iSettings->Ed_user());
-    cPass.Copy (iSettings->Ed_password());
-    symbian_ua_set_account ( (char*) domain, (char*) user, (char*) pass, false, false);
-
-    AppUi()->ActivateLocalViewL (TUid::Uid (ESymbian_ua_guiContainerViewId));
-    return ETrue;
-}
-
-/**
+TBool Csymbian_ua_guiSettingItemListView::HandleControlPaneRightSoftKeyPressedL( TInt aCommand )
+	{
+	TUint8 domain[256] = {0};
+	TPtr8 cDomain(domain, sizeof(domain));
+	TUint8 user[64] = {0};
+	TPtr8 cUser(user, sizeof(user));
+	TUint8 pass[64] = {0};
+	TPtr8 cPass(pass, sizeof(pass));
+	
+	cDomain.Copy(iSettings->Ed_registrar());
+	cUser.Copy(iSettings->Ed_user());
+	cPass.Copy(iSettings->Ed_password());
+	symbian_ua_set_account((char*)domain, (char*)user, (char*)pass, false, false);
+	
+	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiContainerViewId));
+	return ETrue;
+	}
+
+/** 
  * Handle the selected event.
  * @param aCommand the command id invoked
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiSettingItemListView::HandleCancelMenuItemSelectedL (TInt aCommand)
-{
-    AppUi()->ActivateLocalViewL (TUid::Uid (ESymbian_ua_guiContainerViewId));
-    return ETrue;
-}
-
+TBool Csymbian_ua_guiSettingItemListView::HandleCancelMenuItemSelectedL( TInt aCommand )
+	{
+	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiContainerViewId));
+	return ETrue;
+	}
+				
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp
index b4c95f7b07..b270fa71b2 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp
@@ -1,5 +1,5 @@
 /* $Id: app_main.cpp 2821 2009-06-30 13:37:26Z nanang $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 #include <pjmedia-audiodev/audiodev.h>
 #include <pjmedia/delaybuf.h>
@@ -45,24 +45,24 @@ pj_pool_t *pool;
 pjmedia_delay_buf *delaybuf;
 
 /* Logging callback */
-static void log_writer (int level, const char *buf, unsigned len)
+static void log_writer(int level, const char *buf, unsigned len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG (level);
+    PJ_UNUSED_ARG(level);
 
-    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
+    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
 
-    TPtrC16 aBuf ( (const TUint16*) buf16, (TInt) len);
-    console->Write (aBuf);
+    TPtrC16 aBuf((const TUint16*)buf16, (TInt)len);
+    console->Write(aBuf);
 }
 
 /* perror util */
-static void app_perror (const char *title, pj_status_t status)
+static void app_perror(const char *title, pj_status_t status)
 {
     char errmsg[PJ_ERR_MSG_SIZE];
-    pj_strerror (status, errmsg, sizeof (errmsg));
-    PJ_LOG (1, (THIS_FILE, "Error: %s: %s", title, errmsg));
+    pj_strerror(status, errmsg, sizeof(errmsg));
+    PJ_LOG(1,(THIS_FILE, "Error: %s: %s", title, errmsg));
 }
 
 /* Application init */
@@ -72,65 +72,59 @@ static pj_status_t app_init()
     pj_status_t status;
 
     /* Redirect log */
-    pj_log_set_log_func ( (void (*) (int,const char*,int)) &log_writer);
-    pj_log_set_decor (PJ_LOG_HAS_NEWLINE);
-    pj_log_set_level (3);
+    pj_log_set_log_func((void (*)(int,const char*,int)) &log_writer);
+    pj_log_set_decor(PJ_LOG_HAS_NEWLINE);
+    pj_log_set_level(3);
 
     /* Init pjlib */
     status = pj_init();
-
     if (status != PJ_SUCCESS) {
-        app_perror ("pj_init()", status);
-        return status;
+    	app_perror("pj_init()", status);
+    	return status;
     }
 
-    pj_caching_pool_init (&cp, NULL, 0);
+    pj_caching_pool_init(&cp, NULL, 0);
 
     /* Init sound subsystem */
-    status = pjmedia_aud_subsys_init (&cp.factory);
-
+    status = pjmedia_aud_subsys_init(&cp.factory);
     if (status != PJ_SUCCESS) {
-        app_perror ("pjmedia_snd_init()", status);
-        pj_caching_pool_destroy (&cp);
-        pj_shutdown();
-        return status;
+    	app_perror("pjmedia_snd_init()", status);
+        pj_caching_pool_destroy(&cp);
+    	pj_shutdown();
+    	return status;
     }
 
     count = pjmedia_aud_dev_count();
-
-    PJ_LOG (3, (THIS_FILE, "Device count: %d", count));
-
+    PJ_LOG(3,(THIS_FILE, "Device count: %d", count));
     for (i=0; i<count; ++i) {
-        pjmedia_aud_dev_info info;
-        pj_status_t status;
-
-        status = pjmedia_aud_dev_get_info (i, &info);
-        pj_assert (status == PJ_SUCCESS);
-        PJ_LOG (3, (THIS_FILE, "%d: %s %d/%d %dHz",
-                    i, info.name, info.input_count, info.output_count,
-                    info.default_samples_per_sec));
+    	pjmedia_aud_dev_info info;
+    	pj_status_t status;
+
+    	status = pjmedia_aud_dev_get_info(i, &info);
+    	pj_assert(status == PJ_SUCCESS);
+    	PJ_LOG(3, (THIS_FILE, "%d: %s %d/%d %dHz",
+    		   i, info.name, info.input_count, info.output_count,
+    		   info.default_samples_per_sec));
     }
 
     /* Create pool */
-    pool = pj_pool_create (&cp.factory, THIS_FILE, 512, 512, NULL);
-
+    pool = pj_pool_create(&cp.factory, THIS_FILE, 512, 512, NULL);
     if (pool == NULL) {
-        app_perror ("pj_pool_create()", status);
-        pj_caching_pool_destroy (&cp);
-        pj_shutdown();
-        return status;
+    	app_perror("pj_pool_create()", status);
+        pj_caching_pool_destroy(&cp);
+    	pj_shutdown();
+    	return status;
     }
 
     /* Init delay buffer */
-    status = pjmedia_delay_buf_create (pool, THIS_FILE, CLOCK_RATE,
-                                       SAMPLES_PER_FRAME, CHANNEL_COUNT,
-                                       0, 0, &delaybuf);
-
+    status = pjmedia_delay_buf_create(pool, THIS_FILE, CLOCK_RATE,
+				      SAMPLES_PER_FRAME, CHANNEL_COUNT,
+				      0, 0, &delaybuf);
     if (status != PJ_SUCCESS) {
-        app_perror ("pjmedia_delay_buf_create()", status);
+    	app_perror("pjmedia_delay_buf_create()", status);
         //pj_caching_pool_destroy(&cp);
-        //pj_shutdown();
-        //return status;
+    	//pj_shutdown();
+    	//return status;
     }
 
     return PJ_SUCCESS;
@@ -138,30 +132,29 @@ static pj_status_t app_init()
 
 
 /* Sound capture callback */
-static pj_status_t rec_cb (void *user_data,
-                           pjmedia_frame *frame)
+static pj_status_t rec_cb(void *user_data,
+			  pjmedia_frame *frame)
 {
-    PJ_UNUSED_ARG (user_data);
+    PJ_UNUSED_ARG(user_data);
 
-    pjmedia_delay_buf_put (delaybuf, (pj_int16_t*) frame->buf);
+    pjmedia_delay_buf_put(delaybuf, (pj_int16_t*)frame->buf);
 
     if (frame->size != SAMPLES_PER_FRAME*2) {
-        PJ_LOG (3, (THIS_FILE, "Size captured = %u",
-                    frame->size));
+		PJ_LOG(3, (THIS_FILE, "Size captured = %u",
+	 		   frame->size));
     }
 
     ++rec_cnt;
-
     return PJ_SUCCESS;
 }
 
 /* Play cb */
-static pj_status_t play_cb (void *user_data,
-                            pjmedia_frame *frame)
+static pj_status_t play_cb(void *user_data,
+			   pjmedia_frame *frame)
 {
-    PJ_UNUSED_ARG (user_data);
+    PJ_UNUSED_ARG(user_data);
 
-    pjmedia_delay_buf_get (delaybuf, (pj_int16_t*) frame->buf);
+    pjmedia_delay_buf_get(delaybuf, (pj_int16_t*)frame->buf);
     frame->size = SAMPLES_PER_FRAME*2;
     frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
 
@@ -170,43 +163,39 @@ static pj_status_t play_cb (void *user_data,
 }
 
 /* Start sound */
-static pj_status_t snd_start (unsigned flag)
+static pj_status_t snd_start(unsigned flag)
 {
     pjmedia_aud_param param;
     pj_status_t status;
 
     if (strm != NULL) {
-        app_perror ("snd already open", PJ_EINVALIDOP);
-        return PJ_EINVALIDOP;
+    	app_perror("snd already open", PJ_EINVALIDOP);
+    	return PJ_EINVALIDOP;
     }
 
-    pjmedia_aud_dev_default_param (0, &param);
-
+    pjmedia_aud_dev_default_param(0, &param);
     param.channel_count = CHANNEL_COUNT;
     param.clock_rate = CLOCK_RATE;
     param.samples_per_frame = SAMPLES_PER_FRAME;
     param.dir = (pjmedia_dir) flag;
 
-    status = pjmedia_aud_stream_create (&param, &rec_cb, &play_cb, NULL, &strm);
-
+    status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb, NULL, &strm);
     if (status != PJ_SUCCESS) {
-        app_perror ("snd open", status);
-        return status;
+    	app_perror("snd open", status);
+    	return status;
     }
 
     rec_cnt = play_cnt = 0;
+    pj_gettimeofday(&t_start);
 
-    pj_gettimeofday (&t_start);
-
-    pjmedia_delay_buf_reset (delaybuf);
-
-    status = pjmedia_aud_stream_start (strm);
+    pjmedia_delay_buf_reset(delaybuf);
 
+    status = pjmedia_aud_stream_start(strm);
     if (status != PJ_SUCCESS) {
-        app_perror ("snd start", status);
-        pjmedia_aud_stream_destroy (strm);
-        strm = NULL;
-        return status;
+    	app_perror("snd start", status);
+    	pjmedia_aud_stream_destroy(strm);
+    	strm = NULL;
+    	return status;
     }
 
     return PJ_SUCCESS;
@@ -219,26 +208,23 @@ static pj_status_t snd_stop()
     pj_status_t status;
 
     if (strm == NULL) {
-        app_perror ("snd not open", PJ_EINVALIDOP);
-        return PJ_EINVALIDOP;
+    	app_perror("snd not open", PJ_EINVALIDOP);
+    	return PJ_EINVALIDOP;
     }
 
-    status = pjmedia_aud_stream_stop (strm);
-
+    status = pjmedia_aud_stream_stop(strm);
     if (status != PJ_SUCCESS) {
-        app_perror ("snd failed to stop", status);
+    	app_perror("snd failed to stop", status);
     }
-
-    status = pjmedia_aud_stream_destroy (strm);
-
+    status = pjmedia_aud_stream_destroy(strm);
     strm = NULL;
 
-    pj_gettimeofday (&now);
-    PJ_TIME_VAL_SUB (now, t_start);
+    pj_gettimeofday(&now);
+    PJ_TIME_VAL_SUB(now, t_start);
 
-    PJ_LOG (3, (THIS_FILE, "Duration: %d.%03d", now.sec, now.msec));
-    PJ_LOG (3, (THIS_FILE, "Captured: %d", rec_cnt));
-    PJ_LOG (3, (THIS_FILE, "Played: %d", play_cnt));
+    PJ_LOG(3,(THIS_FILE, "Duration: %d.%03d", now.sec, now.msec));
+    PJ_LOG(3,(THIS_FILE, "Captured: %d", rec_cnt));
+    PJ_LOG(3,(THIS_FILE, "Played: %d", play_cnt));
 
     return status;
 }
@@ -247,16 +233,12 @@ static pj_status_t snd_stop()
 static void app_fini()
 {
     if (strm)
-        snd_stop();
+    	snd_stop();
 
     pjmedia_aud_subsys_shutdown();
-
-    pjmedia_delay_buf_destroy (delaybuf);
-
-    pj_pool_release (pool);
-
-    pj_caching_pool_destroy (&cp);
-
+    pjmedia_delay_buf_destroy(delaybuf);
+    pj_pool_release(pool);
+    pj_caching_pool_destroy(&cp);
     pj_shutdown();
 }
 
@@ -269,38 +251,37 @@ static void app_fini()
 
 class ConsoleUI : public CActive
 {
+public:
+    ConsoleUI(CConsoleBase *con);
 
-    public:
-        ConsoleUI (CConsoleBase *con);
-
-        // Run console UI
-        void Run();
+    // Run console UI
+    void Run();
 
-        // Stop
-        void Stop();
+    // Stop
+    void Stop();
 
-    protected:
-        // Cancel asynchronous read.
-        void DoCancel();
+protected:
+    // Cancel asynchronous read.
+    void DoCancel();
 
-        // Implementation: called when read has completed.
-        void RunL();
+    // Implementation: called when read has completed.
+    void RunL();
 
-    private:
-        CConsoleBase *con_;
+private:
+    CConsoleBase *con_;
 };
 
 
-ConsoleUI::ConsoleUI (CConsoleBase *con)
-        : CActive (EPriorityUserInput), con_ (con)
+ConsoleUI::ConsoleUI(CConsoleBase *con)
+: CActive(EPriorityUserInput), con_(con)
 {
-    CActiveScheduler::Add (this);
+    CActiveScheduler::Add(this);
 }
 
 // Run console UI
 void ConsoleUI::Run()
 {
-    con_->Read (iStatus);
+    con_->Read(iStatus);
     SetActive();
 }
 
@@ -318,13 +299,13 @@ void ConsoleUI::DoCancel()
 
 static void PrintMenu()
 {
-    PJ_LOG (3, (THIS_FILE, "\n\n"
-                "Menu:\n"
-                "  a    Start bidir sound\n"
-                "  t    Start recorder\n"
-                "  p    Start player\n"
-                "  d    Stop & close sound\n"
-                "  w    Quit\n"));
+    PJ_LOG(3, (THIS_FILE, "\n\n"
+	    "Menu:\n"
+	    "  a    Start bidir sound\n"
+	    "  t    Start recorder\n"
+	    "  p    Start player\n"
+	    "  d    Stop & close sound\n"
+	    "  w    Quit\n"));
 }
 
 // Implementation: called when read has completed.
@@ -334,39 +315,33 @@ void ConsoleUI::RunL()
     pj_bool_t reschedule = PJ_TRUE;
 
     switch (kc) {
-
-        case 'w':
-            snd_stop();
-            CActiveScheduler::Stop();
-            reschedule = PJ_FALSE;
-            break;
-
-        case 'a':
-            snd_start (PJMEDIA_DIR_CAPTURE_PLAYBACK);
-            break;
-
-        case 't':
-            snd_start (PJMEDIA_DIR_CAPTURE);
-            break;
-
-        case 'p':
-            snd_start (PJMEDIA_DIR_PLAYBACK);
-            break;
-
-        case 'd':
-            snd_stop();
-            break;
-
-        default:
-            PJ_LOG (3, (THIS_FILE, "Keycode '%c' (%d) is pressed",
-                        kc, kc));
-            break;
+    case 'w':
+	    snd_stop();
+	    CActiveScheduler::Stop();
+	    reschedule = PJ_FALSE;
+	    break;
+    case 'a':
+    	snd_start(PJMEDIA_DIR_CAPTURE_PLAYBACK);
+	break;
+    case 't':
+    	snd_start(PJMEDIA_DIR_CAPTURE);
+	break;
+    case 'p':
+    	snd_start(PJMEDIA_DIR_PLAYBACK);
+    break;
+    case 'd':
+    	snd_stop();
+	break;
+    default:
+	    PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed",
+		      kc, kc));
+	    break;
     }
 
     PrintMenu();
 
     if (reschedule)
-        Run();
+	Run();
 }
 
 
@@ -377,18 +352,16 @@ int app_main()
         return -1;
 
     // Run the UI
-    ConsoleUI *con = new ConsoleUI (console);
+    ConsoleUI *con = new ConsoleUI(console);
 
     con->Run();
 
     PrintMenu();
-
     CActiveScheduler::Start();
 
     delete con;
 
     app_fini();
-
     return 0;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp
index 6b1a92f6b3..5ed4eb83ee 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: main_symbian.cpp 2506 2009-03-12 18:11:37Z bennylp $ */
-/*
+/* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 #include <e32std.h>
@@ -29,7 +29,7 @@
 CConsoleBase* console;
 
 // Needed by APS
-TPtrC APP_UID = _L ("A000000E");
+TPtrC APP_UID = _L("A000000E");
 
 int app_main();
 
@@ -39,13 +39,13 @@ int app_main();
 LOCAL_C void DoStartL()
 {
     CActiveScheduler *scheduler = new (ELeave) CActiveScheduler;
-    CleanupStack::PushL (scheduler);
-    CActiveScheduler::Install (scheduler);
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
 
     app_main();
 
-    CActiveScheduler::Install (NULL);
-    CleanupStack::Pop (scheduler);
+    CActiveScheduler::Install(NULL);
+    CleanupStack::Pop(scheduler);
     delete scheduler;
 }
 
@@ -62,25 +62,22 @@ GLDEF_C TInt E32Main()
     CTrapCleanup* cleanup = CTrapCleanup::New();
 
     // Create output console
-    TRAPD (createError, console = Console::NewL (_L ("Console"), TSize (KConsFullScreen,KConsFullScreen)));
-
+    TRAPD(createError, console = Console::NewL(_L("Console"), TSize(KConsFullScreen,KConsFullScreen)));
     if (createError)
         return createError;
 
-    TRAPD (startError, DoStartL());
+    TRAPD(startError, DoStartL());
 
     //console->Printf(_L("[press any key to close]\n"));
     //console->Getch();
 
     delete console;
-
     delete cleanup;
 
     CloseSTDLIB();
 
     // Mark end of heap usage, detect memory leaks
     __UHEAP_MARKEND;
-
     return KErrNone;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip/build/Makefile b/sflphone-common/libs/pjproject/pjsip/build/Makefile
index fe5937d0a3..d825db83bb 100644
--- a/sflphone-common/libs/pjproject/pjsip/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjsip/build/Makefile
@@ -8,15 +8,15 @@ include $(PJDIR)/build/common.mak
 
 RULES_MAK := $(PJDIR)/build/rules.mak
 
-PJLIB_LIB:=../../pjlib/lib/libpj-sfl-$(TARGET_NAME)$(LIBEXT)
-PJLIB_UTIL_LIB:=../../pjlib-util/lib/libpjlib-util-sfl-$(TARGET_NAME)$(LIBEXT)
-PJMEDIA_LIB:=../../pjmedia/lib/libpjmedia-sfl-$(TARGET_NAME)$(LIBEXT)
-PJMEDIA_CODEC_LIB:=../../pjmedia/lib/libpjmedia-codec-sfl-$(TARGET_NAME)$(LIBEXT)
+PJLIB_LIB:=../../pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT)
+PJLIB_UTIL_LIB:=../../pjlib-util/lib/libpjlib-util-$(TARGET_NAME)$(LIBEXT)
+PJMEDIA_LIB:=../../pjmedia/lib/libpjmedia-$(TARGET_NAME)$(LIBEXT)
+PJMEDIA_CODEC_LIB:=../../pjmedia/lib/libpjmedia-codec-$(TARGET_NAME)$(LIBEXT)
 
-export PJSIP_LIB:=../lib/libpjsip-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJSIP_UA_LIB:=../lib/libpjsip-ua-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJSIP_SIMPLE_LIB:=../lib/libpjsip-simple-sfl-$(TARGET_NAME)$(LIBEXT)
-export PJSUA_LIB_LIB=../lib/libpjsua-sfl-$(TARGET_NAME)$(LIBEXT)
+export PJSIP_LIB:=../lib/libpjsip-$(TARGET_NAME)$(LIBEXT)
+export PJSIP_UA_LIB:=../lib/libpjsip-ua-$(TARGET_NAME)$(LIBEXT)
+export PJSIP_SIMPLE_LIB:=../lib/libpjsip-simple-$(TARGET_NAME)$(LIBEXT)
+export PJSUA_LIB_LIB=../lib/libpjsua-$(TARGET_NAME)$(LIBEXT)
 
 
 ###############################################################################
@@ -41,7 +41,7 @@ export PJSIP_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
 		sip_endpoint.o sip_util.o sip_util_proxy.o \
 		sip_resolve.o sip_transport.o sip_transport_loop.o \
 		sip_transport_udp.o sip_transport_tcp.o \
-		sip_transport_tls_ossl.o sip_auth_aka.o sip_auth_client.o \
+		sip_transport_tls.o sip_auth_aka.o sip_auth_client.o \
 		sip_auth_msg.o sip_auth_parser.o \
 		sip_auth_server.o \
 		sip_transaction.o sip_util_statefull.o \
@@ -64,7 +64,7 @@ export PJSIP_UA_CFLAGS += $(_CFLAGS)
 export PJSIP_SIMPLE_SRCDIR = ../src/pjsip-simple
 export PJSIP_SIMPLE_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
 			errno.o evsub.o evsub_msg.o iscomposing.o \
-			pidf.o presence.o presence_body.o publishc.o \
+			mwi.o pidf.o presence.o presence_body.o publishc.o \
 			rpid.o xpidf.o
 export PJSIP_SIMPLE_CFLAGS += $(_CFLAGS)
 
diff --git a/sflphone-common/libs/pjproject/pjsip/build/os-auto.mak b/sflphone-common/libs/pjproject/pjsip/build/os-auto.mak
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.dsp b/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.dsp
index 4a5389b510..b29e69ec09 100644
--- a/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.dsp
+++ b/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.dsp
@@ -156,7 +156,12 @@ SOURCE=..\src\pjsip\sip_transport_tcp.c
 # End Source File
 # Begin Source File
 
+SOURCE=..\src\pjsip\sip_transport_tls.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\src\pjsip\sip_transport_tls_ossl.c
+# PROP Exclude_From_Build 1
 # End Source File
 # Begin Source File
 
diff --git a/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.vcproj b/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.vcproj
index 2aef6d4c2e..8d0228a52b 100644
--- a/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.vcproj
+++ b/sflphone-common/libs/pjproject/pjsip/build/pjsip_core.vcproj
@@ -34,11 +34,11 @@
 	<Configurations>
 		<Configuration
 			Name="Release|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
 			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -57,8 +57,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -72,7 +72,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -92,10 +92,10 @@
 		</Configuration>
 		<Configuration
 			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -114,9 +114,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -130,7 +130,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -158,10 +158,10 @@
 		</Configuration>
 		<Configuration
 			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -180,9 +180,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -196,7 +196,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -223,12 +223,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -247,8 +246,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -262,7 +262,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -274,18 +274,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -304,9 +312,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -320,7 +328,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -347,11 +355,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -370,9 +378,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -386,7 +394,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -413,12 +421,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -437,8 +444,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -452,7 +460,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -464,18 +472,27 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -494,9 +511,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -510,7 +526,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -522,26 +538,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -560,9 +568,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -576,7 +584,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -603,12 +611,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -627,8 +634,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -642,7 +650,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -654,18 +662,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -684,9 +700,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -700,7 +716,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -727,11 +743,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -750,9 +766,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -766,7 +782,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -793,12 +809,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -817,8 +832,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -832,7 +848,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -844,18 +860,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -874,9 +898,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -890,7 +914,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -917,11 +941,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -940,9 +965,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -956,7 +980,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -968,27 +992,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1007,8 +1022,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1022,7 +1038,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1034,18 +1050,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1064,9 +1088,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1080,7 +1104,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1107,11 +1131,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1130,9 +1154,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1146,7 +1170,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1173,11 +1197,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1196,9 +1220,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1212,7 +1236,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1239,11 +1263,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1262,9 +1286,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1278,7 +1302,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1305,11 +1329,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1328,9 +1352,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1344,7 +1368,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1371,11 +1395,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1394,9 +1419,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1410,7 +1434,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1422,26 +1446,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1460,9 +1476,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1476,7 +1492,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1503,11 +1519,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1526,9 +1542,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1542,7 +1558,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1569,11 +1585,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1592,9 +1608,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1608,7 +1624,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1635,11 +1651,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1658,9 +1674,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1674,7 +1690,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1701,11 +1717,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1724,9 +1740,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1740,7 +1756,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1767,11 +1783,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1790,9 +1806,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1806,7 +1822,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1833,11 +1849,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1856,9 +1873,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1872,7 +1888,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1884,26 +1900,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1922,9 +1930,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1938,7 +1946,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1965,11 +1973,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1988,9 +1996,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2004,7 +2012,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2031,11 +2039,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2054,9 +2062,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2070,7 +2078,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2097,11 +2105,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2120,9 +2128,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2136,7 +2144,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2163,11 +2171,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2186,9 +2194,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2202,7 +2210,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2229,11 +2237,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2252,9 +2260,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2268,7 +2276,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2295,11 +2303,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2318,9 +2327,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2334,7 +2342,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2346,26 +2354,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2384,9 +2384,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2400,7 +2400,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2427,11 +2427,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2450,9 +2450,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2466,7 +2466,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2493,11 +2493,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2516,9 +2516,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2532,7 +2532,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2559,11 +2559,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2582,9 +2582,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2598,7 +2598,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2625,11 +2625,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2648,9 +2648,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2664,7 +2664,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2692,10 +2692,10 @@
 		</Configuration>
 		<Configuration
 			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2714,9 +2714,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib/include,../../pjlib-util/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2730,7 +2730,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-core-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -3479,11 +3479,16 @@
 						/>
 					</FileConfiguration>
 				</File>
+				<File
+					RelativePath="..\src\pjsip\sip_transport_tls.c"
+					>
+				</File>
 				<File
 					RelativePath="..\src\pjsip\sip_transport_tls_ossl.c"
 					>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -3493,6 +3498,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -3500,8 +3506,17 @@
 							PreprocessorDefinitions=""
 						/>
 					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+						/>
+					</FileConfiguration>
 					<FileConfiguration
 						Name="Debug-Static|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -3511,6 +3526,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release-Dynamic|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -3520,6 +3536,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Debug-Dynamic|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -3529,6 +3546,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release-Static|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
diff --git a/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.dsp b/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.dsp
index 82554d7de5..8b584a97bb 100644
--- a/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.dsp
+++ b/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.dsp
@@ -103,6 +103,10 @@ SOURCE="..\src\pjsip-simple\iscomposing.c"
 # End Source File
 # Begin Source File
 
+SOURCE="..\src\pjsip-simple\mwi.c"
+# End Source File
+# Begin Source File
+
 SOURCE="..\src\pjsip-simple\pidf.c"
 # End Source File
 # Begin Source File
@@ -147,6 +151,10 @@ SOURCE="..\include\pjsip-simple\iscomposing.h"
 # End Source File
 # Begin Source File
 
+SOURCE="..\include\pjsip-simple\mwi.h"
+# End Source File
+# Begin Source File
+
 SOURCE="..\include\pjsip-simple\pidf.h"
 # End Source File
 # Begin Source File
diff --git a/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.vcproj b/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.vcproj
index 76d1d07b2b..f2504c824e 100644
--- a/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.vcproj
+++ b/sflphone-common/libs/pjproject/pjsip/build/pjsip_simple.vcproj
@@ -34,11 +34,11 @@
 	<Configurations>
 		<Configuration
 			Name="Debug|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
 			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -57,8 +57,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -72,7 +72,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -92,10 +92,10 @@
 		</Configuration>
 		<Configuration
 			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -114,9 +114,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -130,7 +130,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -158,10 +158,10 @@
 		</Configuration>
 		<Configuration
 			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -180,9 +180,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -196,7 +196,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -223,12 +223,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -247,8 +246,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -262,7 +262,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -274,18 +274,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -304,9 +312,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -320,7 +328,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -347,11 +355,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -370,9 +378,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -386,7 +394,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -413,12 +421,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -437,8 +444,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -452,7 +460,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -464,18 +472,27 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -494,9 +511,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -510,7 +526,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -522,26 +538,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -560,9 +568,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -576,7 +584,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -603,12 +611,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -627,8 +634,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -642,7 +650,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -654,18 +662,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -684,9 +700,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -700,7 +716,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -727,11 +743,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -750,9 +766,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -766,7 +782,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -793,12 +809,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -817,8 +832,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -832,7 +848,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -844,18 +860,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -874,9 +898,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -890,7 +914,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -917,11 +941,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -940,9 +965,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -956,7 +980,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -968,27 +992,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Win32"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
-			UseOfMFC="0"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1007,8 +1022,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1022,7 +1038,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1034,18 +1050,26 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCFxCopTool"
+				Name="VCCodeSignTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1064,9 +1088,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1080,7 +1104,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1107,11 +1131,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1130,9 +1154,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1146,7 +1170,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1173,11 +1197,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1196,9 +1220,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1212,7 +1236,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1239,11 +1263,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1262,9 +1286,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1278,7 +1302,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1305,11 +1329,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1328,9 +1352,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1344,7 +1368,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1371,11 +1395,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1394,9 +1419,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1410,7 +1434,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1422,26 +1446,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1460,9 +1476,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1476,7 +1492,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1503,11 +1519,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1526,9 +1542,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1542,7 +1558,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1569,11 +1585,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1592,9 +1608,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1608,7 +1624,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1635,11 +1651,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1658,9 +1674,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1674,7 +1690,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1701,11 +1717,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1724,9 +1740,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1740,7 +1756,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1767,11 +1783,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1790,9 +1806,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1806,7 +1822,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1833,11 +1849,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1856,9 +1873,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1872,7 +1888,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1884,26 +1900,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1922,9 +1930,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -1938,7 +1946,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -1965,11 +1973,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -1988,9 +1996,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2004,7 +2012,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2031,11 +2039,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2054,9 +2062,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2070,7 +2078,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2097,11 +2105,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2120,9 +2128,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2136,7 +2144,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2163,11 +2171,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2186,9 +2194,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2202,7 +2210,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2229,11 +2237,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2252,9 +2260,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2268,7 +2276,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2295,11 +2303,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Win32"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2318,9 +2327,8 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2334,7 +2342,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2346,26 +2354,18 @@
 				Name="VCBscMakeTool"
 			/>
 			<Tool
-				Name="VCCodeSignTool"
+				Name="VCFxCopTool"
 			/>
 			<Tool
 				Name="VCPostBuildEventTool"
 			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2384,9 +2384,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2400,7 +2400,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2427,11 +2427,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2450,9 +2450,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2466,7 +2466,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2493,11 +2493,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Pocket PC 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2516,9 +2516,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2532,7 +2532,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2559,11 +2559,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Smartphone 2003 (ARMV4)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2582,9 +2582,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2598,7 +2598,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2625,11 +2625,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

+			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2648,9 +2648,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2664,7 +2664,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2692,10 +2692,10 @@
 		</Configuration>
 		<Configuration
 			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

 			ConfigurationType="4"
+			InheritedPropertySheets="..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -2714,9 +2714,9 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

 				ExecutionBucket="7"
 				AdditionalIncludeDirectories="../include,../../pjlib-util/include,../../pjlib/include"
+				PreprocessorDefinitions="_LIB;"
 				PrecompiledHeaderFile=""
 			/>
 			<Tool
@@ -2730,7 +2730,7 @@
 			/>
 			<Tool
 				Name="VCLibrarianTool"
-				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+				OutputFile="..\lib\pjsip-simple-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -2996,6 +2996,10 @@
 					/>
 				</FileConfiguration>
 			</File>
+			<File
+				RelativePath="..\src\pjsip-simple\mwi.c"
+				>
+			</File>
 			<File
 				RelativePath="..\src\pjsip-simple\pidf.c"
 				>
@@ -3311,6 +3315,10 @@
 				RelativePath="..\include\pjsip-simple\iscomposing.h"
 				>
 			</File>
+			<File
+				RelativePath="..\include\pjsip-simple\mwi.h"
+				>
+			</File>
 			<File
 				RelativePath="..\include\pjsip-simple\pidf.h"
 				>
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/mwi.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/mwi.h
new file mode 100644
index 0000000000..351bbbea4f
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/mwi.h
@@ -0,0 +1,208 @@
+/* $Id: mwi.h 2968 2009-10-26 11:21:37Z bennylp $ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#ifndef __PJSIP_SIMPLE_MWI_H__
+#define __PJSIP_SIMPLE_MWI_H__
+
+/**
+ * @file mwi.h
+ * @brief SIP Extension for MWI (RFC 3842)
+ */
+#include <pjsip-simple/evsub.h>
+#include <pjsip/sip_msg.h>
+
+
+PJ_BEGIN_DECL
+
+
+/**
+ * @defgroup mwi SIP Message Summary and Message Waiting Indication (RFC 3842)
+ * @ingroup PJSIP_SIMPLE
+ * @brief Support for SIP MWI Extension (RFC 3842)
+ * @{
+ *
+ * This module implements RFC 3842: A Message Summary and Message Waiting
+ * Indication Event Package for the Session Initiation Protocol (SIP).
+ * It uses the SIP Event Notification framework (evsub.h) and extends the 
+ * framework by implementing "message-summary" event package.
+ */
+
+
+/**
+ * Initialize the MWI module and register it as endpoint module and
+ * package to the event subscription module.
+ *
+ * @param endpt		The endpoint instance.
+ * @param mod_evsub	The event subscription module instance.
+ *
+ * @return		PJ_SUCCESS if the module is successfully 
+ *			initialized and registered to both endpoint
+ *			and the event subscription module.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_init_module(pjsip_endpoint *endpt,
+					   pjsip_module *mod_evsub);
+
+/**
+ * Get the MWI module instance.
+ *
+ * @return		The MWI module instance.
+ */
+PJ_DECL(pjsip_module*) pjsip_mwi_instance(void);
+
+/**
+ * Create MWI client subscription session.
+ *
+ * @param dlg		The underlying dialog to use.
+ * @param user_cb	Pointer to callbacks to receive MWI subscription
+ *			events.
+ * @param options	Option flags. Currently only PJSIP_EVSUB_NO_EVENT_ID
+ *			is recognized.
+ * @param p_evsub	Pointer to receive the MWI subscription
+ *			session.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_create_uac( pjsip_dialog *dlg,
+					   const pjsip_evsub_user *user_cb,
+					   unsigned options,
+					   pjsip_evsub **p_evsub );
+
+/**
+ * Create MWI server subscription session.
+ *
+ * @param dlg		The underlying dialog to use.
+ * @param user_cb	Pointer to callbacks to receive MWI subscription
+ *			events.
+ * @param rdata		The incoming SUBSCRIBE request that creates the event 
+ *			subscription.
+ * @param p_evsub	Pointer to receive the MWI subscription
+ *			session.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_create_uas( pjsip_dialog *dlg,
+					   const pjsip_evsub_user *user_cb,
+					   pjsip_rx_data *rdata,
+					   pjsip_evsub **p_evsub );
+
+/**
+ * Forcefully destroy the MWI subscription. This function should only
+ * be called on special condition, such as when the subscription 
+ * initialization has failed. For other conditions, application MUST terminate
+ * the subscription by sending the appropriate un(SUBSCRIBE) or NOTIFY.
+ *
+ * @param sub		The MWI subscription.
+ * @param notify	Specify whether the state notification callback
+ *			should be called.
+ *
+ * @return		PJ_SUCCESS if subscription session has been destroyed.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_terminate( pjsip_evsub *sub,
+					  pj_bool_t notify );
+
+/**
+ * Call this function to create request to initiate MWI subscription, to 
+ * refresh subcription, or to request subscription termination.
+ *
+ * @param sub		Client subscription instance.
+ * @param expires	Subscription expiration. If the value is set to zero,
+ *			this will request unsubscription.
+ * @param p_tdata	Pointer to receive the request.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_initiate( pjsip_evsub *sub,
+					 pj_int32_t expires,
+					 pjsip_tx_data **p_tdata);
+
+/**
+ * Accept the incoming subscription request by sending 2xx response to
+ * incoming SUBSCRIBE request.
+ *
+ * @param sub		Server subscription instance.
+ * @param rdata		The incoming subscription request message.
+ * @param st_code	Status code, which MUST be final response.
+ * @param hdr_list	Optional list of headers to be added in the response.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_accept( pjsip_evsub *sub,
+				       pjsip_rx_data *rdata,
+				       int st_code,
+				       const pjsip_hdr *hdr_list );
+
+/**
+ * For notifier, create NOTIFY request to subscriber, and set the state 
+ * of the subscription. 
+ *
+ * @param sub		The server subscription (notifier) instance.
+ * @param state		New state to set.
+ * @param state_str	The state string name, if state contains value other
+ *			than active, pending, or terminated. Otherwise this
+ *			argument is ignored.
+ * @param reason	Specify reason if new state is terminated, otherwise
+ *			put NULL.
+ * @param mime_type	MIME type/content type of the message body.
+ * @param body		Message body to be included in the NOTIFY request.
+ * @param p_tdata	Pointer to receive the request.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_notify( pjsip_evsub *sub,
+				       pjsip_evsub_state state,
+				       const pj_str_t *state_str,
+				       const pj_str_t *reason,
+				       const pjsip_media_type *mime_type,
+				       const pj_str_t *body,
+				       pjsip_tx_data **p_tdata);
+
+/**
+ * Create NOTIFY request containing message body from the last NOITFY
+ * message created.
+ *
+ * @param sub		Server subscription object.
+ * @param p_tdata	Pointer to receive request.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_current_notify( pjsip_evsub *sub,
+					       pjsip_tx_data **p_tdata );
+
+
+/**
+ * Send request message that was previously created with initiate(), notify(),
+ * or current_notify(). Application may also send request created with other
+ * functions, e.g. authentication. But the request MUST be either request
+ * that creates/refresh subscription or NOTIFY request.
+ *
+ * @param sub		The subscription object.
+ * @param tdata		Request message to be sent.
+ *
+ * @return		PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjsip_mwi_send_request( pjsip_evsub *sub,
+					     pjsip_tx_data *tdata );
+
+/**
+ * @}
+ */
+
+PJ_END_DECL
+
+
+#endif	/* __PJSIP_SIMPLE_MWI_H__ */
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/publish.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/publish.h
index 23ab5e0482..36147c4b0f 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/publish.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip-simple/publish.h
@@ -1,4 +1,4 @@
-/* $Id: publish.h 2661 2009-04-28 22:19:49Z bennylp $ */
+/* $Id: publish.h 2940 2009-10-12 07:44:14Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -65,6 +65,25 @@ extern const pjsip_method pjsip_publish_method;
 typedef struct pjsip_publishc pjsip_publishc;
 
 
+/**
+ * Client publication options. Application should initialize this structure
+ * with its default values by calling #pjsip_publishc_opt_default()
+ */
+typedef struct pjsip_publishc_opt
+{
+    /**
+     * Specify whether the client publication session should queue the
+     * PUBLISH request should there be another PUBLISH transaction still
+     * pending. If this is set to false, the client will return error
+     * on the PUBLISH request if there is another PUBLISH transaction still
+     * in progress.
+     *
+     * Default: PJSIP_PUBLISHC_QUEUE_REQUEST
+     */
+    pj_bool_t	queue_request;
+
+} pjsip_publishc_opt;
+
 
 /** Structure to hold parameters when calling application's callback.
  *  The application's callback is called when the client publication process
@@ -88,6 +107,14 @@ struct pjsip_publishc_cbparam
 typedef void pjsip_publishc_cb(struct pjsip_publishc_cbparam *param);
 
 
+/**
+ * Initialize client publication session option with default values.
+ *
+ * @param opt	    The option.
+ */
+PJ_DECL(void) pjsip_publishc_opt_default(pjsip_publishc_opt *opt);
+
+
 /**
  * Initialize client publication module.
  *
@@ -98,12 +125,11 @@ typedef void pjsip_publishc_cb(struct pjsip_publishc_cbparam *param);
 PJ_DECL(pj_status_t) pjsip_publishc_init_module(pjsip_endpoint *endpt);
 
 
-
 /**
  * Create client publication structure.
  *
  * @param endpt	    Endpoint, used to allocate pool from.
- * @param options   Option flags.
+ * @param opt	    Options, or NULL to specify default options.
  * @param token	    Opaque data to be associated with the client publication.
  * @param cb	    Pointer to callback function to receive publication status.
  * @param p_pubc    Pointer to receive client publication structure.
@@ -111,7 +137,7 @@ PJ_DECL(pj_status_t) pjsip_publishc_init_module(pjsip_endpoint *endpt);
  * @return	    PJ_SUCCESS on success.
  */
 PJ_DECL(pj_status_t) pjsip_publishc_create( pjsip_endpoint *endpt, 
-					    unsigned options,
+					    const pjsip_publishc_opt *opt,
 					    void *token,
 				            pjsip_publishc_cb *cb, 
 					    pjsip_publishc **p_pubc);
@@ -269,10 +295,23 @@ PJ_DECL(pj_status_t) pjsip_publishc_update_expires(pjsip_publishc *pubc,
  * and application will be notified via the callback when the process 
  * completes.
  *
+ * If the session has another PUBLISH request outstanding, the behavior
+ * depends on whether request queueing is enabled in the session (this was
+ * set by setting \a queue_request field of #pjsip_publishc_opt to true
+ * when calling #pjsip_publishc_create(). Default is true). If request
+ * queueing is enabled, the request will be queued and the function will 
+ * return PJ_EPENDING. One the outstanding request is complete, the queued
+ * request will be sent automatically. If request queueing is disabled, the
+ * function will reject the request and return PJ_EBUSY.
+ *
  * @param pubc	    The client publication structure.
  * @param tdata	    Transmit data.
  *
- * @return	    PJ_SUCCESS on success.
+ * @return	    - PJ_SUCCESS on success, or 
+ *		    - PJ_EPENDING if request is queued, or
+ *		    - PJ_EBUSY if request is rejected because another PUBLISH
+ *		      request is in progress, or
+ *		    - other status code to indicate the error.
  */
 PJ_DECL(pj_status_t) pjsip_publishc_send(pjsip_publishc *pubc, 
 					 pjsip_tx_data *tdata);
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h
deleted file mode 100644
index cf154f5ec0..0000000000
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* pjsip/include/pjsip/sip_autoconf.h.  Generated from sip_autoconf.h.in by configure.  */
-/* $Id: sip_autoconf.h.in 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
- * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
- * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
- *
- * 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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
- */
-#ifndef __PJSIP_SIP_AUTOCONF_H__
-#define __PJSIP_SIP_AUTOCONF_H__
-
-/**
- * @file sip_autoconf.h
- * @brief Describes operating system specifics (automatically detected by
- *        autoconf)
- */
-
-/**
- * Enable/disable TLS transport, as configured by autoconf.
- * But only do this if user doesn't explicitly configure in pj/config_site.h.
- */
-#ifndef PJSIP_HAS_TLS_TRANSPORT
-#define PJSIP_HAS_TLS_TRANSPORT 1
-#endif
-
-
-#endif	/* __PJSIP_SIP_AUTOCONF_H__ */
-
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h.in b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h.in
index cb753905e5..2b9a6d0ca9 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h.in
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_autoconf.h.in
@@ -1,4 +1,4 @@
-/* $Id: sip_autoconf.h.in 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sip_autoconf.h.in 2973 2009-10-28 06:09:15Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -26,14 +26,14 @@
  *        autoconf)
  */
 
-/**
+/*
  * Enable/disable TLS transport, as configured by autoconf.
  * But only do this if user doesn't explicitly configure in pj/config_site.h.
  */
-#ifndef PJSIP_HAS_TLS_TRANSPORT
-#undef PJSIP_HAS_TLS_TRANSPORT
-#endif
-
+/* Since 1.5, the default setting will follow PJ_HAS_SSL_SOCK setting. */
+//#ifndef PJSIP_HAS_TLS_TRANSPORT
+//#undef PJSIP_HAS_TLS_TRANSPORT
+//#endif
 
 #endif	/* __PJSIP_SIP_AUTOCONF_H__ */
 
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_config.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_config.h
index 0fa12a8be7..0250fb8e96 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_config.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_config.h
@@ -1,4 +1,4 @@
-/* $Id: sip_config.h 2859 2009-08-11 16:26:20Z nanang $ */
+/* $Id: sip_config.h 3019 2009-11-20 04:18:27Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -213,7 +213,7 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void)
  * This mainly affects the size of mod_data array in various components.
  */
 #ifndef PJSIP_MAX_MODULE
-#   define PJSIP_MAX_MODULE		16
+#   define PJSIP_MAX_MODULE		32
 #endif
 
 
@@ -513,10 +513,10 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void)
  * Enable TLS SIP transport support. For most systems this means that
  * OpenSSL must be installed.
  *
- * Default: 0 (for now)
+ * Default: follow PJ_HAS_SSL_SOCK setting, which is 0 (disabled) by default.
  */
 #ifndef PJSIP_HAS_TLS_TRANSPORT
-#   define PJSIP_HAS_TLS_TRANSPORT	    0
+#   define PJSIP_HAS_TLS_TRANSPORT          PJ_HAS_SSL_SOCK
 #endif
 
 
@@ -896,6 +896,20 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void)
 #endif
 
 
+/**
+ * Specify whether the client publication session should queue the
+ * PUBLISH request should there be another PUBLISH transaction still
+ * pending. If this is set to false, the client will return error
+ * on the PUBLISH request if there is another PUBLISH transaction still
+ * in progress.
+ *
+ * Default: 1 (yes)
+ */
+#ifndef PJSIP_PUBLISHC_QUEUE_REQUEST
+#   define PJSIP_PUBLISHC_QUEUE_REQUEST		1
+#endif
+
+
 PJ_END_DECL
 
 /**
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_msg.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_msg.h
index b1dc2c04c5..51e970c0da 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_msg.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_msg.h
@@ -1,4 +1,4 @@
-/* $Id: sip_msg.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sip_msg.h 2968 2009-10-26 11:21:37Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -511,6 +511,18 @@ typedef struct pjsip_media_type
     pj_str_t param;	    /**< Media type parameters (concatenated). */
 } pjsip_media_type;
 
+
+/**
+ * Copy SIP media type to another.
+ *
+ * @param pool	    Pool to duplicate strings.
+ * @param dst	    Destination structure.
+ * @param src	    Source structure.
+ */
+PJ_DECL(void) pjsip_media_type_cp(pj_pool_t *pool,
+				  pjsip_media_type *dst,
+				  const pjsip_media_type *src);
+
 /**
  * @}
  */
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport.h
index 25d142fdbc..ed52cf670d 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport.h
@@ -1,4 +1,4 @@
-/* $Id: sip_transport.h 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: sip_transport.h 2985 2009-11-04 13:17:31Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -27,6 +27,7 @@
 
 #include <pjsip/sip_msg.h>
 #include <pjsip/sip_parser.h>
+#include <pjsip/sip_resolve.h>
 #include <pj/sock.h>
 #include <pj/list.h>
 #include <pj/ioqueue.h>
@@ -384,9 +385,16 @@ struct pjsip_rx_data
 	/** Content-length header. */
 	pjsip_clen_hdr		*clen;
 
-	/** The first Require header. */
+	/** "Require" header containing aggregates of all Require
+	 *  headers found in the message, or NULL. 
+	 */
 	pjsip_require_hdr	*require;
 
+	/** "Supported" header containing aggregates of all Supported
+	 *  headers found in the message, or NULL. 
+	 */
+	pjsip_supported_hdr	*supported;
+
 	/** The list of error generated by the parser when parsing 
 	    this message. 
 	 */
@@ -522,6 +530,26 @@ struct pjsip_tx_data
     /** Callback to be called when this tx_data has been transmitted.	*/
     void	       (*cb)(void*, pjsip_tx_data*, pj_ssize_t);
 
+    /** Destination information, to be used to determine the network address
+     *  of the message. For a request, this information is  initialized when
+     *  the request is sent with #pjsip_endpt_send_request_stateless() and
+     *  network address is resolved. For CANCEL request, this information
+     *  will be copied from the original INVITE to make sure that the CANCEL
+     *  request goes to the same physical network address as the INVITE
+     *  request.
+     */
+    struct
+    {
+	/** Server addresses resolved. 
+	 */
+	pjsip_server_addresses   addr;
+
+	/** Current server address being tried. 
+	 */
+	unsigned cur_addr;
+
+    } dest_info;
+
     /** Transport information, only valid during on_tx_request() and 
      *  on_tx_response() callback.
      */
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tcp.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tcp.h
index 5fe5a52e10..d2fc653626 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tcp.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tcp.h
@@ -1,4 +1,4 @@
-/* $Id: sip_transport_tcp.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sip_transport_tcp.h 2966 2009-10-25 09:02:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -26,6 +26,7 @@
  */
 
 #include <pjsip/sip_transport.h>
+#include <pj/sock_qos.h>
 
 
 /* Only declare the API if PJ_HAS_TCP is true */
@@ -43,6 +44,74 @@ PJ_BEGIN_DECL
  * the transport to the framework.
  */
 
+/**
+ * Settings to be specified when creating the TCP transport. Application 
+ * should initialize this structure with its default values by calling 
+ * pjsip_tcp_transport_cfg_default().
+ */
+typedef struct pjsip_tcp_transport_cfg
+{
+    /**
+     * Address family to use. Valid values are pj_AF_INET() and
+     * pj_AF_INET6(). Default is pj_AF_INET().
+     */
+    int			af;
+
+    /**
+     * Optional address to bind the socket to. Default is to bind to 
+     * PJ_INADDR_ANY and to any available port.
+     */
+    pj_sockaddr		bind_addr;
+
+    /**
+     * Optional published address, which is the address to be
+     * advertised as the address of this SIP transport. 
+     * By default the bound address will be used as the published address.
+     */
+    pjsip_host_port	addr_name;
+
+    /**
+     * Number of simultaneous asynchronous accept() operations to be 
+     * supported. It is recommended that the number here corresponds to 
+     * the number of processors in the system (or the number of SIP
+     * worker threads).
+     *
+     * Default: 1
+     */
+    unsigned	       async_cnt;
+
+    /**
+     * QoS traffic type to be set on this transport. When application wants
+     * to apply QoS tagging to the transport, it's preferable to set this
+     * field rather than \a qos_param fields since this is more portable.
+     *
+     * Default is QoS not set.
+     */
+    pj_qos_type		qos_type;
+
+    /**
+     * Set the low level QoS parameters to the transport. This is a lower
+     * level operation than setting the \a qos_type field and may not be
+     * supported on all platforms.
+     *
+     * Default is QoS not set.
+     */
+    pj_qos_params	qos_params;
+
+} pjsip_tcp_transport_cfg;
+
+
+/**
+ * Initialize pjsip_tcp_transport_cfg structure with default values for
+ * the specifed address family.
+ *
+ * @param cfg		The structure to initialize.
+ * @param af		Address family to be used.
+ */
+PJ_DECL(void) pjsip_tcp_transport_cfg_default(pjsip_tcp_transport_cfg *cfg,
+					      int af);
+
+
 /**
  * Register support for SIP TCP transport by creating TCP listener on
  * the specified address and port. This function will create an
@@ -110,6 +179,24 @@ PJ_DECL(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
 					        unsigned async_cnt,
 					        pjsip_tpfactory **p_factory);
 
+/**
+ * Another variant of #pjsip_tcp_transport_start().
+ *
+ * @param endpt		The SIP endpoint.
+ * @param cfg		TCP transport settings. Application should initialize
+ *			this setting with #pjsip_tcp_transport_cfg_default().
+ * @param p_factory	Optional pointer to receive the instance of the
+ *			SIP TCP transport factory just created.
+ *
+ * @return		PJ_SUCCESS when the transport has been successfully
+ *			started and registered to transport manager, or
+ *			the appropriate error code.
+ */
+PJ_DECL(pj_status_t) pjsip_tcp_transport_start3(
+					pjsip_endpoint *endpt,
+					const pjsip_tcp_transport_cfg *cfg,
+					pjsip_tpfactory **p_factory
+					);
 
 
 PJ_END_DECL
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
index 4c5d1b6a67..e093fd6b08 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
@@ -1,4 +1,4 @@
-/* $Id: sip_transport_tls.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sip_transport_tls.h 2998 2009-11-09 08:51:34Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -27,6 +27,7 @@
 
 #include <pjsip/sip_transport.h>
 #include <pj/string.h>
+#include <pj/sock_qos.h>
 
 
 PJ_BEGIN_DECL
@@ -160,6 +161,32 @@ typedef struct pjsip_tls_setting
      */
     pj_time_val	timeout;
 
+    /**
+     * QoS traffic type to be set on this transport. When application wants
+     * to apply QoS tagging to the transport, it's preferable to set this
+     * field rather than \a qos_param fields since this is more portable.
+     *
+     * Default value is PJ_QOS_TYPE_BEST_EFFORT.
+     */
+    pj_qos_type qos_type;
+
+    /**
+     * Set the low level QoS parameters to the transport. This is a lower
+     * level operation than setting the \a qos_type field and may not be
+     * supported on all platforms.
+     *
+     * By default all settings in this structure are disabled.
+     */
+    pj_qos_params qos_params;
+
+    /**
+     * Specify if the transport should ignore any errors when setting the QoS
+     * traffic type/parameters.
+     *
+     * Default: PJ_TRUE
+     */
+    pj_bool_t qos_ignore_error;
+
 } pjsip_tls_setting;
 
 
@@ -171,6 +198,8 @@ typedef struct pjsip_tls_setting
 PJ_INLINE(void) pjsip_tls_setting_default(pjsip_tls_setting *tls_opt)
 {
     pj_memset(tls_opt, 0, sizeof(*tls_opt));
+    tls_opt->qos_type = PJ_QOS_TYPE_BEST_EFFORT;
+    tls_opt->qos_ignore_error = PJ_TRUE;
 }
 
 
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_util.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_util.h
index da8efa55c7..43a9cab213 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_util.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_util.h
@@ -1,4 +1,4 @@
-/* $Id: sip_util.h 2855 2009-08-05 18:41:23Z nanang $ */
+/* $Id: sip_util.h 2932 2009-10-09 12:11:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -451,14 +451,6 @@ typedef struct pjsip_send_state
      */
     pjsip_tx_data *tdata;
 
-    /** Server addresses resolved. 
-     */
-    pjsip_server_addresses   addr;
-
-    /** Current server address being tried. 
-     */
-    unsigned cur_addr;
-
     /** Current transport being used. 
      */
     pjsip_transport *cur_transport;
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip_simple.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip_simple.h
index f1f925f322..f9fb8643b9 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip_simple.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip_simple.h
@@ -1,4 +1,4 @@
-/* $Id: pjsip_simple.h 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: pjsip_simple.h 2968 2009-10-26 11:21:37Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -35,7 +35,9 @@
 #define __PJSIP_SIMPLE_H__
 
 #include <pjsip-simple/evsub.h>
+#include <pjsip-simple/evsub_msg.h>
 #include <pjsip-simple/iscomposing.h>
+#include <pjsip-simple/mwi.h>
 #include <pjsip-simple/presence.h>
 #include <pjsip-simple/pidf.h>
 #include <pjsip-simple/publish.h>
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua.h b/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua.h
index cb8125bf0a..6821f60aa8 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua.h
@@ -1,4 +1,4 @@
-/* $Id: pjsua.h 2864 2009-08-12 11:03:23Z bennylp $ */
+/* $Id: pjsua.h 3021 2009-11-20 23:33:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -378,6 +378,17 @@ PJ_DECL(void) pjsua_logging_config_dup(pj_pool_t *pool,
 				       const pjsua_logging_config *src);
 
 
+/**
+ * Structure to be passed on MWI callback.
+ */
+typedef struct pjsua_mwi_info
+{
+    pjsip_evsub	    *evsub;	/**< Event subscription session, for
+				     reference.				*/
+    pjsip_rx_data   *rdata;	/**< The received NOTIFY request.	*/
+} pjsua_mwi_info;
+
+
 /**
  * This structure describes application callback to receive various event
  * notification from PJSUA-API. All of these callbacks are OPTIONAL, 
@@ -821,6 +832,17 @@ typedef struct pjsua_callback
 					    const pjsip_uri *target,
 					    const pjsip_event *e);
 
+    /**
+     * This callback is called when a NOTIFY request for message summary / 
+     * message waiting indication is received.
+     *
+     * @param acc_id	The account ID.
+     * @param mwi_info	Structure containing details of the event,
+     *			including the received NOTIFY request in the
+     *			\a rdata field.
+     */
+    void (*on_mwi_info)(pjsua_acc_id acc_id, pjsua_mwi_info *mwi_info);
+
 } pjsua_callback;
 
 
@@ -979,6 +1001,21 @@ typedef struct pjsua_config
      */
     pj_bool_t	    require_timer;
 
+    /**
+     * Handle unsolicited NOTIFY requests containing message waiting 
+     * indication (MWI) info. Unsolicited MWI is incoming NOTIFY requests 
+     * which are not requested by client with SUBSCRIBE request. 
+     *
+     * If this is enabled, the library will respond 200/OK to the NOTIFY
+     * request and forward the request to \a on_mwi_info() callback.
+     *
+     * See also \a mwi_enabled field #on pjsua_acc_config.
+     *
+     * Default: PJ_TRUE
+     *
+     */
+    pj_bool_t	    enable_unsolicited_mwi;
+
     /**
      * Specify Session Timer settings, see #pjsip_timer_setting. 
      * Note that this setting can be further customized in account 
@@ -1396,6 +1433,32 @@ PJ_DECL(pj_status_t) pjsua_cancel_stun_resolution(void *token,
 PJ_DECL(pj_status_t) pjsua_verify_sip_url(const char *url);
 
 
+/**
+ * Schedule a timer entry. Note that the timer callback may be executed
+ * by different thread, depending on whether worker thread is enabled or
+ * not.
+ *
+ * @param entry		Timer heap entry.
+ * @param delay     The interval to expire.
+ *
+ * @return		PJ_SUCCESS on success, or the appropriate error code.
+ *
+ * @see pjsip_endpt_schedule_timer()
+ */
+PJ_DECL(pj_status_t) pjsua_schedule_timer(pj_timer_entry *entry,
+					  const pj_time_val *delay);
+
+
+/**
+ * Cancel the previously scheduled timer.
+ *
+ * @param entry		Timer heap entry.
+ *
+ * @see pjsip_endpt_cancel_timer()
+ */
+PJ_DECL(void) pjsua_cancel_timer(pj_timer_entry *entry);
+
+
 /**
  * This is a utility function to display error message for the specified 
  * error code. The error message will be sent to the log.
@@ -1491,6 +1554,24 @@ typedef struct pjsua_transport_config
      */
     pjsip_tls_setting	tls_setting;
 
+    /**
+     * QoS traffic type to be set on this transport. When application wants
+     * to apply QoS tagging to the transport, it's preferable to set this
+     * field rather than \a qos_param fields since this is more portable.
+     *
+     * Default is QoS not set.
+     */
+    pj_qos_type		qos_type;
+
+    /**
+     * Set the low level QoS parameters to the transport. This is a lower
+     * level operation than setting the \a qos_type field and may not be
+     * supported on all platforms.
+     *
+     * Default is QoS not set.
+     */
+    pj_qos_params	qos_params;
+
 } pjsua_transport_config;
 
 
@@ -1724,6 +1805,17 @@ PJ_DECL(pj_status_t) pjsua_transport_close( pjsua_transport_id id,
 #endif
 
 
+/**
+ * Default maximum time to wait for account unregistration transactions to
+ * complete during library shutdown sequence.
+ *
+ * Default: 4000 (4 seconds)
+ */
+#ifndef PJSUA_UNREG_TIMEOUT
+#   define PJSUA_UNREG_TIMEOUT	    4000
+#endif
+
+
 /**
  * Default PUBLISH expiration
  */
@@ -1750,6 +1842,22 @@ PJ_DECL(pj_status_t) pjsua_transport_close( pjsua_transport_id id,
 #endif
 
 
+/**
+ * Maximum time to wait for unpublication transaction(s) to complete
+ * during shutdown process, before sending unregistration. The library
+ * tries to wait for the unpublication (un-PUBLISH) to complete before
+ * sending REGISTER request to unregister the account, during library
+ * shutdown process. If the value is set too short, it is possible that
+ * the unregistration is sent before unpublication completes, causing
+ * unpublication request to fail.
+ *
+ * Default: 2000 (2 seconds)
+ */
+#ifndef PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC
+#   define PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC	2000
+#endif
+
+
 /**
  * This structure describes account configuration to be specified when
  * adding a new account with #pjsua_acc_add(). Application MUST initialize
@@ -1788,6 +1896,15 @@ typedef struct pjsua_acc_config
      */
     pj_str_t	    reg_uri;
 
+    /**
+     * Subscribe to message waiting indication events (RFC 3842).
+     *
+     * See also \a enable_unsolicited_mwi field on #pjsua_config.
+     *
+     * Default: no
+     */
+    pj_bool_t	    mwi_enabled;
+
     /**
      * If this flag is set, the presence information of this account will
      * be PUBLISH-ed to the server where the account belongs.
@@ -1796,6 +1913,24 @@ typedef struct pjsua_acc_config
      */
     pj_bool_t	    publish_enabled;
 
+    /**
+     * Event publication options.
+     */
+    pjsip_publishc_opt	publish_opt;
+
+    /**
+     * Maximum time to wait for unpublication transaction(s) to complete
+     * during shutdown process, before sending unregistration. The library
+     * tries to wait for the unpublication (un-PUBLISH) to complete before
+     * sending REGISTER request to unregister the account, during library
+     * shutdown process. If the value is set too short, it is possible that
+     * the unregistration is sent before unpublication completes, causing
+     * unpublication request to fail.
+     *
+     * Default: PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC
+     */
+    unsigned	    unpublish_max_wait_time_msec;
+
     /**
      * Authentication preference.
      */
@@ -1885,6 +2020,14 @@ typedef struct pjsua_acc_config
      */
     unsigned	    reg_timeout;
 
+    /**
+     * Specify the maximum time to wait for unregistration requests to
+     * complete during library shutdown sequence.
+     *
+     * Default: PJSUA_UNREG_TIMEOUT
+     */
+    unsigned	    unreg_timeout;
+
     /** 
      * Number of credentials in the credential array.
      */
@@ -2958,9 +3101,12 @@ PJ_DECL(pj_status_t) pjsua_call_dump(pjsua_call_id call_id,
 
 
 /**
- * This specifies how long the library should retry resending SUBSCRIBE
- * if the previous SUBSCRIBE failed. This also controls the duration 
- * before failed PUBLISH request will be retried.
+ * This specifies how long the library should wait before retrying failed
+ * SUBSCRIBE request, and there is no rule to automatically resubscribe 
+ * (for example, no "retry-after" parameter in Subscription-State header).
+ *
+ * This also controls the duration  before failed PUBLISH request will be
+ * retried.
  *
  * Default: 300 seconds
  */
@@ -3075,7 +3221,16 @@ typedef struct pjsua_buddy_info
     const char	       *sub_state_name;
 
     /**
-     * Specifies the last presence subscription terminatino reason. If 
+     * Specifies the last presence subscription termination code. This would
+     * return the last status of the SUBSCRIBE request. If the subscription
+     * is terminated with NOTIFY by the server, this value will be set to
+     * 200, and subscription termination reason will be given in the
+     * \a sub_term_reason field.
+     */
+    unsigned		sub_term_code;
+
+    /**
+     * Specifies the last presence subscription termination reason. If 
      * presence subscription is currently active, the value will be empty.
      */
     pj_str_t		sub_term_reason;
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua_internal.h b/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua_internal.h
index e5c82e3e3f..86e8815cba 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua_internal.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsua-lib/pjsua_internal.h
@@ -1,4 +1,4 @@
-/* $Id: pjsua_internal.h 2874 2009-08-13 15:55:47Z bennylp $ */
+/* $Id: pjsua_internal.h 2968 2009-10-26 11:21:37Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -82,6 +82,9 @@ typedef struct pjsua_call
     pjmedia_transport	*med_orig;  /**< Original media transport	    */
     pj_bool_t		 med_tp_auto_del; /**< May delete media transport   */
     pjsua_med_tp_st	 med_tp_st; /**< Media transport state		    */
+    pj_sockaddr		 med_rtp_addr; /**< Current RTP source address
+					    (used to update ICE default
+					    address)			    */
     pj_stun_nat_type	 rem_nat_type; /**< NAT type of remote endpoint.    */
     pjmedia_srtp_use	 rem_srtp_use; /**< Remote's SRTP usage policy.	    */
 
@@ -141,6 +144,8 @@ typedef struct pjsua_acc
     pjsip_publishc  *publish_sess;  /**< Client publication session.	*/
     pj_bool_t	     publish_state; /**< Last published online status	*/
 
+    pjsip_evsub	    *mwi_sub;	    /**< MWI client subscription	*/
+    pjsip_dialog    *mwi_dlg;	    /**< Dialog for MWI sub.		*/
 } pjsua_acc;
 
 
@@ -182,9 +187,10 @@ typedef struct pjsua_buddy
     pj_bool_t		 monitor;   /**< Should we monitor?		*/
     pjsip_dialog	*dlg;	    /**< The underlying dialog.		*/
     pjsip_evsub		*sub;	    /**< Buddy presence subscription	*/
+    unsigned		 term_code; /**< Subscription termination code	*/
     pj_str_t		 term_reason;/**< Subscription termination reason */
     pjsip_pres_status	 status;    /**< Buddy presence status.		*/
-
+    pj_timer_entry	 timer;	    /**< Resubscription timer		*/
 } pjsua_buddy;
 
 
@@ -447,6 +453,11 @@ void pjsua_pres_delete_acc(int acc_id);
  */
 pj_status_t pjsua_im_init(void);
 
+/**
+ * Start MWI subscription
+ */
+void pjsua_start_mwi(pjsua_acc *acc);
+
 /**
  * Init call subsystem.
  */
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/mwi.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/mwi.c
new file mode 100644
index 0000000000..c8ae4645fc
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/mwi.c
@@ -0,0 +1,599 @@
+/* $Id: mwi.c 2968 2009-10-26 11:21:37Z bennylp $ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * 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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#include <pjsip-simple/mwi.h>
+#include <pjsip-simple/errno.h>
+#include <pjsip-simple/evsub_msg.h>
+#include <pjsip/sip_module.h>
+#include <pjsip/sip_endpoint.h>
+#include <pjsip/sip_dialog.h>
+#include <pj/assert.h>
+#include <pj/guid.h>
+#include <pj/log.h>
+#include <pj/os.h>
+#include <pj/pool.h>
+#include <pj/string.h>
+
+
+#define THIS_FILE		    "mwi.c"
+#define MWI_DEFAULT_EXPIRES	    3600
+
+ /*
+ * MWI module (mod-mdi)
+ */
+static struct pjsip_module mod_mwi = 
+{
+    NULL, NULL,			    /* prev, next.			*/
+    { "mod-mwi", 7 },		    /* Name.				*/
+    -1,				    /* Id				*/
+    PJSIP_MOD_PRIORITY_DIALOG_USAGE,/* Priority				*/
+    NULL,			    /* load()				*/
+    NULL,			    /* start()				*/
+    NULL,			    /* stop()				*/
+    NULL,			    /* unload()				*/
+    NULL,			    /* on_rx_request()			*/
+    NULL,			    /* on_rx_response()			*/
+    NULL,			    /* on_tx_request.			*/
+    NULL,			    /* on_tx_response()			*/
+    NULL,			    /* on_tsx_state()			*/
+};
+
+
+/*
+ * This structure describe an mwi agent (both client and server)
+ */
+typedef struct pjsip_mwi
+{
+    pjsip_evsub		*sub;		/**< Event subscribtion record.	    */
+    pjsip_dialog	*dlg;		/**< The dialog.		    */
+    pjsip_evsub_user	 user_cb;	/**< The user callback.		    */
+
+    /* These are for server subscriptions */
+    pj_pool_t		*body_pool;	/**< Pool to save message body	    */
+    pjsip_media_type	 mime_type;	/**< MIME type of last msg body	    */
+    pj_str_t		 body;		/**< Last sent message body	    */
+} pjsip_mwi;
+
+
+/*
+ * Forward decl for evsub callbacks.
+ */
+static void mwi_on_evsub_state( pjsip_evsub *sub, pjsip_event *event);
+static void mwi_on_evsub_tsx_state( pjsip_evsub *sub, pjsip_transaction *tsx,
+				    pjsip_event *event);
+static void mwi_on_evsub_rx_refresh( pjsip_evsub *sub, 
+				     pjsip_rx_data *rdata,
+				     int *p_st_code,
+				     pj_str_t **p_st_text,
+				     pjsip_hdr *res_hdr,
+				     pjsip_msg_body **p_body);
+static void mwi_on_evsub_rx_notify( pjsip_evsub *sub, 
+				    pjsip_rx_data *rdata,
+				    int *p_st_code,
+				    pj_str_t **p_st_text,
+				    pjsip_hdr *res_hdr,
+				    pjsip_msg_body **p_body);
+static void mwi_on_evsub_client_refresh(pjsip_evsub *sub);
+static void mwi_on_evsub_server_timeout(pjsip_evsub *sub);
+
+
+/*
+ * Event subscription callback for mwi.
+ */
+static pjsip_evsub_user mwi_user = 
+{
+    &mwi_on_evsub_state,
+    &mwi_on_evsub_tsx_state,
+    &mwi_on_evsub_rx_refresh,
+    &mwi_on_evsub_rx_notify,
+    &mwi_on_evsub_client_refresh,
+    &mwi_on_evsub_server_timeout,
+};
+
+
+/*
+ * Some static constants.
+ */
+static const pj_str_t STR_EVENT		 = { "Event", 5 };
+static const pj_str_t STR_MWI		 = { "message-summary", 15 };
+static const pj_str_t STR_APP_SIMPLE_SMS = { "application/simple-message-summary", 34};
+
+/*
+ * Init mwi module.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_init_module( pjsip_endpoint *endpt,
+					   pjsip_module *mod_evsub)
+{
+    pj_status_t status;
+    pj_str_t accept[1];
+
+    /* Check arguments. */
+    PJ_ASSERT_RETURN(endpt && mod_evsub, PJ_EINVAL);
+
+    /* Must have not been registered */
+    PJ_ASSERT_RETURN(mod_mwi.id == -1, PJ_EINVALIDOP);
+
+    /* Register to endpoint */
+    status = pjsip_endpt_register_module(endpt, &mod_mwi);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    accept[0] = STR_APP_SIMPLE_SMS;
+
+    /* Register event package to event module. */
+    status = pjsip_evsub_register_pkg( &mod_mwi, &STR_MWI, 
+				       MWI_DEFAULT_EXPIRES, 
+				       PJ_ARRAY_SIZE(accept), accept);
+    if (status != PJ_SUCCESS) {
+	pjsip_endpt_unregister_module(endpt, &mod_mwi);
+	return status;
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Get mwi module instance.
+ */
+PJ_DEF(pjsip_module*) pjsip_mwi_instance(void)
+{
+    return &mod_mwi;
+}
+
+
+/*
+ * Create client subscription.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_create_uac( pjsip_dialog *dlg,
+					  const pjsip_evsub_user *user_cb,
+					  unsigned options,
+					  pjsip_evsub **p_evsub )
+{
+    pj_status_t status;
+    pjsip_mwi *mwi;
+    pjsip_evsub *sub;
+
+    PJ_ASSERT_RETURN(dlg && p_evsub, PJ_EINVAL);
+
+    PJ_UNUSED_ARG(options);
+
+    pjsip_dlg_inc_lock(dlg);
+
+    /* Create event subscription */
+    status = pjsip_evsub_create_uac( dlg,  &mwi_user, &STR_MWI, 
+				     options, &sub);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Create mwi */
+    mwi = PJ_POOL_ZALLOC_T(dlg->pool, pjsip_mwi);
+    mwi->dlg = dlg;
+    mwi->sub = sub;
+    if (user_cb)
+	pj_memcpy(&mwi->user_cb, user_cb, sizeof(pjsip_evsub_user));
+
+    /* Attach to evsub */
+    pjsip_evsub_set_mod_data(sub, mod_mwi.id, mwi);
+
+    *p_evsub = sub;
+
+on_return:
+    pjsip_dlg_dec_lock(dlg);
+    return status;
+}
+
+
+/*
+ * Create server subscription.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_create_uas( pjsip_dialog *dlg,
+					  const pjsip_evsub_user *user_cb,
+					  pjsip_rx_data *rdata,
+					  pjsip_evsub **p_evsub )
+{
+    pjsip_accept_hdr *accept;
+    pjsip_event_hdr *event;
+    pjsip_evsub *sub;
+    pjsip_mwi *mwi;
+    char obj_name[PJ_MAX_OBJ_NAME];
+    pj_status_t status;
+
+    /* Check arguments */
+    PJ_ASSERT_RETURN(dlg && rdata && p_evsub, PJ_EINVAL);
+
+    /* Must be request message */
+    PJ_ASSERT_RETURN(rdata->msg_info.msg->type == PJSIP_REQUEST_MSG,
+		     PJSIP_ENOTREQUESTMSG);
+
+    /* Check that request is SUBSCRIBE */
+    PJ_ASSERT_RETURN(pjsip_method_cmp(&rdata->msg_info.msg->line.req.method,
+				      &pjsip_subscribe_method)==0,
+		     PJSIP_SIMPLE_ENOTSUBSCRIBE);
+
+    /* Check that Event header contains "mwi" */
+    event = (pjsip_event_hdr*)
+    	    pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &STR_EVENT, NULL);
+    if (!event) {
+	return PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_BAD_REQUEST);
+    }
+    if (pj_stricmp(&event->event_type, &STR_MWI) != 0) {
+	return PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_BAD_EVENT);
+    }
+
+    /* Check that request contains compatible Accept header. */
+    accept = (pjsip_accept_hdr*)
+    	     pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_ACCEPT, NULL);
+    if (accept) {
+	unsigned i;
+	for (i=0; i<accept->count; ++i) {
+	    if (pj_stricmp(&accept->values[i], &STR_APP_SIMPLE_SMS)==0) {
+		break;
+	    }
+	}
+
+	if (i==accept->count) {
+	    /* Nothing is acceptable */
+	    return PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_NOT_ACCEPTABLE);
+	}
+
+    } else {
+	/* No Accept header. 
+	 * Assume client supports "application/simple-message-summary" 
+	*/
+    }
+
+    /* Lock dialog */
+    pjsip_dlg_inc_lock(dlg);
+
+
+    /* Create server subscription */
+    status = pjsip_evsub_create_uas( dlg, &mwi_user, rdata, 0, &sub);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Create server mwi subscription */
+    mwi = PJ_POOL_ZALLOC_T(dlg->pool, pjsip_mwi);
+    mwi->dlg = dlg;
+    mwi->sub = sub;
+    if (user_cb)
+	pj_memcpy(&mwi->user_cb, user_cb, sizeof(pjsip_evsub_user));
+
+    pj_ansi_snprintf(obj_name, PJ_MAX_OBJ_NAME, "mwibd%p", dlg->pool);
+    mwi->body_pool = pj_pool_create(dlg->pool->factory, obj_name, 
+				    512, 512, NULL);
+
+    /* Attach to evsub */
+    pjsip_evsub_set_mod_data(sub, mod_mwi.id, mwi);
+
+    /* Done: */
+    *p_evsub = sub;
+
+on_return:
+    pjsip_dlg_dec_lock(dlg);
+    return status;
+}
+
+
+/*
+ * Forcefully terminate mwi.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_terminate( pjsip_evsub *sub,
+					 pj_bool_t notify )
+{
+    return pjsip_evsub_terminate(sub, notify);
+}
+
+/*
+ * Create SUBSCRIBE
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_initiate( pjsip_evsub *sub,
+					pj_int32_t expires,
+					pjsip_tx_data **p_tdata)
+{
+    return pjsip_evsub_initiate(sub, &pjsip_subscribe_method, expires, 
+				p_tdata);
+}
+
+
+/*
+ * Accept incoming subscription.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_accept( pjsip_evsub *sub,
+				      pjsip_rx_data *rdata,
+				      int st_code,
+				      const pjsip_hdr *hdr_list )
+{
+    return pjsip_evsub_accept( sub, rdata, st_code, hdr_list );
+}
+
+/*
+ * Create message body and attach it to the (NOTIFY) request.
+ */
+static pj_status_t mwi_create_msg_body( pjsip_mwi *mwi, 
+					pjsip_tx_data *tdata)
+{
+    pjsip_msg_body *body;
+    pj_str_t dup_text;
+
+    PJ_ASSERT_RETURN(mwi->mime_type.type.slen && mwi->body.slen, PJ_EINVALIDOP);
+    
+    /* Clone the message body and mime type */
+    pj_strdup(tdata->pool, &dup_text, &mwi->body);
+
+    /* Create the message body */
+    body = PJ_POOL_ZALLOC_T(tdata->pool, pjsip_msg_body);
+    pjsip_media_type_cp(tdata->pool, &body->content_type, &mwi->mime_type);
+    body->data = dup_text.ptr;
+    body->len = (unsigned)dup_text.slen;
+    body->print_body = &pjsip_print_text_body;
+    body->clone_data = &pjsip_clone_text_data;
+
+    /* Attach to tdata */
+    tdata->msg->body = body;
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * Create NOTIFY
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_notify(  pjsip_evsub *sub,
+				       pjsip_evsub_state state,
+				       const pj_str_t *state_str,
+				       const pj_str_t *reason,
+				       const pjsip_media_type *mime_type,
+				       const pj_str_t *body,
+				       pjsip_tx_data **p_tdata)
+{
+    pjsip_mwi *mwi;
+    pjsip_tx_data *tdata;
+    pj_status_t status;
+    
+    /* Check arguments. */
+    PJ_ASSERT_RETURN(sub && mime_type && body && p_tdata, PJ_EINVAL);
+
+    /* Get the mwi object. */
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_RETURN(mwi != NULL, PJ_EINVALIDOP);
+
+    /* Lock object. */
+    pjsip_dlg_inc_lock(mwi->dlg);
+
+    /* Create the NOTIFY request. */
+    status = pjsip_evsub_notify( sub, state, state_str, reason, &tdata);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Update the cached message body */
+    if (mime_type || body)
+	pj_pool_reset(mwi->body_pool);
+    if (mime_type)
+	pjsip_media_type_cp(mwi->body_pool, &mwi->mime_type, mime_type);
+    if (body)
+	pj_strdup(mwi->body_pool, &mwi->body, body);
+
+    /* Create message body */
+    status = mwi_create_msg_body( mwi, tdata );
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Done. */
+    *p_tdata = tdata;
+
+on_return:
+    pjsip_dlg_dec_lock(mwi->dlg);
+    return status;
+}
+
+
+/*
+ * Create NOTIFY that reflect current state.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_current_notify( pjsip_evsub *sub,
+					      pjsip_tx_data **p_tdata )
+{
+    pjsip_mwi *mwi;
+    pjsip_tx_data *tdata;
+    pj_status_t status;
+    
+    /* Check arguments. */
+    PJ_ASSERT_RETURN(sub && p_tdata, PJ_EINVAL);
+
+    /* Get the mwi object. */
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_RETURN(mwi != NULL, PJ_EINVALIDOP);
+
+    /* Lock object. */
+    pjsip_dlg_inc_lock(mwi->dlg);
+
+    /* Create the NOTIFY request. */
+    status = pjsip_evsub_current_notify( sub, &tdata);
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+
+    /* Create message body to reflect the mwi status. */
+    status = mwi_create_msg_body( mwi, tdata );
+    if (status != PJ_SUCCESS)
+	goto on_return;
+
+    /* Done. */
+    *p_tdata = tdata;
+
+on_return:
+    pjsip_dlg_dec_lock(mwi->dlg);
+    return status;
+}
+
+
+/*
+ * Send request.
+ */
+PJ_DEF(pj_status_t) pjsip_mwi_send_request( pjsip_evsub *sub,
+					     pjsip_tx_data *tdata )
+{
+    return pjsip_evsub_send_request(sub, tdata);
+}
+
+/*
+ * This callback is called by event subscription when subscription
+ * state has changed.
+ */
+static void mwi_on_evsub_state( pjsip_evsub *sub, pjsip_event *event)
+{
+    pjsip_mwi *mwi;
+
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_ON_FAIL(mwi!=NULL, {return;});
+
+    if (mwi->user_cb.on_evsub_state)
+	(*mwi->user_cb.on_evsub_state)(sub, event);
+
+    if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED) {
+	if (mwi->body_pool) {
+	    pj_pool_release(mwi->body_pool);
+	    mwi->body_pool = NULL;
+	}
+    }
+}
+
+/*
+ * Called when transaction state has changed.
+ */
+static void mwi_on_evsub_tsx_state( pjsip_evsub *sub, pjsip_transaction *tsx,
+				     pjsip_event *event)
+{
+    pjsip_mwi *mwi;
+
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_ON_FAIL(mwi!=NULL, {return;});
+
+    if (mwi->user_cb.on_tsx_state)
+	(*mwi->user_cb.on_tsx_state)(sub, tsx, event);
+}
+
+
+/*
+ * Called when SUBSCRIBE is received.
+ */
+static void mwi_on_evsub_rx_refresh( pjsip_evsub *sub, 
+				     pjsip_rx_data *rdata,
+				     int *p_st_code,
+				     pj_str_t **p_st_text,
+				     pjsip_hdr *res_hdr,
+				     pjsip_msg_body **p_body)
+{
+    pjsip_mwi *mwi;
+
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_ON_FAIL(mwi!=NULL, {return;});
+
+    if (mwi->user_cb.on_rx_refresh) {
+	(*mwi->user_cb.on_rx_refresh)(sub, rdata, p_st_code, p_st_text,
+				       res_hdr, p_body);
+
+    } else {
+	/* Implementors MUST send NOTIFY if it implements on_rx_refresh */
+	pjsip_tx_data *tdata;
+	pj_str_t timeout = { "timeout", 7};
+	pj_status_t status;
+
+	if (pjsip_evsub_get_state(sub)==PJSIP_EVSUB_STATE_TERMINATED) {
+	    status = pjsip_mwi_notify( sub, PJSIP_EVSUB_STATE_TERMINATED,
+				       NULL, &timeout, NULL, NULL, &tdata);
+	} else {
+	    status = pjsip_mwi_current_notify(sub, &tdata);
+	}
+
+	if (status == PJ_SUCCESS)
+	    pjsip_mwi_send_request(sub, tdata);
+    }
+}
+
+
+/*
+ * Called when NOTIFY is received.
+ */
+static void mwi_on_evsub_rx_notify( pjsip_evsub *sub, 
+				     pjsip_rx_data *rdata,
+				     int *p_st_code,
+				     pj_str_t **p_st_text,
+				     pjsip_hdr *res_hdr,
+				     pjsip_msg_body **p_body)
+{
+    pjsip_mwi *mwi;
+
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_ON_FAIL(mwi!=NULL, {return;});
+
+    /* Just notify application. */
+    if (mwi->user_cb.on_rx_notify) {
+	(*mwi->user_cb.on_rx_notify)(sub, rdata, p_st_code, p_st_text, 
+				     res_hdr, p_body);
+    }
+}
+
+/*
+ * Called when it's time to send SUBSCRIBE.
+ */
+static void mwi_on_evsub_client_refresh(pjsip_evsub *sub)
+{
+    pjsip_mwi *mwi;
+
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_ON_FAIL(mwi!=NULL, {return;});
+
+    if (mwi->user_cb.on_client_refresh) {
+	(*mwi->user_cb.on_client_refresh)(sub);
+    } else {
+	pj_status_t status;
+	pjsip_tx_data *tdata;
+
+	status = pjsip_mwi_initiate(sub, -1, &tdata);
+	if (status == PJ_SUCCESS)
+	    pjsip_mwi_send_request(sub, tdata);
+    }
+}
+
+/*
+ * Called when no refresh is received after the interval.
+ */
+static void mwi_on_evsub_server_timeout(pjsip_evsub *sub)
+{
+    pjsip_mwi *mwi;
+
+    mwi = (pjsip_mwi*) pjsip_evsub_get_mod_data(sub, mod_mwi.id);
+    PJ_ASSERT_ON_FAIL(mwi!=NULL, {return;});
+
+    if (mwi->user_cb.on_server_timeout) {
+	(*mwi->user_cb.on_server_timeout)(sub);
+    } else {
+	pj_status_t status;
+	pjsip_tx_data *tdata;
+	pj_str_t reason = { "timeout", 7 };
+
+	status = pjsip_mwi_notify(sub, PJSIP_EVSUB_STATE_TERMINATED,
+				   NULL, &reason, NULL, NULL, &tdata);
+	if (status == PJ_SUCCESS)
+	    pjsip_mwi_send_request(sub, tdata);
+    }
+}
+
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/presence_body.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/presence_body.c
index fe245bd4ea..a6069594b4 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/presence_body.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/presence_body.c
@@ -1,4 +1,4 @@
-/* $Id: presence_body.c 2877 2009-08-13 16:17:51Z bennylp $ */
+/* $Id: presence_body.c 3045 2010-01-05 15:23:43Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -124,7 +124,7 @@ PJ_DEF(pj_status_t) pjsip_pres_create_pidf( pj_pool_t *pool,
 
 	  tslen = pj_ansi_snprintf(buf, sizeof(buf),
 				   "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ",
-				   pt.year, pt.mon, pt.day, 
+				   pt.year, pt.mon+1, pt.day, 
 				   pt.hour, pt.min, pt.sec, pt.msec);
 	  if (tslen > 0 && tslen < sizeof(buf)) {
 	      pj_str_t time = pj_str(buf);
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/publishc.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/publishc.c
index 4dcb0f5027..d4a7f8271e 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/publishc.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/publishc.c
@@ -1,4 +1,4 @@
-/* $Id: publishc.c 2754 2009-06-05 16:10:36Z bennylp $ */
+/* $Id: publishc.c 2940 2009-10-12 07:44:14Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -56,6 +56,15 @@ const pjsip_method pjsip_publish_method =
 };
 
 
+/**
+ * Pending request list.
+ */
+typedef struct pending_publish
+{
+    PJ_DECL_LIST_MEMBER(pjsip_tx_data);
+} pending_publish;
+
+
 /**
  * SIP client publication structure.
  */
@@ -65,7 +74,9 @@ struct pjsip_publishc
     pjsip_endpoint		*endpt;
     pj_bool_t			 _delete_flag;
     int				 pending_tsx;
+    pj_mutex_t			*mutex;
 
+    pjsip_publishc_opt		 opt;
     void			*token;
     pjsip_publishc_cb		*cb;
 
@@ -91,9 +102,18 @@ struct pjsip_publishc
     pj_time_val			 last_refresh;
     pj_time_val			 next_refresh;
     pj_timer_entry		 timer;
+
+    /* Pending PUBLISH request */
+    pending_publish		 pending_reqs;
 };
 
 
+PJ_DEF(void) pjsip_publishc_opt_default(pjsip_publishc_opt *opt)
+{
+    pj_bzero(opt, sizeof(*opt));
+    opt->queue_request = PJSIP_PUBLISHC_QUEUE_REQUEST;
+}
+
 
 /*
  * Initialize client publication module.
@@ -127,20 +147,18 @@ PJ_DEF(pj_status_t) pjsip_publishc_init_module(pjsip_endpoint *endpt)
 
 
 PJ_DEF(pj_status_t) pjsip_publishc_create( pjsip_endpoint *endpt, 
-					   unsigned options,
+					   const pjsip_publishc_opt *opt,
 					   void *token,
 					   pjsip_publishc_cb *cb,	
 					   pjsip_publishc **p_pubc)
 {
     pj_pool_t *pool;
     pjsip_publishc *pubc;
+    pjsip_publishc_opt default_opt;
     pj_status_t status;
 
     /* Verify arguments. */
     PJ_ASSERT_RETURN(endpt && cb && p_pubc, PJ_EINVAL);
-    PJ_ASSERT_RETURN(options == 0, PJ_EINVAL);
-
-    PJ_UNUSED_ARG(options);
 
     pool = pjsip_endpt_create_pool(endpt, "pubc%p", 1024, 1024);
     PJ_ASSERT_RETURN(pool != NULL, PJ_ENOMEM);
@@ -153,9 +171,25 @@ PJ_DEF(pj_status_t) pjsip_publishc_create( pjsip_endpoint *endpt,
     pubc->cb = cb;
     pubc->expires = PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED;
 
+    if (!opt) {
+	pjsip_publishc_opt_default(&default_opt);
+	opt = &default_opt;
+    }
+    pj_memcpy(&pubc->opt, opt, sizeof(*opt));
+    pj_list_init(&pubc->pending_reqs);
+
+    status = pj_mutex_create_recursive(pubc->pool, "pubc%p", &pubc->mutex);
+    if (status != PJ_SUCCESS) {
+	pj_pool_release(pool);
+	return status;
+    }
+
     status = pjsip_auth_clt_init(&pubc->auth_sess, endpt, pubc->pool, 0);
-    if (status != PJ_SUCCESS)
+    if (status != PJ_SUCCESS) {
+	pj_mutex_destroy(pubc->mutex);
+	pj_pool_release(pool);
 	return status;
+    }
 
     pj_list_init(&pubc->route_set);
     pj_list_init(&pubc->usr_hdr);
@@ -174,6 +208,14 @@ PJ_DEF(pj_status_t) pjsip_publishc_destroy(pjsip_publishc *pubc)
 	pubc->_delete_flag = 1;
 	pubc->cb = NULL;
     } else {
+	/* Cancel existing timer, if any */
+	if (pubc->timer.id != 0) {
+	    pjsip_endpt_cancel_timer(pubc->endpt, &pubc->timer);
+	    pubc->timer.id = 0;
+	}
+
+	if (pubc->mutex)
+	    pj_mutex_destroy(pubc->mutex);
 	pjsip_endpt_release_pool(pubc->endpt, pubc->pool);
     }
 
@@ -570,6 +612,12 @@ static void tsx_callback(void *token, pjsip_event *event)
 	    if (pubc->auto_refresh && expiration!=0 && expiration!=0xFFFF) {
 		pj_time_val delay = { 0, 0};
 
+		/* Cancel existing timer, if any */
+		if (pubc->timer.id != 0) {
+		    pjsip_endpt_cancel_timer(pubc->endpt, &pubc->timer);
+		    pubc->timer.id = 0;
+		}
+
 		delay.sec = expiration - DELAY_BEFORE_REFRESH;
 		if (pubc->expires != PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED && 
 		    delay.sec > (pj_int32_t)pubc->expires) 
@@ -607,6 +655,22 @@ static void tsx_callback(void *token, pjsip_event *event)
 		      rdata, expiration);
 
 	--pubc->pending_tsx;
+
+	/* If we have pending request(s), send them now */
+	pj_mutex_lock(pubc->mutex);
+	while (!pj_list_empty(&pubc->pending_reqs)) {
+	    pjsip_tx_data *tdata = pubc->pending_reqs.next;
+	    pj_list_erase(tdata);
+	    status = pjsip_publishc_send(pubc, tdata);
+	    if (status == PJ_EPENDING) {
+		pj_assert(!"Not expected");
+		pj_list_erase(tdata);
+		pjsip_tx_data_dec_ref(tdata);
+	    } else if (status == PJ_SUCCESS) {
+		break;
+	    }
+	}
+	pj_mutex_unlock(pubc->mutex);
     }
 
     /* Delete the record if user destroy pubc during the callback. */
@@ -623,13 +687,26 @@ PJ_DEF(pj_status_t) pjsip_publishc_send(pjsip_publishc *pubc,
     pjsip_cseq_hdr *cseq_hdr;
     pj_uint32_t cseq;
 
+    PJ_ASSERT_RETURN(pubc && tdata, PJ_EINVAL);
+
     /* Make sure we don't have pending transaction. */
+    pj_mutex_lock(pubc->mutex);
     if (pubc->pending_tsx) {
-	PJ_LOG(4,(THIS_FILE, "Unable to send request, pubc has another "
-			     "transaction pending"));
-	pjsip_tx_data_dec_ref( tdata );
-	return PJSIP_EBUSY;
+	if (pubc->opt.queue_request) {
+	    pj_list_push_back(&pubc->pending_reqs, tdata);
+	    pj_mutex_unlock(pubc->mutex);
+	    PJ_LOG(4,(THIS_FILE, "Request is queued, pubc has another "
+				 "transaction pending"));
+	    return PJ_EPENDING;
+	} else {
+	    pjsip_tx_data_dec_ref(tdata);
+	    pj_mutex_unlock(pubc->mutex);
+	    PJ_LOG(4,(THIS_FILE, "Unable to send request, pubc has another "
+				 "transaction pending"));
+	    return PJ_EBUSY;
+	}
     }
+    pj_mutex_unlock(pubc->mutex);
 
     /* Invalidate message buffer. */
     pjsip_tx_data_invalidate_msg(tdata);
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/rpid.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/rpid.c
index 615d3915a3..0ec9d260b5 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/rpid.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip-simple/rpid.c
@@ -1,4 +1,4 @@
-/* $Id: rpid.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: rpid.c 2935 2009-10-09 13:17:56Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -21,6 +21,7 @@
 #include <pjsip-simple/errno.h>
 #include <pj/assert.h>
 #include <pj/guid.h>
+#include <pj/pool.h>
 #include <pj/string.h>
 
 
@@ -146,7 +147,16 @@ PJ_DEF(pj_status_t) pjrpid_add_element(pjpidf_pres *pres,
 	attr = pj_xml_attr_new(pool, &ID, &elem->id);
     } else {
 	pj_str_t person_id;
-	pj_create_unique_string(pool, &person_id);
+	/* xs:ID must start with letter */
+	//pj_create_unique_string(pool, &person_id);
+	person_id.ptr = (char*)pj_pool_alloc(pool, PJ_GUID_STRING_LENGTH+2);
+	person_id.ptr += 2;
+	pj_generate_unique_string(&person_id);
+	person_id.ptr -= 2;
+	person_id.ptr[0] = 'p';
+	person_id.ptr[1] = 'j';
+	person_id.slen += 2;
+
 	attr = pj_xml_attr_new(pool, &ID, &person_id);
     }
     pj_xml_add_attr(nd_person, attr);
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_inv.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_inv.c
index 3adfe72dae..9aba3bbcd1 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_inv.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_inv.c
@@ -1,4 +1,4 @@
-/* $Id: sip_inv.c 2879 2009-08-14 13:23:22Z nanang $ */
+/* $Id: sip_inv.c 2951 2009-10-16 06:28:56Z nanang $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -108,6 +108,10 @@ static pj_status_t process_answer( pjsip_inv_session *inv,
 				   pjsip_tx_data *tdata,
 				   const pjmedia_sdp_session *local_sdp);
 
+static pj_status_t handle_timer_response(pjsip_inv_session *inv,
+				         const pjsip_rx_data *rdata,
+				         pj_bool_t end_sess_on_failure);
+
 static void (*inv_state_handler[])( pjsip_inv_session *inv, pjsip_event *e) = 
 {
     &inv_on_state_null,
@@ -477,6 +481,29 @@ static pj_bool_t mod_inv_on_rx_request(pjsip_rx_data *rdata)
     return PJ_FALSE;
 }
 
+/* This function will process Session Timer headers in received 
+ * 2xx or 422 response of INVITE/UPDATE request.
+ */
+static pj_status_t handle_timer_response(pjsip_inv_session *inv,
+				         const pjsip_rx_data *rdata,
+					 pj_bool_t end_sess_on_failure)
+{
+    pjsip_status_code st_code;
+    pj_status_t status;
+
+    status = pjsip_timer_process_resp(inv, rdata, &st_code);
+    if (status != PJ_SUCCESS && end_sess_on_failure) {
+	pjsip_tx_data *tdata;
+	pj_status_t status2;
+
+	status2 = pjsip_inv_end_session(inv, st_code, NULL, &tdata);
+	if (tdata && status2 == PJ_SUCCESS)
+	    pjsip_inv_send_msg(inv, tdata);
+    }
+
+    return status;
+}
+
 /*
  * Module on_rx_response().
  *
@@ -490,8 +517,6 @@ static pj_bool_t mod_inv_on_rx_response(pjsip_rx_data *rdata)
     pjsip_dialog *dlg;
     pjsip_inv_session *inv;
     pjsip_msg *msg = rdata->msg_info.msg;
-    pj_status_t status;
-    pjsip_status_code st_code;
 
     dlg = pjsip_rdata_get_dlg(rdata);
 
@@ -519,22 +544,6 @@ static pj_bool_t mod_inv_on_rx_response(pjsip_rx_data *rdata)
 
     }
 
-    /* Pass response to timer session module */
-    status = pjsip_timer_process_resp(inv, rdata, &st_code);
-    if (status != PJ_SUCCESS) {
-	pjsip_event e;
-	pjsip_tx_data *tdata;
-
-	PJSIP_EVENT_INIT_RX_MSG(e, rdata);
-	inv_send_ack(inv, &e);
-
-	status = pjsip_inv_end_session(inv, st_code, NULL, &tdata);
-	if (tdata && status == PJ_SUCCESS)
-	    pjsip_inv_send_msg(inv, tdata);
-
-	return PJ_TRUE;
-    }
-
     /* No other processing needs to be done here. */
     return PJ_FALSE;
 }
@@ -2774,8 +2783,8 @@ static void inv_handle_update_response( pjsip_inv_session *inv,
 
     /* Handle 401/407 challenge. */
     if (tsx->state == PJSIP_TSX_STATE_COMPLETED &&
-	(tsx->status_code == 401 || tsx->status_code == 407)) {
-
+	(tsx->status_code == 401 || tsx->status_code == 407))
+    {
 	pjsip_tx_data *tdata;
 	
 	status = pjsip_auth_clt_reinit_req( &inv->dlg->auth_sess, 
@@ -2798,17 +2807,30 @@ static void inv_handle_update_response( pjsip_inv_session *inv,
 	    /* Re-send request. */
 	    status = pjsip_inv_send_msg(inv, tdata);
 	}
+    }
+
+    /* Process 422 response */
+    else if (tsx->state == PJSIP_TSX_STATE_COMPLETED &&
+	     tsx->status_code == 422)
+    {
+	status = handle_timer_response(inv, e->body.tsx_state.src.rdata,
+				       PJ_FALSE);
+    }
 
     /* Process 2xx response */
-    } else if (tsx->state == PJSIP_TSX_STATE_COMPLETED &&
+    else if (tsx->state == PJSIP_TSX_STATE_COMPLETED &&
 	tsx->status_code/100 == 2 &&
 	e->body.tsx_state.src.rdata->msg_info.msg->body)
     {
+	status = handle_timer_response(inv, e->body.tsx_state.src.rdata,
+				       PJ_FALSE);
 	status = inv_check_sdp_in_incoming_msg(inv, tsx, 
-					    e->body.tsx_state.src.rdata);
-
-    } else {
-	/* Get/attach invite session's transaction data */
+					     e->body.tsx_state.src.rdata);
+    }
+    
+    /* Get/attach invite session's transaction data */
+    else 
+    {
 	tsx_inv_data = (struct tsx_inv_data*)tsx->mod_data[mod_inv.mod.id];
 	if (tsx_inv_data == NULL) {
 	    tsx_inv_data=PJ_POOL_ZALLOC_T(tsx->pool, struct tsx_inv_data);
@@ -2974,6 +2996,7 @@ static void inv_on_state_null( pjsip_inv_session *inv, pjsip_event *e)
  * Generic UAC transaction handler:
  *  - resend request on 401 or 407 response.
  *  - terminate dialog on 408 and 481 response.
+ *  - resend request on 422 response.
  */
 static pj_bool_t handle_uac_tsx_response(pjsip_inv_session *inv, 
 					 pjsip_event *e)
@@ -3054,6 +3077,16 @@ static pj_bool_t handle_uac_tsx_response(pjsip_inv_session *inv,
 	}
 
 	return PJ_TRUE;	/* Handled */
+    }
+
+    /* Handle session timer 422 response. */
+    else if (tsx->state == PJSIP_TSX_STATE_COMPLETED &&
+	     tsx->status_code == PJSIP_SC_SESSION_TIMER_TOO_SMALL) 
+    {
+	handle_timer_response(inv, e->body.tsx_state.src.rdata, 
+			      PJ_FALSE);
+
+	return PJ_TRUE;	/* Handled */
 
     } else {
 	return PJ_FALSE; /* Unhandled */
@@ -3141,6 +3174,15 @@ static void handle_uac_call_rejection(pjsip_inv_session *inv, pjsip_event *e)
 	    status = pjsip_inv_send_msg(inv, tdata);
 	}
 
+    } else if (tsx->state == PJSIP_TSX_STATE_COMPLETED &&
+	       tsx->status_code == PJSIP_SC_SESSION_TIMER_TOO_SMALL) 
+    {
+	/* Handle session timer 422 response:
+	 * Resend the request with requested session timer setting.
+	 */
+	status = handle_timer_response(inv, e->body.tsx_state.src.rdata,
+				       PJ_TRUE);
+
     } else if (PJSIP_IS_STATUS_IN_CLASS(tsx->status_code, 600)) {
 	/* Global error */
 	goto terminate_session;
@@ -3212,11 +3254,19 @@ static void inv_on_state_calling( pjsip_inv_session *inv, pjsip_event *e)
 
 	case PJSIP_TSX_STATE_COMPLETED:
 	    if (tsx->status_code/100 == 2) {
-		
+
 		/* This should not happen.
 		 * When transaction receives 2xx, it should be terminated
 		 */
 		pj_assert(0);
+
+		/* Process session timer response. */
+		status = handle_timer_response(inv,
+					       e->body.tsx_state.src.rdata,
+					       PJ_TRUE);
+		if (status != PJ_SUCCESS)
+		    break;
+
 		inv_set_state(inv, PJSIP_INV_STATE_CONNECTING, e);
     
 		inv_check_sdp_in_incoming_msg(inv, tsx, 
@@ -3235,6 +3285,13 @@ static void inv_on_state_calling( pjsip_inv_session *inv, pjsip_event *e)
 	    if (tsx->status_code/100 == 2) {
 		/* This must be receipt of 2xx response */
 
+		/* Process session timer response. */
+		status = handle_timer_response(inv,
+					       e->body.tsx_state.src.rdata,
+					       PJ_TRUE);
+		if (status != PJ_SUCCESS)
+		    break;
+
 		/* Set state to CONNECTING */
 		inv_set_state(inv, PJSIP_INV_STATE_CONNECTING, e);
 
@@ -3386,6 +3443,15 @@ static void inv_on_state_early( pjsip_inv_session *inv, pjsip_event *e)
 	    if (tsx->status_code/100 == 2) {
 		inv_set_state(inv, PJSIP_INV_STATE_CONNECTING, e);
 		if (e->body.tsx_state.type == PJSIP_EVENT_RX_MSG) {
+		    pj_status_t status;
+
+		    /* Process session timer response. */
+		    status = handle_timer_response(inv, 
+						   e->body.tsx_state.src.rdata,
+						   PJ_TRUE);
+		    if (status != PJ_SUCCESS)
+			break;
+
 		    inv_check_sdp_in_incoming_msg(inv, tsx, 
 						  e->body.tsx_state.src.rdata);
 		}
@@ -3417,6 +3483,15 @@ static void inv_on_state_early( pjsip_inv_session *inv, pjsip_event *e)
 		inv_set_state(inv, PJSIP_INV_STATE_CONNECTING, e);
 
 		if (e->body.tsx_state.type == PJSIP_EVENT_RX_MSG) {
+		    pj_status_t status;
+		    
+		    /* Process session timer response. */
+		    status = handle_timer_response(inv, 
+						   e->body.tsx_state.src.rdata,
+						   PJ_TRUE);
+		    if (status != PJ_SUCCESS)
+			break;
+
 		    inv_check_sdp_in_incoming_msg(inv, tsx, 
 						  e->body.tsx_state.src.rdata);
 		}
@@ -3885,9 +3960,17 @@ static void inv_on_state_confirmed( pjsip_inv_session *inv, pjsip_event *e)
 	} else if (tsx->state == PJSIP_TSX_STATE_TERMINATED &&
 		   tsx->status_code/100 == 2) 
 	{
+	    pj_status_t status;
 
 	    /* Re-INVITE was accepted. */
 
+	    /* Process session timer response. */
+	    status = handle_timer_response(inv, 
+					   e->body.tsx_state.src.rdata,
+					   PJ_TRUE);
+	    if (status != PJ_SUCCESS)
+		return;
+
 	    /* Process SDP */
 	    inv_check_sdp_in_incoming_msg(inv, tsx, 
 					  e->body.tsx_state.src.rdata);
@@ -3945,7 +4028,7 @@ static void inv_on_state_confirmed( pjsip_inv_session *inv, pjsip_event *e)
 
     } else if (tsx->role == PJSIP_ROLE_UAC) {
 	/*
-	 * Handle 401/407/408/481 response
+	 * Handle 401/407/408/481/422 response
 	 */
 	handle_uac_tsx_response(inv, e);
     }
@@ -3992,7 +4075,7 @@ static void inv_on_state_disconnected( pjsip_inv_session *inv, pjsip_event *e)
 
     } else if (tsx->role == PJSIP_ROLE_UAC) {
 	/*
-	 * Handle 401/407/408/481 response
+	 * Handle 401/407/408/481/422 response
 	 */
 	handle_uac_tsx_response(inv, e);
     }
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_timer.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_timer.c
index a677c24ad9..715585a39f 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_timer.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip-ua/sip_timer.c
@@ -1,4 +1,4 @@
-/* $Id: sip_timer.c 2893 2009-08-17 15:56:18Z nanang $ */
+/* $Id: sip_timer.c 2934 2009-10-09 12:31:59Z nanang $ */
 /* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
@@ -791,11 +791,26 @@ PJ_DEF(pj_status_t) pjsip_timer_process_resp(pjsip_inv_session *inv,
 	if (se_hdr && 
 	    se_hdr->sess_expires < inv->timer->setting.min_se)
 	{
-	    if (st_code)
-		*st_code = PJSIP_SC_SESSION_TIMER_TOO_SMALL;
-	    pjsip_timer_end_session(inv);
-	    return PJSIP_ERRNO_FROM_SIP_STATUS(
-					    PJSIP_SC_SESSION_TIMER_TOO_SMALL);
+	    /* See ticket #954, instead of returning non-PJ_SUCCESS (which
+	     * may cause disconnecting call/dialog), let's just accept the
+	     * SE and update our local SE, as long as it isn't less than 90s.
+	     */
+	    if (se_hdr->sess_expires >= ABS_MIN_SE) {
+		PJ_LOG(3, (inv->pool->obj_name, 
+			   "Peer responds with bad Session-Expires, %ds, "
+			   "which is less than Min-SE specified in request, "
+			   "%ds. Well, let's just accept and use it.",
+			   se_hdr->sess_expires, inv->timer->setting.min_se));
+
+		inv->timer->setting.sess_expires = se_hdr->sess_expires;
+		inv->timer->setting.min_se = se_hdr->sess_expires;
+	    }
+
+	    //if (st_code)
+	    //	*st_code = PJSIP_SC_SESSION_TIMER_TOO_SMALL;
+	    //pjsip_timer_end_session(inv);
+	    //return PJSIP_ERRNO_FROM_SIP_STATUS(
+	    //				    PJSIP_SC_SESSION_TIMER_TOO_SMALL);
 	}
 
 	/* Update SE. Session-Expires in response cannot be lower than Min-SE.
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_client.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_client.c
index ea0b8e471e..fc734f7a15 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_client.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_client.c
@@ -1,4 +1,4 @@
-/* $Id: sip_auth_client.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sip_auth_client.c 2988 2009-11-06 04:16:36Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -322,8 +322,33 @@ static void update_digest_session( pj_pool_t *ses_pool,
 				   pjsip_cached_auth *cached_auth,
 				   const pjsip_www_authenticate_hdr *hdr )
 {
-    if (hdr->challenge.digest.qop.slen == 0)
+    if (hdr->challenge.digest.qop.slen == 0) {
+#if PJSIP_AUTH_AUTO_SEND_NEXT!=0
+	if (!cached_auth->last_chal || pj_stricmp2(&hdr->scheme, "digest")) {
+	    cached_auth->last_chal = (pjsip_www_authenticate_hdr*)
+				     pjsip_hdr_clone(ses_pool, hdr);
+	} else {
+	    /* Only update if the new challenge is "significantly different"
+	     * than the one in the cache, to reduce memory usage.
+	     */
+	    const pjsip_digest_challenge *d1 = 
+			&cached_auth->last_chal->challenge.digest;
+	    const pjsip_digest_challenge *d2 = &hdr->challenge.digest;
+
+	    if (pj_strcmp(&d1->domain, &d2->domain) ||
+		pj_strcmp(&d1->realm, &d2->realm) ||
+		pj_strcmp(&d1->nonce, &d2->nonce) ||
+		pj_strcmp(&d1->opaque, &d2->opaque) ||
+		pj_strcmp(&d1->algorithm, &d2->algorithm) ||
+		pj_strcmp(&d1->qop, &d2->qop))
+	    {
+		cached_auth->last_chal = (pjsip_www_authenticate_hdr*)
+				         pjsip_hdr_clone(ses_pool, hdr);
+	    }
+	}
+#endif
 	return;
+    }
 
     /* Initialize cnonce and qop if not present. */
     if (cached_auth->cnonce.slen == 0) {
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp
index c308a758b4..0f58a977e0 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_auth_parser_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog.c
index 4584d75d5f..1d2de50fdb 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog.c
@@ -1,4 +1,4 @@
-/* $Id: sip_dialog.c 2860 2009-08-11 18:10:15Z nanang $ */
+/* $Id: sip_dialog.c 3031 2009-12-10 05:16:23Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -854,6 +854,8 @@ PJ_DEF(pj_status_t) pjsip_dlg_try_inc_lock(pjsip_dialog *dlg)
  */
 PJ_DEF(void) pjsip_dlg_dec_lock(pjsip_dialog *dlg)
 {
+    PJ_ASSERT_ON_FAIL(dlg!=NULL, return);
+
     PJ_LOG(6,(dlg->obj_name, "Entering pjsip_dlg_dec_lock(), sess_count=%d", 
 	      dlg->sess_count));
 
@@ -1532,7 +1534,18 @@ void pjsip_dlg_on_rx_request( pjsip_dialog *dlg, pjsip_rx_data *rdata )
 	rdata->msg_info.msg->line.req.method.id != PJSIP_ACK_METHOD) 
     {
 	status = pjsip_tsx_create_uas(dlg->ua, rdata, &tsx);
-	PJ_ASSERT_ON_FAIL(status==PJ_SUCCESS,{goto on_return;});
+	if (status != PJ_SUCCESS) {
+	    /* Once case for this is when re-INVITE contains same
+	     * Via branch value as previous INVITE (ticket #965).
+	     */
+	    char errmsg[PJ_ERR_MSG_SIZE];
+	    pj_str_t reason;
+
+	    reason = pj_strerror(status, errmsg, sizeof(errmsg));
+	    pjsip_endpt_respond_stateless(dlg->endpt, rdata, 500, &reason,
+					  NULL, NULL);
+	    goto on_return;
+	}
 
 	/* Put this dialog in the transaction data. */
 	tsx->mod_data[dlg->ua->id] = dlg;
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp
index 9f2080f5ba..1dee2f2cc8 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_dialog_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp
index 1689f7961b..55b157aee1 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_endpoint_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_msg.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_msg.c
index 249b9940d6..97dc6c34ec 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_msg.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_msg.c
@@ -1,4 +1,4 @@
-/* $Id: sip_msg.c 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: sip_msg.c 2968 2009-10-26 11:21:37Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -21,6 +21,7 @@
 #include <pjsip/sip_parser.h>
 #include <pjsip/print_util.h>
 #include <pjsip/sip_errno.h>
+#include <pj/ctype.h>
 #include <pj/string.h>
 #include <pj/pool.h>
 #include <pj/assert.h>
@@ -597,6 +598,20 @@ PJ_DEF(const pj_str_t*) pjsip_get_status_text(int code)
 	&status_phrase[code] : &status_phrase[0];
 }
 
+///////////////////////////////////////////////////////////////////////////////
+/*
+ * Media type
+ */
+PJ_DEF(void) pjsip_media_type_cp( pj_pool_t *pool,
+				  pjsip_media_type *dst,
+				  const pjsip_media_type *src)
+{
+    PJ_ASSERT_ON_FAIL(pool && dst && src, return);
+    pj_strdup(pool, &dst->type,    &src->type);
+    pj_strdup(pool, &dst->subtype, &src->subtype);
+    pj_strdup(pool, &dst->param,   &src->param);
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 /*
  * Generic pjsip_hdr_names/hvalue header.
@@ -1718,6 +1733,7 @@ PJ_DEF(pjsip_retry_after_hdr*) pjsip_retry_after_hdr_init( pj_pool_t *pool,
 
     init_hdr(hdr, PJSIP_H_RETRY_AFTER, &retry_after_hdr_vptr);
     hdr->ivalue = value;
+    hdr->comment.slen = 0;
     pj_list_init(&hdr->param);
     return hdr;
 }
@@ -1903,7 +1919,14 @@ static int pjsip_via_hdr_print( pjsip_via_hdr *hdr,
     /* SIP/2.0/transport host:port */
     pj_memcpy(buf, sip_ver.ptr, sip_ver.slen);
     buf += sip_ver.slen;
-    pj_memcpy(buf, hdr->transport.ptr, hdr->transport.slen);
+    //pj_memcpy(buf, hdr->transport.ptr, hdr->transport.slen);
+    /* Convert transport type to UPPERCASE (some endpoints want that) */
+    {
+	int i;
+	for (i=0; i<hdr->transport.slen; ++i) {
+	    buf[i] = (char)pj_toupper(hdr->transport.ptr[i]);
+	}
+    }
     buf += hdr->transport.slen;
     *buf++ = ' ';
 
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser.c
index 15fda1d430..1212c0abba 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser.c
@@ -1,4 +1,4 @@
-/* $Id: sip_parser.c 2695 2009-05-12 15:55:09Z bennylp $ */
+/* $Id: sip_parser.c 3003 2009-11-10 05:09:44Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -1007,11 +1007,17 @@ parse_headers:
 	    if (handler) {
 		hdr = (*handler)(ctx);
 
+		/* Note:
+		 *  hdr MAY BE NULL, if parsing does not yield a new header
+		 *  instance, e.g. the values have been added to existing
+		 *  header. See http://trac.pjsip.org/repos/ticket/940
+		 */
+
 		/* Check if we've just parsed a Content-Type header. 
 		 * We will check for a message body if we've got Content-Type 
 		 * header.
 		 */
-		if (hdr->type == PJSIP_H_CONTENT_TYPE) {
+		if (hdr && hdr->type == PJSIP_H_CONTENT_TYPE) {
 		    ctype_hdr = (pjsip_ctype_hdr*)hdr;
 		}
 
@@ -1027,7 +1033,8 @@ parse_headers:
 	     * different Contact headers.
 	     * So here we must insert list instead of just insert one header.
 	     */
-	    pj_list_insert_nodes_before(&msg->hdr, hdr);
+	    if (hdr)
+		pj_list_insert_nodes_before(&msg->hdr, hdr);
 	    
 	    /* Parse until EOF or an empty line is found. */
 	} while (!pj_scan_is_eof(scanner) && !IS_NEWLINE(*scanner->curptr));
@@ -1639,7 +1646,14 @@ static void parse_generic_array_hdr( pjsip_generic_array_hdr *hdr,
 	goto end;
     }
 
-    pj_scan_get( scanner, &pconst.pjsip_NOT_COMMA_OR_NEWLINE, &hdr->values[0]);
+    if (hdr->count >= PJ_ARRAY_SIZE(hdr->values)) {
+	/* Too many elements */
+	on_syntax_error(scanner);
+	return;
+    }
+
+    pj_scan_get( scanner, &pconst.pjsip_NOT_COMMA_OR_NEWLINE, 
+		 &hdr->values[hdr->count]);
     hdr->count++;
 
     while (*scanner->curptr == ',') {
@@ -1917,13 +1931,21 @@ static pjsip_hdr* parse_hdr_from( pjsip_parse_ctx *ctx )
 /* Parse Require: header. */
 static pjsip_hdr* parse_hdr_require( pjsip_parse_ctx *ctx )
 {
-    pjsip_require_hdr *hdr = pjsip_require_hdr_create(ctx->pool);
-    parse_generic_array_hdr(hdr, ctx->scanner);
+    pjsip_require_hdr *hdr;
+    pj_bool_t new_hdr = (ctx->rdata==NULL ||
+			 ctx->rdata->msg_info.require == NULL);
+    
+    if (ctx->rdata && ctx->rdata->msg_info.require) {
+	hdr = ctx->rdata->msg_info.require;
+    } else {
+	hdr = pjsip_require_hdr_create(ctx->pool);
+	if (ctx->rdata)
+	    ctx->rdata->msg_info.require = hdr;
+    }
 
-    if (ctx->rdata && ctx->rdata->msg_info.require == NULL)
-        ctx->rdata->msg_info.require = hdr;
+    parse_generic_array_hdr(hdr, ctx->scanner);
 
-    return (pjsip_hdr*)hdr;
+    return new_hdr ? (pjsip_hdr*)hdr : NULL;
 }
 
 /* Parse Retry-After: header. */
@@ -1960,12 +1982,22 @@ static pjsip_hdr* parse_hdr_retry_after(pjsip_parse_ctx *ctx)
 /* Parse Supported: header. */
 static pjsip_hdr* parse_hdr_supported(pjsip_parse_ctx *ctx)
 {
-    pjsip_supported_hdr *hdr = pjsip_supported_hdr_create(ctx->pool);
+    pjsip_supported_hdr *hdr;
+    pj_bool_t new_hdr = (ctx->rdata==NULL || 
+		         ctx->rdata->msg_info.supported == NULL);
+
+    if (ctx->rdata && ctx->rdata->msg_info.supported) {
+	hdr = ctx->rdata->msg_info.supported;
+    } else {
+	hdr = pjsip_supported_hdr_create(ctx->pool);
+	if (ctx->rdata)
+	    ctx->rdata->msg_info.supported = hdr;
+    }
+
     parse_generic_array_hdr(hdr, ctx->scanner);
-    return (pjsip_hdr*)hdr;
+    return new_hdr ? (pjsip_hdr*)hdr : NULL;
 }
 
-
 /* Parse To: header. */
 static pjsip_hdr* parse_hdr_to( pjsip_parse_ctx *ctx )
 {
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp
index 95f2ca7a4f..e27cd04298 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_parser_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_resolve.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_resolve.c
index a7293f688f..746506d606 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_resolve.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_resolve.c
@@ -1,4 +1,4 @@
-/* $Id: sip_resolve.c 2394 2008-12-23 17:27:53Z bennylp $ */
+/* $Id: sip_resolve.c 3053 2010-01-08 17:12:05Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -198,7 +198,7 @@ PJ_DEF(void) pjsip_resolve( pjsip_resolver_t *resolver,
 	} else {
 	    /* No type or explicit port is specified, and the address is
 	     * not IP address.
-	     * In this case, full resolution must be performed.
+	     * In this case, full NAPTR resolution must be performed.
 	     * But we don't support it (yet).
 	     */
 #if PJ_HAS_TCP
@@ -225,63 +225,71 @@ PJ_DEF(void) pjsip_resolve( pjsip_resolver_t *resolver,
      * we can just finish the resolution now using pj_gethostbyname()
      */
     if (ip_addr_ver || resolver->res == NULL) {
-
-	char ip_addr[PJ_INET6_ADDRSTRLEN];
-	int af;
-	pj_addrinfo ai;
-	unsigned count;
+	char addr_str[PJ_INET6_ADDRSTRLEN+10];
 	pj_uint16_t srv_port;
 
-	if (!ip_addr_ver) {
-	    PJ_LOG(5,(THIS_FILE, 
+	if (ip_addr_ver != 0) {
+	    /* Target is an IP address, no need to resolve */
+	    if (ip_addr_ver == 4) {
+		pj_sockaddr_init(pj_AF_INET(), &svr_addr.entry[0].addr, 
+				 NULL, 0);
+		pj_inet_aton(&target->addr.host,
+			     &svr_addr.entry[0].addr.ipv4.sin_addr);
+	    } else {
+		pj_sockaddr_init(pj_AF_INET6(), &svr_addr.entry[0].addr, 
+				 NULL, 0);
+		pj_inet_pton(pj_AF_INET6(), &target->addr.host,
+			     &svr_addr.entry[0].addr.ipv6.sin6_addr);
+	    }
+	} else {
+	    pj_addrinfo ai;
+	    unsigned count;
+	    int af;
+
+	    PJ_LOG(5,(THIS_FILE,
 		      "DNS resolver not available, target '%.*s:%d' type=%s "
-		      "will be resolved with gethostbyname()",
+		      "will be resolved with getaddrinfo()",
 		      target->addr.host.slen,
 		      target->addr.host.ptr,
 		      target->addr.port,
 		      pjsip_transport_get_type_name(target->type)));
+
+	    if (type & PJSIP_TRANSPORT_IPV6) {
+		af = pj_AF_INET6();
+	    } else {
+		af = pj_AF_INET();
+	    }
+
+	    /* Resolve */
+	    count = 1;
+	    status = pj_getaddrinfo(af, &target->addr.host, &count, &ai);
+	    if (status != PJ_SUCCESS)
+		goto on_error;
+
+	    svr_addr.entry[0].addr.addr.sa_family = (pj_uint16_t)af;
+	    pj_memcpy(&svr_addr.entry[0].addr, &ai.ai_addr,
+		      sizeof(pj_sockaddr));
 	}
 
-	/* Set the port number if not specified. */
+	/* Set the port number */
 	if (target->addr.port == 0) {
 	   srv_port = (pj_uint16_t)
 		      pjsip_transport_get_default_port_for_type(type);
 	} else {
 	   srv_port = (pj_uint16_t)target->addr.port;
 	}
-
-	if (type & PJSIP_TRANSPORT_IPV6) {
-	    af = pj_AF_INET6();
-	} else {
-	    af = pj_AF_INET();
-	}
-
-	/* Resolve */
-	count = 1;
-	status = pj_getaddrinfo(af, &target->addr.host, &count, &ai);
-	if (status != PJ_SUCCESS)
-	    goto on_error;
-
-	svr_addr.entry[0].addr.addr.sa_family = (pj_uint16_t)af;
-	pj_memcpy(&svr_addr.entry[0].addr, &ai.ai_addr, sizeof(pj_sockaddr));
-
-	if (af == pj_AF_INET6()) {
-	    svr_addr.entry[0].addr.ipv6.sin6_port = pj_htons(srv_port);
-	} else {
-	    svr_addr.entry[0].addr.ipv4.sin_port = pj_htons(srv_port);
-	}
+	pj_sockaddr_set_port(&svr_addr.entry[0].addr, srv_port);
 
 	/* Call the callback. */
 	PJ_LOG(5,(THIS_FILE, 
 		  "Target '%.*s:%d' type=%s resolved to "
-		  "'%s:%d' type=%s (%s)",
+		  "'%s' type=%s (%s)",
 		  (int)target->addr.host.slen,
 		  target->addr.host.ptr,
 		  target->addr.port,
 		  pjsip_transport_get_type_name(target->type),
-		  pj_inet_ntop2(af, pj_sockaddr_get_addr(&svr_addr.entry[0].addr),
-				ip_addr, sizeof(ip_addr)),
-		  srv_port,
+		  pj_sockaddr_print(&svr_addr.entry[0].addr, addr_str,
+				    sizeof(addr_str), 3),
 		  pjsip_transport_get_type_name(type),
 		  pjsip_transport_get_type_desc(type)));
 	svr_addr.count = 1;
@@ -361,21 +369,14 @@ PJ_DEF(void) pjsip_resolve( pjsip_resolver_t *resolver,
 
     if (query->query_type == PJ_DNS_TYPE_SRV) {
 
-	unsigned option = PJ_TRUE;
-        if (type & PJSIP_TRANSPORT_IPV6) {
-            option |= PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV6;
-        } else {
-            option |= PJ_DNS_SRV_FALLBACK_GETADDRINFO_IPV4;
-        }
-
-        status = pj_dns_srv_resolve(&query->naptr[0].name,
-        			    &query->naptr[0].res_type,
-        			    query->req.def_port, pool, resolver->res,
-        			    option, query, &srv_resolver_cb, NULL);
+	status = pj_dns_srv_resolve(&query->naptr[0].name,
+				    &query->naptr[0].res_type,
+				    query->req.def_port, pool, resolver->res,
+				    PJ_TRUE, query, &srv_resolver_cb, NULL);
 
     } else if (query->query_type == PJ_DNS_TYPE_A) {
 
-        status = pj_dns_resolver_start_query(resolver->res, 
+	status = pj_dns_resolver_start_query(resolver->res, 
 					     &query->naptr[0].name,
 					     PJ_DNS_TYPE_A, 0, 
 					     &dns_a_callback,
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp
index fc1f818e8b..f82281a323 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_tel_uri_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transaction.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transaction.c
index a21fe753f5..79b0866baf 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transaction.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transaction.c
@@ -1,4 +1,4 @@
-/* $Id: sip_transaction.c 2857 2009-08-11 12:36:49Z nanang $ */
+/* $Id: sip_transaction.c 2936 2009-10-10 13:36:43Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -545,10 +545,15 @@ static pj_status_t mod_tsx_layer_register_tsx( pjsip_transaction *tsx)
      * Do not use PJ_ASSERT_RETURN since it evaluates the expression
      * twice!
      */
-    pj_assert(pj_hash_get( mod_tsx_layer.htable, 
-			   tsx->transaction_key.ptr,
-			   tsx->transaction_key.slen, 
-			   NULL) == NULL);
+    if(pj_hash_get(mod_tsx_layer.htable, 
+		   tsx->transaction_key.ptr,
+		   tsx->transaction_key.slen, 
+		   NULL))
+    {
+	pj_mutex_unlock(mod_tsx_layer.mutex);
+	PJ_LOG(2,(THIS_FILE, "Unable to register transaction (key exists)"));
+	return PJ_EEXISTS;
+    }
 
     TSX_TRACE_((THIS_FILE, 
 		"Transaction %p registered with hkey=0x%p and key=%.*s",
@@ -1344,6 +1349,7 @@ PJ_DEF(pj_status_t) pjsip_tsx_create_uas( pjsip_module *tsx_user,
     status = pjsip_tsx_create_key(tsx->pool, &tsx->transaction_key, 
                                   PJSIP_ROLE_UAS, &tsx->method, rdata);
     if (status != PJ_SUCCESS) {
+	unlock_tsx(tsx, &lck);
         tsx_destroy(tsx);
         return status;
     }
@@ -1371,6 +1377,7 @@ PJ_DEF(pj_status_t) pjsip_tsx_create_uas( pjsip_module *tsx_user,
     /* Get response address. */
     status = pjsip_get_response_addr( tsx->pool, rdata, &tsx->res_addr );
     if (status != PJ_SUCCESS) {
+	unlock_tsx(tsx, &lck);
 	tsx_destroy(tsx);
 	return status;
     }
@@ -1393,6 +1400,7 @@ PJ_DEF(pj_status_t) pjsip_tsx_create_uas( pjsip_module *tsx_user,
     /* Register the transaction. */
     status = mod_tsx_layer_register_tsx(tsx);
     if (status != PJ_SUCCESS) {
+	unlock_tsx(tsx, &lck);
 	tsx_destroy(tsx);
 	return status;
     }
@@ -1626,6 +1634,7 @@ static void send_msg_callback( pjsip_send_state *send_state,
 			       pj_ssize_t sent, pj_bool_t *cont )
 {
     pjsip_transaction *tsx = (pjsip_transaction*) send_state->token;
+    pjsip_tx_data *tdata = send_state->tdata;
     struct tsx_lock_data lck;
 
     lock_tsx(tsx, &lck);
@@ -1644,9 +1653,9 @@ static void send_msg_callback( pjsip_send_state *send_state,
 	    pjsip_transport_add_ref(tsx->transport);
 
 	    /* Update remote address. */
-	    tsx->addr_len = send_state->addr.entry[send_state->cur_addr].addr_len;
+	    tsx->addr_len = tdata->dest_info.addr.entry[tdata->dest_info.cur_addr].addr_len;
 	    pj_memcpy(&tsx->addr, 
-		      &send_state->addr.entry[send_state->cur_addr].addr,
+		      &tdata->dest_info.addr.entry[tdata->dest_info.cur_addr].addr,
 		      tsx->addr_len);
 
 	    /* Update is_reliable flag. */
@@ -2840,6 +2849,15 @@ static pj_status_t tsx_on_state_completed_uas( pjsip_transaction *tsx,
 
 	    /* Process incoming ACK request. */
 
+	    /* Verify that this is an INVITE transaction */
+	    if (tsx->method.id != PJSIP_INVITE_METHOD) {
+		PJ_LOG(2, (tsx->obj_name, 
+			   "Received illegal ACK for %.*s transaction",
+			   (int)tsx->method.name.slen,
+			   tsx->method.name.ptr));
+		return PJSIP_EINVALIDMETHOD;
+	    }
+
 	    /* Cease retransmission. */
 	    if (tsx->retransmit_timer.id != 0) {
 		pjsip_endpt_cancel_timer(tsx->endpt, &tsx->retransmit_timer);
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport.c
index df1f896e2f..a26d3c3f53 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport.c
@@ -1,4 +1,4 @@
-/* $Id: sip_transport.c 2724 2009-05-29 13:04:03Z bennylp $ */
+/* $Id: sip_transport.c 2915 2009-09-22 17:56:44Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -1439,6 +1439,14 @@ PJ_DEF(pj_ssize_t) pjsip_tpmgr_receive_packet( pjsip_tpmgr *mgr,
 	    if (rdata->msg_info.via->rport_param == 0) {
 		rdata->msg_info.via->rport_param = rdata->pkt_info.src_port;
 	    }
+	} else {
+	    /* Drop malformed responses */
+	    if (rdata->msg_info.msg->line.status.code < 100 ||
+		rdata->msg_info.msg->line.status.code >= 700)
+	    {
+		mgr->on_rx_msg(mgr->endpt, PJSIP_EINVALIDSTATUS, rdata);
+		goto finish_process_fragment;
+	    }
 	}
 
 	/* Drop response message if it has more than one Via.
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tcp.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tcp.c
index bb5ade9652..030cc8a427 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tcp.c
@@ -1,4 +1,4 @@
-/* $Id: sip_transport_tcp.c 2781 2009-06-22 14:06:40Z nanang $ */
+/* $Id: sip_transport_tcp.c 3035 2009-12-22 13:00:22Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -57,6 +57,8 @@ struct tcp_listener
     pjsip_endpoint	    *endpt;
     pjsip_tpmgr		    *tpmgr;
     pj_activesock_t	    *asock;
+    pj_qos_type		     qos_type;
+    pj_qos_params	     qos_params;
 };
 
 
@@ -164,6 +166,17 @@ static void sockaddr_to_host_port( pj_pool_t *pool,
     host_port->port = pj_sockaddr_get_port(addr);
 }
 
+/*
+ * Initialize pjsip_tcp_transport_cfg structure with default values.
+ */
+PJ_DEF(void) pjsip_tcp_transport_cfg_default(pjsip_tcp_transport_cfg *cfg,
+					     int af)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+    cfg->af = af;
+    pj_sockaddr_init(cfg->af, &cfg->bind_addr, NULL, 0);
+    cfg->async_cnt = 1;
+}
 
 
 /****************************************************************************
@@ -174,32 +187,33 @@ static void sockaddr_to_host_port( pj_pool_t *pool,
  * This is the public API to create, initialize, register, and start the
  * TCP listener.
  */
-PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
-					       const pj_sockaddr_in *local,
-					       const pjsip_host_port *a_name,
-					       unsigned async_cnt,
-					       pjsip_tpfactory **p_factory)
+PJ_DEF(pj_status_t) pjsip_tcp_transport_start3(
+					pjsip_endpoint *endpt,
+					const pjsip_tcp_transport_cfg *cfg,
+					pjsip_tpfactory **p_factory
+					)
 {
     pj_pool_t *pool;
     pj_sock_t sock = PJ_INVALID_SOCKET;
     struct tcp_listener *listener;
     pj_activesock_cfg asock_cfg;
     pj_activesock_cb listener_cb;
-    pj_sockaddr_in *listener_addr;
+    pj_sockaddr *listener_addr;
     int addr_len;
     pj_status_t status;
 
     /* Sanity check */
-    PJ_ASSERT_RETURN(endpt && async_cnt, PJ_EINVAL);
+    PJ_ASSERT_RETURN(endpt && cfg->async_cnt, PJ_EINVAL);
 
     /* Verify that address given in a_name (if any) is valid */
-    if (a_name && a_name->host.slen) {
-	pj_sockaddr_in tmp;
-
-	status = pj_sockaddr_in_init(&tmp, &a_name->host, 
-				     (pj_uint16_t)a_name->port);
-	if (status != PJ_SUCCESS || tmp.sin_addr.s_addr == PJ_INADDR_ANY ||
-	    tmp.sin_addr.s_addr == PJ_INADDR_NONE)
+    if (cfg->addr_name.host.slen) {
+	pj_sockaddr tmp;
+
+	status = pj_sockaddr_init(cfg->af, &tmp, &cfg->addr_name.host, 
+				  (pj_uint16_t)cfg->addr_name.port);
+	if (status != PJ_SUCCESS || !pj_sockaddr_has_addr(&tmp) ||
+	    (cfg->af==pj_AF_INET() && 
+	     tmp.ipv4.sin_addr.s_addr==PJ_INADDR_NONE)) 
 	{
 	    /* Invalid address */
 	    return PJ_EINVAL;
@@ -217,6 +231,9 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
     listener->factory.type_name = "tcp";
     listener->factory.flag = 
 	pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TCP);
+    listener->qos_type = cfg->qos_type;
+    pj_memcpy(&listener->qos_params, &cfg->qos_params,
+	      sizeof(cfg->qos_params));
 
     pj_ansi_strcpy(listener->factory.obj_name, "tcplis");
 
@@ -226,24 +243,27 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
 	goto on_error;
 
 
-    /* Create and bind socket */
-    status = pj_sock_socket(pj_AF_INET(), pj_SOCK_STREAM(), 0, &sock);
+    /* Create socket */
+    status = pj_sock_socket(cfg->af, pj_SOCK_STREAM(), 0, &sock);
     if (status != PJ_SUCCESS)
 	goto on_error;
 
-    listener_addr = (pj_sockaddr_in*)&listener->factory.local_addr;
-    if (local) {
-	pj_memcpy(listener_addr, local, sizeof(pj_sockaddr_in));
-    } else {
-	pj_sockaddr_in_init(listener_addr, NULL, 0);
-    }
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(sock, cfg->qos_type, &cfg->qos_params, 
+				2, listener->factory.obj_name, 
+				"SIP TCP listener socket");
 
-    status = pj_sock_bind(sock, listener_addr, sizeof(pj_sockaddr_in));
+    /* Bind socket */
+    listener_addr = &listener->factory.local_addr;
+    pj_sockaddr_cp(listener_addr, &cfg->bind_addr);
+
+    status = pj_sock_bind(sock, listener_addr, 
+			  pj_sockaddr_get_len(listener_addr));
     if (status != PJ_SUCCESS)
 	goto on_error;
 
     /* Retrieve the bound address */
-    addr_len = sizeof(pj_sockaddr_in);
+    addr_len = pj_sockaddr_get_len(listener_addr);
     status = pj_sock_getsockname(sock, listener_addr, &addr_len);
     if (status != PJ_SUCCESS)
 	goto on_error;
@@ -251,12 +271,12 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
     /* If published host/IP is specified, then use that address as the
      * listener advertised address.
      */
-    if (a_name && a_name->host.slen) {
+    if (cfg->addr_name.host.slen) {
 	/* Copy the address */
-	listener->factory.addr_name = *a_name;
+	listener->factory.addr_name = cfg->addr_name;
 	pj_strdup(listener->factory.pool, &listener->factory.addr_name.host, 
-		  &a_name->host);
-	listener->factory.addr_name.port = a_name->port;
+		  &cfg->addr_name.host);
+	listener->factory.addr_name.port = cfg->addr_name.port;
 
     } else {
 	/* No published address is given, use the bound address */
@@ -264,24 +284,27 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
 	/* If the address returns 0.0.0.0, use the default
 	 * interface address as the transport's address.
 	 */
-	if (listener_addr->sin_addr.s_addr == 0) {
+	if (!pj_sockaddr_has_addr(listener_addr)) {
 	    pj_sockaddr hostip;
 
 	    status = pj_gethostip(pj_AF_INET(), &hostip);
 	    if (status != PJ_SUCCESS)
 		goto on_error;
 
-	    listener_addr->sin_addr.s_addr = hostip.ipv4.sin_addr.s_addr;
+	    pj_memcpy(pj_sockaddr_get_addr(listener_addr),
+		      pj_sockaddr_get_addr(&hostip),
+		      pj_sockaddr_get_addr_len(&hostip));
 	}
 
 	/* Save the address name */
 	sockaddr_to_host_port(listener->factory.pool, 
-			      &listener->factory.addr_name, listener_addr);
+			      &listener->factory.addr_name, 
+			      (pj_sockaddr_in*)listener_addr);
     }
 
     /* If port is zero, get the bound port */
     if (listener->factory.addr_name.port == 0) {
-	listener->factory.addr_name.port = pj_ntohs(listener_addr->sin_port);
+	listener->factory.addr_name.port = pj_sockaddr_get_port(listener_addr);
     }
 
     pj_ansi_snprintf(listener->factory.obj_name, 
@@ -296,9 +319,11 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
 
 
     /* Create active socket */
-    if (async_cnt > MAX_ASYNC_CNT) async_cnt = MAX_ASYNC_CNT;
     pj_activesock_cfg_default(&asock_cfg);
-    asock_cfg.async_cnt = async_cnt;
+    if (cfg->async_cnt > MAX_ASYNC_CNT) 
+	asock_cfg.async_cnt = MAX_ASYNC_CNT;
+    else
+	asock_cfg.async_cnt = cfg->async_cnt;
 
     pj_bzero(&listener_cb, sizeof(listener_cb));
     listener_cb.on_accept_complete = &on_accept_complete;
@@ -344,6 +369,35 @@ on_error:
 }
 
 
+/*
+ * This is the public API to create, initialize, register, and start the
+ * TCP listener.
+ */
+PJ_DEF(pj_status_t) pjsip_tcp_transport_start2(pjsip_endpoint *endpt,
+					       const pj_sockaddr_in *local,
+					       const pjsip_host_port *a_name,
+					       unsigned async_cnt,
+					       pjsip_tpfactory **p_factory)
+{
+    pjsip_tcp_transport_cfg cfg;
+
+    pjsip_tcp_transport_cfg_default(&cfg, pj_AF_INET());
+
+    if (local)
+	pj_sockaddr_cp(&cfg.bind_addr, local);
+    else
+	pj_sockaddr_init(cfg.af, &cfg.bind_addr, NULL, 0);
+
+    if (a_name)
+	pj_memcpy(&cfg.addr_name, a_name, sizeof(*a_name));
+
+    if (async_cnt)
+	cfg.async_cnt = async_cnt;
+
+    return pjsip_tcp_transport_start3(endpt, &cfg, p_factory);
+}
+
+
 /*
  * This is the public API to create, initialize, register, and start the
  * TCP listener.
@@ -774,6 +828,12 @@ static pj_status_t lis_create_transport(pjsip_tpfactory *factory,
     if (status != PJ_SUCCESS)
 	return status;
 
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(sock, listener->qos_type, 
+				&listener->qos_params, 
+				2, listener->factory.obj_name, 
+				"outgoing SIP TCP socket");
+
     /* Bind to any port */
     status = pj_sock_bind_in(sock, 0, 0);
     if (status != PJ_SUCCESS) {
@@ -878,6 +938,12 @@ static pj_bool_t on_accept_complete(pj_activesock_t *asock,
 	      pj_sockaddr_print(src_addr, addr, sizeof(addr), 3),
 	      sock));
 
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(sock, listener->qos_type, 
+				&listener->qos_params, 
+				2, listener->factory.obj_name, 
+				"incoming SIP TCP socket");
+
     /* 
      * Incoming connection!
      * Create TCP transport for the new socket.
@@ -1214,7 +1280,9 @@ static pj_bool_t on_connect_complete(pj_activesock_t *asock,
     if (pj_sock_getsockname(tcp->sock, &addr, &addrlen)==PJ_SUCCESS) {
 	pj_sockaddr_in *tp_addr = (pj_sockaddr_in*)&tcp->base.local_addr;
 
-	if (tp_addr->sin_addr.s_addr != addr.sin_addr.s_addr) {
+	if (pj_sockaddr_has_addr(&addr) &&
+	    tp_addr->sin_addr.s_addr != addr.sin_addr.s_addr) 
+	{
 	    tp_addr->sin_addr.s_addr = addr.sin_addr.s_addr;
 	    tp_addr->sin_port = addr.sin_port;
 	    sockaddr_to_host_port(tcp->base.pool, &tcp->base.local_name,
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c
new file mode 100644
index 0000000000..db65fa0200
--- /dev/null
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c
@@ -0,0 +1,1381 @@
+/* $Id: sip_transport_tls.c 3039 2009-12-30 06:35:20Z nanang $ */
+/* 
+ * Copyright (C) 2009 Teluu Inc. (http://www.teluu.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 2 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+
+#include <pjsip/sip_transport_tls.h>
+#include <pjsip/sip_endpoint.h>
+#include <pjsip/sip_errno.h>
+#include <pj/compat/socket.h>
+#include <pj/addr_resolv.h>
+#include <pj/ssl_sock.h>
+#include <pj/assert.h>
+#include <pj/lock.h>
+#include <pj/log.h>
+#include <pj/os.h>
+#include <pj/pool.h>
+#include <pj/string.h>
+
+#if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0
+
+#define THIS_FILE	"sip_transport_tls.c"
+
+#define MAX_ASYNC_CNT	16
+#define POOL_LIS_INIT	512
+#define POOL_LIS_INC	512
+#define POOL_TP_INIT	512
+#define POOL_TP_INC	512
+
+struct tls_listener;
+struct tls_transport;
+
+/*
+ * Definition of TLS/SSL transport listener, and it's descendant of
+ * pjsip_tpfactory.
+ */
+struct tls_listener
+{
+    pjsip_tpfactory	     factory;
+    pj_bool_t		     is_registered;
+    pjsip_endpoint	    *endpt;
+    pjsip_tpmgr		    *tpmgr;
+    pj_ssl_sock_t	    *ssock;
+    pj_ssl_cert_t	    *cert;
+    pjsip_tls_setting	     tls_setting;
+};
+
+
+/*
+ * This structure is used to keep delayed transmit operation in a list.
+ * A delayed transmission occurs when application sends tx_data when
+ * the TLS connect/establishment is still in progress. These delayed
+ * transmission will be "flushed" once the socket is connected (either
+ * successfully or with errors).
+ */
+struct delayed_tdata
+{
+    PJ_DECL_LIST_MEMBER(struct delayed_tdata);
+    pjsip_tx_data_op_key    *tdata_op_key;
+};
+
+
+/*
+ * TLS/SSL transport, and it's descendant of pjsip_transport.
+ */
+struct tls_transport
+{
+    pjsip_transport	     base;
+    pj_bool_t		     is_server;
+
+    pj_bool_t		     is_registered;
+    pj_bool_t		     is_closing;
+    pj_status_t		     close_reason;
+    pj_ssl_sock_t	    *ssock;
+    pj_bool_t		     has_pending_connect;
+
+    /* Keep-alive timer. */
+    pj_timer_entry	     ka_timer;
+    pj_time_val		     last_activity;
+    pjsip_tx_data_op_key     ka_op_key;
+    pj_str_t		     ka_pkt;
+
+    /* TLS transport can only have  one rdata!
+     * Otherwise chunks of incoming PDU may be received on different
+     * buffer.
+     */
+    pjsip_rx_data	     rdata;
+
+    /* Pending transmission list. */
+    struct delayed_tdata     delayed_list;
+};
+
+
+/****************************************************************************
+ * PROTOTYPES
+ */
+
+/* This callback is called when pending accept() operation completes. */
+static pj_bool_t on_accept_complete(pj_ssl_sock_t *ssock,
+				    pj_ssl_sock_t *new_ssock,
+				    const pj_sockaddr_t *src_addr,
+				    int src_addr_len);
+
+/* Callback on incoming data */
+static pj_bool_t on_data_read(pj_ssl_sock_t *ssock,
+			      void *data,
+			      pj_size_t size,
+			      pj_status_t status,
+			      pj_size_t *remainder);
+
+/* Callback when packet is sent */
+static pj_bool_t on_data_sent(pj_ssl_sock_t *ssock,
+			      pj_ioqueue_op_key_t *send_key,
+			      pj_ssize_t sent);
+
+/* This callback is called by transport manager to destroy listener */
+static pj_status_t lis_destroy(pjsip_tpfactory *factory);
+
+/* This callback is called by transport manager to create transport */
+static pj_status_t lis_create_transport(pjsip_tpfactory *factory,
+					pjsip_tpmgr *mgr,
+					pjsip_endpoint *endpt,
+					const pj_sockaddr *rem_addr,
+					int addr_len,
+					pjsip_transport **transport);
+
+/* Common function to create and initialize transport */
+static pj_status_t tls_create(struct tls_listener *listener,
+			      pj_pool_t *pool,
+			      pj_ssl_sock_t *ssock, 
+			      pj_bool_t is_server,
+			      const pj_sockaddr_in *local,
+			      const pj_sockaddr_in *remote,
+			      struct tls_transport **p_tls);
+
+
+static void tls_perror(const char *sender, const char *title,
+		       pj_status_t status)
+{
+    char errmsg[PJ_ERR_MSG_SIZE];
+
+    pj_strerror(status, errmsg, sizeof(errmsg));
+
+    PJ_LOG(1,(sender, "%s: %s [code=%d]", title, errmsg, status));
+}
+
+
+static void sockaddr_to_host_port( pj_pool_t *pool,
+				   pjsip_host_port *host_port,
+				   const pj_sockaddr_in *addr )
+{
+    host_port->host.ptr = (char*) pj_pool_alloc(pool, PJ_INET6_ADDRSTRLEN+4);
+    pj_sockaddr_print(addr, host_port->host.ptr, PJ_INET6_ADDRSTRLEN+4, 2);
+    host_port->host.slen = pj_ansi_strlen(host_port->host.ptr);
+    host_port->port = pj_sockaddr_get_port(addr);
+}
+
+
+
+/****************************************************************************
+ * The TLS listener/transport factory.
+ */
+
+/*
+ * This is the public API to create, initialize, register, and start the
+ * TLS listener.
+ */
+PJ_DEF(pj_status_t) pjsip_tls_transport_start (pjsip_endpoint *endpt,
+					       const pjsip_tls_setting *opt,
+					       const pj_sockaddr_in *local,
+					       const pjsip_host_port *a_name,
+					       unsigned async_cnt,
+					       pjsip_tpfactory **p_factory)
+{
+    pj_pool_t *pool;
+    struct tls_listener *listener;
+    pj_ssl_sock_param ssock_param;
+    pj_sockaddr_in *listener_addr;
+    pj_bool_t has_listener;
+    pj_status_t status;
+
+    /* Sanity check */
+    PJ_ASSERT_RETURN(endpt && async_cnt, PJ_EINVAL);
+
+    /* Verify that address given in a_name (if any) is valid */
+    if (a_name && a_name->host.slen) {
+	pj_sockaddr_in tmp;
+
+	status = pj_sockaddr_in_init(&tmp, &a_name->host, 
+				     (pj_uint16_t)a_name->port);
+	if (status != PJ_SUCCESS || tmp.sin_addr.s_addr == PJ_INADDR_ANY ||
+	    tmp.sin_addr.s_addr == PJ_INADDR_NONE)
+	{
+	    /* Invalid address */
+	    return PJ_EINVAL;
+	}
+    }
+
+    pool = pjsip_endpt_create_pool(endpt, "tlslis", POOL_LIS_INIT, 
+				   POOL_LIS_INC);
+    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
+
+    listener = PJ_POOL_ZALLOC_T(pool, struct tls_listener);
+    listener->factory.pool = pool;
+    listener->factory.type = PJSIP_TRANSPORT_TLS;
+    listener->factory.type_name = "tls";
+    listener->factory.flag = 
+	pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TLS);
+
+    pj_ansi_strcpy(listener->factory.obj_name, "tlslis");
+
+    if (opt)
+	pjsip_tls_setting_copy(pool, &listener->tls_setting, opt);
+    else
+	pjsip_tls_setting_default(&listener->tls_setting);
+
+    status = pj_lock_create_recursive_mutex(pool, "tlslis", 
+					    &listener->factory.lock);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    if (async_cnt > MAX_ASYNC_CNT) 
+	async_cnt = MAX_ASYNC_CNT;
+
+    /* Build SSL socket param */
+    pj_ssl_sock_param_default(&ssock_param);
+    ssock_param.cb.on_accept_complete = &on_accept_complete;
+    ssock_param.cb.on_data_read = &on_data_read;
+    ssock_param.cb.on_data_sent = &on_data_sent;
+    ssock_param.async_cnt = async_cnt;
+    ssock_param.ioqueue = pjsip_endpt_get_ioqueue(endpt);
+    ssock_param.require_client_cert = listener->tls_setting.require_client_cert;
+    ssock_param.server_name = listener->tls_setting.server_name;
+    ssock_param.timeout = listener->tls_setting.timeout;
+    ssock_param.user_data = listener;
+    ssock_param.verify_peer = listener->tls_setting.verify_client;
+    if (ssock_param.send_buffer_size < PJSIP_MAX_PKT_LEN)
+	ssock_param.send_buffer_size = PJSIP_MAX_PKT_LEN;
+    if (ssock_param.read_buffer_size < PJSIP_MAX_PKT_LEN)
+	ssock_param.read_buffer_size = PJSIP_MAX_PKT_LEN;
+    ssock_param.qos_type = listener->tls_setting.qos_type;
+    ssock_param.qos_ignore_error = listener->tls_setting.qos_ignore_error;
+    pj_memcpy(&ssock_param.qos_params, &listener->tls_setting.qos_params,
+	      sizeof(ssock_param.qos_params));
+
+    has_listener = PJ_FALSE;
+
+    switch(listener->tls_setting.method) {
+    case PJSIP_TLSV1_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_TLS1;
+	break;
+    case PJSIP_SSLV2_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_SSL2;
+	break;
+    case PJSIP_SSLV3_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_SSL3;
+	break;
+    case PJSIP_SSLV23_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_SSL23;
+	break;
+    default:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_DEFAULT;
+	break;
+    }
+
+    /* Create SSL socket */
+    status = pj_ssl_sock_create(pool, &ssock_param, &listener->ssock);
+    if (status != PJ_SUCCESS)
+	goto on_error;
+
+    listener_addr = (pj_sockaddr_in*)&listener->factory.local_addr;
+    if (local) {
+	pj_sockaddr_cp((pj_sockaddr_t*)listener_addr, 
+		       (const pj_sockaddr_t*)local);
+    } else {
+	pj_sockaddr_in_init(listener_addr, NULL, 0);
+    }
+
+    /* Check if certificate/CA list for SSL socket is set */
+    if (listener->tls_setting.cert_file.slen ||
+	listener->tls_setting.ca_list_file.slen) 
+    {
+	status = pj_ssl_cert_load_from_files(pool,
+			&listener->tls_setting.ca_list_file,
+			&listener->tls_setting.cert_file,
+			&listener->tls_setting.privkey_file,
+			&listener->tls_setting.password,
+			&listener->cert);
+	if (status != PJ_SUCCESS)
+	    goto on_error;
+
+	status = pj_ssl_sock_set_certificate(listener->ssock, pool, 
+					     listener->cert);
+	if (status != PJ_SUCCESS)
+	    goto on_error;
+    }
+
+    /* Start accepting incoming connections. Note that some TLS/SSL backends
+     * may not support for SSL socket server.
+     */
+    has_listener = PJ_FALSE;
+
+    status = pj_ssl_sock_start_accept(listener->ssock, pool, 
+			  (pj_sockaddr_t*)listener_addr, 
+			  pj_sockaddr_get_len((pj_sockaddr_t*)listener_addr));
+    if (status == PJ_SUCCESS || status == PJ_EPENDING) {
+	pj_ssl_sock_info info;
+	has_listener = PJ_TRUE;
+
+	/* Retrieve the bound address */
+	status = pj_ssl_sock_get_info(listener->ssock, &info);
+	if (status == PJ_SUCCESS)
+	    pj_sockaddr_cp(listener_addr, (pj_sockaddr_t*)&info.local_addr);
+    } else if (status != PJ_ENOTSUP) {
+	goto on_error;
+    }
+
+    /* If published host/IP is specified, then use that address as the
+     * listener advertised address.
+     */
+    if (a_name && a_name->host.slen) {
+	/* Copy the address */
+	listener->factory.addr_name = *a_name;
+	pj_strdup(listener->factory.pool, &listener->factory.addr_name.host, 
+		  &a_name->host);
+	listener->factory.addr_name.port = a_name->port;
+
+    } else {
+	/* No published address is given, use the bound address */
+
+	/* If the address returns 0.0.0.0, use the default
+	 * interface address as the transport's address.
+	 */
+	if (listener_addr->sin_addr.s_addr == 0) {
+	    pj_sockaddr hostip;
+
+	    status = pj_gethostip(pj_AF_INET(), &hostip);
+	    if (status != PJ_SUCCESS)
+		goto on_error;
+
+	    listener_addr->sin_addr.s_addr = hostip.ipv4.sin_addr.s_addr;
+	}
+
+	/* Save the address name */
+	sockaddr_to_host_port(listener->factory.pool, 
+			      &listener->factory.addr_name, listener_addr);
+    }
+
+    /* If port is zero, get the bound port */
+    if (listener->factory.addr_name.port == 0) {
+	listener->factory.addr_name.port = pj_ntohs(listener_addr->sin_port);
+    }
+
+    pj_ansi_snprintf(listener->factory.obj_name, 
+		     sizeof(listener->factory.obj_name),
+		     "tlslis:%d",  listener->factory.addr_name.port);
+
+    /* Register to transport manager */
+    listener->endpt = endpt;
+    listener->tpmgr = pjsip_endpt_get_tpmgr(endpt);
+    listener->factory.create_transport = lis_create_transport;
+    listener->factory.destroy = lis_destroy;
+    listener->is_registered = PJ_TRUE;
+    status = pjsip_tpmgr_register_tpfactory(listener->tpmgr,
+					    &listener->factory);
+    if (status != PJ_SUCCESS) {
+	listener->is_registered = PJ_FALSE;
+	goto on_error;
+    }
+
+    if (has_listener) {
+	PJ_LOG(4,(listener->factory.obj_name, 
+		 "SIP TLS listener is ready for incoming connections "
+		 "at %.*s:%d",
+		 (int)listener->factory.addr_name.host.slen,
+		 listener->factory.addr_name.host.ptr,
+		 listener->factory.addr_name.port));
+    } else {
+	PJ_LOG(4,(listener->factory.obj_name, "SIP TLS is ready "
+		  "(client only)"));
+    }
+
+    /* Return the pointer to user */
+    if (p_factory) *p_factory = &listener->factory;
+
+    return PJ_SUCCESS;
+
+on_error:
+    lis_destroy(&listener->factory);
+    return status;
+}
+
+
+/* This callback is called by transport manager to destroy listener */
+static pj_status_t lis_destroy(pjsip_tpfactory *factory)
+{
+    struct tls_listener *listener = (struct tls_listener *)factory;
+
+    if (listener->is_registered) {
+	pjsip_tpmgr_unregister_tpfactory(listener->tpmgr, &listener->factory);
+	listener->is_registered = PJ_FALSE;
+    }
+
+    if (listener->ssock) {
+	pj_ssl_sock_close(listener->ssock);
+	listener->ssock = NULL;
+    }
+
+    if (listener->factory.lock) {
+	pj_lock_destroy(listener->factory.lock);
+	listener->factory.lock = NULL;
+    }
+
+    if (listener->factory.pool) {
+	pj_pool_t *pool = listener->factory.pool;
+
+	PJ_LOG(4,(listener->factory.obj_name,  "SIP TLS listener destroyed"));
+
+	listener->factory.pool = NULL;
+	pj_pool_release(pool);
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/***************************************************************************/
+/*
+ * TLS Transport
+ */
+
+/*
+ * Prototypes.
+ */
+/* Called by transport manager to send message */
+static pj_status_t tls_send_msg(pjsip_transport *transport, 
+				pjsip_tx_data *tdata,
+				const pj_sockaddr_t *rem_addr,
+				int addr_len,
+				void *token,
+				pjsip_transport_callback callback);
+
+/* Called by transport manager to shutdown */
+static pj_status_t tls_shutdown(pjsip_transport *transport);
+
+/* Called by transport manager to destroy transport */
+static pj_status_t tls_destroy_transport(pjsip_transport *transport);
+
+/* Utility to destroy transport */
+static pj_status_t tls_destroy(pjsip_transport *transport,
+			       pj_status_t reason);
+
+/* Callback when connect completes */
+static pj_bool_t on_connect_complete(pj_ssl_sock_t *ssock,
+				     pj_status_t status);
+
+/* TLS keep-alive timer callback */
+static void tls_keep_alive_timer(pj_timer_heap_t *th, pj_timer_entry *e);
+
+/*
+ * Common function to create TLS transport, called when pending accept() and
+ * pending connect() complete.
+ */
+static pj_status_t tls_create( struct tls_listener *listener,
+			       pj_pool_t *pool,
+			       pj_ssl_sock_t *ssock,
+			       pj_bool_t is_server,
+			       const pj_sockaddr_in *local,
+			       const pj_sockaddr_in *remote,
+			       struct tls_transport **p_tls)
+{
+    struct tls_transport *tls;
+    const pj_str_t ka_pkt = PJSIP_TCP_KEEP_ALIVE_DATA;
+    pj_status_t status;
+    
+
+    PJ_ASSERT_RETURN(listener && ssock && local && remote && p_tls, PJ_EINVAL);
+
+
+    if (pool == NULL) {
+	pool = pjsip_endpt_create_pool(listener->endpt, "tls",
+				       POOL_TP_INIT, POOL_TP_INC);
+	PJ_ASSERT_RETURN(pool != NULL, PJ_ENOMEM);
+    }    
+
+    /*
+     * Create and initialize basic transport structure.
+     */
+    tls = PJ_POOL_ZALLOC_T(pool, struct tls_transport);
+    tls->is_server = is_server;
+    pj_list_init(&tls->delayed_list);
+    tls->base.pool = pool;
+
+    pj_ansi_snprintf(tls->base.obj_name, PJ_MAX_OBJ_NAME, 
+		     (is_server ? "tlss%p" :"tlsc%p"), tls);
+
+    status = pj_atomic_create(pool, 0, &tls->base.ref_cnt);
+    if (status != PJ_SUCCESS) {
+	goto on_error;
+    }
+
+    status = pj_lock_create_recursive_mutex(pool, "tls", &tls->base.lock);
+    if (status != PJ_SUCCESS) {
+	goto on_error;
+    }
+
+    tls->base.key.type = PJSIP_TRANSPORT_TLS;
+    pj_memcpy(&tls->base.key.rem_addr, remote, sizeof(pj_sockaddr_in));
+    tls->base.type_name = "tls";
+    tls->base.flag = pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TLS);
+
+    tls->base.info = (char*) pj_pool_alloc(pool, 64);
+    pj_ansi_snprintf(tls->base.info, 64, "TLS to %s:%d",
+		     pj_inet_ntoa(remote->sin_addr), 
+		     (int)pj_ntohs(remote->sin_port));
+
+    tls->base.addr_len = sizeof(pj_sockaddr_in);
+    
+    /* Set initial local address */
+    if (!pj_sockaddr_has_addr(local)) {
+        pj_sockaddr_cp(&tls->base.local_addr,
+                       &listener->factory.local_addr);
+    } else {
+	pj_sockaddr_cp(&tls->base.local_addr, local);
+    }
+    
+    sockaddr_to_host_port(pool, &tls->base.local_name, 
+			  (pj_sockaddr_in*)&tls->base.local_addr);
+    sockaddr_to_host_port(pool, &tls->base.remote_name, remote);
+
+    tls->base.endpt = listener->endpt;
+    tls->base.tpmgr = listener->tpmgr;
+    tls->base.send_msg = &tls_send_msg;
+    tls->base.do_shutdown = &tls_shutdown;
+    tls->base.destroy = &tls_destroy_transport;
+
+    tls->ssock = ssock;
+
+    /* Register transport to transport manager */
+    status = pjsip_transport_register(listener->tpmgr, &tls->base);
+    if (status != PJ_SUCCESS) {
+	goto on_error;
+    }
+
+    tls->is_registered = PJ_TRUE;
+
+    /* Initialize keep-alive timer */
+    tls->ka_timer.user_data = (void*)tls;
+    tls->ka_timer.cb = &tls_keep_alive_timer;
+    pj_ioqueue_op_key_init(&tls->ka_op_key.key, sizeof(pj_ioqueue_op_key_t));
+    pj_strdup(tls->base.pool, &tls->ka_pkt, &ka_pkt);
+
+    /* Done setting up basic transport. */
+    *p_tls = tls;
+
+    PJ_LOG(4,(tls->base.obj_name, "TLS %s transport created",
+	      (tls->is_server ? "server" : "client")));
+
+    return PJ_SUCCESS;
+
+on_error:
+    tls_destroy(&tls->base, status);
+    return status;
+}
+
+
+/* Flush all delayed transmision once the socket is connected. */
+static void tls_flush_pending_tx(struct tls_transport *tls)
+{
+    pj_lock_acquire(tls->base.lock);
+    while (!pj_list_empty(&tls->delayed_list)) {
+	struct delayed_tdata *pending_tx;
+	pjsip_tx_data *tdata;
+	pj_ioqueue_op_key_t *op_key;
+	pj_ssize_t size;
+	pj_status_t status;
+
+	pending_tx = tls->delayed_list.next;
+	pj_list_erase(pending_tx);
+
+	tdata = pending_tx->tdata_op_key->tdata;
+	op_key = (pj_ioqueue_op_key_t*)pending_tx->tdata_op_key;
+
+	/* send! */
+	size = tdata->buf.cur - tdata->buf.start;
+	status = pj_ssl_sock_send(tls->ssock, op_key, tdata->buf.start, 
+				  &size, 0);
+
+	if (status != PJ_EPENDING) {
+	    on_data_sent(tls->ssock, op_key, size);
+	}
+    }
+    pj_lock_release(tls->base.lock);
+}
+
+
+/* Called by transport manager to destroy transport */
+static pj_status_t tls_destroy_transport(pjsip_transport *transport)
+{
+    struct tls_transport *tls = (struct tls_transport*)transport;
+
+    /* Transport would have been unregistered by now since this callback
+     * is called by transport manager.
+     */
+    tls->is_registered = PJ_FALSE;
+
+    return tls_destroy(transport, tls->close_reason);
+}
+
+
+/* Destroy TLS transport */
+static pj_status_t tls_destroy(pjsip_transport *transport, 
+			       pj_status_t reason)
+{
+    struct tls_transport *tls = (struct tls_transport*)transport;
+
+    if (tls->close_reason == 0)
+	tls->close_reason = reason;
+
+    if (tls->is_registered) {
+	tls->is_registered = PJ_FALSE;
+	pjsip_transport_destroy(transport);
+
+	/* pjsip_transport_destroy will recursively call this function
+	 * again.
+	 */
+	return PJ_SUCCESS;
+    }
+
+    /* Mark transport as closing */
+    tls->is_closing = PJ_TRUE;
+
+    /* Stop keep-alive timer. */
+    if (tls->ka_timer.id) {
+	pjsip_endpt_cancel_timer(tls->base.endpt, &tls->ka_timer);
+	tls->ka_timer.id = PJ_FALSE;
+    }
+
+    /* Cancel all delayed transmits */
+    while (!pj_list_empty(&tls->delayed_list)) {
+	struct delayed_tdata *pending_tx;
+	pj_ioqueue_op_key_t *op_key;
+
+	pending_tx = tls->delayed_list.next;
+	pj_list_erase(pending_tx);
+
+	op_key = (pj_ioqueue_op_key_t*)pending_tx->tdata_op_key;
+
+	on_data_sent(tls->ssock, op_key, -reason);
+    }
+
+    if (tls->rdata.tp_info.pool) {
+	pj_pool_release(tls->rdata.tp_info.pool);
+	tls->rdata.tp_info.pool = NULL;
+    }
+
+    if (tls->ssock) {
+	pj_ssl_sock_close(tls->ssock);
+	tls->ssock = NULL;
+    }
+    if (tls->base.lock) {
+	pj_lock_destroy(tls->base.lock);
+	tls->base.lock = NULL;
+    }
+
+    if (tls->base.ref_cnt) {
+	pj_atomic_destroy(tls->base.ref_cnt);
+	tls->base.ref_cnt = NULL;
+    }
+
+    if (tls->base.pool) {
+	pj_pool_t *pool;
+
+	if (reason != PJ_SUCCESS) {
+	    char errmsg[PJ_ERR_MSG_SIZE];
+
+	    pj_strerror(reason, errmsg, sizeof(errmsg));
+	    PJ_LOG(4,(tls->base.obj_name, 
+		      "TLS transport destroyed with reason %d: %s", 
+		      reason, errmsg));
+
+	} else {
+
+	    PJ_LOG(4,(tls->base.obj_name, 
+		      "TLS transport destroyed normally"));
+
+	}
+
+	pool = tls->base.pool;
+	tls->base.pool = NULL;
+	pj_pool_release(pool);
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * This utility function creates receive data buffers and start
+ * asynchronous recv() operations from the socket. It is called after
+ * accept() or connect() operation complete.
+ */
+static pj_status_t tls_start_read(struct tls_transport *tls)
+{
+    pj_pool_t *pool;
+    pj_ssize_t size;
+    pj_sockaddr_in *rem_addr;
+    void *readbuf[1];
+    pj_status_t status;
+
+    /* Init rdata */
+    pool = pjsip_endpt_create_pool(tls->base.endpt,
+				   "rtd%p",
+				   PJSIP_POOL_RDATA_LEN,
+				   PJSIP_POOL_RDATA_INC);
+    if (!pool) {
+	tls_perror(tls->base.obj_name, "Unable to create pool", PJ_ENOMEM);
+	return PJ_ENOMEM;
+    }
+
+    tls->rdata.tp_info.pool = pool;
+
+    tls->rdata.tp_info.transport = &tls->base;
+    tls->rdata.tp_info.tp_data = tls;
+    tls->rdata.tp_info.op_key.rdata = &tls->rdata;
+    pj_ioqueue_op_key_init(&tls->rdata.tp_info.op_key.op_key, 
+			   sizeof(pj_ioqueue_op_key_t));
+
+    tls->rdata.pkt_info.src_addr = tls->base.key.rem_addr;
+    tls->rdata.pkt_info.src_addr_len = sizeof(pj_sockaddr_in);
+    rem_addr = (pj_sockaddr_in*) &tls->base.key.rem_addr;
+    pj_ansi_strcpy(tls->rdata.pkt_info.src_name,
+		   pj_inet_ntoa(rem_addr->sin_addr));
+    tls->rdata.pkt_info.src_port = pj_ntohs(rem_addr->sin_port);
+
+    size = sizeof(tls->rdata.pkt_info.packet);
+    readbuf[0] = tls->rdata.pkt_info.packet;
+    status = pj_ssl_sock_start_read2(tls->ssock, tls->base.pool, size,
+				     readbuf, 0);
+    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	PJ_LOG(4, (tls->base.obj_name, 
+		   "pj_ssl_sock_start_read() error, status=%d", 
+		   status));
+	return status;
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/* This callback is called by transport manager for the TLS factory
+ * to create outgoing transport to the specified destination.
+ */
+static pj_status_t lis_create_transport(pjsip_tpfactory *factory,
+					pjsip_tpmgr *mgr,
+					pjsip_endpoint *endpt,
+					const pj_sockaddr *rem_addr,
+					int addr_len,
+					pjsip_transport **p_transport)
+{
+    struct tls_listener *listener;
+    struct tls_transport *tls;
+    pj_pool_t *pool;
+    pj_ssl_sock_t *ssock;
+    pj_ssl_sock_param ssock_param;
+    pj_sockaddr_in local_addr;
+    pj_status_t status;
+
+    /* Sanity checks */
+    PJ_ASSERT_RETURN(factory && mgr && endpt && rem_addr &&
+		     addr_len && p_transport, PJ_EINVAL);
+
+    /* Check that address is a sockaddr_in */
+    PJ_ASSERT_RETURN(rem_addr->addr.sa_family == pj_AF_INET() &&
+		     addr_len == sizeof(pj_sockaddr_in), PJ_EINVAL);
+
+
+    listener = (struct tls_listener*)factory;
+
+    pool = pjsip_endpt_create_pool(listener->endpt, "tls",
+				   POOL_TP_INIT, POOL_TP_INC);
+    PJ_ASSERT_RETURN(pool != NULL, PJ_ENOMEM);
+
+    /* Build SSL socket param */
+    pj_ssl_sock_param_default(&ssock_param);
+    ssock_param.cb.on_connect_complete = &on_connect_complete;
+    ssock_param.cb.on_data_read = &on_data_read;
+    ssock_param.cb.on_data_sent = &on_data_sent;
+    ssock_param.async_cnt = 1;
+    ssock_param.ioqueue = pjsip_endpt_get_ioqueue(listener->endpt);
+    PJ_TODO(set_proper_servername_based_on_target);
+    PJ_TODO(synchronize_tls_cipher_type_with_ssl_sock_cipher_type);
+    ssock_param.server_name = listener->tls_setting.server_name;
+    ssock_param.timeout = listener->tls_setting.timeout;
+    ssock_param.user_data = NULL; /* pending, must be set later */
+    ssock_param.verify_peer = listener->tls_setting.verify_server;
+    if (ssock_param.send_buffer_size < PJSIP_MAX_PKT_LEN)
+	ssock_param.send_buffer_size = PJSIP_MAX_PKT_LEN;
+    if (ssock_param.read_buffer_size < PJSIP_MAX_PKT_LEN)
+	ssock_param.read_buffer_size = PJSIP_MAX_PKT_LEN;
+    ssock_param.qos_type = listener->tls_setting.qos_type;
+    ssock_param.qos_ignore_error = listener->tls_setting.qos_ignore_error;
+    pj_memcpy(&ssock_param.qos_params, &listener->tls_setting.qos_params,
+	      sizeof(ssock_param.qos_params));
+
+    switch(listener->tls_setting.method) {
+    case PJSIP_TLSV1_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_TLS1;
+	break;
+    case PJSIP_SSLV2_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_SSL2;
+	break;
+    case PJSIP_SSLV3_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_SSL3;
+	break;
+    case PJSIP_SSLV23_METHOD:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_SSL23;
+	break;
+    default:
+	ssock_param.proto = PJ_SSL_SOCK_PROTO_DEFAULT;
+	break;
+    }
+
+    status = pj_ssl_sock_create(pool, &ssock_param, &ssock);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    /* Apply SSL certificate */
+    if (listener->cert) {
+	status = pj_ssl_sock_set_certificate(ssock, pool, listener->cert);
+	if (status != PJ_SUCCESS)
+	    return status;
+    }
+
+    /* Initially set bind address to PJ_INADDR_ANY port 0 */
+    pj_sockaddr_in_init(&local_addr, NULL, 0);
+
+    /* Create the transport descriptor */
+    status = tls_create(listener, pool, ssock, PJ_FALSE, &local_addr, 
+			(pj_sockaddr_in*)rem_addr, &tls);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    /* Set the "pending" SSL socket user data */
+    pj_ssl_sock_set_user_data(tls->ssock, tls);
+
+    /* Start asynchronous connect() operation */
+    tls->has_pending_connect = PJ_TRUE;
+    status = pj_ssl_sock_start_connect(tls->ssock, tls->base.pool, 
+				       (pj_sockaddr_t*)&local_addr,
+				       (pj_sockaddr_t*)rem_addr,
+				       addr_len);
+    if (status == PJ_SUCCESS) {
+	on_connect_complete(tls->ssock, PJ_SUCCESS);
+    } else if (status != PJ_EPENDING) {
+	tls_destroy(&tls->base, status);
+	return status;
+    }
+
+    if (tls->has_pending_connect) {
+	pj_ssl_sock_info info;
+
+	/* Update local address, just in case local address currently set is 
+	 * different now that asynchronous connect() is started.
+	 */
+
+	/* Retrieve the bound address */
+	status = pj_ssl_sock_get_info(tls->ssock, &info);
+	if (status == PJ_SUCCESS) {
+	    pj_uint16_t new_port;
+
+	    new_port = pj_sockaddr_get_port((pj_sockaddr_t*)&info.local_addr);
+
+	    if (pj_sockaddr_has_addr((pj_sockaddr_t*)&info.local_addr)) {
+		/* Update sockaddr */
+		pj_sockaddr_cp((pj_sockaddr_t*)&tls->base.local_addr,
+			       (pj_sockaddr_t*)&info.local_addr);
+	    } else if (new_port && new_port != pj_sockaddr_get_port(
+					(pj_sockaddr_t*)&tls->base.local_addr))
+	    {
+		/* Update port only */
+		pj_sockaddr_set_port(&tls->base.local_addr, 
+				     new_port);
+	    }
+
+	    sockaddr_to_host_port(tls->base.pool, &tls->base.local_name,
+				  (pj_sockaddr_in*)&tls->base.local_addr);
+	}
+
+	PJ_LOG(4,(tls->base.obj_name, 
+		  "TLS transport %.*s:%d is connecting to %.*s:%d...",
+		  (int)tls->base.local_name.host.slen,
+		  tls->base.local_name.host.ptr,
+		  tls->base.local_name.port,
+		  (int)tls->base.remote_name.host.slen,
+		  tls->base.remote_name.host.ptr,
+		  tls->base.remote_name.port));
+    }
+
+    /* Done */
+    *p_transport = &tls->base;
+
+    return PJ_SUCCESS;
+}
+
+
+/*
+ * This callback is called by SSL socket when pending accept() operation
+ * has completed.
+ */
+static pj_bool_t on_accept_complete(pj_ssl_sock_t *ssock,
+				    pj_ssl_sock_t *new_ssock,
+				    const pj_sockaddr_t *src_addr,
+				    int src_addr_len)
+{
+    struct tls_listener *listener;
+    struct tls_transport *tls;
+    char addr[PJ_INET6_ADDRSTRLEN+10];
+    pj_status_t status;
+
+    PJ_UNUSED_ARG(src_addr_len);
+
+    listener = (struct tls_listener*) pj_ssl_sock_get_user_data(ssock);
+
+    PJ_ASSERT_RETURN(new_ssock, PJ_TRUE);
+
+    PJ_LOG(4,(listener->factory.obj_name, 
+	      "TLS listener %.*s:%d: got incoming TLS connection "
+	      "from %s, sock=%d",
+	      (int)listener->factory.addr_name.host.slen,
+	      listener->factory.addr_name.host.ptr,
+	      listener->factory.addr_name.port,
+	      pj_sockaddr_print(src_addr, addr, sizeof(addr), 3),
+	      new_ssock));
+
+    /* 
+     * Incoming connection!
+     * Create TLS transport for the new socket.
+     */
+    status = tls_create( listener, NULL, new_ssock, PJ_TRUE,
+			 (const pj_sockaddr_in*)&listener->factory.local_addr,
+			 (const pj_sockaddr_in*)src_addr, &tls);
+    
+    if (status == PJ_SUCCESS) {
+	/* Set the "pending" SSL socket user data */
+	pj_ssl_sock_set_user_data(new_ssock, tls);
+
+	status = tls_start_read(tls);
+	if (status != PJ_SUCCESS) {
+	    PJ_LOG(3,(tls->base.obj_name, "New transport cancelled"));
+	    tls_destroy(&tls->base, status);
+	} else {
+	    /* Start keep-alive timer */
+	    if (PJSIP_TCP_KEEP_ALIVE_INTERVAL) {
+		pj_time_val delay = {PJSIP_TCP_KEEP_ALIVE_INTERVAL, 0};
+		pjsip_endpt_schedule_timer(listener->endpt, 
+					   &tls->ka_timer, 
+					   &delay);
+		tls->ka_timer.id = PJ_TRUE;
+		pj_gettimeofday(&tls->last_activity);
+	    }
+	}
+    }
+
+    return PJ_TRUE;
+}
+
+
+/* 
+ * Callback from ioqueue when packet is sent.
+ */
+static pj_bool_t on_data_sent(pj_ssl_sock_t *ssock,
+			      pj_ioqueue_op_key_t *op_key,
+			      pj_ssize_t bytes_sent)
+{
+    struct tls_transport *tls = (struct tls_transport*) 
+    				pj_ssl_sock_get_user_data(ssock);
+    pjsip_tx_data_op_key *tdata_op_key = (pjsip_tx_data_op_key*)op_key;
+
+    /* Note that op_key may be the op_key from keep-alive, thus
+     * it will not have tdata etc.
+     */
+
+    tdata_op_key->tdata = NULL;
+
+    if (tdata_op_key->callback) {
+	/*
+	 * Notify sip_transport.c that packet has been sent.
+	 */
+	if (bytes_sent == 0)
+	    bytes_sent = -PJ_RETURN_OS_ERROR(OSERR_ENOTCONN);
+
+	tdata_op_key->callback(&tls->base, tdata_op_key->token, bytes_sent);
+
+	/* Mark last activity time */
+	pj_gettimeofday(&tls->last_activity);
+
+    }
+
+    /* Check for error/closure */
+    if (bytes_sent <= 0) {
+	pj_status_t status;
+
+	PJ_LOG(5,(tls->base.obj_name, "TLS send() error, sent=%d", 
+		  bytes_sent));
+
+	status = (bytes_sent == 0) ? PJ_RETURN_OS_ERROR(OSERR_ENOTCONN) :
+				     -bytes_sent;
+	if (tls->close_reason==PJ_SUCCESS) tls->close_reason = status;
+	pjsip_transport_shutdown(&tls->base);
+
+	return PJ_FALSE;
+    }
+    
+    return PJ_TRUE;
+}
+
+
+/* 
+ * This callback is called by transport manager to send SIP message 
+ */
+static pj_status_t tls_send_msg(pjsip_transport *transport, 
+				pjsip_tx_data *tdata,
+				const pj_sockaddr_t *rem_addr,
+				int addr_len,
+				void *token,
+				pjsip_transport_callback callback)
+{
+    struct tls_transport *tls = (struct tls_transport*)transport;
+    pj_ssize_t size;
+    pj_bool_t delayed = PJ_FALSE;
+    pj_status_t status = PJ_SUCCESS;
+
+    /* Sanity check */
+    PJ_ASSERT_RETURN(transport && tdata, PJ_EINVAL);
+
+    /* Check that there's no pending operation associated with the tdata */
+    PJ_ASSERT_RETURN(tdata->op_key.tdata == NULL, PJSIP_EPENDINGTX);
+    
+    /* Check the address is supported */
+    PJ_ASSERT_RETURN(rem_addr && addr_len==sizeof(pj_sockaddr_in), PJ_EINVAL);
+
+
+
+    /* Init op key. */
+    tdata->op_key.tdata = tdata;
+    tdata->op_key.token = token;
+    tdata->op_key.callback = callback;
+
+    /* If asynchronous connect() has not completed yet, just put the
+     * transmit data in the pending transmission list since we can not
+     * use the socket yet.
+     */
+    if (tls->has_pending_connect) {
+
+	/*
+	 * Looks like connect() is still in progress. Check again (this time
+	 * with holding the lock) to be sure.
+	 */
+	pj_lock_acquire(tls->base.lock);
+
+	if (tls->has_pending_connect) {
+	    struct delayed_tdata *delayed_tdata;
+
+	    /*
+	     * connect() is still in progress. Put the transmit data to
+	     * the delayed list.
+	     */
+	    delayed_tdata = PJ_POOL_ALLOC_T(tdata->pool, 
+					    struct delayed_tdata);
+	    delayed_tdata->tdata_op_key = &tdata->op_key;
+
+	    pj_list_push_back(&tls->delayed_list, delayed_tdata);
+	    status = PJ_EPENDING;
+
+	    /* Prevent pj_ioqueue_send() to be called below */
+	    delayed = PJ_TRUE;
+	}
+
+	pj_lock_release(tls->base.lock);
+    } 
+    
+    if (!delayed) {
+	/*
+	 * Transport is ready to go. Send the packet to ioqueue to be
+	 * sent asynchronously.
+	 */
+	size = tdata->buf.cur - tdata->buf.start;
+	status = pj_ssl_sock_send(tls->ssock, 
+				    (pj_ioqueue_op_key_t*)&tdata->op_key,
+				    tdata->buf.start, &size, 0);
+
+	if (status != PJ_EPENDING) {
+	    /* Not pending (could be immediate success or error) */
+	    tdata->op_key.tdata = NULL;
+
+	    /* Shutdown transport on closure/errors */
+	    if (size <= 0) {
+
+		PJ_LOG(5,(tls->base.obj_name, "TLS send() error, sent=%d", 
+			  size));
+
+		if (status == PJ_SUCCESS) 
+		    status = PJ_RETURN_OS_ERROR(OSERR_ENOTCONN);
+		if (tls->close_reason==PJ_SUCCESS) tls->close_reason = status;
+		pjsip_transport_shutdown(&tls->base);
+	    }
+	}
+    }
+
+    return status;
+}
+
+
+/* 
+ * This callback is called by transport manager to shutdown transport.
+ */
+static pj_status_t tls_shutdown(pjsip_transport *transport)
+{
+    struct tls_transport *tls = (struct tls_transport*)transport;
+    
+    /* Stop keep-alive timer. */
+    if (tls->ka_timer.id) {
+	pjsip_endpt_cancel_timer(tls->base.endpt, &tls->ka_timer);
+	tls->ka_timer.id = PJ_FALSE;
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+/* 
+ * Callback from ioqueue that an incoming data is received from the socket.
+ */
+static pj_bool_t on_data_read(pj_ssl_sock_t *ssock,
+			      void *data,
+			      pj_size_t size,
+			      pj_status_t status,
+			      pj_size_t *remainder)
+{
+    enum { MAX_IMMEDIATE_PACKET = 10 };
+    struct tls_transport *tls;
+    pjsip_rx_data *rdata;
+
+    PJ_UNUSED_ARG(data);
+
+    tls = (struct tls_transport*) pj_ssl_sock_get_user_data(ssock);
+    rdata = &tls->rdata;
+
+    /* Don't do anything if transport is closing. */
+    if (tls->is_closing) {
+	tls->is_closing++;
+	return PJ_FALSE;
+    }
+
+    /* Houston, we have packet! Report the packet to transport manager
+     * to be parsed.
+     */
+    if (status == PJ_SUCCESS) {
+	pj_size_t size_eaten;
+
+	/* Mark this as an activity */
+	pj_gettimeofday(&tls->last_activity);
+
+	pj_assert((void*)rdata->pkt_info.packet == data);
+
+	/* Init pkt_info part. */
+	rdata->pkt_info.len = size;
+	rdata->pkt_info.zero = 0;
+	pj_gettimeofday(&rdata->pkt_info.timestamp);
+
+	/* Report to transport manager.
+	 * The transport manager will tell us how many bytes of the packet
+	 * have been processed (as valid SIP message).
+	 */
+	size_eaten = 
+	    pjsip_tpmgr_receive_packet(rdata->tp_info.transport->tpmgr, 
+				       rdata);
+
+	pj_assert(size_eaten <= (pj_size_t)rdata->pkt_info.len);
+
+	/* Move unprocessed data to the front of the buffer */
+	*remainder = size - size_eaten;
+	if (*remainder > 0 && *remainder != size) {
+	    pj_memmove(rdata->pkt_info.packet,
+		       rdata->pkt_info.packet + size_eaten,
+		       *remainder);
+	}
+
+    } else {
+
+	/* Transport is closed */
+	PJ_LOG(4,(tls->base.obj_name, "TLS connection closed"));
+	
+	/* We can not destroy the transport since high level objects may
+	 * still keep reference to this transport. So we can only 
+	 * instruct transport manager to gracefully start the shutdown
+	 * procedure for this transport.
+	 */
+	if (tls->close_reason==PJ_SUCCESS) 
+	    tls->close_reason = status;
+	pjsip_transport_shutdown(&tls->base);
+
+	return PJ_FALSE;
+
+    }
+
+    /* Reset pool. */
+    pj_pool_reset(rdata->tp_info.pool);
+
+    return PJ_TRUE;
+}
+
+
+/* 
+ * Callback from ioqueue when asynchronous connect() operation completes.
+ */
+static pj_bool_t on_connect_complete(pj_ssl_sock_t *ssock,
+				     pj_status_t status)
+{
+    struct tls_transport *tls;
+    pj_ssl_sock_info info;
+    
+    tls = (struct tls_transport*) pj_ssl_sock_get_user_data(ssock);
+
+    /* Check connect() status */
+    if (status != PJ_SUCCESS) {
+
+	tls_perror(tls->base.obj_name, "TLS connect() error", status);
+
+	/* Cancel all delayed transmits */
+	while (!pj_list_empty(&tls->delayed_list)) {
+	    struct delayed_tdata *pending_tx;
+	    pj_ioqueue_op_key_t *op_key;
+
+	    pending_tx = tls->delayed_list.next;
+	    pj_list_erase(pending_tx);
+
+	    op_key = (pj_ioqueue_op_key_t*)pending_tx->tdata_op_key;
+
+	    on_data_sent(tls->ssock, op_key, -status);
+	}
+
+	/* We can not destroy the transport since high level objects may
+	 * still keep reference to this transport. So we can only 
+	 * instruct transport manager to gracefully start the shutdown
+	 * procedure for this transport.
+	 */
+	if (tls->close_reason==PJ_SUCCESS) tls->close_reason = status;
+	pjsip_transport_shutdown(&tls->base);
+	return PJ_FALSE;
+    }
+
+    /* Update (again) local address, just in case local address currently
+     * set is different now that the socket is connected (could happen
+     * on some systems, like old Win32 probably?).
+     */
+
+    /* Retrieve the bound address */
+    status = pj_ssl_sock_get_info(tls->ssock, &info);
+    if (status == PJ_SUCCESS) {
+	pj_sockaddr_in addr;
+	pj_sockaddr_in *tp_addr = (pj_sockaddr_in*)&tls->base.local_addr;
+	
+	pj_sockaddr_cp((pj_sockaddr_t*)&addr, (pj_sockaddr_t*)&info.local_addr);
+	if (tp_addr->sin_addr.s_addr != addr.sin_addr.s_addr) {
+	    tp_addr->sin_addr.s_addr = addr.sin_addr.s_addr;
+	    tp_addr->sin_port = addr.sin_port;
+	    sockaddr_to_host_port(tls->base.pool, &tls->base.local_name,
+				  tp_addr);
+	}
+    }
+
+    PJ_LOG(4,(tls->base.obj_name, 
+	      "TLS transport %.*s:%d is connected to %.*s:%d",
+	      (int)tls->base.local_name.host.slen,
+	      tls->base.local_name.host.ptr,
+	      tls->base.local_name.port,
+	      (int)tls->base.remote_name.host.slen,
+	      tls->base.remote_name.host.ptr,
+	      tls->base.remote_name.port));
+
+    /* Mark that pending connect() operation has completed. */
+    tls->has_pending_connect = PJ_FALSE;
+
+    /* Start pending read */
+    status = tls_start_read(tls);
+    if (status != PJ_SUCCESS) {
+	/* We can not destroy the transport since high level objects may
+	 * still keep reference to this transport. So we can only 
+	 * instruct transport manager to gracefully start the shutdown
+	 * procedure for this transport.
+	 */
+	if (tls->close_reason==PJ_SUCCESS) tls->close_reason = status;
+	pjsip_transport_shutdown(&tls->base);
+	return PJ_FALSE;
+    }
+
+    /* Flush all pending send operations */
+    tls_flush_pending_tx(tls);
+
+    /* Start keep-alive timer */
+    if (PJSIP_TCP_KEEP_ALIVE_INTERVAL) {
+	pj_time_val delay = { PJSIP_TCP_KEEP_ALIVE_INTERVAL, 0 };
+	pjsip_endpt_schedule_timer(tls->base.endpt, &tls->ka_timer, 
+				   &delay);
+	tls->ka_timer.id = PJ_TRUE;
+	pj_gettimeofday(&tls->last_activity);
+    }
+
+    return PJ_TRUE;
+}
+
+
+/* Transport keep-alive timer callback */
+static void tls_keep_alive_timer(pj_timer_heap_t *th, pj_timer_entry *e)
+{
+    struct tls_transport *tls = (struct tls_transport*) e->user_data;
+    pj_time_val delay;
+    pj_time_val now;
+    pj_ssize_t size;
+    pj_status_t status;
+
+    PJ_UNUSED_ARG(th);
+
+    tls->ka_timer.id = PJ_TRUE;
+
+    pj_gettimeofday(&now);
+    PJ_TIME_VAL_SUB(now, tls->last_activity);
+
+    if (now.sec > 0 && now.sec < PJSIP_TCP_KEEP_ALIVE_INTERVAL) {
+	/* There has been activity, so don't send keep-alive */
+	delay.sec = PJSIP_TCP_KEEP_ALIVE_INTERVAL - now.sec;
+	delay.msec = 0;
+
+	pjsip_endpt_schedule_timer(tls->base.endpt, &tls->ka_timer, 
+				   &delay);
+	tls->ka_timer.id = PJ_TRUE;
+	return;
+    }
+
+    PJ_LOG(5,(tls->base.obj_name, "Sending %d byte(s) keep-alive to %.*s:%d", 
+	      (int)tls->ka_pkt.slen, (int)tls->base.remote_name.host.slen,
+	      tls->base.remote_name.host.ptr,
+	      tls->base.remote_name.port));
+
+    /* Send the data */
+    size = tls->ka_pkt.slen;
+    status = pj_ssl_sock_send(tls->ssock, &tls->ka_op_key.key,
+			      tls->ka_pkt.ptr, &size, 0);
+
+    if (status != PJ_SUCCESS && status != PJ_EPENDING) {
+	tls_perror(tls->base.obj_name, 
+		   "Error sending keep-alive packet", status);
+	pjsip_transport_shutdown(&tls->base);
+	return;
+    }
+
+    /* Register next keep-alive */
+    delay.sec = PJSIP_TCP_KEEP_ALIVE_INTERVAL;
+    delay.msec = 0;
+
+    pjsip_endpt_schedule_timer(tls->base.endpt, &tls->ka_timer, 
+			       &delay);
+    tls->ka_timer.id = PJ_TRUE;
+}
+
+#endif /* PJSIP_HAS_TLS_TRANSPORT */
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c
index d9ea199411..4d04b130ee 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c
@@ -959,7 +959,7 @@ PJ_DEF(pj_status_t) pjsip_tls_transport_start( pjsip_endpoint *endpt,
     listener = PJ_POOL_ZALLOC_T(pool, struct tls_listener);
     listener->factory.pool = pool;
     listener->factory.type = PJSIP_TRANSPORT_TLS;
-    listener->factory.type_name = "TLS";
+    listener->factory.type_name = "tls";
     listener->factory.flag = 
 	pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TLS);
     listener->sock = PJ_INVALID_SOCKET;
@@ -1270,7 +1270,7 @@ static pj_status_t tls_create( struct tls_listener *listener,
 
     tls->base.key.type = PJSIP_TRANSPORT_TLS;
     pj_memcpy(&tls->base.key.rem_addr, remote, sizeof(pj_sockaddr_in));
-    tls->base.type_name = "TLS";
+    tls->base.type_name = "tls";
     tls->base.flag = pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TLS);
 
     tls->base.info = (char*) pj_pool_alloc(pool, 64);
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp
index d8501b89ed..7fc80e2b17 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_transport_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util.c
index 7577a8f446..421a3771c2 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util.c
@@ -1,4 +1,4 @@
-/* $Id: sip_util.c 2855 2009-08-05 18:41:23Z nanang $ */
+/* $Id: sip_util.c 2932 2009-10-09 12:11:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -754,6 +754,18 @@ PJ_DEF(pj_status_t) pjsip_endpt_create_cancel( pjsip_endpoint *endpt,
 	    break;
     }
 
+    /* Must also copy the saved strict route header, otherwise CANCEL will be
+     * sent with swapped Route and request URI!
+     */
+    if (req_tdata->saved_strict_route) {
+	cancel_tdata->saved_strict_route = (pjsip_route_hdr*)
+	    pjsip_hdr_clone(cancel_tdata->pool, req_tdata->saved_strict_route);
+    }
+
+    /* Finally copy the destination info from the original request */
+    pj_memcpy(&cancel_tdata->dest_info, &req_tdata->dest_info,
+	      sizeof(req_tdata->dest_info));
+
     /* Done.
      * Return the transmit buffer containing the CANCEL request.
      */
@@ -1057,7 +1069,7 @@ static void stateless_send_transport_cb( void *token,
 	     * (2) Failure (i.e. sent <= 0)
 	     */
 	    cont = (sent > 0) ? PJ_FALSE :
-		   (stateless_data->cur_addr<stateless_data->addr.count-1);
+		   (tdata->dest_info.cur_addr<tdata->dest_info.addr.count-1);
 	    if (stateless_data->app_cb) {
 		(*stateless_data->app_cb)(stateless_data, sent, &cont);
 	    } else {
@@ -1084,11 +1096,11 @@ static void stateless_send_transport_cb( void *token,
 	 * first invocation. 
 	 */
 	if (sent != -PJ_EPENDING) {
-	    stateless_data->cur_addr++;
+	    tdata->dest_info.cur_addr++;
 	}
 
 	/* Have next address? */
-	if (stateless_data->cur_addr >= stateless_data->addr.count) {
+	if (tdata->dest_info.cur_addr >= tdata->dest_info.addr.count) {
 	    /* This only happens when a rather buggy application has
 	     * sent 'cont' to PJ_TRUE when the initial value was PJ_FALSE.
 	     * In this case just stop the processing; we don't need to
@@ -1100,9 +1112,9 @@ static void stateless_send_transport_cb( void *token,
 	}
 
 	/* Keep current server address information handy. */
-	cur_addr = &stateless_data->addr.entry[stateless_data->cur_addr].addr;
-	cur_addr_type = stateless_data->addr.entry[stateless_data->cur_addr].type;
-	cur_addr_len = stateless_data->addr.entry[stateless_data->cur_addr].addr_len;
+	cur_addr = &tdata->dest_info.addr.entry[tdata->dest_info.cur_addr].addr;
+	cur_addr_type = tdata->dest_info.addr.entry[tdata->dest_info.cur_addr].type;
+	cur_addr_len = tdata->dest_info.addr.entry[tdata->dest_info.cur_addr].addr_len;
 
 	/* Acquire transport. */
 	status = pjsip_endpt_acquire_transport( stateless_data->endpt,
@@ -1178,6 +1190,7 @@ stateless_send_resolver_callback( pj_status_t status,
 				  const struct pjsip_server_addresses *addr)
 {
     pjsip_send_state *stateless_data = (pjsip_send_state*) token;
+    pjsip_tx_data *tdata = stateless_data->tdata;
 
     /* Fail on server resolution. */
     if (status != PJ_SUCCESS) {
@@ -1185,12 +1198,16 @@ stateless_send_resolver_callback( pj_status_t status,
 	    pj_bool_t cont = PJ_FALSE;
 	    (*stateless_data->app_cb)(stateless_data, -status, &cont);
 	}
-	pjsip_tx_data_dec_ref(stateless_data->tdata);
+	pjsip_tx_data_dec_ref(tdata);
 	return;
     }
 
     /* Copy server addresses */
-    pj_memcpy( &stateless_data->addr, addr, sizeof(pjsip_server_addresses));
+    if (addr && addr != &tdata->dest_info.addr) {
+	pj_memcpy( &tdata->dest_info.addr, addr, 
+	           sizeof(pjsip_server_addresses));
+    }
+    pj_assert(tdata->dest_info.addr.count != 0);
 
 #if !defined(PJSIP_DONT_SWITCH_TO_TCP) || PJSIP_DONT_SWITCH_TO_TCP==0
     /* RFC 3261 section 18.1.1:
@@ -1199,29 +1216,33 @@ stateless_send_resolver_callback( pj_status_t status,
      * using an RFC 2914 [43] congestion controlled transport protocol, such
      * as TCP.
      */
-    if (stateless_data->tdata->msg->type == PJSIP_REQUEST_MSG &&
-	addr->count > 0 && 
-	addr->entry[0].type == PJSIP_TRANSPORT_UDP)
+    if (tdata->msg->type == PJSIP_REQUEST_MSG &&
+	tdata->dest_info.addr.count > 0 && 
+	tdata->dest_info.addr.entry[0].type == PJSIP_TRANSPORT_UDP)
     {
 	int len;
 
 	/* Encode the request */
-	status = pjsip_tx_data_encode(stateless_data->tdata);
+	status = pjsip_tx_data_encode(tdata);
 	if (status != PJ_SUCCESS) {
 	    if (stateless_data->app_cb) {
 		pj_bool_t cont = PJ_FALSE;
 		(*stateless_data->app_cb)(stateless_data, -status, &cont);
 	    }
-	    pjsip_tx_data_dec_ref(stateless_data->tdata);
+	    pjsip_tx_data_dec_ref(tdata);
 	    return;
 	}
 
 	/* Check if request message is larger than 1300 bytes. */
-	len = stateless_data->tdata->buf.cur - 
-		stateless_data->tdata->buf.start;
+	len = tdata->buf.cur - tdata->buf.start;
 	if (len >= PJSIP_UDP_SIZE_THRESHOLD) {
 	    int i;
-	    int count = stateless_data->addr.count;
+	    int count = tdata->dest_info.addr.count;
+
+	    PJ_LOG(5,(THIS_FILE, "%s exceeds UDP size threshold (%u), "
+				 "sending with TCP",
+				 pjsip_tx_data_get_info(tdata),
+				 PJSIP_UDP_SIZE_THRESHOLD));
 
 	    /* Insert "TCP version" of resolved UDP addresses at the
 	     * beginning.
@@ -1229,19 +1250,18 @@ stateless_send_resolver_callback( pj_status_t status,
 	    if (count * 2 > PJSIP_MAX_RESOLVED_ADDRESSES)
 		count = PJSIP_MAX_RESOLVED_ADDRESSES / 2;
 	    for (i = 0; i < count; ++i) {
-		pj_memcpy(&stateless_data->addr.entry[i+count],
-			  &stateless_data->addr.entry[i],
-			  sizeof(stateless_data->addr.entry[0]));
-		stateless_data->addr.entry[i].type = PJSIP_TRANSPORT_TCP;
+		pj_memcpy(&tdata->dest_info.addr.entry[i+count],
+			  &tdata->dest_info.addr.entry[i],
+			  sizeof(tdata->dest_info.addr.entry[0]));
+		tdata->dest_info.addr.entry[i].type = PJSIP_TRANSPORT_TCP;
 	    }
-	    stateless_data->addr.count = count * 2;
+	    tdata->dest_info.addr.count = count * 2;
 	}
     }
 #endif /* !PJSIP_DONT_SWITCH_TO_TCP */
 
     /* Process the addresses. */
-    stateless_send_transport_cb( stateless_data, stateless_data->tdata,
-				 -PJ_EPENDING);
+    stateless_send_transport_cb( stateless_data, tdata, -PJ_EPENDING);
 }
 
 /*
@@ -1275,11 +1295,22 @@ PJ_DEF(pj_status_t) pjsip_endpt_send_request_stateless(pjsip_endpoint *endpt,
     stateless_data->tdata = tdata;
     stateless_data->app_cb = cb;
 
-    /* Resolve destination host.
-     * The processing then resumed when the resolving callback is called.
+    /* If destination info has not been initialized (this applies for most
+     * all requests except CANCEL), resolve destination host. The processing
+     * then resumed when the resolving callback is called. For CANCEL, the
+     * destination info must have been copied from the original INVITE so
+     * proceed to sending the request directly.
      */
-    pjsip_endpt_resolve( endpt, tdata->pool, &dest_info, stateless_data,
-			 &stateless_send_resolver_callback);
+    if (tdata->dest_info.addr.count == 0) {
+	pjsip_endpt_resolve( endpt, tdata->pool, &dest_info, stateless_data,
+			     &stateless_send_resolver_callback);
+    } else {
+	PJ_LOG(5,(THIS_FILE, "%s: skipping target resolution because "
+	                     "address is already set",
+			     pjsip_tx_data_get_info(tdata)));
+	stateless_send_resolver_callback(PJ_SUCCESS, stateless_data,
+					 &tdata->dest_info.addr);
+    }
     return PJ_SUCCESS;
 }
 
@@ -1590,7 +1621,7 @@ static void send_response_resolver_cb( pj_status_t status, void *token,
     }
 
     /* Update address in send_state. */
-    send_state->addr = *addr;
+    pj_memcpy(&send_state->tdata->dest_info.addr, addr, sizeof(*addr));
 
     /* Send response using the transoprt. */
     status = pjsip_transport_send( send_state->cur_transport, 
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp
index caa9f9f73f..0e394ee4f6 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_util_proxy_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp
index b27a511a2c..06a9344190 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_util_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/*
+/* 
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  */
 
 /*
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_acc.c b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_acc.c
index 4c9d6088dd..26db69e35a 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_acc.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_acc.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_acc.c 2855 2009-08-05 18:41:23Z nanang $ */
+/* $Id: pjsua_acc.c 3032 2009-12-14 11:13:45Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -328,7 +328,11 @@ PJ_DEF(pj_status_t) pjsua_acc_add( const pjsua_acc_config *cfg,
     /* If accounts has registration enabled, start registration */
     if (pjsua_var.acc[id].cfg.reg_uri.slen)
 	pjsua_acc_set_registration(id, PJ_TRUE);
-
+    else {
+	/* Otherwise subscribe to MWI, if it's enabled */
+	if (pjsua_var.acc[id].cfg.mwi_enabled)
+	    pjsua_start_mwi(&pjsua_var.acc[id]);
+    }
 
     return PJ_SUCCESS;
 }
@@ -683,6 +687,19 @@ static pj_bool_t acc_check_nat_addr(pjsua_acc *acc,
 	return PJ_FALSE;
     }
 
+    /* Also don't switch if only the port number part is different, and
+     * the Via received address is private.
+     * See http://trac.pjsip.org/repos/ticket/864
+     */
+    if (acc->cfg.allow_contact_rewrite != 2 &&
+	pj_sockaddr_cmp(&contact_addr, &recv_addr)==0 &&
+	is_private_ip(via_addr))
+    {
+	/* Don't switch */
+	pj_pool_release(pool);
+	return PJ_FALSE;
+    }
+
     PJ_LOG(3,(THIS_FILE, "IP address change detected for account %d "
 			 "(%.*s:%d --> %.*s:%d). Updating registration..",
 			 acc->index,
@@ -739,16 +756,9 @@ static pj_bool_t acc_check_nat_addr(pjsua_acc *acc,
 	pj_strdup2_with_null(acc->pool, &acc->contact, tmp);
     }
 
-    /* For UDP transport, if STUN is enabled then update the transport's
-     * published name as well.
-     */
-    if (tp->key.type==PJSIP_TRANSPORT_UDP &&
-	(pjsua_var.ua_cfg.stun_domain.slen != 0 ||
-	 pjsua_var.ua_cfg.stun_host.slen != 0))
-    {
-	pj_strdup_with_null(tp->pool, &tp->local_name.host, via_addr);
-	tp->local_name.port = rport;
-    }
+    /* Always update, by http://trac.pjsip.org/repos/ticket/864. */
+    pj_strdup_with_null(tp->pool, &tp->local_name.host, via_addr);
+    tp->local_name.port = rport;
 
     /* Perform new registration */
     pjsua_acc_set_registration(acc->index, PJ_TRUE);
@@ -1056,6 +1066,10 @@ static void regc_cb(struct pjsip_regc_cbparam *param)
 	    /* Send initial PUBLISH if it is enabled */
 	    if (acc->cfg.publish_enabled && acc->publish_sess==NULL)
 		pjsua_pres_init_publish_acc(acc->index);
+
+	    /* Subscribe to MWI, if it's enabled */
+	    if (acc->cfg.mwi_enabled)
+		pjsua_start_mwi(acc);
 	}
 
     } else {
@@ -1597,7 +1611,17 @@ PJ_DEF(pj_status_t) pjsua_acc_create_request(pjsua_acc_id acc_id,
 			  (pjsip_hdr*)pjsip_hdr_clone(tdata->pool, r));
 	r = r->next;
     }
-    
+
+    /* If account is locked to specific transport, then set that transport to
+     * the transmit data.
+     */
+    if (pjsua_var.acc[acc_id].cfg.transport_id != PJSUA_INVALID_ID) {
+	pjsip_tpselector tp_sel;
+
+	pjsua_init_tpselector(acc->cfg.transport_id, &tp_sel);
+	pjsip_tx_data_set_transport(tdata, &tp_sel);
+    }
+
     /* Done */
     *p_tdata = tdata;
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_call.c b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_call.c
index 9729899ced..4f882c531c 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_call.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_call.c 2869 2009-08-12 17:53:47Z bennylp $ */
+/* $Id: pjsua_call.c 3013 2009-11-11 00:33:00Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -133,6 +133,11 @@ pj_status_t pjsua_call_subsys_init(const pjsua_config *cfg)
     /* Copy config */
     pjsua_config_dup(pjsua_var.pool, &pjsua_var.ua_cfg, cfg);
 
+    /* Verify settings */
+    if (pjsua_var.ua_cfg.max_calls >= PJSUA_MAX_CALLS) {
+	pjsua_var.ua_cfg.max_calls = PJSUA_MAX_CALLS;
+    }
+
     /* Check the route URI's and force loose route if required */
     for (i=0; i<pjsua_var.ua_cfg.outbound_proxy_cnt; ++i) {
 	status = normalize_route_uri(pjsua_var.pool, 
@@ -384,13 +389,16 @@ PJ_DEF(pj_status_t) pjsua_call_make_call( pjsua_acc_id acc_id,
     call_id = alloc_call_id();
 
     if (call_id == PJSUA_INVALID_ID) {
-	pjsua_perror(THIS_FILE, "Error making file", PJ_ETOOMANY);
+	pjsua_perror(THIS_FILE, "Error making call", PJ_ETOOMANY);
 	PJSUA_UNLOCK();
 	return PJ_ETOOMANY;
     }
 
     call = &pjsua_var.calls[call_id];
 
+    /* Associate session with account */
+    call->acc_id = acc_id;
+
     /* Create temporary pool */
     tmp_pool = pjsua_pool_create("tmpcall10", 512, 256);
 
@@ -499,7 +507,6 @@ PJ_DEF(pj_status_t) pjsua_call_make_call( pjsua_acc_id acc_id,
     }
 
     /* Create and associate our data in the session. */
-    call->acc_id = acc_id;
     call->inv = inv;
 
     dlg->mod_data[pjsua_var.mod.id] = call;
@@ -645,6 +652,14 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata)
     if (dlg || tsx)
 	return PJ_FALSE;
 
+    /* Don't want to accept the call if shutdown is in progress */
+    if (pjsua_var.thread_quit_flag) {
+	pjsip_endpt_respond_stateless(pjsua_var.endpt, rdata, 
+				      PJSIP_SC_TEMPORARILY_UNAVAILABLE, NULL,
+				      NULL, NULL);
+	return PJ_TRUE;
+    }
+
     PJSUA_LOCK();
 
     /* Find free call slot. */
@@ -2821,11 +2836,11 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
 	*p = '\0';
     }
 
-    /* Get SRTP status */
+    /* Get and ICE SRTP status */
     pjmedia_transport_info_init(&tp_info);
     pjmedia_transport_get_info(call->med_tp, &tp_info);
     if (tp_info.specific_info_cnt > 0) {
-	int i;
+	unsigned i;
 	for (i = 0; i < tp_info.specific_info_cnt; ++i) {
 	    if (tp_info.spc_info[i].type == PJMEDIA_TRANSPORT_TYPE_SRTP) 
 	    {
@@ -2842,7 +2857,23 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
 		    *p++ = '\n';
 		    *p = '\0';
 		}
-		break;
+	    } else if (tp_info.spc_info[i].type==PJMEDIA_TRANSPORT_TYPE_ICE) {
+		const pjmedia_ice_transport_info *ii;
+
+		ii = (const pjmedia_ice_transport_info*) 
+		     tp_info.spc_info[i].buffer;
+
+		len = pj_ansi_snprintf(p, end-p, 
+				       "%s  ICE role: %s, state: %s, comp_cnt: %u",
+				       indent,
+				       pj_ice_sess_role_name(ii->role),
+				       pj_ice_strans_state_name(ii->sess_state),
+				       ii->comp_cnt);
+		if (len > 0 && len < end-p) {
+		    p += len;
+		    *p++ = '\n';
+		    *p = '\0';
+		}
 	    }
 	}
     }
@@ -2942,18 +2973,18 @@ static void pjsua_call_on_state_changed(pjsip_inv_session *inv,
 		ev_state = PJSIP_EVSUB_STATE_ACTIVE;
 	    break;
 
+	case PJSIP_INV_STATE_CONFIRMED:
 #if 0
 /* We don't need this, as we've terminated the subscription in
  * CONNECTING state.
  */
-	case PJSIP_INV_STATE_CONFIRMED:
 	    /* When state is confirmed, send the final 200/OK and terminate
 	     * subscription.
 	     */
 	    st_code = e->body.tsx_state.tsx->status_code;
 	    ev_state = PJSIP_EVSUB_STATE_TERMINATED;
-	    break;
 #endif
+	    break;
 
 	case PJSIP_INV_STATE_DISCONNECTED:
 	    st_code = e->body.tsx_state.tsx->status_code;
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_core.c b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_core.c
index e8d2fd9767..7974c536c3 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_core.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_core.c 2895 2009-08-17 16:30:04Z nanang $ */
+/* $Id: pjsua_core.c 3021 2009-11-20 23:33:07Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -101,6 +101,7 @@ PJ_DEF(void) pjsua_config_default(pjsua_config *cfg)
     cfg->nat_type_in_sdp = 1;
     cfg->stun_ignore_failure = PJ_TRUE;
     cfg->force_lr = PJ_TRUE;
+    cfg->enable_unsolicited_mwi = PJ_TRUE;
 #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
     cfg->use_srtp = PJSUA_DEFAULT_USE_SRTP;
     cfg->srtp_secure_signaling = PJSUA_DEFAULT_SRTP_SECURE_SIGNALING;
@@ -161,6 +162,9 @@ PJ_DEF(void) pjsua_acc_config_default(pjsua_acc_config *cfg)
     pj_bzero(cfg, sizeof(*cfg));
 
     cfg->reg_timeout = PJSUA_REG_INTERVAL;
+    cfg->unreg_timeout = PJSUA_UNREG_TIMEOUT;
+    pjsip_publishc_opt_default(&cfg->publish_opt);
+    cfg->unpublish_max_wait_time_msec = PJSUA_UNPUBLISH_MAX_WAIT_TIME_MSEC;
     cfg->transport_id = PJSUA_INVALID_ID;
     cfg->allow_contact_rewrite = PJ_TRUE;
     cfg->require_100rel = pjsua_var.ua_cfg.require_100rel;
@@ -303,6 +307,14 @@ static pj_bool_t options_on_rx_request(pjsip_rx_data *rdata)
 	return PJ_FALSE;
     }
 
+    /* Don't want to handle if shutdown is in progress */
+    if (pjsua_var.thread_quit_flag) {
+	pjsip_endpt_respond_stateless(pjsua_var.endpt, rdata, 
+				      PJSIP_SC_TEMPORARILY_UNAVAILABLE, NULL,
+				      NULL, NULL);
+	return PJ_TRUE;
+    }
+
     /* Create basic response. */
     status = pjsip_endpt_create_response(pjsua_var.endpt, rdata, 200, NULL, 
 					 &tdata);
@@ -809,6 +821,9 @@ PJ_DEF(pj_status_t) pjsua_init( const pjsua_config *ua_cfg,
     status = pjsip_pres_init_module( pjsua_var.endpt, pjsip_evsub_instance());
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
 
+    /* Initialize MWI support */
+    status = pjsip_mwi_init_module(pjsua_var.endpt, pjsip_evsub_instance());
+
     /* Init PUBLISH module */
     pjsip_publishc_init_module(pjsua_var.endpt);
 
@@ -1227,6 +1242,10 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
     }
     
     if (pjsua_var.endpt) {
+	unsigned max_wait;
+
+	PJ_LOG(4,(THIS_FILE, "Shutting down..."));
+
 	/* Terminate all calls. */
 	pjsua_call_hangup_all();
 
@@ -1241,6 +1260,45 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
 	/* Terminate all presence subscriptions. */
 	pjsua_pres_shutdown();
 
+	/* Destroy media (to shutdown media transports etc) */
+	pjsua_media_subsys_destroy();
+
+	/* Wait for sometime until all publish client sessions are done
+	 * (ticket #364)
+	 */
+	/* First stage, get the maximum wait time */
+	max_wait = 100;
+	for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
+	    if (!pjsua_var.acc[i].valid)
+		continue;
+	    if (pjsua_var.acc[i].cfg.unpublish_max_wait_time_msec > max_wait)
+		max_wait = pjsua_var.acc[i].cfg.unpublish_max_wait_time_msec;
+	}
+	
+	/* Second stage, wait for unpublications to complete */
+	for (i=0; i<(int)(max_wait/50); ++i) {
+	    unsigned j;
+	    for (j=0; j<PJ_ARRAY_SIZE(pjsua_var.acc); ++j) {
+		if (!pjsua_var.acc[j].valid)
+		    continue;
+
+		if (pjsua_var.acc[j].publish_sess)
+		    break;
+	    }
+	    if (j != PJ_ARRAY_SIZE(pjsua_var.acc))
+		busy_sleep(50);
+	    else
+		break;
+	}
+
+	/* Third stage, forcefully destroy unfinished unpublications */
+	for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
+	    if (pjsua_var.acc[i].publish_sess) {
+		pjsip_publishc_destroy(pjsua_var.acc[i].publish_sess);
+		pjsua_var.acc[i].publish_sess = NULL;
+	    }
+	}
+
 	/* Unregister all accounts */
 	for (i=0; i<(int)PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
 	    if (!pjsua_var.acc[i].valid)
@@ -1250,10 +1308,6 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
 		pjsua_acc_set_registration(i, PJ_FALSE);
 	    }
 	}
-    }
-
-    /* Destroy endpoint. */
-    if (pjsua_var.endpt) {
 
 	/* Terminate any pending STUN resolution */
 	if (!pj_list_empty(&pjsua_var.stun_res)) {
@@ -1265,23 +1319,40 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
 	    }
 	}
 
+	/* Wait until all unregistrations are done (ticket #364) */
+	/* First stage, get the maximum wait time */
+	max_wait = 100;
+	for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
+	    if (!pjsua_var.acc[i].valid)
+		continue;
+	    if (pjsua_var.acc[i].cfg.unreg_timeout > max_wait)
+		max_wait = pjsua_var.acc[i].cfg.unreg_timeout;
+	}
+	
+	/* Second stage, wait for unregistrations to complete */
+	for (i=0; i<(int)(max_wait/50); ++i) {
+	    unsigned j;
+	    for (j=0; j<PJ_ARRAY_SIZE(pjsua_var.acc); ++j) {
+		if (!pjsua_var.acc[j].valid)
+		    continue;
+
+		if (pjsua_var.acc[j].regc)
+		    break;
+	    }
+	    if (j != PJ_ARRAY_SIZE(pjsua_var.acc))
+		busy_sleep(50);
+	    else
+		break;
+	}
+	/* Note variable 'i' is used below */
+
 	/* Wait for some time to allow unregistration and ICE/TURN
 	 * transports shutdown to complete: 
-	*/
-	PJ_LOG(4,(THIS_FILE, "Shutting down..."));
-	busy_sleep(1000);
-
-	PJ_LOG(4,(THIS_FILE, "Destroying..."));
-
-	/* Terminate all calls again, just in case there's new call
-	 * picked up during busy_sleep()
 	 */
-	pjsua_call_hangup_all();
+	if (i < 20)
+	    busy_sleep(1000 - i*50);
 
-	/* Destroy media after all polling is done, as there may be
-	 * incoming request that needs handling (e.g. OPTIONS)
-	 */
-	pjsua_media_subsys_destroy();
+	PJ_LOG(4,(THIS_FILE, "Destroying..."));
 
 	/* Must destroy endpoint first before destroying pools in
 	 * buddies or accounts, since shutting down transaction layer
@@ -1306,9 +1377,6 @@ PJ_DEF(pj_status_t) pjsua_destroy(void)
 		pjsua_var.acc[i].pool = NULL;
 	    }
 	}
-    } else {
-	/* Destroy media */
-	pjsua_media_subsys_destroy();
     }
 
     /* Destroy mutex */
@@ -1462,12 +1530,12 @@ static const char *addr_string(const pj_sockaddr_t *addr)
  * address via STUN, depending on config).
  */
 static pj_status_t create_sip_udp_sock(int af,
-				       const pj_str_t *bind_param,
-				       int port,
+				       const pjsua_transport_config *cfg,
 				       pj_sock_t *p_sock,
 				       pj_sockaddr *p_pub_addr)
 {
     char stun_ip_addr[PJ_INET6_ADDRSTRLEN];
+    unsigned port = cfg->port;
     pj_str_t stun_srv;
     pj_sock_t sock;
     pj_sockaddr bind_addr;
@@ -1481,8 +1549,8 @@ static pj_status_t create_sip_udp_sock(int af,
     }
 
     /* Initialize bound address */
-    if (bind_param->slen) {
-	status = pj_sockaddr_init(af, &bind_addr, bind_param, 
+    if (cfg->bound_addr.slen) {
+	status = pj_sockaddr_init(af, &bind_addr, &cfg->bound_addr, 
 				  (pj_uint16_t)port);
 	if (status != PJ_SUCCESS) {
 	    pjsua_perror(THIS_FILE, 
@@ -1494,12 +1562,19 @@ static pj_status_t create_sip_udp_sock(int af,
 	pj_sockaddr_init(af, &bind_addr, NULL, (pj_uint16_t)port);
     }
 
+    /* Create socket */
     status = pj_sock_socket(af, pj_SOCK_DGRAM(), 0, &sock);
     if (status != PJ_SUCCESS) {
 	pjsua_perror(THIS_FILE, "socket() error", status);
 	return status;
     }
 
+    /* Apply QoS, if specified */
+    status = pj_sock_apply_qos2(sock, cfg->qos_type, 
+				&cfg->qos_params, 
+				2, THIS_FILE, "SIP UDP socket");
+
+    /* Bind socket */
     status = pj_sock_bind(sock, &bind_addr, pj_sockaddr_get_len(&bind_addr));
     if (status != PJ_SUCCESS) {
 	pjsua_perror(THIS_FILE, "bind() error", status);
@@ -1647,8 +1722,7 @@ PJ_DEF(pj_status_t) pjsua_transport_create( pjsip_transport_type_e type,
 	 * (only when public address is not specified).
 	 */
 	status = create_sip_udp_sock(pjsip_transport_type_get_af(type),
-				     &cfg->bound_addr, cfg->port,
-				     &sock, &pub_addr);
+				     cfg, &sock, &pub_addr);
 	if (status != PJ_SUCCESS)
 	    goto on_return;
 
@@ -1679,9 +1753,10 @@ PJ_DEF(pj_status_t) pjsua_transport_create( pjsip_transport_type_e type,
 	 * Create TCP transport.
 	 */
 	pjsua_transport_config config;
-	pjsip_host_port a_name;
 	pjsip_tpfactory *tcp;
-	pj_sockaddr_in local_addr;
+	pjsip_tcp_transport_cfg tcp_cfg;
+
+	pjsip_tcp_transport_cfg_default(&tcp_cfg, pj_AF_INET());
 
 	/* Supply default config if it's not specified */
 	if (cfg == NULL) {
@@ -1689,14 +1764,14 @@ PJ_DEF(pj_status_t) pjsua_transport_create( pjsip_transport_type_e type,
 	    cfg = &config;
 	}
 
-	/* Init local address */
-	pj_sockaddr_in_init(&local_addr, 0, 0);
-
+	/* Configure bind address */
 	if (cfg->port)
-	    local_addr.sin_port = pj_htons((pj_uint16_t)cfg->port);
+	    pj_sockaddr_set_port(&tcp_cfg.bind_addr, (pj_uint16_t)cfg->port);
 
 	if (cfg->bound_addr.slen) {
-	    status = pj_sockaddr_in_set_str_addr(&local_addr,&cfg->bound_addr);
+	    status = pj_sockaddr_set_str_addr(tcp_cfg.af, 
+					      &tcp_cfg.bind_addr,
+					      &cfg->bound_addr);
 	    if (status != PJ_SUCCESS) {
 		pjsua_perror(THIS_FILE, 
 			     "Unable to resolve transport bound address", 
@@ -1705,14 +1780,17 @@ PJ_DEF(pj_status_t) pjsua_transport_create( pjsip_transport_type_e type,
 	    }
 	}
 
-	/* Init published name */
-	pj_bzero(&a_name, sizeof(pjsip_host_port));
+	/* Set published name */
 	if (cfg->public_addr.slen)
-	    a_name.host = cfg->public_addr;
+	    tcp_cfg.addr_name.host = cfg->public_addr;
+
+	/* Copy the QoS settings */
+	tcp_cfg.qos_type = cfg->qos_type;
+	pj_memcpy(&tcp_cfg.qos_params, &cfg->qos_params, 
+		  sizeof(cfg->qos_params));
 
 	/* Create the TCP transport */
-	status = pjsip_tcp_transport_start2(pjsua_var.endpt, &local_addr, 
-					    &a_name, 1, &tcp);
+	status = pjsip_tcp_transport_start3(pjsua_var.endpt, &tcp_cfg, &tcp);
 
 	if (status != PJ_SUCCESS) {
 	    pjsua_perror(THIS_FILE, "Error creating SIP TCP listener", 
@@ -2254,6 +2332,23 @@ PJ_DEF(pj_status_t) pjsua_verify_sip_url(const char *c_url)
     return p ? 0 : -1;
 }
 
+/*
+ * Schedule a timer entry. 
+ */
+PJ_DEF(pj_status_t) pjsua_schedule_timer( pj_timer_entry *entry,
+					  const pj_time_val *delay)
+{
+    return pjsip_endpt_schedule_timer(pjsua_var.endpt, entry, delay);
+}
+
+/*
+ * Cancel the previously scheduled timer.
+ *
+ */
+PJ_DEF(void) pjsua_cancel_timer(pj_timer_entry *entry)
+{
+    pjsip_endpt_cancel_timer(pjsua_var.endpt, entry);
+}
 
 /** 
  * Normalize route URI (check for ";lr" and append one if it doesn't
@@ -2314,6 +2409,7 @@ pj_status_t normalize_route_uri(pj_pool_t *pool, pj_str_t *uri)
     /* Clone the URI */
     pj_strdup_with_null(pool, uri, &tmp_uri);
 
+    pj_pool_release(tmp_pool);
     return PJ_SUCCESS;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_im.c b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_im.c
index 76d5761842..9ccf0b02f9 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_im.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_im.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_im.c 2855 2009-08-05 18:41:23Z nanang $ */
+/* $Id: pjsua_im.c 2923 2009-10-01 14:17:49Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -380,6 +380,9 @@ static void im_callback(void *token, pjsip_event *e)
 		/* Must duplicate im_data */
 		im_data2 = pjsua_im_data_dup(tdata->pool, im_data);
 
+		/* Increment CSeq */
+		PJSIP_MSG_CSEQ_HDR(tdata->msg)->cseq++;
+
 		/* Re-send request */
 		status = pjsip_endpt_send_request( pjsua_var.endpt, tdata, -1,
 						   im_data2, &im_callback);
@@ -479,6 +482,9 @@ static void typing_callback(void *token, pjsip_event *e)
 		/* Must duplicate im_data */
 		im_data2 = pjsua_im_data_dup(tdata->pool, im_data);
 
+		/* Increment CSeq */
+		PJSIP_MSG_CSEQ_HDR(tdata->msg)->cseq++;
+
 		/* Re-send request */
 		status = pjsip_endpt_send_request( pjsua_var.endpt, tdata, -1,
 						   im_data2, &typing_callback);
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_media.c b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_media.c
index e3f57bc3b2..c07cc9a1b0 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_media.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_media.c 2869 2009-08-12 17:53:47Z bennylp $ */
+/* $Id: pjsua_media.c 3041 2010-01-04 13:08:31Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -334,9 +334,6 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
     }
 #endif
 
-    /* Perform NAT detection */
-    pjsua_detect_nat_type();
-
     return PJ_SUCCESS;
 }
 
@@ -384,13 +381,19 @@ static pj_status_t create_rtp_rtcp_sock(const pjsua_transport_config *cfg,
     /* Loop retry to bind RTP and RTCP sockets. */
     for (i=0; i<RTP_RETRY; ++i, next_rtp_port += 2) {
 
-	/* Create and bind RTP socket. */
+	/* Create RTP socket. */
 	status = pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sock[0]);
 	if (status != PJ_SUCCESS) {
 	    pjsua_perror(THIS_FILE, "socket() error", status);
 	    return status;
 	}
 
+	/* Apply QoS to RTP socket, if specified */
+	status = pj_sock_apply_qos2(sock[0], cfg->qos_type, 
+				    &cfg->qos_params, 
+				    2, THIS_FILE, "RTP socket");
+
+	/* Bind RTP socket */
 	status=pj_sock_bind_in(sock[0], pj_ntohl(bound_addr.sin_addr.s_addr), 
 			       next_rtp_port);
 	if (status != PJ_SUCCESS) {
@@ -399,7 +402,7 @@ static pj_status_t create_rtp_rtcp_sock(const pjsua_transport_config *cfg,
 	    continue;
 	}
 
-	/* Create and bind RTCP socket. */
+	/* Create RTCP socket. */
 	status = pj_sock_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sock[1]);
 	if (status != PJ_SUCCESS) {
 	    pjsua_perror(THIS_FILE, "socket() error", status);
@@ -407,6 +410,12 @@ static pj_status_t create_rtp_rtcp_sock(const pjsua_transport_config *cfg,
 	    return status;
 	}
 
+	/* Apply QoS to RTCP socket, if specified */
+	status = pj_sock_apply_qos2(sock[1], cfg->qos_type, 
+				    &cfg->qos_params, 
+				    2, THIS_FILE, "RTCP socket");
+
+	/* Bind RTCP socket */
 	status=pj_sock_bind_in(sock[1], pj_ntohl(bound_addr.sin_addr.s_addr), 
 			       (pj_uint16_t)(next_rtp_port+1));
 	if (status != PJ_SUCCESS) {
@@ -629,6 +638,9 @@ pj_status_t pjsua_media_subsys_start(void)
     pj_timer_entry_init(&pjsua_var.snd_idle_timer, PJ_FALSE, NULL, 
 			&close_snd_timer_cb);
 
+    /* Perform NAT detection */
+    pjsua_detect_nat_type();
+
     return PJ_SUCCESS;
 }
 
@@ -640,6 +652,8 @@ pj_status_t pjsua_media_subsys_destroy(void)
 {
     unsigned i;
 
+    PJ_LOG(4,(THIS_FILE, "Shutting down media.."));
+
     close_snd_dev();
 
     if (pjsua_var.mconf) {
@@ -819,6 +833,33 @@ static void on_ice_complete(pjmedia_transport *tp,
 	    if (pjsua_var.ua_cfg.cb.on_call_media_state) {
 		pjsua_var.ua_cfg.cb.on_call_media_state(id);
 	    }
+	} else {
+	    /* Send UPDATE if default transport address is different than
+	     * what was advertised (ticket #881)
+	     */
+	    pjmedia_transport_info tpinfo;
+	    pjmedia_ice_transport_info *ii = NULL;
+	    unsigned i;
+
+	    pjmedia_transport_info_init(&tpinfo);
+	    pjmedia_transport_get_info(tp, &tpinfo);
+	    for (i=0; i<tpinfo.specific_info_cnt; ++i) {
+		if (tpinfo.spc_info[i].type==PJMEDIA_TRANSPORT_TYPE_ICE) {
+		    ii = (pjmedia_ice_transport_info*)
+			 tpinfo.spc_info[i].buffer;
+		    break;
+		}
+	    }
+
+	    if (ii && ii->role==PJ_ICE_SESS_ROLE_CONTROLLING &&
+		pj_sockaddr_cmp(&tpinfo.sock_info.rtp_addr_name,
+				&pjsua_var.calls[id].med_rtp_addr))
+	    {
+		PJ_LOG(4,(THIS_FILE, 
+		          "ICE default transport address has changed for "
+			  "call %d, sending UPDATE", id));
+		pjsua_call_update(id, 0, NULL);
+	    }
 	}
 	break;
     }
@@ -852,7 +893,7 @@ static pj_status_t parse_host_port(const pj_str_t *host_port,
 }
 
 /* Create ICE media transports (when ice is enabled) */
-static pj_status_t create_ice_media_transports(void)
+static pj_status_t create_ice_media_transports(pjsua_transport_config *cfg)
 {
     char stunip[PJ_INET6_ADDRSTRLEN];
     pj_ice_strans_cfg ice_cfg;
@@ -886,6 +927,11 @@ static pj_status_t create_ice_media_transports(void)
     if (pjsua_var.media_cfg.ice_max_host_cands >= 0)
 	ice_cfg.stun.max_host_cands = pjsua_var.media_cfg.ice_max_host_cands;
 
+    /* Copy QoS setting to STUN setting */
+    ice_cfg.stun.cfg.qos_type = cfg->qos_type;
+    pj_memcpy(&ice_cfg.stun.cfg.qos_params, &cfg->qos_params,
+	      sizeof(cfg->qos_params));
+
     /* Configure TURN settings */
     if (pjsua_var.media_cfg.enable_turn) {
 	status = parse_host_port(&pjsua_var.media_cfg.turn_server,
@@ -901,6 +947,11 @@ static pj_status_t create_ice_media_transports(void)
 	pj_memcpy(&ice_cfg.turn.auth_cred, 
 		  &pjsua_var.media_cfg.turn_auth_cred,
 		  sizeof(ice_cfg.turn.auth_cred));
+
+	/* Copy QoS setting to TURN setting */
+	ice_cfg.turn.cfg.qos_type = cfg->qos_type;
+	pj_memcpy(&ice_cfg.turn.cfg.qos_params, &cfg->qos_params,
+		  sizeof(cfg->qos_params));
     }
 
     /* Create each media transport */
@@ -996,7 +1047,7 @@ PJ_DEF(pj_status_t) pjsua_media_transports_create(
 
     /* Create the transports */
     if (pjsua_var.media_cfg.enable_ice) {
-	status = create_ice_media_transports();
+	status = create_ice_media_transports(&cfg);
     } else {
 	status = create_udp_media_transports(&cfg);
     }
@@ -1318,6 +1369,10 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,
 	return status;
     }
 
+    /* Update currently advertised RTP source address */
+    pj_memcpy(&call->med_rtp_addr, &tpinfo.sock_info.rtp_addr_name, 
+	      sizeof(pj_sockaddr));
+
     *p_sdp = sdp;
     return PJ_SUCCESS;
 }
@@ -1337,8 +1392,9 @@ static void stop_media_session(pjsua_call_id call_id)
     if (call->session) {
 	pjmedia_rtcp_stat stat;
 
-	if (pjmedia_session_get_stream_stat(call->session, 0, &stat) 
-	    == PJ_SUCCESS)
+	if ((call->media_dir & PJMEDIA_DIR_ENCODING) &&
+	    (pjmedia_session_get_stream_stat(call->session, 0, &stat) 
+	     == PJ_SUCCESS))
 	{
 	    /* Save RTP timestamp & sequence, so when media session is 
 	     * restarted, those values will be restored as the initial 
@@ -1480,7 +1536,7 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id,
 	pjmedia_transport_info_init(&tp_info);
 	pjmedia_transport_get_info(call->med_tp, &tp_info);
 	if (tp_info.specific_info_cnt > 0) {
-	    int i;
+	    unsigned i;
 	    for (i = 0; i < tp_info.specific_info_cnt; ++i) {
 		if (tp_info.spc_info[i].type == PJMEDIA_TRANSPORT_TYPE_SRTP) 
 		{
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_pres.c b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_pres.c
index a743cbc53d..0f661da5cd 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_pres.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsua-lib/pjsua_pres.c
@@ -1,4 +1,4 @@
-/* $Id: pjsua_pres.c 2824 2009-06-30 13:53:47Z bennylp $ */
+/* $Id: pjsua_pres.c 3031 2009-12-10 05:16:23Z bennylp $ */
 /* 
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
@@ -24,13 +24,14 @@
 #define THIS_FILE   "pjsua_pres.c"
 
 
-static void subscribe_buddy_presence(unsigned index);
+static void subscribe_buddy_presence(pjsua_buddy_id buddy_id);
+static void unsubscribe_buddy_presence(pjsua_buddy_id buddy_id);
 
 
 /*
  * Find buddy.
  */
-static pjsua_buddy_id pjsua_find_buddy(const pjsip_uri *uri)
+static pjsua_buddy_id find_buddy(const pjsip_uri *uri)
 {
     const pjsip_sip_uri *sip_uri;
     unsigned i;
@@ -60,6 +61,87 @@ static pjsua_buddy_id pjsua_find_buddy(const pjsip_uri *uri)
     return PJSUA_INVALID_ID;
 }
 
+#define LOCK_DIALOG	1
+#define LOCK_PJSUA	2
+#define LOCK_ALL	(LOCK_DIALOG | LOCK_PJSUA)
+
+/* Buddy lock object */
+struct buddy_lock
+{
+    pjsua_buddy	    *buddy;
+    pjsip_dialog    *dlg;
+    pj_uint8_t	     flag;
+};
+
+/* Acquire lock to the specified buddy_id */
+pj_status_t lock_buddy(const char *title,
+		       pjsua_buddy_id buddy_id,
+		       struct buddy_lock *lck,
+		       unsigned _unused_)
+{
+    enum { MAX_RETRY=50 };
+    pj_bool_t has_pjsua_lock = PJ_FALSE;
+    unsigned retry;
+
+    PJ_UNUSED_ARG(_unused_);
+
+    pj_bzero(lck, sizeof(*lck));
+
+    for (retry=0; retry<MAX_RETRY; ++retry) {
+	
+	if (PJSUA_TRY_LOCK() != PJ_SUCCESS) {
+	    pj_thread_sleep(retry/10);
+	    continue;
+	}
+
+	has_pjsua_lock = PJ_TRUE;
+	lck->flag = LOCK_PJSUA;
+	lck->buddy = &pjsua_var.buddy[buddy_id];
+
+	if (lck->buddy->dlg == NULL)
+	    return PJ_SUCCESS;
+
+	if (pjsip_dlg_try_inc_lock(lck->buddy->dlg) != PJ_SUCCESS) {
+	    lck->flag = 0;
+	    lck->buddy = NULL;
+	    has_pjsua_lock = PJ_FALSE;
+	    PJSUA_UNLOCK();
+	    pj_thread_sleep(retry/10);
+	    continue;
+	}
+
+	lck->dlg = lck->buddy->dlg;
+	lck->flag = LOCK_DIALOG;
+	PJSUA_UNLOCK();
+
+	break;
+    }
+
+    if (lck->flag == 0) {
+	if (has_pjsua_lock == PJ_FALSE)
+	    PJ_LOG(1,(THIS_FILE, "Timed-out trying to acquire PJSUA mutex "
+				 "(possibly system has deadlocked) in %s",
+				 title));
+	else
+	    PJ_LOG(1,(THIS_FILE, "Timed-out trying to acquire dialog mutex "
+				 "(possibly system has deadlocked) in %s",
+				 title));
+	return PJ_ETIMEDOUT;
+    }
+    
+    return PJ_SUCCESS;
+}
+
+/* Release buddy lock */
+static void unlock_buddy(struct buddy_lock *lck)
+{
+    if (lck->flag & LOCK_DIALOG)
+	pjsip_dlg_dec_lock(lck->dlg);
+
+    if (lck->flag & LOCK_PJSUA)
+	PJSUA_UNLOCK();
+}
+
 
 /*
  * Get total number of buddies.
@@ -86,8 +168,11 @@ PJ_DEF(pjsua_buddy_id) pjsua_buddy_find(const pj_str_t *uri_str)
     uri = pjsip_parse_uri(pool, input.ptr, input.slen, 0);
     if (!uri)
 	buddy_id = PJSUA_INVALID_ID;
-    else
-	buddy_id = pjsua_find_buddy(uri);
+    else {
+	PJSUA_LOCK();
+	buddy_id = find_buddy(uri);
+	PJSUA_UNLOCK();
+    }
 
     pj_pool_release(pool);
 
@@ -139,20 +224,22 @@ PJ_DEF(pj_status_t) pjsua_buddy_get_info( pjsua_buddy_id buddy_id,
 					  pjsua_buddy_info *info)
 {
     unsigned total=0;
+    struct buddy_lock lck;
     pjsua_buddy *buddy;
+    pj_status_t status;
 
-    PJ_ASSERT_RETURN(buddy_id>=0 && 
-		       buddy_id<(int)PJ_ARRAY_SIZE(pjsua_var.buddy), 
-		     PJ_EINVAL);
-
-    PJSUA_LOCK();
+    PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id),  PJ_EINVAL);
 
     pj_bzero(info, sizeof(pjsua_buddy_info));
 
-    buddy = &pjsua_var.buddy[buddy_id];
+    status = lock_buddy("pjsua_buddy_get_info()", buddy_id, &lck, 0);
+    if (status != PJ_SUCCESS)
+	return status;
+
+    buddy = lck.buddy;
     info->id = buddy->index;
     if (pjsua_var.buddy[buddy_id].uri.slen == 0) {
-	PJSUA_UNLOCK();
+	unlock_buddy(&lck);
 	return PJ_SUCCESS;
     }
 
@@ -186,13 +273,19 @@ PJ_DEF(pj_status_t) pjsua_buddy_get_info( pjsua_buddy_id buddy_id,
 
     } else {
 	info->status = PJSUA_BUDDY_STATUS_OFFLINE;
-	info->status_text = pj_str("Offline");
+	info->rpid = buddy->status.info[0].rpid;
+
+	if (info->rpid.note.slen)
+	    info->status_text = info->rpid.note;
+	else
+	    info->status_text = pj_str("Offline");
     }
 
     /* monitor pres */
     info->monitor_pres = buddy->monitor;
 
     /* subscription state and termination reason */
+    info->sub_term_code = buddy->term_code;
     if (buddy->sub) {
 	info->sub_state = pjsip_evsub_get_state(buddy->sub);
 	info->sub_state_name = pjsip_evsub_get_state_name(buddy->sub);
@@ -218,7 +311,7 @@ PJ_DEF(pj_status_t) pjsua_buddy_get_info( pjsua_buddy_id buddy_id,
 	info->sub_term_reason = pj_str("");
     }
 
-    PJSUA_UNLOCK();
+    unlock_buddy(&lck);
     return PJ_SUCCESS;
 }
 
@@ -228,15 +321,18 @@ PJ_DEF(pj_status_t) pjsua_buddy_get_info( pjsua_buddy_id buddy_id,
 PJ_DEF(pj_status_t) pjsua_buddy_set_user_data( pjsua_buddy_id buddy_id,
 					       void *user_data)
 {
-    PJ_ASSERT_RETURN(buddy_id>=0 && 
-		       buddy_id<(int)PJ_ARRAY_SIZE(pjsua_var.buddy),
-		     PJ_EINVAL);
+    struct buddy_lock lck;
+    pj_status_t status;
 
-    PJSUA_LOCK();
+    PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id), PJ_EINVAL);
+
+    status = lock_buddy("pjsua_buddy_set_user_data()", buddy_id, &lck, 0);
+    if (status != PJ_SUCCESS)
+	return status;
 
     pjsua_var.buddy[buddy_id].user_data = user_data;
 
-    PJSUA_UNLOCK();
+    unlock_buddy(&lck);
 
     return PJ_SUCCESS;
 }
@@ -247,17 +343,19 @@ PJ_DEF(pj_status_t) pjsua_buddy_set_user_data( pjsua_buddy_id buddy_id,
  */
 PJ_DEF(void*) pjsua_buddy_get_user_data(pjsua_buddy_id buddy_id)
 {
+    struct buddy_lock lck;
+    pj_status_t status;
     void *user_data;
 
-    PJ_ASSERT_RETURN(buddy_id>=0 && 
-		       buddy_id<(int)PJ_ARRAY_SIZE(pjsua_var.buddy),
-		     NULL);
+    PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id), NULL);
 
-    PJSUA_LOCK();
+    status = lock_buddy("pjsua_buddy_get_user_data()", buddy_id, &lck, 0);
+    if (status != PJ_SUCCESS)
+	return NULL;
 
     user_data = pjsua_var.buddy[buddy_id].user_data;
 
-    PJSUA_UNLOCK();
+    unlock_buddy(&lck);
 
     return user_data;
 }
@@ -382,6 +480,9 @@ PJ_DEF(pj_status_t) pjsua_buddy_add( const pjsua_buddy_config *cfg,
  */
 PJ_DEF(pj_status_t) pjsua_buddy_del(pjsua_buddy_id buddy_id)
 {
+    struct buddy_lock lck;
+    pj_status_t status;
+
     PJ_ASSERT_RETURN(buddy_id>=0 && 
 			buddy_id<(int)PJ_ARRAY_SIZE(pjsua_var.buddy),
 		     PJ_EINVAL);
@@ -390,11 +491,13 @@ PJ_DEF(pj_status_t) pjsua_buddy_del(pjsua_buddy_id buddy_id)
 	return PJ_SUCCESS;
     }
 
+    status = lock_buddy("pjsua_buddy_del()", buddy_id, &lck, 0);
+    if (status != PJ_SUCCESS)
+	return status;
+
     /* Unsubscribe presence */
     pjsua_buddy_subscribe_pres(buddy_id, PJ_FALSE);
 
-    PJSUA_LOCK();
-
     /* Not interested with further events for this buddy */
     if (pjsua_var.buddy[buddy_id].sub) {
 	pjsip_evsub_set_mod_data(pjsua_var.buddy[buddy_id].sub, 
@@ -405,10 +508,16 @@ PJ_DEF(pj_status_t) pjsua_buddy_del(pjsua_buddy_id buddy_id)
     pjsua_var.buddy[buddy_id].uri.slen = 0;
     pjsua_var.buddy_cnt--;
 
+    /* Clear timer */
+    if (pjsua_var.buddy[buddy_id].timer.id) {
+	pjsua_cancel_timer(&pjsua_var.buddy[buddy_id].timer);
+	pjsua_var.buddy[buddy_id].timer.id = PJ_FALSE;
+    }
+
     /* Reset buddy struct */
     reset_buddy(buddy_id);
 
-    PJSUA_UNLOCK();
+    unlock_buddy(&lck);
     return PJ_SUCCESS;
 }
 
@@ -419,21 +528,20 @@ PJ_DEF(pj_status_t) pjsua_buddy_del(pjsua_buddy_id buddy_id)
 PJ_DEF(pj_status_t) pjsua_buddy_subscribe_pres( pjsua_buddy_id buddy_id,
 						pj_bool_t subscribe)
 {
-    pjsua_buddy *buddy;
-
-    PJ_ASSERT_RETURN(buddy_id>=0 && 
-			buddy_id<(int)PJ_ARRAY_SIZE(pjsua_var.buddy),
-		     PJ_EINVAL);
+    struct buddy_lock lck;
+    pj_status_t status;
 
-    PJSUA_LOCK();
+    PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id), PJ_EINVAL);
 
-    buddy = &pjsua_var.buddy[buddy_id];
-    buddy->monitor = subscribe;
+    status = lock_buddy("pjsua_buddy_subscribe_pres()", buddy_id, &lck, 0);
+    if (status != PJ_SUCCESS)
+	return status;
 
-    PJSUA_UNLOCK();
+    lck.buddy->monitor = subscribe;
 
-    pjsua_pres_refresh();
+    pjsua_buddy_update_pres(buddy_id);
 
+    unlock_buddy(&lck);
     return PJ_SUCCESS;
 }
 
@@ -443,32 +551,32 @@ PJ_DEF(pj_status_t) pjsua_buddy_subscribe_pres( pjsua_buddy_id buddy_id,
  */
 PJ_DEF(pj_status_t) pjsua_buddy_update_pres(pjsua_buddy_id buddy_id)
 {
-    pjsua_buddy *buddy;
-
-    PJ_ASSERT_RETURN(buddy_id>=0 && 
-			buddy_id<(int)PJ_ARRAY_SIZE(pjsua_var.buddy),
-		     PJ_EINVAL);
+    struct buddy_lock lck;
+    pj_status_t status;
 
-    PJSUA_LOCK();
+    PJ_ASSERT_RETURN(pjsua_buddy_is_valid(buddy_id), PJ_EINVAL);
 
-    buddy = &pjsua_var.buddy[buddy_id];
+    status = lock_buddy("pjsua_buddy_update_pres()", buddy_id, &lck, 0);
+    if (status != PJ_SUCCESS)
+	return status;
 
-    /* Return error if buddy's presence monitoring is not enabled */
-    if (!buddy->monitor) {
-	PJSUA_UNLOCK();
-	return PJ_EINVALIDOP;
+    /* Is this an unsubscribe request? */
+    if (!lck.buddy->monitor) {
+	unsubscribe_buddy_presence(buddy_id);
+	unlock_buddy(&lck);
+	return PJ_SUCCESS;
     }
 
     /* Ignore if presence is already active for the buddy */
-    if (buddy->sub) {
-	PJSUA_UNLOCK();
+    if (lck.buddy->sub) {
+	unlock_buddy(&lck);
 	return PJ_SUCCESS;
     }
 
     /* Initiate presence subscription */
     subscribe_buddy_presence(buddy_id);
 
-    PJSUA_UNLOCK();
+    unlock_buddy(&lck);
 
     return PJ_SUCCESS;
 }
@@ -682,6 +790,14 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata)
 
     /* Incoming SUBSCRIBE: */
 
+    /* Don't want to accept the request if shutdown is in progress */
+    if (pjsua_var.thread_quit_flag) {
+	pjsip_endpt_respond_stateless(pjsua_var.endpt, rdata, 
+				      PJSIP_SC_TEMPORARILY_UNAVAILABLE, NULL,
+				      NULL, NULL);
+	return PJ_TRUE;
+    }
+
     PJSUA_LOCK();
 
     /* Find which account for the incoming request. */
@@ -797,7 +913,7 @@ static pj_bool_t pres_on_rx_request(pjsip_rx_data *rdata)
     if (pjsua_var.ua_cfg.cb.on_incoming_subscribe) {
 	pjsua_buddy_id buddy_id;
 
-	buddy_id = pjsua_find_buddy(rdata->msg_info.from->uri);
+	buddy_id = find_buddy(rdata->msg_info.from->uri);
 
 	(*pjsua_var.ua_cfg.cb.on_incoming_subscribe)(acc_id, uapres, buddy_id,
 						     &dlg->remote.info_str, 
@@ -943,7 +1059,7 @@ PJ_DEF(pj_status_t) pjsua_pres_notify( pjsua_acc_id acc_id,
 
 
     /* Subscribe to buddy's presence if we're not subscribed */
-    buddy_id = pjsua_find_buddy(srv_pres->dlg->remote.info->uri);
+    buddy_id = find_buddy(srv_pres->dlg->remote.info->uri);
     if (buddy_id != PJSUA_INVALID_ID) {
 	pjsua_buddy *b = &pjsua_var.buddy[buddy_id];
 	if (b->monitor && b->sub == NULL) {
@@ -992,7 +1108,7 @@ static void publish_cb(struct pjsip_publishc_cbparam *param)
 	}
 
     } else {
-	if (param->expiration == -1) {
+	if (param->expiration < 1) {
 	    /* Could happen if server "forgot" to include Expires header
 	     * in the response. We will not renew, so destroy the pubc.
 	     */
@@ -1073,7 +1189,10 @@ static pj_status_t send_publish(int acc_id, pj_bool_t active)
 
     /* Send the PUBLISH request */
     status = pjsip_publishc_send(acc->publish_sess, tdata);
-    if (status != PJ_SUCCESS) {
+    if (status == PJ_EPENDING) {
+	PJ_LOG(3,(THIS_FILE, "Previous request is in progress, "
+		  "PUBLISH request is queued"));
+    } else if (status != PJ_SUCCESS) {
 	pjsua_perror(THIS_FILE, "Error sending PUBLISH request", status);
 	goto on_error;
     }
@@ -1102,7 +1221,8 @@ pj_status_t pjsua_pres_init_publish_acc(int acc_id)
     if (acc_cfg->publish_enabled) {
 
 	/* Create client publication */
-	status = pjsip_publishc_create(pjsua_var.endpt, 0, acc, &publish_cb,
+	status = pjsip_publishc_create(pjsua_var.endpt, &acc_cfg->publish_opt, 
+				       acc, &publish_cb,
 				       &acc->publish_sess);
 	if (status != PJ_SUCCESS) {
 	    acc->publish_sess = NULL;
@@ -1197,10 +1317,13 @@ void pjsua_pres_delete_acc(int acc_id)
     if (acc->publish_sess) {
 	acc->online_status = PJ_FALSE;
 	send_publish(acc_id, PJ_FALSE);
+	/* By ticket #364, don't destroy the session yet (let the callback
+	   destroy it)
 	if (acc->publish_sess) {
 	    pjsip_publishc_destroy(acc->publish_sess);
 	    acc->publish_sess = NULL;
 	}
+	*/
 	acc_cfg->publish_enabled = PJ_FALSE;
     }
 }
@@ -1265,6 +1388,46 @@ void pjsua_pres_update_acc(int acc_id, pj_bool_t force)
  * Client subscription.
  */
 
+static void buddy_timer_cb(pj_timer_heap_t *th, pj_timer_entry *entry)
+{
+    pjsua_buddy *buddy = (pjsua_buddy*)entry->user_data;
+
+    PJ_UNUSED_ARG(th);
+
+    entry->id = PJ_FALSE;
+    pjsua_buddy_update_pres(buddy->index);
+}
+
+/* Reschedule subscription refresh timer or terminate the subscription
+ * refresh timer for the specified buddy.
+ */
+static void buddy_resubscribe(pjsua_buddy *buddy, pj_bool_t resched,
+			      unsigned msec_interval)
+{
+    if (buddy->timer.id) {
+	pjsua_cancel_timer(&buddy->timer);
+	buddy->timer.id = PJ_FALSE;
+    }
+
+    if (resched) {
+	pj_time_val delay;
+
+	PJ_LOG(4,(THIS_FILE,  
+	          "Resubscribing buddy id %u in %u ms (reason: %.*s)", 
+		  buddy->index, msec_interval,
+		  (int)buddy->term_reason.slen,
+		  buddy->term_reason.ptr));
+
+	pj_timer_entry_init(&buddy->timer, 0, buddy, &buddy_timer_cb);
+	delay.sec = 0;
+	delay.msec = msec_interval;
+	pj_time_val_normalize(&delay);
+
+	if (pjsua_schedule_timer(&buddy->timer, &delay)==PJ_SUCCESS)
+	    buddy->timer.id = PJ_TRUE;
+    }
+}
+
 /* Callback called when *client* subscription state has changed. */
 static void pjsua_evsub_on_state( pjsip_evsub *sub, pjsip_event *event)
 {
@@ -1272,8 +1435,10 @@ static void pjsua_evsub_on_state( pjsip_evsub *sub, pjsip_event *event)
 
     PJ_UNUSED_ARG(event);
 
-    PJSUA_LOCK();
-
+    /* Note: #937: no need to acuire PJSUA_LOCK here. Since the buddy has
+     *   a dialog attached to it, lock_buddy() will use the dialog
+     *   lock, which we are currently holding!
+     */
     buddy = (pjsua_buddy*) pjsip_evsub_get_mod_data(sub, pjsua_var.mod.id);
     if (buddy) {
 	PJ_LOG(4,(THIS_FILE, 
@@ -1283,6 +1448,8 @@ static void pjsua_evsub_on_state( pjsip_evsub *sub, pjsip_event *event)
 		  pjsip_evsub_get_state_name(sub)));
 
 	if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED) {
+	    int resub_delay = -1;
+
 	    if (buddy->term_reason.ptr == NULL) {
 		buddy->term_reason.ptr = (char*) 
 					 pj_pool_alloc(buddy->pool,
@@ -1291,7 +1458,95 @@ static void pjsua_evsub_on_state( pjsip_evsub *sub, pjsip_event *event)
 	    pj_strncpy(&buddy->term_reason, 
 		       pjsip_evsub_get_termination_reason(sub), 
 		       PJSUA_BUDDY_SUB_TERM_REASON_LEN);
+
+	    buddy->term_code = 200;
+
+	    /* Determine whether to resubscribe automatically */
+	    if (event && event->type==PJSIP_EVENT_TSX_STATE) {
+		const pjsip_transaction *tsx = event->body.tsx_state.tsx;
+		if (pjsip_method_cmp(&tsx->method, 
+				     &pjsip_subscribe_method)==0)
+		{
+		    buddy->term_code = tsx->status_code;
+		    switch (tsx->status_code) {
+		    case PJSIP_SC_CALL_TSX_DOES_NOT_EXIST:
+			/* 481: we refreshed too late? resubscribe
+			 * immediately.
+			 */
+			/* But this must only happen when the 481 is received
+			 * on subscription refresh request. We MUST NOT try to
+			 * resubscribe automatically if the 481 is received
+			 * on the initial SUBSCRIBE (if server returns this
+			 * response for some reason).
+			 */
+			if (buddy->dlg->remote.contact)
+			    resub_delay = 500;
+			break;
+		    }
+		} else if (pjsip_method_cmp(&tsx->method,
+					    &pjsip_notify_method)==0)
+		{
+		    if (pj_stricmp2(&buddy->term_reason, "deactivated")==0 ||
+			pj_stricmp2(&buddy->term_reason, "timeout")==0) {
+			/* deactivated: The subscription has been terminated, 
+			 * but the subscriber SHOULD retry immediately with 
+			 * a new subscription.
+			 */
+			/* timeout: The subscription has been terminated 
+			 * because it was not refreshed before it expired.
+			 * Clients MAY re-subscribe immediately. The 
+			 * "retry-after" parameter has no semantics for 
+			 * "timeout".
+			 */
+			resub_delay = 500;
+		    } 
+		    else if (pj_stricmp2(&buddy->term_reason, "probation")==0||
+			     pj_stricmp2(&buddy->term_reason, "giveup")==0) {
+			/* probation: The subscription has been terminated, 
+			 * but the client SHOULD retry at some later time.  
+			 * If a "retry-after" parameter is also present, the 
+			 * client SHOULD wait at least the number of seconds 
+			 * specified by that parameter before attempting to re-
+			 * subscribe.
+			 */
+			/* giveup: The subscription has been terminated because
+			 * the notifier could not obtain authorization in a 
+			 * timely fashion.  If a "retry-after" parameter is 
+			 * also present, the client SHOULD wait at least the
+			 * number of seconds specified by that parameter before
+			 * attempting to re-subscribe; otherwise, the client 
+			 * MAY retry immediately, but will likely get put back
+			 * into pending state.
+			 */
+			const pjsip_sub_state_hdr *sub_hdr;
+			pj_str_t sub_state = { "Subscription-State", 18 };
+			const pjsip_msg *msg;
+
+			msg = event->body.tsx_state.src.rdata->msg_info.msg;
+			sub_hdr = (const pjsip_sub_state_hdr*)
+				  pjsip_msg_find_hdr_by_name(msg, &sub_state,
+							     NULL);
+			if (sub_hdr && sub_hdr->retry_after > 0)
+			    resub_delay = sub_hdr->retry_after * 1000;
+		    }
+
+		}
+	    }
+
+	    /* For other cases of subscription termination, if resubscribe
+	     * timer is not set, schedule with default expiration (plus minus
+	     * some random value, to avoid sending SUBSCRIBEs all at once)
+	     */
+	    if (resub_delay == -1) {
+		pj_assert(PJSUA_PRES_TIMER >= 3);
+		resub_delay = PJSUA_PRES_TIMER*1000 - 2500 + (pj_rand()%5000);
+	    }
+
+	    buddy_resubscribe(buddy, PJ_TRUE, resub_delay);
+
 	} else {
+	    /* This will clear the last termination code/reason */
+	    buddy->term_code = 0;
 	    buddy->term_reason.slen = 0;
 	}
 
@@ -1303,11 +1558,10 @@ static void pjsua_evsub_on_state( pjsip_evsub *sub, pjsip_event *event)
 	if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED) {
 	    buddy->sub = NULL;
 	    buddy->status.info_cnt = 0;
+	    buddy->dlg = NULL;
 	    pjsip_evsub_set_mod_data(sub, pjsua_var.mod.id, NULL);
 	}
     }
-
-    PJSUA_UNLOCK();
 }
 
 
@@ -1319,11 +1573,12 @@ static void pjsua_evsub_on_tsx_state(pjsip_evsub *sub,
     pjsua_buddy *buddy;
     pjsip_contact_hdr *contact_hdr;
 
-    PJSUA_LOCK();
-
+    /* Note: #937: no need to acuire PJSUA_LOCK here. Since the buddy has
+     *   a dialog attached to it, lock_buddy() will use the dialog
+     *   lock, which we are currently holding!
+     */
     buddy = (pjsua_buddy*) pjsip_evsub_get_mod_data(sub, pjsua_var.mod.id);
     if (!buddy) {
-	PJSUA_UNLOCK();
 	return;
     }
 
@@ -1332,7 +1587,6 @@ static void pjsua_evsub_on_tsx_state(pjsip_evsub *sub,
      */
     if (buddy->contact.slen != 0) {
 	/* Contact already set */
-	PJSUA_UNLOCK();
 	return;
     }
     
@@ -1342,7 +1596,6 @@ static void pjsua_evsub_on_tsx_state(pjsip_evsub *sub,
 	event->type != PJSIP_EVENT_RX_MSG || 
 	pjsip_method_cmp(&tsx->method, pjsip_get_subscribe_method())!=0)
     {
-	PJSUA_UNLOCK();
 	return;
     }
 
@@ -1351,7 +1604,6 @@ static void pjsua_evsub_on_tsx_state(pjsip_evsub *sub,
 		  pjsip_msg_find_hdr(event->body.rx_msg.rdata->msg_info.msg,
 				     PJSIP_H_CONTACT, NULL);
     if (!contact_hdr) {
-	PJSUA_UNLOCK();
 	return;
     }
 
@@ -1363,8 +1615,6 @@ static void pjsua_evsub_on_tsx_state(pjsip_evsub *sub,
 					   PJSIP_MAX_URL_SIZE);
     if (buddy->contact.slen < 0)
 	buddy->contact.slen = 0;
-
-    PJSUA_UNLOCK();
 }
 
 
@@ -1378,8 +1628,10 @@ static void pjsua_evsub_on_rx_notify(pjsip_evsub *sub,
 {
     pjsua_buddy *buddy;
 
-    PJSUA_LOCK();
-
+    /* Note: #937: no need to acuire PJSUA_LOCK here. Since the buddy has
+     *   a dialog attached to it, lock_buddy() will use the dialog
+     *   lock, which we are currently holding!
+     */
     buddy = (pjsua_buddy*) pjsip_evsub_get_mod_data(sub, pjsua_var.mod.id);
     if (buddy) {
 	/* Update our info. */
@@ -1394,8 +1646,6 @@ static void pjsua_evsub_on_rx_notify(pjsip_evsub *sub,
     PJ_UNUSED_ARG(p_st_text);
     PJ_UNUSED_ARG(res_hdr);
     PJ_UNUSED_ARG(p_body);
-
-    PJSUA_UNLOCK();
 }
 
 
@@ -1421,7 +1671,7 @@ static pjsip_evsub_user pres_callback =
 
 
 /* It does what it says.. */
-static void subscribe_buddy_presence(unsigned index)
+static void subscribe_buddy_presence(pjsua_buddy_id buddy_id)
 {
     pj_pool_t *tmp_pool = NULL;
     pjsua_buddy *buddy;
@@ -1431,13 +1681,13 @@ static void subscribe_buddy_presence(unsigned index)
     pjsip_tx_data *tdata;
     pj_status_t status;
 
-    buddy = &pjsua_var.buddy[index];
+    buddy = &pjsua_var.buddy[buddy_id];
     acc_id = pjsua_acc_find_for_outgoing(&buddy->uri);
 
     acc = &pjsua_var.acc[acc_id];
 
     PJ_LOG(4,(THIS_FILE, "Using account %d for buddy %d subscription",
-			 acc_id, index));
+			 acc_id, buddy_id));
 
     /* Generate suitable Contact header unless one is already set in
      * the account
@@ -1478,13 +1728,13 @@ static void subscribe_buddy_presence(unsigned index)
     status = pjsip_pres_create_uac( buddy->dlg, &pres_callback, 
 				    PJSIP_EVSUB_NO_EVENT_ID, &buddy->sub);
     if (status != PJ_SUCCESS) {
-	pjsua_var.buddy[index].sub = NULL;
+	buddy->sub = NULL;
 	pjsua_perror(THIS_FILE, "Unable to create presence client", 
 		     status);
 	/* This should destroy the dialog since there's no session
 	 * referencing it
 	 */
-	pjsip_dlg_dec_lock(buddy->dlg);
+	if (buddy->dlg) pjsip_dlg_dec_lock(buddy->dlg);
 	if (tmp_pool) pj_pool_release(tmp_pool);
 	return;
     }
@@ -1517,7 +1767,7 @@ static void subscribe_buddy_presence(unsigned index)
 
     status = pjsip_pres_initiate(buddy->sub, -1, &tdata);
     if (status != PJ_SUCCESS) {
-	pjsip_dlg_dec_lock(buddy->dlg);
+	if (buddy->dlg) pjsip_dlg_dec_lock(buddy->dlg);
 	if (buddy->sub) {
 	    pjsip_pres_terminate(buddy->sub, PJ_FALSE);
 	}
@@ -1532,7 +1782,7 @@ static void subscribe_buddy_presence(unsigned index)
 
     status = pjsip_pres_send_request(buddy->sub, tdata);
     if (status != PJ_SUCCESS) {
-	pjsip_dlg_dec_lock(buddy->dlg);
+	if (buddy->dlg) pjsip_dlg_dec_lock(buddy->dlg);
 	if (buddy->sub) {
 	    pjsip_pres_terminate(buddy->sub, PJ_FALSE);
 	}
@@ -1549,19 +1799,19 @@ static void subscribe_buddy_presence(unsigned index)
 
 
 /* It does what it says... */
-static void unsubscribe_buddy_presence(unsigned index)
+static void unsubscribe_buddy_presence(pjsua_buddy_id buddy_id)
 {
     pjsua_buddy *buddy;
     pjsip_tx_data *tdata;
     pj_status_t status;
 
-    buddy = &pjsua_var.buddy[index];
+    buddy = &pjsua_var.buddy[buddy_id];
 
     if (buddy->sub == NULL)
 	return;
 
     if (pjsip_evsub_get_state(buddy->sub) == PJSIP_EVSUB_STATE_TERMINATED) {
-	pjsua_var.buddy[index].sub = NULL;
+	buddy->sub = NULL;
 	return;
     }
 
@@ -1579,39 +1829,22 @@ static void unsubscribe_buddy_presence(unsigned index)
     }
 }
 
-
-/* Lock all buddies */
-#define LOCK_BUDDIES	unsigned cnt_ = 0; \
-			pjsip_dialog *dlg_list_[PJSUA_MAX_BUDDIES]; \
-			unsigned i_; \
-			for (i_=0; i_<PJ_ARRAY_SIZE(pjsua_var.buddy);++i_) { \
-			    if (pjsua_var.buddy[i_].sub) { \
-				dlg_list_[cnt_++] = pjsua_var.buddy[i_].dlg; \
-				pjsip_dlg_inc_lock(pjsua_var.buddy[i_].dlg); \
-			    } \
-			} \
-			PJSUA_LOCK();
-
-/* Unlock all buddies */
-#define UNLOCK_BUDDIES	PJSUA_UNLOCK(); \
-			for (i_=0; i_<cnt_; ++i_) { \
-			    pjsip_dlg_dec_lock(dlg_list_[i_]); \
-			}
-			
-
-
 /* It does what it says.. */
-static void refresh_client_subscriptions(void)
+static pj_status_t refresh_client_subscriptions(void)
 {
     unsigned i;
-
-    LOCK_BUDDIES;
+    pj_status_t status;
 
     for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.buddy); ++i) {
+	struct buddy_lock lck;
 
-	if (!pjsua_var.buddy[i].uri.slen)
+	if (!pjsua_buddy_is_valid(i))
 	    continue;
 
+	status = lock_buddy("refresh_client_subscriptions()", i, &lck, 0);
+	if (status != PJ_SUCCESS)
+	    return status;
+
 	if (pjsua_var.buddy[i].monitor && !pjsua_var.buddy[i].sub) {
 	    subscribe_buddy_presence(i);
 
@@ -1619,11 +1852,318 @@ static void refresh_client_subscriptions(void)
 	    unsubscribe_buddy_presence(i);
 
 	}
+
+	unlock_buddy(&lck);
+    }
+
+    return PJ_SUCCESS;
+}
+
+/***************************************************************************
+ * MWI
+ */
+/* Callback called when *client* subscription state has changed. */
+static void mwi_evsub_on_state( pjsip_evsub *sub, pjsip_event *event)
+{
+    pjsua_acc *acc;
+
+    PJ_UNUSED_ARG(event);
+
+    /* Note: #937: no need to acuire PJSUA_LOCK here. Since the buddy has
+     *   a dialog attached to it, lock_buddy() will use the dialog
+     *   lock, which we are currently holding!
+     */
+    acc = (pjsua_acc*) pjsip_evsub_get_mod_data(sub, pjsua_var.mod.id);
+    if (!acc)
+	return;
+
+    PJ_LOG(4,(THIS_FILE, 
+	      "MWI subscription for %.*s is %s",
+	      (int)acc->cfg.id.slen, acc->cfg.id.ptr, 
+	      pjsip_evsub_get_state_name(sub)));
+
+    if (pjsip_evsub_get_state(sub) == PJSIP_EVSUB_STATE_TERMINATED) {
+	/* Clear subscription */
+	acc->mwi_dlg = NULL;
+	acc->mwi_sub = NULL;
+	pjsip_evsub_set_mod_data(sub, pjsua_var.mod.id, NULL);
+
+    }
+}
+
+/* Callback called when we receive NOTIFY */
+static void mwi_evsub_on_rx_notify(pjsip_evsub *sub, 
+				   pjsip_rx_data *rdata,
+				   int *p_st_code,
+				   pj_str_t **p_st_text,
+				   pjsip_hdr *res_hdr,
+				   pjsip_msg_body **p_body)
+{
+    pjsua_mwi_info mwi_info;
+    pjsua_acc *acc;
+
+    PJ_UNUSED_ARG(p_st_code);
+    PJ_UNUSED_ARG(p_st_text);
+    PJ_UNUSED_ARG(res_hdr);
+    PJ_UNUSED_ARG(p_body);
+
+    acc = (pjsua_acc*) pjsip_evsub_get_mod_data(sub, pjsua_var.mod.id);
+    if (!acc)
+	return;
+
+    /* Construct mwi_info */
+    pj_bzero(&mwi_info, sizeof(mwi_info));
+    mwi_info.evsub = sub;
+    mwi_info.rdata = rdata;
+
+    /* Call callback */
+    if (pjsua_var.ua_cfg.cb.on_mwi_info) {
+	(*pjsua_var.ua_cfg.cb.on_mwi_info)(acc->index, &mwi_info);
+    }
+}
+
+
+/* Event subscription callback. */
+static pjsip_evsub_user mwi_cb = 
+{
+    &mwi_evsub_on_state,  
+    NULL,   /* on_tsx_state: not interested */
+    NULL,   /* on_rx_refresh: don't care about SUBSCRIBE refresh, unless 
+	     * we want to authenticate 
+	     */
+
+    &mwi_evsub_on_rx_notify,
+
+    NULL,   /* on_client_refresh: Use default behaviour, which is to 
+	     * refresh client subscription. */
+
+    NULL,   /* on_server_timeout: Use default behaviour, which is to send 
+	     * NOTIFY to terminate. 
+	     */
+};
+
+void pjsua_start_mwi(pjsua_acc *acc)
+{
+    pj_pool_t *tmp_pool = NULL;
+    pj_str_t contact;
+    pjsip_tx_data *tdata;
+    pj_status_t status;
+
+    if (!acc->cfg.mwi_enabled) {
+	if (acc->mwi_sub) {
+	    /* Terminate MWI subscription */
+	    pjsip_tx_data *tdata;
+	    pjsip_evsub *sub = acc->mwi_sub;
+
+	    /* Detach sub from this account */
+	    acc->mwi_sub = NULL;
+	    acc->mwi_dlg = NULL;
+	    pjsip_evsub_set_mod_data(sub, pjsua_var.mod.id, NULL);
+
+	    /* Unsubscribe */
+	    status = pjsip_mwi_initiate(acc->mwi_sub, 0, &tdata);
+	    if (status == PJ_SUCCESS) {
+		status = pjsip_mwi_send_request(acc->mwi_sub, tdata);
+	    }
+	}
+	return;
+    }
+
+    if (acc->mwi_sub) {
+	/* Subscription is already active */
+	return;
+
     }
 
-    UNLOCK_BUDDIES;
+    /* Generate suitable Contact header unless one is already set in 
+     * the account
+     */
+    if (acc->contact.slen) {
+	contact = acc->contact;
+    } else {
+	tmp_pool = pjsua_pool_create("tmpmwi", 512, 256);
+	status = pjsua_acc_create_uac_contact(tmp_pool, &contact,
+					      acc->index, &acc->cfg.id);
+	if (status != PJ_SUCCESS) {
+	    pjsua_perror(THIS_FILE, "Unable to generate Contact header", 
+		         status);
+	    pj_pool_release(tmp_pool);
+	    return;
+	}
+    }
+
+    /* Create UAC dialog */
+    status = pjsip_dlg_create_uac( pjsip_ua_instance(),
+				   &acc->cfg.id,
+				   &contact,
+				   &acc->cfg.id,
+				   NULL, &acc->mwi_dlg);
+    if (status != PJ_SUCCESS) {
+	pjsua_perror(THIS_FILE, "Unable to create dialog", status);
+	if (tmp_pool) pj_pool_release(tmp_pool);
+	return;
+    }
+
+    /* Increment the dialog's lock otherwise when presence session creation
+     * fails the dialog will be destroyed prematurely.
+     */
+    pjsip_dlg_inc_lock(acc->mwi_dlg);
+
+    /* Create UAC subscription */
+    status = pjsip_mwi_create_uac(acc->mwi_dlg, &mwi_cb, 
+				  PJSIP_EVSUB_NO_EVENT_ID, &acc->mwi_sub);
+    if (status != PJ_SUCCESS) {
+	pjsua_perror(THIS_FILE, "Error creating MWI subscription", status);
+	if (tmp_pool) pj_pool_release(tmp_pool);
+	if (acc->mwi_dlg) pjsip_dlg_dec_lock(acc->mwi_dlg);
+	return;
+    }
+
+    /* If account is locked to specific transport, then lock dialog
+     * to this transport too.
+     */
+    if (acc->cfg.transport_id != PJSUA_INVALID_ID) {
+	pjsip_tpselector tp_sel;
+
+	pjsua_init_tpselector(acc->cfg.transport_id, &tp_sel);
+	pjsip_dlg_set_transport(acc->mwi_dlg, &tp_sel);
+    }
+
+    /* Set route-set */
+    if (!pj_list_empty(&acc->route_set)) {
+	pjsip_dlg_set_route_set(acc->mwi_dlg, &acc->route_set);
+    }
+
+    /* Set credentials */
+    if (acc->cred_cnt) {
+	pjsip_auth_clt_set_credentials( &acc->mwi_dlg->auth_sess, 
+					acc->cred_cnt, acc->cred);
+    }
+
+    /* Set authentication preference */
+    pjsip_auth_clt_set_prefs(&acc->mwi_dlg->auth_sess, &acc->cfg.auth_pref);
+
+    pjsip_evsub_set_mod_data(acc->mwi_sub, pjsua_var.mod.id, acc);
+
+    status = pjsip_mwi_initiate(acc->mwi_sub, -1, &tdata);
+    if (status != PJ_SUCCESS) {
+	if (acc->mwi_dlg) pjsip_dlg_dec_lock(acc->mwi_dlg);
+	if (acc->mwi_sub) {
+	    pjsip_pres_terminate(acc->mwi_sub, PJ_FALSE);
+	}
+	acc->mwi_sub = NULL;
+	acc->mwi_dlg = NULL;
+	pjsua_perror(THIS_FILE, "Unable to create initial MWI SUBSCRIBE", 
+		     status);
+	if (tmp_pool) pj_pool_release(tmp_pool);
+	return;
+    }
+
+    pjsua_process_msg_data(tdata, NULL);
+
+    status = pjsip_pres_send_request(acc->mwi_sub, tdata);
+    if (status != PJ_SUCCESS) {
+	if (acc->mwi_dlg) pjsip_dlg_dec_lock(acc->mwi_dlg);
+	if (acc->mwi_sub) {
+	    pjsip_pres_terminate(acc->mwi_sub, PJ_FALSE);
+	}
+	acc->mwi_sub = NULL;
+	acc->mwi_dlg = NULL;
+	pjsua_perror(THIS_FILE, "Unable to send initial MWI SUBSCRIBE", 
+		     status);
+	if (tmp_pool) pj_pool_release(tmp_pool);
+	return;
+    }
+
+    pjsip_dlg_dec_lock(acc->mwi_dlg);
+    if (tmp_pool) pj_pool_release(tmp_pool);
+
+}
+
+
+/***************************************************************************
+ * Unsolicited MWI
+ */
+static pj_bool_t unsolicited_mwi_on_rx_request(pjsip_rx_data *rdata)
+{
+    pjsip_msg *msg = rdata->msg_info.msg;
+    pj_str_t EVENT_HDR  = { "Event", 5 };
+    pj_str_t MWI = { "message-summary", 15 };
+    pjsip_event_hdr *eh;
+
+    if (pjsip_method_cmp(&msg->line.req.method, &pjsip_notify_method)!=0) {
+	/* Only interested with NOTIFY request */
+	return PJ_FALSE;
+    }
+
+    eh = (pjsip_event_hdr*) pjsip_msg_find_hdr_by_name(msg, &EVENT_HDR, NULL);
+    if (!eh) {
+	/* Something wrong with the request, it has no Event hdr */
+	return PJ_FALSE;
+    }
+
+    if (pj_stricmp(&eh->event_type, &MWI) != 0) {
+	/* Not MWI event */
+	return PJ_FALSE;
+    }
+
+    /* Got unsolicited MWI request, respond with 200/OK first */
+    pjsip_endpt_respond(pjsua_get_pjsip_endpt(), NULL, rdata, 200, NULL,
+			NULL, NULL, NULL);
+
+
+    /* Call callback */
+    if (pjsua_var.ua_cfg.cb.on_mwi_info) {
+	pjsua_acc_id acc_id;
+	pjsua_mwi_info mwi_info;
+
+	acc_id = pjsua_acc_find_for_incoming(rdata);
+
+	pj_bzero(&mwi_info, sizeof(mwi_info));
+	mwi_info.rdata = rdata;
+
+	(*pjsua_var.ua_cfg.cb.on_mwi_info)(acc_id, &mwi_info);
+    }
+
+    
+    return PJ_TRUE;
+}
+
+/* The module instance. */
+static pjsip_module pjsua_unsolicited_mwi_mod = 
+{
+    NULL, NULL,				/* prev, next.		*/
+    { "mod-unsolicited-mwi", 19 },	/* Name.		*/
+    -1,					/* Id			*/
+    PJSIP_MOD_PRIORITY_APPLICATION,	/* Priority	        */
+    NULL,				/* load()		*/
+    NULL,				/* start()		*/
+    NULL,				/* stop()		*/
+    NULL,				/* unload()		*/
+    &unsolicited_mwi_on_rx_request,	/* on_rx_request()	*/
+    NULL,				/* on_rx_response()	*/
+    NULL,				/* on_tx_request.	*/
+    NULL,				/* on_tx_response()	*/
+    NULL,				/* on_tsx_state()	*/
+};
+
+static pj_status_t enable_unsolicited_mwi(void)
+{
+    pj_status_t status;
+
+    status = pjsip_endpt_register_module(pjsua_get_pjsip_endpt(), 
+					 &pjsua_unsolicited_mwi_mod);
+    if (status != PJ_SUCCESS)
+	pjsua_perror(THIS_FILE, "Error registering unsolicited MWI module", 
+		     status);
+
+    return status;
 }
 
+
+
+/***************************************************************************/
+
 /* Timer callback to re-create client subscription */
 static void pres_timer_cb(pj_timer_heap_t *th,
 			  pj_timer_entry *entry)
@@ -1631,15 +2171,25 @@ static void pres_timer_cb(pj_timer_heap_t *th,
     unsigned i;
     pj_time_val delay = { PJSUA_PRES_TIMER, 0 };
 
-    /* Retry failed PUBLISH requests */
+    entry->id = PJ_FALSE;
+
+    /* Retry failed PUBLISH and MWI SUBSCRIBE requests */
     for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
 	pjsua_acc *acc = &pjsua_var.acc[i];
+
+	/* Retry PUBLISH */
 	if (acc->cfg.publish_enabled && acc->publish_sess==NULL)
 	    pjsua_pres_init_publish_acc(acc->index);
+
+	/* Re-subscribe MWI subscription if it's terminated prematurely */
+	if (acc->cfg.mwi_enabled && !acc->mwi_sub)
+	    pjsua_start_mwi(acc);
     }
 
-    entry->id = PJ_FALSE;
-    refresh_client_subscriptions();
+    /* #937: No need to do bulk client refresh, as buddies have their
+     *       own individual timer now.
+     */
+    //refresh_client_subscriptions();
 
     pjsip_endpt_schedule_timer(pjsua_var.endpt, entry, &delay);
     entry->id = PJ_TRUE;
@@ -1687,23 +2237,13 @@ pj_status_t pjsua_pres_start(void)
 	pjsua_var.pres_timer.id = PJ_TRUE;
     }
 
-    return PJ_SUCCESS;
-}
-
-
-/*
- * Refresh presence subscriptions
- */
-void pjsua_pres_refresh()
-{
-    unsigned i;
-
-    refresh_client_subscriptions();
-
-    for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
-	if (pjsua_var.acc[i].valid)
-	    pjsua_pres_update_acc(i, PJ_FALSE);
+    if (pjsua_var.ua_cfg.enable_unsolicited_mwi) {
+	pj_status_t status = enable_unsolicited_mwi();
+	if (status != PJ_SUCCESS)
+	    return status;
     }
+
+    return PJ_SUCCESS;
 }
 
 
@@ -1714,6 +2254,8 @@ void pjsua_pres_shutdown(void)
 {
     unsigned i;
 
+    PJ_LOG(4,(THIS_FILE, "Shutting down presence.."));
+
     if (pjsua_var.pres_timer.id != 0) {
 	pjsip_endpt_cancel_timer(pjsua_var.endpt, &pjsua_var.pres_timer);
 	pjsua_var.pres_timer.id = PJ_FALSE;
@@ -1729,5 +2271,10 @@ void pjsua_pres_shutdown(void)
 	pjsua_var.buddy[i].monitor = 0;
     }
 
-    pjsua_pres_refresh();
+    refresh_client_subscriptions();
+
+    for (i=0; i<PJ_ARRAY_SIZE(pjsua_var.acc); ++i) {
+	if (pjsua_var.acc[i].valid)
+	    pjsua_pres_update_acc(i, PJ_FALSE);
+    }
 }
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sendto/126_sdp_with_port_0_and_no_rtpmap_for_dynamic_pt.py b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sendto/126_sdp_with_port_0_and_no_rtpmap_for_dynamic_pt.py
new file mode 100644
index 0000000000..22e2b0f1a9
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sendto/126_sdp_with_port_0_and_no_rtpmap_for_dynamic_pt.py
@@ -0,0 +1,26 @@
+# $Id: 126_sdp_with_port_0_and_no_rtpmap_for_dynamic_pt.py 3011 2009-11-10 10:58:20Z nanang $
+import inc_sip as sip
+import inc_sdp as sdp
+
+sdp = \
+"""
+v=0
+o=- 0 0 IN IP4 127.0.0.1
+s=-
+c=IN IP4 127.0.0.1
+t=0 0
+m=video 0 RTP/AVP 100
+m=audio 5000 RTP/AVP 0
+"""
+
+pjsua_args = "--null-audio --auto-answer 200"
+extra_headers = ""
+include = ["Content-Type: application/sdp",	# response must include SDP
+	   "m=video 0 RTP/AVP[\\s\\S]+m=audio [1-9]+[0-9]* RTP/AVP"
+	   ]
+exclude = []
+
+sendto_cfg = sip.SendtoCfg("SDP media with port 0 and no rtpmap for dynamic PT", pjsua_args, sdp, 200,
+			   extra_headers=extra_headers,
+			   resp_inc=include, resp_exc=exclude) 
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-bad-ack.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-bad-ack.xml
new file mode 100644
index 0000000000..d93e30c51d
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-bad-ack.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                                                                    -->
+
+<scenario name="UAC with bad ACK">
+  <!-- UAC with bad ACK causes assertion with pjsip 1.4			-->
+  <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]
+
+      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="180" optional="true">
+  </recv>
+
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv response="200" rtd="true">
+  </recv>
+
+  <!-- Packet lost can be simulated in any send/recv message by         -->
+  <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
+  <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>
+
+  <!-- This delay can be customized by the -d command-line option       -->
+  <!-- or by adding a 'milliseconds = "value"' option here.             -->
+  <pause/>
+
+  <!-- The 'crlf' option inserts a blank line in the statistics report. -->
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bK-1
+      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>
+
+  <pause milliseconds="2000"/>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bK-1
+      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>
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-inv-multiple-require.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-inv-multiple-require.xml
new file mode 100644
index 0000000000..b0790f6ef7
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-inv-multiple-require.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+
+<scenario name="Multiple Require header fields">
+  <!-- UAC with bad ACK causes assertion with pjsip 1.4			-->
+  <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
+      Require: timer
+      Require: toto
+      Subject: Performance Test
+      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>
+
+  <recv response="100"
+        optional="true">
+  </recv>
+
+  <recv response="180" 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=z9hG4bK-1
+      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>
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-options.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-options.xml
new file mode 100644
index 0000000000..7b14884509
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-options.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                                                                    -->
+
+<scenario name="UAC OPTIONS">
+  <!-- UAC with bad ACK causes assertion with pjsip 1.4			-->
+  <send retrans="500">
+    <![CDATA[
+
+      OPTIONS 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 OPTIONS
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: [len]
+
+    ]]>
+  </send>
+
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv response="200" rtd="true">
+  </recv>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-bad-via-branch.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-bad-via-branch.xml
new file mode 100644
index 0000000000..ed825c9faf
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-bad-via-branch.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                                                                    -->
+
+<!-- Re-INVITE with bad Via branch (it has the same branch as the
+     previous INVITE (ticket #965) will cause assertion
+-->
+     
+
+<scenario name="UAC re-INVITE with bad Via branch">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bKPj-1
+      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]
+
+      v=0
+      o=Tester 234 123 IN IP4 127.0.0.1
+      s=Tester
+      c=IN IP4 127.0.0.1
+      t=0 0
+      m=audio 17424 RTP/AVP 0 101
+      a=rtpmap:101 telephone-event/8000
+      a=sendrecv
+
+    ]]>
+  </send>
+
+  <recv response="100"
+        optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv response="200" rtd="true">
+  </recv>
+
+  <!-- Packet lost can be simulated in any send/recv message by         -->
+  <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
+  <send>
+    <![CDATA[
+
+      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bKPj-2
+      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>
+
+
+  <!-- Re-INVITE with Via branch value the same as previous INVITE -->
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bKPj-1
+      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 INVITE
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=Tester 234 124 IN IP4 127.0.0.1
+      s=Tester
+      c=IN IP4 127.0.0.1
+      t=0 0
+      m=audio 17424 RTP/AVP 0 101
+      a=rtpmap:101 telephone-event/8000
+
+
+    ]]>
+  </send>
+
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv response="500" rtd="true">
+  </recv>
+
+  <!-- Packet lost can be simulated in any send/recv message by         -->
+  <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
+  <send>
+    <![CDATA[
+
+      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bKPj-1
+      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 ACK
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+
+  <pause milliseconds="2000"/>
+
+
+  <!-- The 'crlf' option inserts a blank line in the statistics report. -->
+  <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: 3 BYE
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-port-0-bad-sdp.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-port-0-bad-sdp.xml
new file mode 100644
index 0000000000..d1cc04f3c1
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-reinvite-port-0-bad-sdp.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                                                                    -->
+
+<!-- Note:
+     For this test to work, PJSUA-LIB needs to add video line, with
+     this patch:
+
+     pjsua_media.c:1253, after call to pjmedia_endpt_create_sdp():
+
+    if (1) {
+	pjmedia_sdp_media *m = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_media);
+	m->desc.media = pj_str("video");
+	m->desc.port = 3000;
+	m->desc.transport = pj_str("RTP/AVP");
+	m->desc.fmt_count = 1;
+	m->desc.fmt[0] = pj_str("0");
+	sdp->media[sdp->media_count++] = m;
+    }
+
+-->
+     
+
+<scenario name="UAC with bad ACK">
+  <!-- UAC with bad ACK causes assertion with pjsip 1.4			-->
+  <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]
+
+      v=0
+      o=Tester 234 123 IN IP4 89.208.145.194
+      s=Tester
+      c=IN IP4 89.208.145.194
+      t=0 0
+      m=audio 17424 RTP/AVP 111 0 18 101
+      a=rtpmap:111 SPEEX/16000
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:18 G729/8000
+      a=rtpmap:101 telephone-event/8000
+      a=sendrecv
+      a=rtcp:17425
+      m=video 11128 RTP/AVP 34 103 104
+      a=rtpmap:34 H263/90000
+      a=rtpmap:103 H263-1998/90000
+      a=rtpmap:104 H264/90000
+      a=sendrecv
+      a=rtcp:11129
+
+    ]]>
+  </send>
+
+  <recv response="100"
+        optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv response="200" rtd="true">
+  </recv>
+
+  <!-- Packet lost can be simulated in any send/recv message by         -->
+  <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
+  <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>
+
+  <!-- This delay can be customized by the -d command-line option       -->
+  <!-- or by adding a 'milliseconds = "value"' option here.             -->
+  <pause milliseconds="2000"/>
+
+  <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]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 2 INVITE
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=Tester 234 124 IN IP4 89.208.145.194
+      s=Tester
+      c=IN IP4 89.208.145.194
+      t=0 0
+      m=audio 17424 RTP/AVP 111 0 18 101
+      a=rtpmap:111 SPEEX/16000
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:18 G729/8000
+      a=rtpmap:101 telephone-event/8000
+      a=sendrecv
+      a=rtcp:17425
+      m=video 0 RTP/AVP 34 103 104
+      a=sendrecv
+
+
+    ]]>
+  </send>
+
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv response="200" rtd="true">
+  </recv>
+
+  <!-- Packet lost can be simulated in any send/recv message by         -->
+  <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       -->
+  <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: 2 ACK
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+
+  <pause milliseconds="2000"/>
+
+
+  <!-- The 'crlf' option inserts a blank line in the statistics report. -->
+  <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: 3 BYE
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-subscribe.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-subscribe.xml
new file mode 100644
index 0000000000..c42e95143b
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uac-subscribe.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                                                                    -->
+
+<scenario name="UAC presence">
+  <!-- UAC Presence			-->
+  <send retrans="500">
+    <![CDATA[
+
+      SUBSCRIBE 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 SUBSCRIBE
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Event: presence
+      Expires: 600
+      Accept: application/pidf+xml, application/xpidf+xml
+      Allow-Events: presence, refer
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200" rtd="true">
+  </recv>
+
+  <recv request="NOTIFY" crlf="true">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+
+      SUBSCRIBE 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: 2 SUBSCRIBE
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Event: presence
+      Expires: 0
+      Accept: application/pidf+xml, application/xpidf+xml
+      Allow-Events: presence, refer
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200" rtd="true">
+  </recv>
+
+  <recv request="NOTIFY" crlf="true">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-422-then-200-bad-se.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-422-then-200-bad-se.xml
new file mode 100644
index 0000000000..537f242bf5
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-422-then-200-bad-se.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                 Sipp default 'uas' scenario.                       -->
+<!--                                                                    -->
+
+<scenario name="Basic UAS responder">
+  <!-- By adding rrs="true" (Record Route Sets), the route sets         -->
+  <!-- are saved and used for following messages sent. Useful to test   -->
+  <!-- against stateful SIP proxies/B2BUAs.                             -->
+  <recv request="INVITE" crlf="true">
+  </recv>
+
+  <!-- The '[last_*]' keyword is replaced automatically by the          -->
+  <!-- specified header if it was present in the last message received  -->
+  <!-- (except if it was a retransmission). If the header was not       -->
+  <!-- present or if no message has been received, the '[last_*]'       -->
+  <!-- keyword is discarded, and all bytes until the end of the line    -->
+  <!-- are also discarded.                                              -->
+  <!--                                                                  -->
+  <!-- If the specified header was present several times in the         -->
+  <!-- message, all occurences are concatenated (CRLF seperated)        -->
+  <!-- to be used in place of the '[last_*]' keyword.                   -->
+
+  <send retrans="500">
+    <![CDATA[
+
+      SIP/2.0 422 Session Timer too small
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]> 
+      Min-SE:  5400
+      Content-Length: 0
+
+	]]>
+  </send>
+
+  <recv request="ACK"
+        optional="true"
+        rtd="true"
+        crlf="true"> 
+  </recv> 
+ 
+
+  <recv request="INVITE" crlf="true">
+  </recv>
+
+  <send retrans="500"> 
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY, INFO, REGISTER
+      Allow-Events: telephone-event
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]> 
+      Supported: replaces
+      Session-Expires:  3600;refresher=uas
+      Require: timer
+      Content-Type: application/sdp
+      Content-Disposition: session;handling=required
+      Content-Length: [len]
+ 
+      v=0
+      o=Some-UserAgent 68 210 IN IP4 [local_ip]
+      s=SIP Call
+      c=IN IP4 [local_ip]
+      t=0 0
+      m=audio 17294 RTP/AVP 18 101
+      c=IN IP4 [local_ip]
+      a=rtpmap:18 G729/8000
+      a=fmtp:18 annexb=no
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      a=ptime:20 
+
+    ]]>
+  </send> 
+  
+  <recv request="ACK"
+        rtd="true"
+        crlf="true"> 
+  </recv> 
+
+
+  <!-- Keep the call open for a while in case the 200 is lost to be     -->
+  <!-- able to retransmit it if we receive the BYE again.               -->
+  <pause milliseconds="4000"/>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-auth.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-auth.xml
new file mode 100644
index 0000000000..71da30f282
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-auth.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!--                 Sipp default 'uas' scenario.                       -->
+<!--                                                                    -->
+
+<scenario name="UAS authorization server">
+  <recv request="REGISTER" crlf="true">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 401 Unauthorized
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      WWW-Authenticate: digest realm="test",stale=true
+    ]]>
+  </send>
+
+
+  <recv request="REGISTER" crlf="true">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Expires: 30
+    ]]>
+  </send>
+
+
+  <pause milliseconds="1000"/>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi-0.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi-0.xml
new file mode 100644
index 0000000000..58f2bd480e
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi-0.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!-- Late NOTIFY scenario:                       			-->
+<!--  - UAC sends SUBSCRIBE, we reply with 200				-->
+<!--  - we send NOTIFY, expect 200					-->
+<!--  - UAC sends SUBSCRIBE, we ignore					-->
+<!--  - we send NOTIFY							-->
+<!-- See http://trac.pjsip.org/repos/ticket/911                         -->
+<!--                                                                    -->
+
+<scenario name="MWI server with immediate final notify">
+  <recv request="SUBSCRIBE" crlf="true">
+    <action>
+	<ereg regexp=".*" search_in="hdr" header="From" assign_to="3"/>
+	<ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/>
+        <assign assign_to="4" variable="5" />
+    </action>
+  </recv>
+
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 600
+    ]]>
+  </send>
+
+  <!-- initial notify is final notify -->
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 1 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: message-summary
+      Subscription-State: terminated;reason=goinghome
+      Content-Type: application/simple-message-summary
+      Content-Length: [len]
+
+      Messages-Waiting: yes
+      Voice-Message: 4/8 (1/2)
+
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+  <pause milliseconds="5000"/> 
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi.xml
new file mode 100644
index 0000000000..00e703718b
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-mwi.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!-- Late NOTIFY scenario:                       			-->
+<!--  - UAC sends SUBSCRIBE, we reply with 200				-->
+<!--  - we send NOTIFY, expect 200					-->
+<!--  - UAC sends SUBSCRIBE, we ignore					-->
+<!--  - we send NOTIFY							-->
+<!-- See http://trac.pjsip.org/repos/ticket/911                         -->
+<!--                                                                    -->
+
+<scenario name="MWI server">
+  <recv request="SUBSCRIBE" crlf="true">
+    <action>
+	<ereg regexp=".*" search_in="hdr" header="From" assign_to="3"/>
+	<ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/>
+        <assign assign_to="4" variable="5" />
+    </action>
+  </recv>
+
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 600
+    ]]>
+  </send>
+
+  <!-- initial notify -->
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 1 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: message-summary
+      Subscription-State: active;expires=50
+      Content-Type: application/simple-message-summary
+      Content-Length: [len]
+
+      Messages-Waiting: yes
+      Voice-Message: 4/8 (1/2)
+
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+  <pause milliseconds="10000"/> 
+
+
+  <!-- terminate subscription -->
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 2 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: message-summary
+      Subscription-State: terminated;reason=noresource
+      Content-Type: application/simple-message-summary
+      Content-Length: [len]
+
+      Messages-Waiting: yes
+      Voice-Message: 4/8 (1/2)
+
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-refresh-481.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-refresh-481.xml
new file mode 100644
index 0000000000..5f1165013c
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-refresh-481.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!-- Late NOTIFY scenario:                       			-->
+<!--  - UAC sends SUBSCRIBE, we reply with 200				-->
+<!--  - we send NOTIFY, expect 200					-->
+<!--  - UAC sends SUBSCRIBE, we ignore					-->
+<!--  - we send NOTIFY							-->
+<!-- See http://trac.pjsip.org/repos/ticket/911                         -->
+<!--                                                                    -->
+
+<scenario name="SUBSCRIBE tests">
+  <!-- Establish subscription -->
+  <recv request="SUBSCRIBE" crlf="true">
+    <action>
+	<ereg regexp=".*" search_in="hdr" header="From" assign_to="3"/>
+	<ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/>
+        <assign assign_to="4" variable="5" />
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 60
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=z9hG4bKPj01
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 1 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: presence
+      Subscription-State: active;expires=50
+      Content-Type: application/pidf+xml
+
+      <?xml version="1.0" encoding="UTF-8"?>
+      <presence xmlns="urn:ietf:params:xml:ns:pidf" xmlns:op="urn:oma:xml:prs:pidf:oma-pres" entity="sip:moto_red@ptt.intra.genaker.net">
+       <tuple id="17415d5738f332a64a2f1d8cfb4ab0a5">
+         <status>
+            <basic>open</basic>
+         </status>
+       </tuple>
+      </presence>
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+  <!-- Subscription has been established at this point -->
+
+
+  <!-- *******
+    
+       Wait for subscription refresh, reply with 481
+       
+  -->
+
+  <recv request="SUBSCRIBE" crlf="true">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 481 You should resubscribe mow
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+    ]]>
+  </send>
+
+
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-terminated-retry.xml b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-terminated-retry.xml
new file mode 100644
index 0000000000..4843cc3765
--- /dev/null
+++ b/sflphone-common/libs/pjproject/tests/pjsua/scripts-sipp/uas-subscribe-terminated-retry.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+<!--                                                                    -->
+<!-- Late NOTIFY scenario:                       			-->
+<!--  - UAC sends SUBSCRIBE, we reply with 200				-->
+<!--  - we send NOTIFY, expect 200					-->
+<!--  - UAC sends SUBSCRIBE, we ignore					-->
+<!--  - we send NOTIFY							-->
+<!-- See http://trac.pjsip.org/repos/ticket/911                         -->
+<!--                                                                    -->
+
+<scenario name="NOTIFY with terminated status with some reason code should cause UAC to retry">
+  <!-- Establish subscription -->
+  <recv request="SUBSCRIBE" crlf="true">
+    <action>
+	<ereg regexp=".*" search_in="hdr" header="From" assign_to="3"/>
+	<ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/>
+        <assign assign_to="4" variable="5" />
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:sipp@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 60
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 1 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: presence
+      Subscription-State: active;expires=50
+      Content-Type: application/pidf+xml
+
+      <?xml version="1.0" encoding="UTF-8"?>
+      <presence xmlns="urn:ietf:params:xml:ns:pidf" xmlns:op="urn:oma:xml:prs:pidf:oma-pres" entity="sip:moto_red@ptt.intra.genaker.net">
+       <tuple id="17415d5738f332a64a2f1d8cfb4ab0a5">
+         <status>
+            <basic>open</basic>
+         </status>
+       </tuple>
+      </presence>
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+  <!-- Subscription has been established at this point -->
+
+
+  <pause milliseconds="4000"/>
+
+  <!-- *******
+    
+       Send NOTIFY termination 
+       
+  -->
+  <send retrans="500">
+    <![CDATA[
+      NOTIFY sip:[$5] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+      To[$3]
+      Call-ID: [call_id]
+      Cseq: 3 NOTIFY
+      Contact: sip:sipp@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Event: presence
+      Subscription-State: terminated;reason=probation;retry-after=5
+      Content-Length: 0
+    ]]>
+  </send>
+
+   <recv response="200">
+   </recv>
+
+
+
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/sflphone-common/libs/pjproject/third_party/build/Makefile b/sflphone-common/libs/pjproject/third_party/build/Makefile
index 6d84db662c..36d8061207 100644
--- a/sflphone-common/libs/pjproject/third_party/build/Makefile
+++ b/sflphone-common/libs/pjproject/third_party/build/Makefile
@@ -1,4 +1,4 @@
-DIRS = resample srtp
+DIRS = resample milenage srtp
 
 include ../../build.mak
 include $(PJDIR)/build/common.mak
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/Makefile b/sflphone-common/libs/pjproject/third_party/build/milenage/Makefile
new file mode 100644
index 0000000000..094ddeaa7e
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/build/milenage/Makefile
@@ -0,0 +1,58 @@
+include ../../../build.mak
+include ../../../build/common.mak
+
+export LIBDIR := ../../lib
+
+RULES_MAK := $(PJDIR)/build/rules.mak
+
+export MILENAGE_LIB := ../../lib/libmilenage-$(TARGET_NAME)$(LIBEXT)
+
+###############################################################################
+# Gather all flags.
+#
+export _CFLAGS 	:= $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
+		   $(CFLAGS) $(CC_INC). $(CC_INC)../../milenage/include \
+		   $(CC_INC)../../../pjlib/include
+export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
+		   $(HOST_CXXFLAGS) $(CXXFLAGS)
+export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
+		   $(LDFLAGS) 
+
+export MILENAGE_SRCDIR = ../../milenage
+export MILENAGE_OBJS = milenage.o rijndael.o
+export MILENAGE_CFLAGS = $(_CFLAGS)
+
+
+export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
+###############################################################################
+# Main entry
+#
+# $(TARGET) is defined in os-$(OS_NAME).mak file in current directory.
+#
+TARGETS := libmilenage
+
+all: $(TARGETS)
+
+doc:
+	cd .. && doxygen docs/doxygen.cfg
+
+dep: depend
+distclean: realclean
+
+.PHONY: dep depend libmilenage clean realclean distclean
+
+libmilenage:
+	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $(MILENAGE_LIB)
+
+clean print_lib:
+	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $@
+
+realclean:
+	$(subst @@,$(subst /,$(HOST_PSEP),.ilbc-$(TARGET_NAME).depend),$(HOST_RMR))
+	
+	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $@
+
+depend:
+	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $@
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp
new file mode 100644
index 0000000000..cf89612e9c
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp
@@ -0,0 +1,110 @@
+# Microsoft Developer Studio Project File - Name="libmilenage" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=libmilenage - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libmilenage.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libmilenage.mak" CFG="libmilenage - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libmilenage - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "libmilenage - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "libmilenage - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "../../lib"
+# PROP BASE Intermediate_Dir "output/libmilenage-i386-win32-vc6-release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "../../lib"
+# PROP Intermediate_Dir "output/libmilenage-i386-win32-vc6-release"
+# PROP Target_Dir ""
+F90=df.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../pjlib/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../../lib/libmilenage-i386-win32-vc6-release.lib"
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "output/libmilenage-i386-win32-vc6-debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "../../lib"
+# PROP Intermediate_Dir "output/libmilenage-i386-win32-vc6-debug"
+# PROP Target_Dir ""
+F90=df.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../pjlib/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../../lib/libmilenage-i386-win32-vc6-debug.lib"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libmilenage - Win32 Release"
+# Name "libmilenage - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\milenage\milenage.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\milenage\rijndael.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\milenage\milenage.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\milenage\rijndael.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp
new file mode 100644
index 0000000000..34f4d03739
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp
@@ -0,0 +1,1562 @@
+# Microsoft eMbedded Visual Tools Project File - Name="libmilenage" - Package Owner=<4>
+# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (WCE x86) Static Library" 0x8304
+# TARGTYPE "Win32 (WCE MIPS16) Static Library" 0x8904
+# TARGTYPE "Win32 (WCE SH4) Static Library" 0x8604
+# TARGTYPE "Win32 (WCE MIPSII) Static Library" 0xa104
+# TARGTYPE "Win32 (WCE MIPSIV_FP) Static Library" 0x9204
+# TARGTYPE "Win32 (WCE SH3) Static Library" 0x8104
+# TARGTYPE "Win32 (WCE ARMV4) Static Library" 0xa304
+# TARGTYPE "Win32 (WCE ARMV4I) Static Library" 0xa504
+# TARGTYPE "Win32 (WCE emulator) Static Library" 0xa604
+# TARGTYPE "Win32 (WCE MIPSII_FP) Static Library" 0xa204
+# TARGTYPE "Win32 (WCE ARMV4T) Static Library" 0xa404
+# TARGTYPE "Win32 (WCE MIPSIV) Static Library" 0x9604
+
+CFG=libmilenage - Win32 (WCE MIPSII_FP) Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "libmilenage.vcn".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "libmilenage.vcn" CFG="libmilenage - Win32 (WCE MIPSII_FP) Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "libmilenage - Win32 (WCE MIPSII_FP) Release" (based on "Win32 (WCE MIPSII_FP) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSII_FP) Debug" (based on "Win32 (WCE MIPSII_FP) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSII) Release" (based on "Win32 (WCE MIPSII) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSII) Debug" (based on "Win32 (WCE MIPSII) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE SH4) Release" (based on "Win32 (WCE SH4) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE SH4) Debug" (based on "Win32 (WCE SH4) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE SH3) Release" (based on "Win32 (WCE SH3) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE SH3) Debug" (based on "Win32 (WCE SH3) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSIV) Release" (based on "Win32 (WCE MIPSIV) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSIV) Debug" (based on "Win32 (WCE MIPSIV) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE emulator) Release" (based on "Win32 (WCE emulator) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE emulator) Debug" (based on "Win32 (WCE emulator) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE ARMV4I) Release" (based on "Win32 (WCE ARMV4I) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE ARMV4I) Debug" (based on "Win32 (WCE ARMV4I) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSIV_FP) Release" (based on "Win32 (WCE MIPSIV_FP) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPSIV_FP) Debug" (based on "Win32 (WCE MIPSIV_FP) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE ARMV4) Release" (based on "Win32 (WCE ARMV4) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE ARMV4) Debug" (based on "Win32 (WCE ARMV4) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPS16) Release" (based on "Win32 (WCE MIPS16) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE MIPS16) Debug" (based on "Win32 (WCE MIPS16) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE ARMV4T) Release" (based on "Win32 (WCE ARMV4T) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE ARMV4T) Debug" (based on "Win32 (WCE ARMV4T) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE x86) Release" (based on "Win32 (WCE x86) Static Library")
+!MESSAGE "libmilenage - Win32 (WCE x86) Debug" (based on "Win32 (WCE x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+# PROP ATL_Project 2
+
+!IF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\MIPSII_FPRel"
+# PROP BASE Intermediate_Dir "output\MIPSII_FPRel"
+# PROP BASE CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\MIPSII_FPRel"
+# PROP Intermediate_Dir "output\MIPSII_FPRel"
+# PROP CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE- /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE- /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\MIPSII_FPDbg"
+# PROP BASE Intermediate_Dir "output\MIPSII_FPDbg"
+# PROP BASE CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\MIPSII_FPDbg"
+# PROP Intermediate_Dir "output\MIPSII_FPDbg"
+# PROP CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE- /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE- /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\MIPSIIRel"
+# PROP BASE Intermediate_Dir "output\MIPSIIRel"
+# PROP BASE CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\MIPSIIRel"
+# PROP Intermediate_Dir "output\MIPSIIRel"
+# PROP CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\MIPSIIDbg"
+# PROP BASE Intermediate_Dir "output\MIPSIIDbg"
+# PROP BASE CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\MIPSIIDbg"
+# PROP Intermediate_Dir "output\MIPSIIDbg"
+# PROP CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\SH4Rel"
+# PROP BASE Intermediate_Dir "output\SH4Rel"
+# PROP BASE CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\SH4Rel"
+# PROP Intermediate_Dir "output\SH4Rel"
+# PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=shcl.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /Qsh4 /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /Qsh4 /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\SH4Dbg"
+# PROP BASE Intermediate_Dir "output\SH4Dbg"
+# PROP BASE CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\SH4Dbg"
+# PROP Intermediate_Dir "output\SH4Dbg"
+# PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=shcl.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Qsh4 /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Qsh4 /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\SH3Rel"
+# PROP BASE Intermediate_Dir "output\SH3Rel"
+# PROP BASE CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\SH3Rel"
+# PROP Intermediate_Dir "output\SH3Rel"
+# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=shcl.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\SH3Dbg"
+# PROP BASE Intermediate_Dir "output\SH3Dbg"
+# PROP BASE CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\SH3Dbg"
+# PROP Intermediate_Dir "output\SH3Dbg"
+# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=shcl.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\MIPSIVRel"
+# PROP BASE Intermediate_Dir "output\MIPSIVRel"
+# PROP BASE CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\MIPSIVRel"
+# PROP Intermediate_Dir "output\MIPSIVRel"
+# PROP CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\MIPSIVDbg"
+# PROP BASE Intermediate_Dir "output\MIPSIVDbg"
+# PROP BASE CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\MIPSIVDbg"
+# PROP Intermediate_Dir "output\MIPSIVDbg"
+# PROP CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\emulatorRel"
+# PROP BASE Intermediate_Dir "output\emulatorRel"
+# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\emulatorRel"
+# PROP Intermediate_Dir "output\emulatorRel"
+# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\emulatorDbg"
+# PROP BASE Intermediate_Dir "output\emulatorDbg"
+# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\emulatorDbg"
+# PROP Intermediate_Dir "output\emulatorDbg"
+# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\ARMV4IRel"
+# PROP BASE Intermediate_Dir "output\ARMV4IRel"
+# PROP BASE CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\ARMV4IRel"
+# PROP Intermediate_Dir "output\ARMV4IRel"
+# PROP CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clarm.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\ARMV4IDbg"
+# PROP BASE Intermediate_Dir "output\ARMV4IDbg"
+# PROP BASE CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\ARMV4IDbg"
+# PROP Intermediate_Dir "output\ARMV4IDbg"
+# PROP CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clarm.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\MIPSIV_FPRel"
+# PROP BASE Intermediate_Dir "output\MIPSIV_FPRel"
+# PROP BASE CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\MIPSIV_FPRel"
+# PROP Intermediate_Dir "output\MIPSIV_FPRel"
+# PROP CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\MIPSIV_FPDbg"
+# PROP BASE Intermediate_Dir "output\MIPSIV_FPDbg"
+# PROP BASE CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\MIPSIV_FPDbg"
+# PROP Intermediate_Dir "output\MIPSIV_FPDbg"
+# PROP CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\ARMV4Rel"
+# PROP BASE Intermediate_Dir "output\ARMV4Rel"
+# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\ARMV4Rel"
+# PROP Intermediate_Dir "output\ARMV4Rel"
+# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clarm.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\ARMV4Dbg"
+# PROP BASE Intermediate_Dir "output\ARMV4Dbg"
+# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\ARMV4Dbg"
+# PROP Intermediate_Dir "output\ARMV4Dbg"
+# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clarm.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\MIPS16Rel"
+# PROP BASE Intermediate_Dir "output\MIPS16Rel"
+# PROP BASE CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\MIPS16Rel"
+# PROP Intermediate_Dir "output\MIPS16Rel"
+# PROP CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\MIPS16Dbg"
+# PROP BASE Intermediate_Dir "output\MIPS16Dbg"
+# PROP BASE CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\MIPS16Dbg"
+# PROP Intermediate_Dir "output\MIPS16Dbg"
+# PROP CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clmips.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\ARMV4TRel"
+# PROP BASE Intermediate_Dir "output\ARMV4TRel"
+# PROP BASE CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\ARMV4TRel"
+# PROP Intermediate_Dir "output\ARMV4TRel"
+# PROP CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clthumb.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\ARMV4TDbg"
+# PROP BASE Intermediate_Dir "output\ARMV4TDbg"
+# PROP BASE CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\ARMV4TDbg"
+# PROP Intermediate_Dir "output\ARMV4TDbg"
+# PROP CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=clthumb.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "output\X86Rel"
+# PROP BASE Intermediate_Dir "output\X86Rel"
+# PROP BASE CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "output\X86Rel"
+# PROP Intermediate_Dir "output\X86Rel"
+# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
+# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "output\X86Dbg"
+# PROP BASE Intermediate_Dir "output\X86Dbg"
+# PROP BASE CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
+# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP BASE Target_Dir "output\"
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "output\X86Dbg"
+# PROP Intermediate_Dir "output\X86Dbg"
+# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
+# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
+# PROP Target_Dir "output\"
+CPP=cl.exe
+# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
+# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+
+!ENDIF 
+
+# Begin Target
+
+# Name "libmilenage - Win32 (WCE MIPSII_FP) Release"
+# Name "libmilenage - Win32 (WCE MIPSII_FP) Debug"
+# Name "libmilenage - Win32 (WCE MIPSII) Release"
+# Name "libmilenage - Win32 (WCE MIPSII) Debug"
+# Name "libmilenage - Win32 (WCE SH4) Release"
+# Name "libmilenage - Win32 (WCE SH4) Debug"
+# Name "libmilenage - Win32 (WCE SH3) Release"
+# Name "libmilenage - Win32 (WCE SH3) Debug"
+# Name "libmilenage - Win32 (WCE MIPSIV) Release"
+# Name "libmilenage - Win32 (WCE MIPSIV) Debug"
+# Name "libmilenage - Win32 (WCE emulator) Release"
+# Name "libmilenage - Win32 (WCE emulator) Debug"
+# Name "libmilenage - Win32 (WCE ARMV4I) Release"
+# Name "libmilenage - Win32 (WCE ARMV4I) Debug"
+# Name "libmilenage - Win32 (WCE MIPSIV_FP) Release"
+# Name "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
+# Name "libmilenage - Win32 (WCE ARMV4) Release"
+# Name "libmilenage - Win32 (WCE ARMV4) Debug"
+# Name "libmilenage - Win32 (WCE MIPS16) Release"
+# Name "libmilenage - Win32 (WCE MIPS16) Debug"
+# Name "libmilenage - Win32 (WCE ARMV4T) Release"
+# Name "libmilenage - Win32 (WCE ARMV4T) Debug"
+# Name "libmilenage - Win32 (WCE x86) Release"
+# Name "libmilenage - Win32 (WCE x86) Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\milenage\milenage.c
+
+!IF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Release"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Debug"
+
+DEP_CPP_MILEN=\
+	"..\..\milenage\milenage.h"\
+	"..\..\milenage\rijndael.h"\
+	
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\milenage\rijndael.c
+
+!IF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Release"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Debug"
+
+DEP_CPP_RIJND=\
+	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
+	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
+	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
+	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
+	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
+	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
+	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
+	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
+	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
+	"..\..\..\pjlib\include\pj\compat\size_t.h"\
+	"..\..\..\pjlib\include\pj\config.h"\
+	"..\..\..\pjlib\include\pj\config_site.h"\
+	"..\..\..\pjlib\include\pj\config_site_sample.h"\
+	"..\..\..\pjlib\include\pj\types.h"\
+	
+
+!ENDIF 
+
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\milenage\milenage.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\milenage\rijndael.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj
new file mode 100644
index 0000000000..c0f63e5a7e
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj
@@ -0,0 +1,2888 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="libmilenage"
+	ProjectGUID="{4BF51C21-5A30-423B-82FE-1ED410E5769D}"
+	RootNamespace="libmilenage"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="Windows Mobile 6 Standard SDK (ARMV4I)"
+		/>
+		<Platform
+			Name="Windows Mobile 6 Professional SDK (ARMV4I)"
+		/>
+		<Platform
+			Name="Pocket PC 2003 (ARMV4)"
+		/>
+		<Platform
+			Name="Smartphone 2003 (ARMV4)"
+		/>
+		<Platform
+			Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+		/>
+		<Platform
+			Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="2"

+			ConfigurationType="4"
+			UseOfMFC="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="2"

+			ConfigurationType="4"
+			UseOfMFC="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Win32"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="2"

+			ConfigurationType="4"
+			UseOfMFC="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Win32"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="2"

+			ConfigurationType="4"
+			UseOfMFC="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Win32"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="2"

+			ConfigurationType="4"
+			UseOfMFC="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Win32"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="2"

+			ConfigurationType="4"
+			UseOfMFC="0"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Pocket PC 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Pocket PC 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Pocket PC 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Smartphone 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Smartphone 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Smartphone 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Smartphone 2003 (ARMV4)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
+			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

+			ATLMinimizesCRunTimeLibraryUsage="false"

+			CharacterSet="1"

+			ConfigurationType="4"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="_LIB;"

+				ExecutionBucket="7"
+				AdditionalIncludeDirectories="../../../pjlib/include"
+				PrecompiledHeaderFile=""
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCCodeSignTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+			<DeploymentTool
+				ForceDirty="-1"
+				RemoteDirectory=""
+				RegisterOutput="0"
+				AdditionalFiles=""
+			/>
+			<DebuggerTool
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="..\..\milenage\milenage.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug-Static|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release-Dynamic|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug-Dynamic|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release-Static|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\..\milenage\rijndael.c"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug-Static|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release-Dynamic|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug-Dynamic|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release-Static|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="..\..\milenage\milenage.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\milenage\rijndael.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/sflphone-common/libs/pjproject/third_party/build/portaudio/os-auto.mak b/sflphone-common/libs/pjproject/third_party/build/portaudio/os-auto.mak
deleted file mode 100644
index 79022f6df1..0000000000
--- a/sflphone-common/libs/pjproject/third_party/build/portaudio/os-auto.mak
+++ /dev/null
@@ -1,79 +0,0 @@
-# third_party/build/portaudio/os-auto.mak.  Generated from os-auto.mak.in by configure.
-
-# Define the desired sound device backend
-# Valid values are:
-#   - pa_unix:	    	PortAudio on Unix (OSS or ALSA)
-#   - pa_darwinos:  	PortAudio on MacOSX (CoreAudio)
-#   - pa_old_darwinos:  PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
-#   - pa_win32:	    	PortAudio on Win32 (WMME)
-#
-# There are other values below, but these are handled by PJMEDIA's Makefile
-#   - ds:	    	Win32 DirectSound (dsound.c)
-#   - null:	    	Null sound device (nullsound.c)
-AC_PJMEDIA_SND=pa_unix
-
-# For Unix, specify if ALSA should be supported
-AC_PA_USE_ALSA=1
-
-# For Unix, specify if OSS should be supported
-AC_PA_USE_OSS=1
-
-# Additional PortAudio CFLAGS are in  -DHAVE_SYS_SOUNDCARD_H -DHAVE_LINUX_SOUNDCARD_H -DPA_LITTLE_ENDIAN
-
-
-#
-# PortAudio on Unix
-#
-ifeq ($(AC_PJMEDIA_SND),pa_unix)
-# Host APIs and utils
-export PORTAUDIO_OBJS += pa_unix_hostapis.o pa_unix_util.o
-
-# Include ALSA?
-ifeq ($(AC_PA_USE_ALSA),1)
-export CFLAGS += -DPA_USE_ALSA=1
-export PORTAUDIO_OBJS += pa_linux_alsa.o
-endif
-
-export CFLAGS +=  -DHAVE_SYS_SOUNDCARD_H -DHAVE_LINUX_SOUNDCARD_H -DPA_LITTLE_ENDIAN
-endif
-
-# Include OSS?
-ifeq ($(AC_PA_USE_OSS),1)
-export CFLAGS += -DPA_USE_OSS=1
-export PORTAUDIO_OBJS += pa_unix_oss.o
-endif
-
-#
-# PortAudio on MacOS X (using current PortAudio)
-#
-ifeq ($(AC_PJMEDIA_SND),pa_darwinos)
-export PORTAUDIO_OBJS +=pa_mac_hostapis.o \
-			pa_unix_util.o \
-			pa_mac_core.o \
-			pa_mac_core_blocking.o \
-			pa_mac_core_utilities.o \
-			pa_ringbuffer.o
-export CFLAGS += -DPA_USE_COREAUDIO=1
-export CFLAGS +=  -DHAVE_SYS_SOUNDCARD_H -DHAVE_LINUX_SOUNDCARD_H -DPA_LITTLE_ENDIAN
-endif
-
-#
-# PortAudio on MacOS X (using old PortAudio, for MacOS X 10.2.x)
-#
-ifeq ($(AC_PJMEDIA_SND),pa_old_darwinos)
-export PORTAUDIO_OBJS +=pa_mac_hostapis.o \
-			pa_unix_util.o \
-			pa_mac_core_old.o 
-export CFLAGS += -DPA_USE_COREAUDIO=1
-export CFLAGS +=  -DHAVE_SYS_SOUNDCARD_H -DHAVE_LINUX_SOUNDCARD_H -DPA_LITTLE_ENDIAN
-endif
-
-#
-#
-# PortAudio on Win32 (WMME)
-#
-ifeq ($(AC_PJMEDIA_SND),pa_win32)
-export PORTAUDIO_OBJS += pa_win_hostapis.o pa_win_util.o \
-		       pa_win_wmme.o pa_win_waveformat.o
-export CFLAGS += -DPA_NO_ASIO -DPA_NO_DS
-endif
diff --git a/sflphone-common/libs/pjproject/third_party/build/speex/config.h b/sflphone-common/libs/pjproject/third_party/build/speex/config.h
index e04c40be4f..ba7be7a6e2 100644
--- a/sflphone-common/libs/pjproject/third_party/build/speex/config.h
+++ b/sflphone-common/libs/pjproject/third_party/build/speex/config.h
@@ -4,7 +4,7 @@
 #if !defined(PJ_HAS_FLOATING_POINT) || PJ_HAS_FLOATING_POINT==0
 #   define FIXED_POINT
 #   define USE_KISS_FFT
-#else
+#else 
 #   define FLOATING_POINT
 #   define USE_SMALLFT
 #endif
@@ -12,7 +12,7 @@
 #define EXPORT
 
 #if (defined(PJ_WIN32) && PJ_WIN32!=0) || \
-    (defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE != 0)
+    (defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE != 0) 
 #   include "../../speex/win32/config.h"
 #else
 #define inline __inline
diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c
index 8c6e71dcbf..028d06fe96 100644
--- a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c
+++ b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c
@@ -1135,7 +1135,7 @@ LIBG7221_DEF(Word16) norm_s (Word16 var1)
     }
     else
     {
-        if (var1 == (UWord16)0xffff)
+        if ((UWord16)var1 == (UWord16)0xffff)
         {
             var_out = 15;
         }
diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h
index 8eba815ec6..d6906237b1 100644
--- a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h
+++ b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h
@@ -99,7 +99,7 @@ PJ_INLINE(Word16) saturate (Word32 L_var1)
     if (val16 == L_var1)
 	return val16;
 
-    if (val16 > MAX_16)
+    if (L_var1 > MAX_16)
         return MAX_16;
     return MIN_16;
 }
diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/config.h b/sflphone-common/libs/pjproject/third_party/g7221/common/config.h
index 925a1dae53..4faec787d7 100644
--- a/sflphone-common/libs/pjproject/third_party/g7221/common/config.h
+++ b/sflphone-common/libs/pjproject/third_party/g7221/common/config.h
@@ -4,12 +4,15 @@
 #include <pj/config.h>
 
 /**
- * Expand basic operation functions as inline.
+ * Expand all basic operation functions as inline. Even if this is set to
+ * zero, some critical functions would still be expanded as inline. Note
+ * also that enabling this may generate some warning messages about functions
+ * not being referenced (with gcc).
  *
- * Default: 1 (yes)
+ * Default: 0 (no)
  */
 #ifndef PJMEDIA_LIBG7221_FUNCS_INLINED
-#   define PJMEDIA_LIBG7221_FUNCS_INLINED   1
+#   define PJMEDIA_LIBG7221_FUNCS_INLINED   0
 #endif
 
 /* Declare/define a function that may be expanded as inline. */
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c b/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c
new file mode 100644
index 0000000000..80d72d917d
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c
@@ -0,0 +1,114 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       FrameClassify.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "iLBC_define.h"
+
+   /*---------------------------------------------------------------*
+    *  Classification of subframes to localize start state
+    *--------------------------------------------------------------*/
+
+   int FrameClassify(      /* index to the max-energy sub-frame */
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i/o) the encoder state structure */
+       float *residual     /* (i) lpc residual signal */
+   ) {
+       float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp;
+       int n, l, max_ssqEn_n;
+       const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9,
+           (float)1.0,(float)0.9,(float)0.8};
+       const float sampEn_win[5]={(float)1.0/(float)6.0,
+           (float)2.0/(float)6.0, (float)3.0/(float)6.0,
+           (float)4.0/(float)6.0, (float)5.0/(float)6.0};
+
+       /* init the front and back energies to zero */
+
+       memset(fssqEn, 0, NSUB_MAX*sizeof(float));
+       memset(bssqEn, 0, NSUB_MAX*sizeof(float));
+
+       /* Calculate front of first seqence */
+
+       n=0;
+       pp=residual;
+       for (l=0; l<5; l++) {
+           fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
+           pp++;
+       }
+       for (l=5; l<SUBL; l++) {
+
+
+
+
+
+           fssqEn[n] += (*pp) * (*pp);
+           pp++;
+       }
+
+       /* Calculate front and back of all middle sequences */
+
+       for (n=1; n<iLBCenc_inst->nsub-1; n++) {
+           pp=residual+n*SUBL;
+           for (l=0; l<5; l++) {
+               fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
+               bssqEn[n] += (*pp) * (*pp);
+               pp++;
+           }
+           for (l=5; l<SUBL-5; l++) {
+               fssqEn[n] += (*pp) * (*pp);
+               bssqEn[n] += (*pp) * (*pp);
+               pp++;
+           }
+           for (l=SUBL-5; l<SUBL; l++) {
+               fssqEn[n] += (*pp) * (*pp);
+               bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
+               pp++;
+           }
+       }
+
+       /* Calculate back of last seqence */
+
+       n=iLBCenc_inst->nsub-1;
+       pp=residual+n*SUBL;
+       for (l=0; l<SUBL-5; l++) {
+           bssqEn[n] += (*pp) * (*pp);
+           pp++;
+       }
+       for (l=SUBL-5; l<SUBL; l++) {
+           bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
+           pp++;
+       }
+
+       /* find the index to the weighted 80 sample with
+          most energy */
+
+       if (iLBCenc_inst->mode==20) l=1;
+       else                        l=0;
+
+       max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l];
+       max_ssqEn_n=1;
+       for (n=2; n<iLBCenc_inst->nsub; n++) {
+
+
+
+
+
+
+           l++;
+           if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) {
+               max_ssqEn=(fssqEn[n-1]+bssqEn[n]) *
+                               ssqEn_win[l];
+               max_ssqEn_n=n;
+           }
+       }
+
+       return max_ssqEn_n;
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h b/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h
new file mode 100644
index 0000000000..018ddbe5da
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h
@@ -0,0 +1,27 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       FrameClassify.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_FRAMECLASSIFY_H
+   #define __iLBC_FRAMECLASSIFY_H
+
+   int FrameClassify(      /* index to the max-energy sub-frame */
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i/o) the encoder state structure */
+       float *residual     /* (i) lpc residual signal */
+   );
+
+
+
+
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c b/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c
new file mode 100644
index 0000000000..81bab90485
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c
@@ -0,0 +1,158 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       LPC_decode.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <string.h>
+
+   #include "helpfun.h"
+   #include "lsf.h"
+   #include "iLBC_define.h"
+   #include "constants.h"
+
+   /*---------------------------------------------------------------*
+    *  interpolation of lsf coefficients for the decoder
+    *--------------------------------------------------------------*/
+
+   void LSFinterpolate2a_dec(
+       float *a,           /* (o) lpc coefficients for a sub-frame */
+       float *lsf1,    /* (i) first lsf coefficient vector */
+       float *lsf2,    /* (i) second lsf coefficient vector */
+       float coef,         /* (i) interpolation weight */
+       int length          /* (i) length of lsf vectors */
+   ){
+       float  lsftmp[LPC_FILTERORDER];
+
+       interpolate(lsftmp, lsf1, lsf2, coef, length);
+       lsf2a(a, lsftmp);
+   }
+
+   /*---------------------------------------------------------------*
+    *  obtain dequantized lsf coefficients from quantization index
+    *--------------------------------------------------------------*/
+
+   void SimplelsfDEQ(
+       float *lsfdeq,    /* (o) dequantized lsf coefficients */
+       int *index,         /* (i) quantization index */
+       int lpc_n           /* (i) number of LPCs */
+   ){
+       int i, j, pos, cb_pos;
+
+
+
+
+
+       /* decode first LSF */
+
+       pos = 0;
+       cb_pos = 0;
+       for (i = 0; i < LSF_NSPLIT; i++) {
+           for (j = 0; j < dim_lsfCbTbl[i]; j++) {
+               lsfdeq[pos + j] = lsfCbTbl[cb_pos +
+                   (long)(index[i])*dim_lsfCbTbl[i] + j];
+           }
+           pos += dim_lsfCbTbl[i];
+           cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i];
+       }
+
+       if (lpc_n>1) {
+
+           /* decode last LSF */
+
+           pos = 0;
+           cb_pos = 0;
+           for (i = 0; i < LSF_NSPLIT; i++) {
+               for (j = 0; j < dim_lsfCbTbl[i]; j++) {
+                   lsfdeq[LPC_FILTERORDER + pos + j] =
+                       lsfCbTbl[cb_pos +
+                       (long)(index[LSF_NSPLIT + i])*
+                       dim_lsfCbTbl[i] + j];
+               }
+               pos += dim_lsfCbTbl[i];
+               cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i];
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  obtain synthesis and weighting filters form lsf coefficients
+    *---------------------------------------------------------------*/
+
+   void DecoderInterpolateLSF(
+       float *syntdenum, /* (o) synthesis filter coefficients */
+       float *weightdenum, /* (o) weighting denumerator
+                                  coefficients */
+       float *lsfdeq,       /* (i) dequantized lsf coefficients */
+       int length,         /* (i) length of lsf coefficient vector */
+       iLBC_Dec_Inst_t *iLBCdec_inst
+                           /* (i) the decoder state structure */
+   ){
+       int    i, pos, lp_length;
+       float  lp[LPC_FILTERORDER + 1], *lsfdeq2;
+
+
+
+
+
+
+       lsfdeq2 = lsfdeq + length;
+       lp_length = length + 1;
+
+       if (iLBCdec_inst->mode==30) {
+           /* sub-frame 1: Interpolation between old and first */
+
+           LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, lsfdeq,
+               lsf_weightTbl_30ms[0], length);
+           memcpy(syntdenum,lp,lp_length*sizeof(float));
+           bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM,
+               lp_length);
+
+           /* sub-frames 2 to 6: interpolation between first
+              and last LSF */
+
+           pos = lp_length;
+           for (i = 1; i < 6; i++) {
+               LSFinterpolate2a_dec(lp, lsfdeq, lsfdeq2,
+                   lsf_weightTbl_30ms[i], length);
+               memcpy(syntdenum + pos,lp,lp_length*sizeof(float));
+               bwexpand(weightdenum + pos, lp,
+                   LPC_CHIRP_WEIGHTDENUM, lp_length);
+               pos += lp_length;
+           }
+       }
+       else {
+           pos = 0;
+           for (i = 0; i < iLBCdec_inst->nsub; i++) {
+               LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold,
+                   lsfdeq, lsf_weightTbl_20ms[i], length);
+               memcpy(syntdenum+pos,lp,lp_length*sizeof(float));
+               bwexpand(weightdenum+pos, lp, LPC_CHIRP_WEIGHTDENUM,
+                   lp_length);
+               pos += lp_length;
+           }
+       }
+
+       /* update memory */
+
+       if (iLBCdec_inst->mode==30)
+           memcpy(iLBCdec_inst->lsfdeqold, lsfdeq2,
+                       length*sizeof(float));
+       else
+           memcpy(iLBCdec_inst->lsfdeqold, lsfdeq,
+                       length*sizeof(float));
+
+   }
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h b/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h
new file mode 100644
index 0000000000..abe1d7b3b1
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h
@@ -0,0 +1,52 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       LPC_decode.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_LPC_DECODE_H
+   #define __iLBC_LPC_DECODE_H
+
+   void LSFinterpolate2a_dec(
+       float *a,           /* (o) lpc coefficients for a sub-frame */
+       float *lsf1,    /* (i) first lsf coefficient vector */
+       float *lsf2,    /* (i) second lsf coefficient vector */
+       float coef,         /* (i) interpolation weight */
+       int length          /* (i) length of lsf vectors */
+   );
+
+   void SimplelsfDEQ(
+       float *lsfdeq,      /* (o) dequantized lsf coefficients */
+       int *index,         /* (i) quantization index */
+       int lpc_n           /* (i) number of LPCs */
+   );
+
+   void DecoderInterpolateLSF(
+       float *syntdenum,   /* (o) synthesis filter coefficients */
+       float *weightdenum, /* (o) weighting denumerator
+                                  coefficients */
+       float *lsfdeq,      /* (i) dequantized lsf coefficients */
+       int length,         /* (i) length of lsf coefficient vector */
+       iLBC_Dec_Inst_t *iLBCdec_inst
+                           /* (i) the decoder state structure */
+   );
+
+   #endif
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c b/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c
new file mode 100644
index 0000000000..19695c0fa5
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c
@@ -0,0 +1,241 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       LPCencode.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <string.h>
+
+   #include "iLBC_define.h"
+   #include "helpfun.h"
+   #include "lsf.h"
+   #include "constants.h"
+
+
+
+
+
+   /*----------------------------------------------------------------*
+    *  lpc analysis (subrutine to LPCencode)
+    *---------------------------------------------------------------*/
+
+   void SimpleAnalysis(
+       float *lsf,         /* (o) lsf coefficients */
+       float *data,    /* (i) new data vector */
+       iLBC_Enc_Inst_t *iLBCenc_inst
+                           /* (i/o) the encoder state structure */
+   ){
+       int k, is;
+       float temp[BLOCKL_MAX], lp[LPC_FILTERORDER + 1];
+       float lp2[LPC_FILTERORDER + 1];
+       float r[LPC_FILTERORDER + 1];
+
+       is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl;
+       memcpy(iLBCenc_inst->lpc_buffer+is,data,
+           iLBCenc_inst->blockl*sizeof(float));
+
+       /* No lookahead, last window is asymmetric */
+
+       for (k = 0; k < iLBCenc_inst->lpc_n; k++) {
+
+           is = LPC_LOOKBACK;
+
+           if (k < (iLBCenc_inst->lpc_n - 1)) {
+               window(temp, lpc_winTbl,
+                   iLBCenc_inst->lpc_buffer, BLOCKL_MAX);
+           } else {
+               window(temp, lpc_asymwinTbl,
+                   iLBCenc_inst->lpc_buffer + is, BLOCKL_MAX);
+           }
+
+           autocorr(r, temp, BLOCKL_MAX, LPC_FILTERORDER);
+           window(r, r, lpc_lagwinTbl, LPC_FILTERORDER + 1);
+
+           levdurb(lp, temp, r, LPC_FILTERORDER);
+           bwexpand(lp2, lp, LPC_CHIRP_SYNTDENUM, LPC_FILTERORDER+1);
+
+           a2lsf(lsf + k*LPC_FILTERORDER, lp2);
+       }
+       is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl;
+       memmove(iLBCenc_inst->lpc_buffer,
+           iLBCenc_inst->lpc_buffer+LPC_LOOKBACK+BLOCKL_MAX-is,
+           is*sizeof(float));
+   }
+
+   /*----------------------------------------------------------------*
+
+
+
+
+
+    *  lsf interpolator and conversion from lsf to a coefficients
+    *  (subrutine to SimpleInterpolateLSF)
+    *---------------------------------------------------------------*/
+
+   void LSFinterpolate2a_enc(
+       float *a,       /* (o) lpc coefficients */
+       float *lsf1,/* (i) first set of lsf coefficients */
+       float *lsf2,/* (i) second set of lsf coefficients */
+       float coef,     /* (i) weighting coefficient to use between
+                              lsf1 and lsf2 */
+       long length      /* (i) length of coefficient vectors */
+   ){
+       float  lsftmp[LPC_FILTERORDER];
+
+       interpolate(lsftmp, lsf1, lsf2, coef, length);
+       lsf2a(a, lsftmp);
+   }
+
+   /*----------------------------------------------------------------*
+    *  lsf interpolator (subrutine to LPCencode)
+    *---------------------------------------------------------------*/
+
+   void SimpleInterpolateLSF(
+       float *syntdenum,   /* (o) the synthesis filter denominator
+                                  resulting from the quantized
+                                  interpolated lsf */
+       float *weightdenum, /* (o) the weighting filter denominator
+                                  resulting from the unquantized
+                                  interpolated lsf */
+       float *lsf,         /* (i) the unquantized lsf coefficients */
+       float *lsfdeq,      /* (i) the dequantized lsf coefficients */
+       float *lsfold,      /* (i) the unquantized lsf coefficients of
+                                  the previous signal frame */
+       float *lsfdeqold, /* (i) the dequantized lsf coefficients of
+                                  the previous signal frame */
+       int length,         /* (i) should equate LPC_FILTERORDER */
+       iLBC_Enc_Inst_t *iLBCenc_inst
+                           /* (i/o) the encoder state structure */
+   ){
+       int    i, pos, lp_length;
+       float  lp[LPC_FILTERORDER + 1], *lsf2, *lsfdeq2;
+
+       lsf2 = lsf + length;
+       lsfdeq2 = lsfdeq + length;
+       lp_length = length + 1;
+
+       if (iLBCenc_inst->mode==30) {
+           /* sub-frame 1: Interpolation between old and first
+
+
+
+
+
+              set of lsf coefficients */
+
+           LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq,
+               lsf_weightTbl_30ms[0], length);
+           memcpy(syntdenum,lp,lp_length*sizeof(float));
+           LSFinterpolate2a_enc(lp, lsfold, lsf,
+               lsf_weightTbl_30ms[0], length);
+           bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, lp_length);
+
+           /* sub-frame 2 to 6: Interpolation between first
+              and second set of lsf coefficients */
+
+           pos = lp_length;
+           for (i = 1; i < iLBCenc_inst->nsub; i++) {
+               LSFinterpolate2a_enc(lp, lsfdeq, lsfdeq2,
+                   lsf_weightTbl_30ms[i], length);
+               memcpy(syntdenum + pos,lp,lp_length*sizeof(float));
+
+               LSFinterpolate2a_enc(lp, lsf, lsf2,
+                   lsf_weightTbl_30ms[i], length);
+               bwexpand(weightdenum + pos, lp,
+                   LPC_CHIRP_WEIGHTDENUM, lp_length);
+               pos += lp_length;
+           }
+       }
+       else {
+           pos = 0;
+           for (i = 0; i < iLBCenc_inst->nsub; i++) {
+               LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq,
+                   lsf_weightTbl_20ms[i], length);
+               memcpy(syntdenum+pos,lp,lp_length*sizeof(float));
+               LSFinterpolate2a_enc(lp, lsfold, lsf,
+                   lsf_weightTbl_20ms[i], length);
+               bwexpand(weightdenum+pos, lp,
+                   LPC_CHIRP_WEIGHTDENUM, lp_length);
+               pos += lp_length;
+           }
+       }
+
+       /* update memory */
+
+       if (iLBCenc_inst->mode==30) {
+           memcpy(lsfold, lsf2, length*sizeof(float));
+           memcpy(lsfdeqold, lsfdeq2, length*sizeof(float));
+       }
+       else {
+           memcpy(lsfold, lsf, length*sizeof(float));
+           memcpy(lsfdeqold, lsfdeq, length*sizeof(float));
+
+
+
+
+
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  lsf quantizer (subrutine to LPCencode)
+    *---------------------------------------------------------------*/
+
+   void SimplelsfQ(
+       float *lsfdeq,    /* (o) dequantized lsf coefficients
+                              (dimension FILTERORDER) */
+       int *index,     /* (o) quantization index */
+       float *lsf,      /* (i) the lsf coefficient vector to be
+                              quantized (dimension FILTERORDER ) */
+       int lpc_n     /* (i) number of lsf sets to quantize */
+   ){
+       /* Quantize first LSF with memoryless split VQ */
+       SplitVQ(lsfdeq, index, lsf, lsfCbTbl, LSF_NSPLIT,
+           dim_lsfCbTbl, size_lsfCbTbl);
+
+       if (lpc_n==2) {
+           /* Quantize second LSF with memoryless split VQ */
+           SplitVQ(lsfdeq + LPC_FILTERORDER, index + LSF_NSPLIT,
+               lsf + LPC_FILTERORDER, lsfCbTbl, LSF_NSPLIT,
+               dim_lsfCbTbl, size_lsfCbTbl);
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  lpc encoder
+    *---------------------------------------------------------------*/
+
+   void LPCencode(
+       float *syntdenum, /* (i/o) synthesis filter coefficients
+                                  before/after encoding */
+       float *weightdenum, /* (i/o) weighting denumerator
+                                  coefficients before/after
+                                  encoding */
+       int *lsf_index,     /* (o) lsf quantization index */
+       float *data,    /* (i) lsf coefficients to quantize */
+       iLBC_Enc_Inst_t *iLBCenc_inst
+                           /* (i/o) the encoder state structure */
+   ){
+       float lsf[LPC_FILTERORDER * LPC_N_MAX];
+       float lsfdeq[LPC_FILTERORDER * LPC_N_MAX];
+       int change=0;
+
+       SimpleAnalysis(lsf, data, iLBCenc_inst);
+       SimplelsfQ(lsfdeq, lsf_index, lsf, iLBCenc_inst->lpc_n);
+
+
+
+
+
+       change=LSF_check(lsfdeq, LPC_FILTERORDER, iLBCenc_inst->lpc_n);
+       SimpleInterpolateLSF(syntdenum, weightdenum,
+           lsf, lsfdeq, iLBCenc_inst->lsfold,
+           iLBCenc_inst->lsfdeqold, LPC_FILTERORDER, iLBCenc_inst);
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h b/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h
new file mode 100644
index 0000000000..39a9b04037
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h
@@ -0,0 +1,28 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       LPCencode.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_LPCENCOD_H
+   #define __iLBC_LPCENCOD_H
+
+   void LPCencode(
+       float *syntdenum,   /* (i/o) synthesis filter coefficients
+                                  before/after encoding */
+       float *weightdenum, /* (i/o) weighting denumerator coefficients
+                                  before/after encoding */
+       int *lsf_index,     /* (o) lsf quantization index */
+       float *data,    /* (i) lsf coefficients to quantize */
+       iLBC_Enc_Inst_t *iLBCenc_inst
+                           /* (i/o) the encoder state structure */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c b/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c
new file mode 100644
index 0000000000..1d3e65fa63
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c
@@ -0,0 +1,86 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       StateConstructW.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <string.h>
+
+   #include "iLBC_define.h"
+   #include "constants.h"
+   #include "filter.h"
+
+   /*----------------------------------------------------------------*
+    *  decoding of the start state
+    *---------------------------------------------------------------*/
+
+   void StateConstructW(
+       int idxForMax,      /* (i) 6-bit index for the quantization of
+                                  max amplitude */
+       int *idxVec,    /* (i) vector of quantization indexes */
+       float *syntDenum,   /* (i) synthesis filter denumerator */
+
+
+
+
+
+       float *out,         /* (o) the decoded state vector */
+       int len             /* (i) length of a state vector */
+   ){
+       float maxVal, tmpbuf[LPC_FILTERORDER+2*STATE_LEN], *tmp,
+           numerator[LPC_FILTERORDER+1];
+       float foutbuf[LPC_FILTERORDER+2*STATE_LEN], *fout;
+       int k,tmpi;
+
+       /* decoding of the maximum value */
+
+       maxVal = state_frgqTbl[idxForMax];
+       maxVal = (float)pow(10,maxVal)/(float)4.5;
+
+       /* initialization of buffers and coefficients */
+
+       memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float));
+       memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float));
+       for (k=0; k<LPC_FILTERORDER; k++) {
+           numerator[k]=syntDenum[LPC_FILTERORDER-k];
+       }
+       numerator[LPC_FILTERORDER]=syntDenum[0];
+       tmp = &tmpbuf[LPC_FILTERORDER];
+       fout = &foutbuf[LPC_FILTERORDER];
+
+       /* decoding of the sample values */
+
+       for (k=0; k<len; k++) {
+           tmpi = len-1-k;
+           /* maxVal = 1/scal */
+           tmp[k] = maxVal*state_sq3Tbl[idxVec[tmpi]];
+       }
+
+       /* circular convolution with all-pass filter */
+
+       memset(tmp+len, 0, len*sizeof(float));
+       ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,
+           LPC_FILTERORDER, fout);
+       for (k=0;k<len;k++) {
+           out[k] = fout[len-1-k]+fout[2*len-1-k];
+       }
+   }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h b/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h
new file mode 100644
index 0000000000..08f93d2815
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h
@@ -0,0 +1,31 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       StateConstructW.h
+
+
+
+
+
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_STATECONSTRUCTW_H
+   #define __iLBC_STATECONSTRUCTW_H
+
+   void StateConstructW(
+       int idxForMax,      /* (i) 6-bit index for the quantization of
+                                  max amplitude */
+       int *idxVec,    /* (i) vector of quantization indexes */
+       float *syntDenum,   /* (i) synthesis filter denumerator */
+       float *out,         /* (o) the decoded state vector */
+       int len             /* (i) length of a state vector */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c b/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c
new file mode 100644
index 0000000000..1eeee936c1
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c
@@ -0,0 +1,211 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       StateSearchW.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <string.h>
+
+   #include "iLBC_define.h"
+   #include "constants.h"
+   #include "filter.h"
+   #include "helpfun.h"
+
+   /*----------------------------------------------------------------*
+    *  predictive noise shaping encoding of scaled start state
+    *  (subrutine for StateSearchW)
+    *---------------------------------------------------------------*/
+
+   void AbsQuantW(
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i) Encoder instance */
+       float *in,          /* (i) vector to encode */
+       float *syntDenum,   /* (i) denominator of synthesis filter */
+       float *weightDenum, /* (i) denominator of weighting filter */
+       int *out,           /* (o) vector of quantizer indexes */
+       int len,        /* (i) length of vector to encode and
+                                  vector of quantizer indexes */
+       int state_first     /* (i) position of start state in the
+                                  80 vec */
+   ){
+       float *syntOut;
+       float syntOutBuf[LPC_FILTERORDER+STATE_SHORT_LEN_30MS];
+       float toQ, xq;
+       int n;
+       int index;
+
+       /* initialization of buffer for filtering */
+
+       memset(syntOutBuf, 0, LPC_FILTERORDER*sizeof(float));
+
+
+
+
+
+
+       /* initialization of pointer for filtering */
+
+       syntOut = &syntOutBuf[LPC_FILTERORDER];
+
+       /* synthesis and weighting filters on input */
+
+       if (state_first) {
+           AllPoleFilter (in, weightDenum, SUBL, LPC_FILTERORDER);
+       } else {
+           AllPoleFilter (in, weightDenum,
+               iLBCenc_inst->state_short_len-SUBL,
+               LPC_FILTERORDER);
+       }
+
+       /* encoding loop */
+
+       for (n=0; n<len; n++) {
+
+           /* time update of filter coefficients */
+
+           if ((state_first)&&(n==SUBL)){
+               syntDenum += (LPC_FILTERORDER+1);
+               weightDenum += (LPC_FILTERORDER+1);
+
+               /* synthesis and weighting filters on input */
+               AllPoleFilter (&in[n], weightDenum, len-n,
+                   LPC_FILTERORDER);
+
+           } else if ((state_first==0)&&
+               (n==(iLBCenc_inst->state_short_len-SUBL))) {
+               syntDenum += (LPC_FILTERORDER+1);
+               weightDenum += (LPC_FILTERORDER+1);
+
+               /* synthesis and weighting filters on input */
+               AllPoleFilter (&in[n], weightDenum, len-n,
+                   LPC_FILTERORDER);
+
+           }
+
+           /* prediction of synthesized and weighted input */
+
+           syntOut[n] = 0.0;
+           AllPoleFilter (&syntOut[n], weightDenum, 1,
+               LPC_FILTERORDER);
+
+           /* quantization */
+
+           toQ = in[n]-syntOut[n];
+
+
+
+
+
+           sort_sq(&xq, &index, toQ, state_sq3Tbl, 8);
+           out[n]=index;
+           syntOut[n] = state_sq3Tbl[out[n]];
+
+           /* update of the prediction filter */
+
+           AllPoleFilter(&syntOut[n], weightDenum, 1,
+               LPC_FILTERORDER);
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  encoding of start state
+    *---------------------------------------------------------------*/
+
+   void StateSearchW(
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i) Encoder instance */
+       float *residual,/* (i) target residual vector */
+       float *syntDenum,   /* (i) lpc synthesis filter */
+       float *weightDenum, /* (i) weighting filter denuminator */
+       int *idxForMax,     /* (o) quantizer index for maximum
+                                  amplitude */
+       int *idxVec,    /* (o) vector of quantization indexes */
+       int len,        /* (i) length of all vectors */
+       int state_first     /* (i) position of start state in the
+                                  80 vec */
+   ){
+       float dtmp, maxVal;
+       float tmpbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS];
+       float *tmp, numerator[1+LPC_FILTERORDER];
+       float foutbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS], *fout;
+       int k;
+       float qmax, scal;
+
+       /* initialization of buffers and filter coefficients */
+
+       memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float));
+       memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float));
+       for (k=0; k<LPC_FILTERORDER; k++) {
+           numerator[k]=syntDenum[LPC_FILTERORDER-k];
+       }
+       numerator[LPC_FILTERORDER]=syntDenum[0];
+       tmp = &tmpbuf[LPC_FILTERORDER];
+       fout = &foutbuf[LPC_FILTERORDER];
+
+       /* circular convolution with the all-pass filter */
+
+
+
+
+
+
+       memcpy(tmp, residual, len*sizeof(float));
+       memset(tmp+len, 0, len*sizeof(float));
+       ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,
+           LPC_FILTERORDER, fout);
+       for (k=0; k<len; k++) {
+           fout[k] += fout[k+len];
+       }
+
+       /* identification of the maximum amplitude value */
+
+       maxVal = fout[0];
+       for (k=1; k<len; k++) {
+
+           if (fout[k]*fout[k] > maxVal*maxVal){
+               maxVal = fout[k];
+           }
+       }
+       maxVal=(float)fabs(maxVal);
+
+       /* encoding of the maximum amplitude value */
+
+       if (maxVal < 10.0) {
+           maxVal = 10.0;
+       }
+       maxVal = (float)log10(maxVal);
+       sort_sq(&dtmp, idxForMax, maxVal, state_frgqTbl, 64);
+
+       /* decoding of the maximum amplitude representation value,
+          and corresponding scaling of start state */
+
+       maxVal=state_frgqTbl[*idxForMax];
+       qmax = (float)pow(10,maxVal);
+       scal = (float)(4.5)/qmax;
+       for (k=0; k<len; k++){
+           fout[k] *= scal;
+       }
+
+       /* predictive noise shaping encoding of scaled start state */
+
+       AbsQuantW(iLBCenc_inst, fout,syntDenum,
+           weightDenum,idxVec, len, state_first);
+   }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h b/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h
new file mode 100644
index 0000000000..9036daa892
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h
@@ -0,0 +1,52 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       StateSearchW.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_STATESEARCHW_H
+   #define __iLBC_STATESEARCHW_H
+
+   void AbsQuantW(
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i) Encoder instance */
+       float *in,          /* (i) vector to encode */
+       float *syntDenum,   /* (i) denominator of synthesis filter */
+       float *weightDenum, /* (i) denominator of weighting filter */
+       int *out,           /* (o) vector of quantizer indexes */
+       int len,        /* (i) length of vector to encode and
+                                  vector of quantizer indexes */
+       int state_first     /* (i) position of start state in the
+                                  80 vec */
+   );
+
+   void StateSearchW(
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i) Encoder instance */
+       float *residual,/* (i) target residual vector */
+       float *syntDenum,   /* (i) lpc synthesis filter */
+       float *weightDenum, /* (i) weighting filter denuminator */
+       int *idxForMax,     /* (o) quantizer index for maximum
+                                  amplitude */
+       int *idxVec,    /* (o) vector of quantization indexes */
+       int len,        /* (i) length of all vectors */
+       int state_first     /* (i) position of start state in the
+                                  80 vec */
+   );
+
+
+   #endif
+
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c b/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c
new file mode 100644
index 0000000000..c161f98a5b
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c
@@ -0,0 +1,72 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       anaFilter.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <string.h>
+   #include "iLBC_define.h"
+
+   /*----------------------------------------------------------------*
+    *  LP analysis filter.
+    *---------------------------------------------------------------*/
+
+   void anaFilter(
+       float *In,  /* (i) Signal to be filtered */
+       float *a,   /* (i) LP parameters */
+       int len,/* (i) Length of signal */
+       float *Out, /* (o) Filtered signal */
+       float *mem  /* (i/o) Filter state */
+   ){
+       int i, j;
+       float *po, *pi, *pm, *pa;
+
+       po = Out;
+
+       /* Filter first part using memory from past */
+
+       for (i=0; i<LPC_FILTERORDER; i++) {
+           pi = &In[i];
+           pm = &mem[LPC_FILTERORDER-1];
+           pa = a;
+           *po=0.0;
+
+
+
+
+
+           for (j=0; j<=i; j++) {
+               *po+=(*pa++)*(*pi--);
+           }
+           for (j=i+1; j<LPC_FILTERORDER+1; j++) {
+
+               *po+=(*pa++)*(*pm--);
+           }
+           po++;
+       }
+
+       /* Filter last part where the state is entirely
+          in the input vector */
+
+       for (i=LPC_FILTERORDER; i<len; i++) {
+           pi = &In[i];
+           pa = a;
+           *po=0.0;
+           for (j=0; j<LPC_FILTERORDER+1; j++) {
+               *po+=(*pa++)*(*pi--);
+           }
+           po++;
+       }
+
+       /* Update state vector */
+
+       memcpy(mem, &In[len-LPC_FILTERORDER],
+           LPC_FILTERORDER*sizeof(float));
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h b/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h
new file mode 100644
index 0000000000..91367f95e0
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h
@@ -0,0 +1,30 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       anaFilter.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_ANAFILTER_H
+   #define __iLBC_ANAFILTER_H
+
+   void anaFilter(
+
+
+
+
+
+       float *In,  /* (i) Signal to be filtered */
+       float *a,   /* (i) LP parameters */
+       int len,/* (i) Length of signal */
+       float *Out, /* (o) Filtered signal */
+       float *mem  /* (i/o) Filter state */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/constants.c b/sflphone-common/libs/pjproject/third_party/ilbc/constants.c
new file mode 100644
index 0000000000..d43dac4d4e
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/constants.c
@@ -0,0 +1,770 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       constants.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "iLBC_define.h"
+
+   /* ULP bit allocation */
+
+       /* 20 ms frame */
+
+   const iLBC_ULP_Inst_t ULP_20msTbl = {
+       /* LSF */
+       {   {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0},
+           {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
+       /* Start state location, gain and samples */
+       {2,0,0,0,0},
+       {1,0,0,0,0},
+       {6,0,0,0,0},
+       {0,1,2,0,0},
+       /* extra CB index and extra CB gain */
+       {{6,0,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
+       {{2,0,3,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
+       /* CB index and CB gain */
+       {   {{7,0,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
+           {{0,0,8,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
+           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
+           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}}},
+       {   {{1,2,2,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
+           {{1,1,3,0,0}, {0,2,2,0,0}, {0,0,3,0,0}},
+           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
+           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}}}
+   };
+
+       /* 30 ms frame */
+
+   const iLBC_ULP_Inst_t ULP_30msTbl = {
+       /* LSF */
+
+
+
+
+
+       {   {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0},
+           {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0}},
+       /* Start state location, gain and samples */
+       {3,0,0,0,0},
+       {1,0,0,0,0},
+       {6,0,0,0,0},
+       {0,1,2,0,0},
+       /* extra CB index and extra CB gain */
+       {{4,2,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
+       {{1,1,3,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
+       /* CB index and CB gain */
+       {   {{6,1,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
+           {{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
+           {{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
+           {{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}}},
+       {   {{1,2,2,0,0}, {1,2,1,0,0}, {0,0,3,0,0}},
+           {{0,2,3,0,0}, {0,2,2,0,0}, {0,0,3,0,0}},
+           {{0,1,4,0,0}, {0,1,3,0,0}, {0,0,3,0,0}},
+           {{0,1,4,0,0}, {0,1,3,0,0}, {0,0,3,0,0}}}
+   };
+
+   /* HP Filters */
+
+   float hpi_zero_coefsTbl[3] = {
+       (float)0.92727436, (float)-1.8544941, (float)0.92727436
+   };
+   float hpi_pole_coefsTbl[3] = {
+       (float)1.0, (float)-1.9059465, (float)0.9114024
+   };
+   float hpo_zero_coefsTbl[3] = {
+       (float)0.93980581, (float)-1.8795834, (float)0.93980581
+   };
+   float hpo_pole_coefsTbl[3] = {
+       (float)1.0, (float)-1.9330735, (float)0.93589199
+   };
+
+   /* LP Filter */
+
+   float lpFilt_coefsTbl[FILTERORDER_DS]={
+       (float)-0.066650, (float)0.125000, (float)0.316650,
+       (float)0.414063, (float)0.316650,
+       (float)0.125000, (float)-0.066650
+   };
+
+   /* State quantization tables */
+
+   float state_sq3Tbl[8] = {
+       (float)-3.719849, (float)-2.177490, (float)-1.130005,
+
+
+
+
+
+       (float)-0.309692, (float)0.444214, (float)1.329712,
+       (float)2.436279, (float)3.983887
+   };
+
+   float state_frgqTbl[64] = {
+       (float)1.000085, (float)1.071695, (float)1.140395,
+       (float)1.206868, (float)1.277188, (float)1.351503,
+       (float)1.429380, (float)1.500727, (float)1.569049,
+       (float)1.639599, (float)1.707071, (float)1.781531,
+       (float)1.840799, (float)1.901550, (float)1.956695,
+       (float)2.006750, (float)2.055474, (float)2.102787,
+       (float)2.142819, (float)2.183592, (float)2.217962,
+       (float)2.257177, (float)2.295739, (float)2.332967,
+       (float)2.369248, (float)2.402792, (float)2.435080,
+       (float)2.468598, (float)2.503394, (float)2.539284,
+       (float)2.572944, (float)2.605036, (float)2.636331,
+       (float)2.668939, (float)2.698780, (float)2.729101,
+       (float)2.759786, (float)2.789834, (float)2.818679,
+       (float)2.848074, (float)2.877470, (float)2.906899,
+       (float)2.936655, (float)2.967804, (float)3.000115,
+       (float)3.033367, (float)3.066355, (float)3.104231,
+       (float)3.141499, (float)3.183012, (float)3.222952,
+       (float)3.265433, (float)3.308441, (float)3.350823,
+       (float)3.395275, (float)3.442793, (float)3.490801,
+       (float)3.542514, (float)3.604064, (float)3.666050,
+       (float)3.740994, (float)3.830749, (float)3.938770,
+       (float)4.101764
+   };
+
+   /* CB tables */
+
+   int search_rangeTbl[5][CB_NSTAGES]={{58,58,58}, {108,44,44},
+               {108,108,108}, {108,108,108}, {108,108,108}};
+   int stMemLTbl=85;
+   int memLfTbl[NASUB_MAX]={147,147,147,147};
+
+   /* expansion filter(s) */
+
+   float cbfiltersTbl[CB_FILTERLEN]={
+       (float)-0.034180, (float)0.108887, (float)-0.184326,
+       (float)0.806152,  (float)0.713379, (float)-0.144043,
+       (float)0.083740,  (float)-0.033691
+   };
+
+   /* Gain Quantization */
+
+   float gain_sq3Tbl[8]={
+       (float)-1.000000,  (float)-0.659973,  (float)-0.330017,
+
+
+
+
+
+       (float)0.000000, (float)0.250000, (float)0.500000,
+       (float)0.750000, (float)1.00000};
+
+   float gain_sq4Tbl[16]={
+       (float)-1.049988, (float)-0.900024, (float)-0.750000,
+       (float)-0.599976, (float)-0.450012, (float)-0.299988,
+       (float)-0.150024, (float)0.000000, (float)0.150024,
+       (float)0.299988, (float)0.450012, (float)0.599976,
+       (float)0.750000, (float)0.900024, (float)1.049988,
+       (float)1.200012};
+
+   float gain_sq5Tbl[32]={
+       (float)0.037476, (float)0.075012, (float)0.112488,
+       (float)0.150024, (float)0.187500, (float)0.224976,
+       (float)0.262512, (float)0.299988, (float)0.337524,
+       (float)0.375000, (float)0.412476, (float)0.450012,
+       (float)0.487488, (float)0.525024, (float)0.562500,
+       (float)0.599976, (float)0.637512, (float)0.674988,
+       (float)0.712524, (float)0.750000, (float)0.787476,
+       (float)0.825012, (float)0.862488, (float)0.900024,
+       (float)0.937500, (float)0.974976, (float)1.012512,
+       (float)1.049988, (float)1.087524, (float)1.125000,
+       (float)1.162476, (float)1.200012};
+
+   /* Enhancer - Upsamling a factor 4 (ENH_UPS0 = 4) */
+   float polyphaserTbl[ENH_UPS0*(2*ENH_FL0+1)]={
+       (float)0.000000, (float)0.000000, (float)0.000000,
+   (float)1.000000,
+           (float)0.000000, (float)0.000000, (float)0.000000,
+       (float)0.015625, (float)-0.076904, (float)0.288330,
+   (float)0.862061,
+           (float)-0.106445, (float)0.018799, (float)-0.015625,
+       (float)0.023682, (float)-0.124268, (float)0.601563,
+   (float)0.601563,
+           (float)-0.124268, (float)0.023682, (float)-0.023682,
+       (float)0.018799, (float)-0.106445, (float)0.862061,
+   (float)0.288330,
+           (float)-0.076904, (float)0.015625, (float)-0.018799};
+
+   float enh_plocsTbl[ENH_NBLOCKS_TOT] = {(float)40.0, (float)120.0,
+               (float)200.0, (float)280.0, (float)360.0,
+               (float)440.0, (float)520.0, (float)600.0};
+
+   /* LPC analysis and quantization */
+
+   int dim_lsfCbTbl[LSF_NSPLIT] = {3, 3, 4};
+   int size_lsfCbTbl[LSF_NSPLIT] = {64,128,128};
+
+
+
+
+
+
+   float lsfmeanTbl[LPC_FILTERORDER] = {
+       (float)0.281738, (float)0.445801, (float)0.663330,
+       (float)0.962524, (float)1.251831, (float)1.533081,
+       (float)1.850586, (float)2.137817, (float)2.481445,
+       (float)2.777344};
+
+   float lsf_weightTbl_30ms[6] = {(float)(1.0/2.0), (float)1.0,
+   (float)(2.0/3.0),
+       (float)(1.0/3.0), (float)0.0, (float)0.0};
+
+   float lsf_weightTbl_20ms[4] = {(float)(3.0/4.0), (float)(2.0/4.0),
+       (float)(1.0/4.0), (float)(0.0)};
+
+   /* Hanning LPC window */
+   float lpc_winTbl[BLOCKL_MAX]={
+       (float)0.000183, (float)0.000671, (float)0.001526,
+       (float)0.002716, (float)0.004242, (float)0.006104,
+       (float)0.008301, (float)0.010834, (float)0.013702,
+       (float)0.016907, (float)0.020416, (float)0.024261,
+       (float)0.028442, (float)0.032928, (float)0.037750,
+       (float)0.042877, (float)0.048309, (float)0.054047,
+       (float)0.060089, (float)0.066437, (float)0.073090,
+       (float)0.080017, (float)0.087219, (float)0.094727,
+       (float)0.102509, (float)0.110535, (float)0.118835,
+       (float)0.127411, (float)0.136230, (float)0.145294,
+       (float)0.154602, (float)0.164154, (float)0.173920,
+       (float)0.183899, (float)0.194122, (float)0.204529,
+       (float)0.215149, (float)0.225952, (float)0.236938,
+       (float)0.248108, (float)0.259460, (float)0.270966,
+       (float)0.282654, (float)0.294464, (float)0.306396,
+       (float)0.318481, (float)0.330688, (float)0.343018,
+       (float)0.355438, (float)0.367981, (float)0.380585,
+       (float)0.393280, (float)0.406067, (float)0.418884,
+       (float)0.431763, (float)0.444702, (float)0.457672,
+       (float)0.470673, (float)0.483704, (float)0.496735,
+       (float)0.509766, (float)0.522797, (float)0.535828,
+       (float)0.548798, (float)0.561768, (float)0.574677,
+       (float)0.587524, (float)0.600342, (float)0.613068,
+       (float)0.625732, (float)0.638306, (float)0.650787,
+       (float)0.663147, (float)0.675415, (float)0.687561,
+       (float)0.699585, (float)0.711487, (float)0.723206,
+       (float)0.734802, (float)0.746216, (float)0.757477,
+       (float)0.768585, (float)0.779480, (float)0.790192,
+       (float)0.800720, (float)0.811005, (float)0.821106,
+       (float)0.830994, (float)0.840668, (float)0.850067,
+       (float)0.859253, (float)0.868225, (float)0.876892,
+       (float)0.885345, (float)0.893524, (float)0.901428,
+       (float)0.909058, (float)0.916412, (float)0.923492,
+
+
+
+
+
+       (float)0.930267, (float)0.936768, (float)0.942963,
+       (float)0.948853, (float)0.954437, (float)0.959717,
+       (float)0.964691, (float)0.969360, (float)0.973694,
+       (float)0.977692, (float)0.981384, (float)0.984741,
+       (float)0.987762, (float)0.990479, (float)0.992828,
+       (float)0.994873, (float)0.996552, (float)0.997925,
+       (float)0.998932, (float)0.999603, (float)0.999969,
+       (float)0.999969, (float)0.999603, (float)0.998932,
+       (float)0.997925, (float)0.996552, (float)0.994873,
+       (float)0.992828, (float)0.990479, (float)0.987762,
+       (float)0.984741, (float)0.981384, (float)0.977692,
+       (float)0.973694, (float)0.969360, (float)0.964691,
+       (float)0.959717, (float)0.954437, (float)0.948853,
+       (float)0.942963, (float)0.936768, (float)0.930267,
+       (float)0.923492, (float)0.916412, (float)0.909058,
+       (float)0.901428, (float)0.893524, (float)0.885345,
+       (float)0.876892, (float)0.868225, (float)0.859253,
+       (float)0.850067, (float)0.840668, (float)0.830994,
+       (float)0.821106, (float)0.811005, (float)0.800720,
+       (float)0.790192, (float)0.779480, (float)0.768585,
+       (float)0.757477, (float)0.746216, (float)0.734802,
+       (float)0.723206, (float)0.711487, (float)0.699585,
+       (float)0.687561, (float)0.675415, (float)0.663147,
+       (float)0.650787, (float)0.638306, (float)0.625732,
+       (float)0.613068, (float)0.600342, (float)0.587524,
+       (float)0.574677, (float)0.561768, (float)0.548798,
+       (float)0.535828, (float)0.522797, (float)0.509766,
+       (float)0.496735, (float)0.483704, (float)0.470673,
+       (float)0.457672, (float)0.444702, (float)0.431763,
+       (float)0.418884, (float)0.406067, (float)0.393280,
+       (float)0.380585, (float)0.367981, (float)0.355438,
+       (float)0.343018, (float)0.330688, (float)0.318481,
+       (float)0.306396, (float)0.294464, (float)0.282654,
+       (float)0.270966, (float)0.259460, (float)0.248108,
+       (float)0.236938, (float)0.225952, (float)0.215149,
+       (float)0.204529, (float)0.194122, (float)0.183899,
+       (float)0.173920, (float)0.164154, (float)0.154602,
+       (float)0.145294, (float)0.136230, (float)0.127411,
+       (float)0.118835, (float)0.110535, (float)0.102509,
+       (float)0.094727, (float)0.087219, (float)0.080017,
+       (float)0.073090, (float)0.066437, (float)0.060089,
+       (float)0.054047, (float)0.048309, (float)0.042877,
+       (float)0.037750, (float)0.032928, (float)0.028442,
+       (float)0.024261, (float)0.020416, (float)0.016907,
+       (float)0.013702, (float)0.010834, (float)0.008301,
+       (float)0.006104, (float)0.004242, (float)0.002716,
+       (float)0.001526, (float)0.000671, (float)0.000183
+   };
+
+
+
+
+
+   /* Asymmetric LPC window */
+   float lpc_asymwinTbl[BLOCKL_MAX]={
+       (float)0.000061, (float)0.000214, (float)0.000458,
+       (float)0.000824, (float)0.001282, (float)0.001831,
+       (float)0.002472, (float)0.003235, (float)0.004120,
+       (float)0.005066, (float)0.006134, (float)0.007294,
+       (float)0.008545, (float)0.009918, (float)0.011383,
+       (float)0.012939, (float)0.014587, (float)0.016357,
+       (float)0.018219, (float)0.020172, (float)0.022217,
+       (float)0.024353, (float)0.026611, (float)0.028961,
+       (float)0.031372, (float)0.033905, (float)0.036530,
+       (float)0.039276, (float)0.042084, (float)0.044983,
+       (float)0.047974, (float)0.051086, (float)0.054260,
+       (float)0.057526, (float)0.060883, (float)0.064331,
+       (float)0.067871, (float)0.071503, (float)0.075226,
+       (float)0.079010, (float)0.082916, (float)0.086884,
+       (float)0.090942, (float)0.095062, (float)0.099304,
+       (float)0.103607, (float)0.107971, (float)0.112427,
+       (float)0.116974, (float)0.121582, (float)0.126282,
+       (float)0.131073, (float)0.135895, (float)0.140839,
+       (float)0.145813, (float)0.150879, (float)0.156006,
+       (float)0.161224, (float)0.166504, (float)0.171844,
+       (float)0.177246, (float)0.182709, (float)0.188263,
+       (float)0.193848, (float)0.199524, (float)0.205231,
+       (float)0.211029, (float)0.216858, (float)0.222778,
+       (float)0.228729, (float)0.234741, (float)0.240814,
+       (float)0.246918, (float)0.253082, (float)0.259308,
+       (float)0.265564, (float)0.271881, (float)0.278259,
+       (float)0.284668, (float)0.291107, (float)0.297607,
+       (float)0.304138, (float)0.310730, (float)0.317322,
+       (float)0.323975, (float)0.330658, (float)0.337372,
+       (float)0.344147, (float)0.350922, (float)0.357727,
+       (float)0.364594, (float)0.371460, (float)0.378357,
+       (float)0.385284, (float)0.392212, (float)0.399170,
+       (float)0.406158, (float)0.413177, (float)0.420197,
+       (float)0.427246, (float)0.434296, (float)0.441376,
+       (float)0.448456, (float)0.455536, (float)0.462646,
+       (float)0.469757, (float)0.476868, (float)0.483978,
+       (float)0.491089, (float)0.498230, (float)0.505341,
+       (float)0.512451, (float)0.519592, (float)0.526703,
+       (float)0.533813, (float)0.540924, (float)0.548004,
+       (float)0.555084, (float)0.562164, (float)0.569244,
+       (float)0.576294, (float)0.583313, (float)0.590332,
+       (float)0.597321, (float)0.604309, (float)0.611267,
+       (float)0.618195, (float)0.625092, (float)0.631989,
+       (float)0.638855, (float)0.645660, (float)0.652466,
+       (float)0.659241, (float)0.665985, (float)0.672668,
+       (float)0.679352, (float)0.685974, (float)0.692566,
+
+
+
+
+
+       (float)0.699127, (float)0.705658, (float)0.712128,
+       (float)0.718536, (float)0.724945, (float)0.731262,
+       (float)0.737549, (float)0.743805, (float)0.750000,
+       (float)0.756134, (float)0.762238, (float)0.768280,
+       (float)0.774261, (float)0.780182, (float)0.786072,
+       (float)0.791870, (float)0.797638, (float)0.803314,
+       (float)0.808960, (float)0.814514, (float)0.820038,
+       (float)0.825470, (float)0.830841, (float)0.836151,
+       (float)0.841400, (float)0.846558, (float)0.851654,
+       (float)0.856689, (float)0.861633, (float)0.866516,
+       (float)0.871338, (float)0.876068, (float)0.880737,
+       (float)0.885315, (float)0.889801, (float)0.894226,
+       (float)0.898560, (float)0.902832, (float)0.907013,
+       (float)0.911102, (float)0.915100, (float)0.919037,
+       (float)0.922882, (float)0.926636, (float)0.930328,
+       (float)0.933899, (float)0.937408, (float)0.940796,
+       (float)0.944122, (float)0.947357, (float)0.950470,
+       (float)0.953522, (float)0.956482, (float)0.959351,
+       (float)0.962097, (float)0.964783, (float)0.967377,
+       (float)0.969849, (float)0.972229, (float)0.974518,
+       (float)0.976715, (float)0.978821, (float)0.980835,
+       (float)0.982727, (float)0.984528, (float)0.986237,
+       (float)0.987854, (float)0.989380, (float)0.990784,
+       (float)0.992096, (float)0.993317, (float)0.994415,
+       (float)0.995422, (float)0.996338, (float)0.997162,
+       (float)0.997864, (float)0.998474, (float)0.998962,
+       (float)0.999390, (float)0.999695, (float)0.999878,
+       (float)0.999969, (float)0.999969, (float)0.996918,
+       (float)0.987701, (float)0.972382, (float)0.951050,
+       (float)0.923889, (float)0.891022, (float)0.852631,
+       (float)0.809021, (float)0.760406, (float)0.707092,
+       (float)0.649445, (float)0.587799, (float)0.522491,
+       (float)0.453979, (float)0.382690, (float)0.309021,
+       (float)0.233459, (float)0.156433, (float)0.078461
+   };
+
+   /* Lag window for LPC */
+   float lpc_lagwinTbl[LPC_FILTERORDER + 1]={
+       (float)1.000100, (float)0.998890, (float)0.995569,
+           (float)0.990057, (float)0.982392,
+       (float)0.972623, (float)0.960816, (float)0.947047,
+           (float)0.931405, (float)0.913989, (float)0.894909};
+
+   /* LSF quantization*/
+   float lsfCbTbl[64 * 3 + 128 * 3 + 128 * 4] = {
+   (float)0.155396, (float)0.273193, (float)0.451172,
+   (float)0.390503, (float)0.648071, (float)1.002075,
+   (float)0.440186, (float)0.692261, (float)0.955688,
+
+
+
+
+
+   (float)0.343628, (float)0.642334, (float)1.071533,
+   (float)0.318359, (float)0.491577, (float)0.670532,
+   (float)0.193115, (float)0.375488, (float)0.725708,
+   (float)0.364136, (float)0.510376, (float)0.658691,
+   (float)0.297485, (float)0.527588, (float)0.842529,
+   (float)0.227173, (float)0.365967, (float)0.563110,
+   (float)0.244995, (float)0.396729, (float)0.636475,
+   (float)0.169434, (float)0.300171, (float)0.520264,
+   (float)0.312866, (float)0.464478, (float)0.643188,
+   (float)0.248535, (float)0.429932, (float)0.626099,
+   (float)0.236206, (float)0.491333, (float)0.817139,
+   (float)0.334961, (float)0.625122, (float)0.895752,
+   (float)0.343018, (float)0.518555, (float)0.698608,
+   (float)0.372803, (float)0.659790, (float)0.945435,
+   (float)0.176880, (float)0.316528, (float)0.581421,
+   (float)0.416382, (float)0.625977, (float)0.805176,
+   (float)0.303223, (float)0.568726, (float)0.915039,
+   (float)0.203613, (float)0.351440, (float)0.588135,
+   (float)0.221191, (float)0.375000, (float)0.614746,
+   (float)0.199951, (float)0.323364, (float)0.476074,
+   (float)0.300781, (float)0.433350, (float)0.566895,
+   (float)0.226196, (float)0.354004, (float)0.507568,
+   (float)0.300049, (float)0.508179, (float)0.711670,
+   (float)0.312012, (float)0.492676, (float)0.763428,
+   (float)0.329956, (float)0.541016, (float)0.795776,
+   (float)0.373779, (float)0.604614, (float)0.928833,
+   (float)0.210571, (float)0.452026, (float)0.755249,
+   (float)0.271118, (float)0.473267, (float)0.662476,
+   (float)0.285522, (float)0.436890, (float)0.634399,
+   (float)0.246704, (float)0.565552, (float)0.859009,
+   (float)0.270508, (float)0.406250, (float)0.553589,
+   (float)0.361450, (float)0.578491, (float)0.813843,
+   (float)0.342651, (float)0.482788, (float)0.622437,
+   (float)0.340332, (float)0.549438, (float)0.743164,
+   (float)0.200439, (float)0.336304, (float)0.540894,
+   (float)0.407837, (float)0.644775, (float)0.895142,
+   (float)0.294678, (float)0.454834, (float)0.699097,
+   (float)0.193115, (float)0.344482, (float)0.643188,
+   (float)0.275757, (float)0.420776, (float)0.598755,
+   (float)0.380493, (float)0.608643, (float)0.861084,
+   (float)0.222778, (float)0.426147, (float)0.676514,
+   (float)0.407471, (float)0.700195, (float)1.053101,
+   (float)0.218384, (float)0.377197, (float)0.669922,
+   (float)0.313232, (float)0.454102, (float)0.600952,
+   (float)0.347412, (float)0.571533, (float)0.874146,
+   (float)0.238037, (float)0.405396, (float)0.729492,
+   (float)0.223877, (float)0.412964, (float)0.822021,
+   (float)0.395264, (float)0.582153, (float)0.743896,
+
+
+
+
+
+   (float)0.247925, (float)0.485596, (float)0.720581,
+   (float)0.229126, (float)0.496582, (float)0.907715,
+   (float)0.260132, (float)0.566895, (float)1.012695,
+   (float)0.337402, (float)0.611572, (float)0.978149,
+   (float)0.267822, (float)0.447632, (float)0.769287,
+   (float)0.250610, (float)0.381714, (float)0.530029,
+   (float)0.430054, (float)0.805054, (float)1.221924,
+   (float)0.382568, (float)0.544067, (float)0.701660,
+   (float)0.383545, (float)0.710327, (float)1.149170,
+   (float)0.271362, (float)0.529053, (float)0.775513,
+   (float)0.246826, (float)0.393555, (float)0.588623,
+   (float)0.266846, (float)0.422119, (float)0.676758,
+   (float)0.311523, (float)0.580688, (float)0.838623,
+   (float)1.331177, (float)1.576782, (float)1.779541,
+   (float)1.160034, (float)1.401978, (float)1.768188,
+   (float)1.161865, (float)1.525146, (float)1.715332,
+   (float)0.759521, (float)0.913940, (float)1.119873,
+   (float)0.947144, (float)1.121338, (float)1.282471,
+   (float)1.015015, (float)1.557007, (float)1.804932,
+   (float)1.172974, (float)1.402100, (float)1.692627,
+   (float)1.087524, (float)1.474243, (float)1.665405,
+   (float)0.899536, (float)1.105225, (float)1.406250,
+   (float)1.148438, (float)1.484741, (float)1.796265,
+   (float)0.785645, (float)1.209839, (float)1.567749,
+   (float)0.867798, (float)1.166504, (float)1.450684,
+   (float)0.922485, (float)1.229858, (float)1.420898,
+   (float)0.791260, (float)1.123291, (float)1.409546,
+   (float)0.788940, (float)0.966064, (float)1.340332,
+   (float)1.051147, (float)1.272827, (float)1.556641,
+   (float)0.866821, (float)1.181152, (float)1.538818,
+   (float)0.906738, (float)1.373535, (float)1.607910,
+   (float)1.244751, (float)1.581421, (float)1.933838,
+   (float)0.913940, (float)1.337280, (float)1.539673,
+   (float)0.680542, (float)0.959229, (float)1.662720,
+   (float)0.887207, (float)1.430542, (float)1.800781,
+   (float)0.912598, (float)1.433594, (float)1.683960,
+   (float)0.860474, (float)1.060303, (float)1.455322,
+   (float)1.005127, (float)1.381104, (float)1.706909,
+   (float)0.800781, (float)1.363892, (float)1.829102,
+   (float)0.781860, (float)1.124390, (float)1.505981,
+   (float)1.003662, (float)1.471436, (float)1.684692,
+   (float)0.981323, (float)1.309570, (float)1.618042,
+   (float)1.228760, (float)1.554321, (float)1.756470,
+   (float)0.734375, (float)0.895752, (float)1.225586,
+   (float)0.841797, (float)1.055664, (float)1.249268,
+   (float)0.920166, (float)1.119385, (float)1.486206,
+   (float)0.894409, (float)1.539063, (float)1.828979,
+   (float)1.283691, (float)1.543335, (float)1.858276,
+
+
+
+
+
+   (float)0.676025, (float)0.933105, (float)1.490845,
+   (float)0.821289, (float)1.491821, (float)1.739868,
+   (float)0.923218, (float)1.144653, (float)1.580566,
+   (float)1.057251, (float)1.345581, (float)1.635864,
+   (float)0.888672, (float)1.074951, (float)1.353149,
+   (float)0.942749, (float)1.195435, (float)1.505493,
+   (float)1.492310, (float)1.788086, (float)2.039673,
+   (float)1.070313, (float)1.634399, (float)1.860962,
+   (float)1.253296, (float)1.488892, (float)1.686035,
+   (float)0.647095, (float)0.864014, (float)1.401855,
+   (float)0.866699, (float)1.254883, (float)1.453369,
+   (float)1.063965, (float)1.532593, (float)1.731323,
+   (float)1.167847, (float)1.521484, (float)1.884033,
+   (float)0.956055, (float)1.502075, (float)1.745605,
+   (float)0.928711, (float)1.288574, (float)1.479614,
+   (float)1.088013, (float)1.380737, (float)1.570801,
+   (float)0.905029, (float)1.186768, (float)1.371948,
+   (float)1.057861, (float)1.421021, (float)1.617432,
+   (float)1.108276, (float)1.312500, (float)1.501465,
+   (float)0.979492, (float)1.416992, (float)1.624268,
+   (float)1.276001, (float)1.661011, (float)2.007935,
+   (float)0.993042, (float)1.168579, (float)1.331665,
+   (float)0.778198, (float)0.944946, (float)1.235962,
+   (float)1.223755, (float)1.491333, (float)1.815674,
+   (float)0.852661, (float)1.350464, (float)1.722290,
+   (float)1.134766, (float)1.593140, (float)1.787354,
+   (float)1.051392, (float)1.339722, (float)1.531006,
+   (float)0.803589, (float)1.271240, (float)1.652100,
+   (float)0.755737, (float)1.143555, (float)1.639404,
+   (float)0.700928, (float)0.837280, (float)1.130371,
+   (float)0.942749, (float)1.197876, (float)1.669800,
+   (float)0.993286, (float)1.378296, (float)1.566528,
+   (float)0.801025, (float)1.095337, (float)1.298950,
+   (float)0.739990, (float)1.032959, (float)1.383667,
+   (float)0.845703, (float)1.072266, (float)1.543823,
+   (float)0.915649, (float)1.072266, (float)1.224487,
+   (float)1.021973, (float)1.226196, (float)1.481323,
+   (float)0.999878, (float)1.204102, (float)1.555908,
+   (float)0.722290, (float)0.913940, (float)1.340210,
+   (float)0.673340, (float)0.835938, (float)1.259521,
+   (float)0.832397, (float)1.208374, (float)1.394165,
+   (float)0.962158, (float)1.576172, (float)1.912842,
+   (float)1.166748, (float)1.370850, (float)1.556763,
+   (float)0.946289, (float)1.138550, (float)1.400391,
+   (float)1.035034, (float)1.218262, (float)1.386475,
+   (float)1.393799, (float)1.717773, (float)2.000244,
+   (float)0.972656, (float)1.260986, (float)1.760620,
+   (float)1.028198, (float)1.288452, (float)1.484619,
+
+
+
+
+
+   (float)0.773560, (float)1.258057, (float)1.756714,
+   (float)1.080322, (float)1.328003, (float)1.742676,
+   (float)0.823975, (float)1.450806, (float)1.917725,
+   (float)0.859009, (float)1.016602, (float)1.191895,
+   (float)0.843994, (float)1.131104, (float)1.645020,
+   (float)1.189697, (float)1.702759, (float)1.894409,
+   (float)1.346680, (float)1.763184, (float)2.066040,
+   (float)0.980469, (float)1.253784, (float)1.441650,
+   (float)1.338135, (float)1.641968, (float)1.932739,
+   (float)1.223267, (float)1.424194, (float)1.626465,
+   (float)0.765747, (float)1.004150, (float)1.579102,
+   (float)1.042847, (float)1.269165, (float)1.647461,
+   (float)0.968750, (float)1.257568, (float)1.555786,
+   (float)0.826294, (float)0.993408, (float)1.275146,
+   (float)0.742310, (float)0.950439, (float)1.430542,
+   (float)1.054321, (float)1.439819, (float)1.828003,
+   (float)1.072998, (float)1.261719, (float)1.441895,
+   (float)0.859375, (float)1.036377, (float)1.314819,
+   (float)0.895752, (float)1.267212, (float)1.605591,
+   (float)0.805420, (float)0.962891, (float)1.142334,
+   (float)0.795654, (float)1.005493, (float)1.468506,
+   (float)1.105347, (float)1.313843, (float)1.584839,
+   (float)0.792236, (float)1.221802, (float)1.465698,
+   (float)1.170532, (float)1.467651, (float)1.664063,
+   (float)0.838257, (float)1.153198, (float)1.342163,
+   (float)0.968018, (float)1.198242, (float)1.391235,
+   (float)1.250122, (float)1.623535, (float)1.823608,
+   (float)0.711670, (float)1.058350, (float)1.512085,
+   (float)1.204834, (float)1.454468, (float)1.739136,
+   (float)1.137451, (float)1.421753, (float)1.620117,
+   (float)0.820435, (float)1.322754, (float)1.578247,
+   (float)0.798706, (float)1.005005, (float)1.213867,
+   (float)0.980713, (float)1.324951, (float)1.512939,
+   (float)1.112305, (float)1.438843, (float)1.735596,
+   (float)1.135498, (float)1.356689, (float)1.635742,
+   (float)1.101318, (float)1.387451, (float)1.686523,
+   (float)0.849854, (float)1.276978, (float)1.523438,
+   (float)1.377930, (float)1.627563, (float)1.858154,
+   (float)0.884888, (float)1.095459, (float)1.287476,
+   (float)1.289795, (float)1.505859, (float)1.756592,
+   (float)0.817505, (float)1.384155, (float)1.650513,
+   (float)1.446655, (float)1.702148, (float)1.931885,
+   (float)0.835815, (float)1.023071, (float)1.385376,
+   (float)0.916626, (float)1.139038, (float)1.335327,
+   (float)0.980103, (float)1.174072, (float)1.453735,
+   (float)1.705688, (float)2.153809, (float)2.398315, (float)2.743408,
+   (float)1.797119, (float)2.016846, (float)2.445679, (float)2.701904,
+   (float)1.990356, (float)2.219116, (float)2.576416, (float)2.813477,
+
+
+
+
+
+   (float)1.849365, (float)2.190918, (float)2.611572, (float)2.835083,
+   (float)1.657959, (float)1.854370, (float)2.159058, (float)2.726196,
+   (float)1.437744, (float)1.897705, (float)2.253174, (float)2.655396,
+   (float)2.028687, (float)2.247314, (float)2.542358, (float)2.875854,
+   (float)1.736938, (float)1.922119, (float)2.185913, (float)2.743408,
+   (float)1.521606, (float)1.870972, (float)2.526855, (float)2.786987,
+   (float)1.841431, (float)2.050659, (float)2.463623, (float)2.857666,
+   (float)1.590088, (float)2.067261, (float)2.427979, (float)2.794434,
+   (float)1.746826, (float)2.057373, (float)2.320190, (float)2.800781,
+   (float)1.734619, (float)1.940552, (float)2.306030, (float)2.826416,
+   (float)1.786255, (float)2.204468, (float)2.457520, (float)2.795288,
+   (float)1.861084, (float)2.170532, (float)2.414551, (float)2.763672,
+   (float)2.001465, (float)2.307617, (float)2.552734, (float)2.811890,
+   (float)1.784424, (float)2.124146, (float)2.381592, (float)2.645508,
+   (float)1.888794, (float)2.135864, (float)2.418579, (float)2.861206,
+   (float)2.301147, (float)2.531250, (float)2.724976, (float)2.913086,
+   (float)1.837769, (float)2.051270, (float)2.261963, (float)2.553223,
+   (float)2.012939, (float)2.221191, (float)2.440186, (float)2.678101,
+   (float)1.429565, (float)1.858276, (float)2.582275, (float)2.845703,
+   (float)1.622803, (float)1.897705, (float)2.367310, (float)2.621094,
+   (float)1.581543, (float)1.960449, (float)2.515869, (float)2.736450,
+   (float)1.419434, (float)1.933960, (float)2.394653, (float)2.746704,
+   (float)1.721924, (float)2.059570, (float)2.421753, (float)2.769653,
+   (float)1.911011, (float)2.220703, (float)2.461060, (float)2.740723,
+   (float)1.581177, (float)1.860840, (float)2.516968, (float)2.874634,
+   (float)1.870361, (float)2.098755, (float)2.432373, (float)2.656494,
+   (float)2.059692, (float)2.279785, (float)2.495605, (float)2.729370,
+   (float)1.815674, (float)2.181519, (float)2.451538, (float)2.680542,
+   (float)1.407959, (float)1.768311, (float)2.343018, (float)2.668091,
+   (float)2.168701, (float)2.394653, (float)2.604736, (float)2.829346,
+   (float)1.636230, (float)1.865723, (float)2.329102, (float)2.824219,
+   (float)1.878906, (float)2.139526, (float)2.376709, (float)2.679810,
+   (float)1.765381, (float)1.971802, (float)2.195435, (float)2.586914,
+   (float)2.164795, (float)2.410889, (float)2.673706, (float)2.903198,
+   (float)2.071899, (float)2.331055, (float)2.645874, (float)2.907104,
+   (float)2.026001, (float)2.311523, (float)2.594849, (float)2.863892,
+   (float)1.948975, (float)2.180786, (float)2.514893, (float)2.797852,
+   (float)1.881836, (float)2.130859, (float)2.478149, (float)2.804199,
+   (float)2.238159, (float)2.452759, (float)2.652832, (float)2.868286,
+   (float)1.897949, (float)2.101685, (float)2.524292, (float)2.880127,
+   (float)1.856445, (float)2.074585, (float)2.541016, (float)2.791748,
+   (float)1.695557, (float)2.199097, (float)2.506226, (float)2.742676,
+   (float)1.612671, (float)1.877075, (float)2.435425, (float)2.732910,
+   (float)1.568848, (float)1.786499, (float)2.194580, (float)2.768555,
+   (float)1.953369, (float)2.164551, (float)2.486938, (float)2.874023,
+   (float)1.388306, (float)1.725342, (float)2.384521, (float)2.771851,
+   (float)2.115356, (float)2.337769, (float)2.592896, (float)2.864014,
+   (float)1.905762, (float)2.111328, (float)2.363525, (float)2.789307,
+
+
+
+
+
+   (float)1.882568, (float)2.332031, (float)2.598267, (float)2.827637,
+   (float)1.683594, (float)2.088745, (float)2.361938, (float)2.608643,
+   (float)1.874023, (float)2.182129, (float)2.536133, (float)2.766968,
+   (float)1.861938, (float)2.070435, (float)2.309692, (float)2.700562,
+   (float)1.722168, (float)2.107422, (float)2.477295, (float)2.837646,
+   (float)1.926880, (float)2.184692, (float)2.442627, (float)2.663818,
+   (float)2.123901, (float)2.337280, (float)2.553101, (float)2.777466,
+   (float)1.588135, (float)1.911499, (float)2.212769, (float)2.543945,
+   (float)2.053955, (float)2.370850, (float)2.712158, (float)2.939941,
+   (float)2.210449, (float)2.519653, (float)2.770386, (float)2.958618,
+   (float)2.199463, (float)2.474731, (float)2.718262, (float)2.919922,
+   (float)1.960083, (float)2.175415, (float)2.608032, (float)2.888794,
+   (float)1.953735, (float)2.185181, (float)2.428223, (float)2.809570,
+   (float)1.615234, (float)2.036499, (float)2.576538, (float)2.834595,
+   (float)1.621094, (float)2.028198, (float)2.431030, (float)2.664673,
+   (float)1.824951, (float)2.267456, (float)2.514526, (float)2.747925,
+   (float)1.994263, (float)2.229126, (float)2.475220, (float)2.833984,
+   (float)1.746338, (float)2.011353, (float)2.588257, (float)2.826904,
+   (float)1.562866, (float)2.135986, (float)2.471680, (float)2.687256,
+   (float)1.748901, (float)2.083496, (float)2.460938, (float)2.686279,
+   (float)1.758057, (float)2.131470, (float)2.636597, (float)2.891602,
+   (float)2.071289, (float)2.299072, (float)2.550781, (float)2.814331,
+   (float)1.839600, (float)2.094360, (float)2.496460, (float)2.723999,
+   (float)1.882202, (float)2.088257, (float)2.636841, (float)2.923096,
+   (float)1.957886, (float)2.153198, (float)2.384399, (float)2.615234,
+   (float)1.992920, (float)2.351196, (float)2.654419, (float)2.889771,
+   (float)2.012817, (float)2.262451, (float)2.643799, (float)2.903076,
+   (float)2.025635, (float)2.254761, (float)2.508423, (float)2.784058,
+   (float)2.316040, (float)2.589355, (float)2.794189, (float)2.963623,
+   (float)1.741211, (float)2.279541, (float)2.578491, (float)2.816284,
+   (float)1.845337, (float)2.055786, (float)2.348511, (float)2.822021,
+   (float)1.679932, (float)1.926514, (float)2.499756, (float)2.835693,
+   (float)1.722534, (float)1.946899, (float)2.448486, (float)2.728760,
+   (float)1.829834, (float)2.043213, (float)2.580444, (float)2.867676,
+   (float)1.676636, (float)2.071655, (float)2.322510, (float)2.704834,
+   (float)1.791504, (float)2.113525, (float)2.469727, (float)2.784058,
+   (float)1.977051, (float)2.215088, (float)2.497437, (float)2.726929,
+   (float)1.800171, (float)2.106689, (float)2.357788, (float)2.738892,
+   (float)1.827759, (float)2.170166, (float)2.525879, (float)2.852417,
+   (float)1.918335, (float)2.132813, (float)2.488403, (float)2.728149,
+   (float)1.916748, (float)2.225098, (float)2.542603, (float)2.857666,
+   (float)1.761230, (float)1.976074, (float)2.507446, (float)2.884521,
+   (float)2.053711, (float)2.367432, (float)2.608032, (float)2.837646,
+   (float)1.595337, (float)2.000977, (float)2.307129, (float)2.578247,
+   (float)1.470581, (float)2.031250, (float)2.375854, (float)2.647583,
+   (float)1.801392, (float)2.128052, (float)2.399780, (float)2.822876,
+   (float)1.853638, (float)2.066650, (float)2.429199, (float)2.751465,
+   (float)1.956299, (float)2.163696, (float)2.394775, (float)2.734253,
+
+
+
+
+
+   (float)1.963623, (float)2.275757, (float)2.585327, (float)2.865234,
+   (float)1.887451, (float)2.105469, (float)2.331787, (float)2.587402,
+   (float)2.120117, (float)2.443359, (float)2.733887, (float)2.941406,
+   (float)1.506348, (float)1.766968, (float)2.400513, (float)2.851807,
+   (float)1.664551, (float)1.981079, (float)2.375732, (float)2.774414,
+   (float)1.720703, (float)1.978882, (float)2.391479, (float)2.640991,
+   (float)1.483398, (float)1.814819, (float)2.434448, (float)2.722290,
+   (float)1.769043, (float)2.136597, (float)2.563721, (float)2.774414,
+   (float)1.810791, (float)2.049316, (float)2.373901, (float)2.613647,
+   (float)1.788330, (float)2.005981, (float)2.359131, (float)2.723145,
+   (float)1.785156, (float)1.993164, (float)2.399780, (float)2.832520,
+   (float)1.695313, (float)2.022949, (float)2.522583, (float)2.745117,
+   (float)1.584106, (float)1.965576, (float)2.299927, (float)2.715576,
+   (float)1.894897, (float)2.249878, (float)2.655884, (float)2.897705,
+   (float)1.720581, (float)1.995728, (float)2.299438, (float)2.557007,
+   (float)1.619385, (float)2.173950, (float)2.574219, (float)2.787964,
+   (float)1.883179, (float)2.220459, (float)2.474365, (float)2.825073,
+   (float)1.447632, (float)2.045044, (float)2.555542, (float)2.744873,
+   (float)1.502686, (float)2.156616, (float)2.653320, (float)2.846558,
+   (float)1.711548, (float)1.944092, (float)2.282959, (float)2.685791,
+   (float)1.499756, (float)1.867554, (float)2.341064, (float)2.578857,
+   (float)1.916870, (float)2.135132, (float)2.568237, (float)2.826050,
+   (float)1.498047, (float)1.711182, (float)2.223267, (float)2.755127,
+   (float)1.808716, (float)1.997559, (float)2.256470, (float)2.758545,
+   (float)2.088501, (float)2.402710, (float)2.667358, (float)2.890259,
+   (float)1.545044, (float)1.819214, (float)2.324097, (float)2.692993,
+   (float)1.796021, (float)2.012573, (float)2.505737, (float)2.784912,
+   (float)1.786499, (float)2.041748, (float)2.290405, (float)2.650757,
+   (float)1.938232, (float)2.264404, (float)2.529053, (float)2.796143
+   };
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/constants.h b/sflphone-common/libs/pjproject/third_party/ilbc/constants.h
new file mode 100644
index 0000000000..3487d529db
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/constants.h
@@ -0,0 +1,80 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       constants.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_CONSTANTS_H
+   #define __iLBC_CONSTANTS_H
+
+   #include "iLBC_define.h"
+
+
+   /* ULP bit allocation */
+
+
+
+
+
+
+   extern const iLBC_ULP_Inst_t ULP_20msTbl;
+   extern const iLBC_ULP_Inst_t ULP_30msTbl;
+
+   /* high pass filters */
+
+   extern float hpi_zero_coefsTbl[];
+   extern float hpi_pole_coefsTbl[];
+   extern float hpo_zero_coefsTbl[];
+   extern float hpo_pole_coefsTbl[];
+
+   /* low pass filters */
+   extern float lpFilt_coefsTbl[];
+
+   /* LPC analysis and quantization */
+
+   extern float lpc_winTbl[];
+   extern float lpc_asymwinTbl[];
+   extern float lpc_lagwinTbl[];
+   extern float lsfCbTbl[];
+   extern float lsfmeanTbl[];
+   extern int   dim_lsfCbTbl[];
+   extern int   size_lsfCbTbl[];
+   extern float lsf_weightTbl_30ms[];
+   extern float lsf_weightTbl_20ms[];
+
+   /* state quantization tables */
+
+   extern float state_sq3Tbl[];
+   extern float state_frgqTbl[];
+
+   /* gain quantization tables */
+
+   extern float gain_sq3Tbl[];
+   extern float gain_sq4Tbl[];
+   extern float gain_sq5Tbl[];
+
+   /* adaptive codebook definitions */
+
+   extern int search_rangeTbl[5][CB_NSTAGES];
+   extern int memLfTbl[];
+   extern int stMemLTbl;
+   extern float cbfiltersTbl[CB_FILTERLEN];
+
+   /* enhancer definitions */
+
+   extern float polyphaserTbl[];
+   extern float enh_plocsTbl[];
+
+
+
+
+
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/createCB.c b/sflphone-common/libs/pjproject/third_party/ilbc/createCB.c
new file mode 100644
index 0000000000..aefacf200a
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/createCB.c
@@ -0,0 +1,231 @@
+
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       createCB.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+
+
+
+
+   #include "iLBC_define.h"
+   #include "constants.h"
+   #include <string.h>
+   #include <math.h>
+
+   /*----------------------------------------------------------------*
+    *  Construct an additional codebook vector by filtering the
+    *  initial codebook buffer. This vector is then used to expand
+    *  the codebook with an additional section.
+    *---------------------------------------------------------------*/
+
+   void filteredCBvecs(
+       float *cbvectors,   /* (o) Codebook vectors for the
+                                  higher section */
+       float *mem,         /* (i) Buffer to create codebook
+                                  vector from */
+       int lMem        /* (i) Length of buffer */
+   ){
+       int j, k;
+       float *pp, *pp1;
+       float tempbuff2[CB_MEML+CB_FILTERLEN];
+       float *pos;
+
+       memset(tempbuff2, 0, (CB_HALFFILTERLEN-1)*sizeof(float));
+       memcpy(&tempbuff2[CB_HALFFILTERLEN-1], mem, lMem*sizeof(float));
+       memset(&tempbuff2[lMem+CB_HALFFILTERLEN-1], 0,
+           (CB_HALFFILTERLEN+1)*sizeof(float));
+
+       /* Create codebook vector for higher section by filtering */
+
+       /* do filtering */
+       pos=cbvectors;
+       memset(pos, 0, lMem*sizeof(float));
+       for (k=0; k<lMem; k++) {
+           pp=&tempbuff2[k];
+           pp1=&cbfiltersTbl[CB_FILTERLEN-1];
+           for (j=0;j<CB_FILTERLEN;j++) {
+               (*pos)+=(*pp++)*(*pp1--);
+           }
+           pos++;
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  Search the augmented part of the codebook to find the best
+    *  measure.
+    *----------------------------------------------------------------*/
+
+
+
+
+
+
+   void searchAugmentedCB(
+       int low,        /* (i) Start index for the search */
+       int high,           /* (i) End index for the search */
+       int stage,          /* (i) Current stage */
+       int startIndex,     /* (i) Codebook index for the first
+                                  aug vector */
+       float *target,      /* (i) Target vector for encoding */
+       float *buffer,      /* (i) Pointer to the end of the buffer for
+                                  augmented codebook construction */
+       float *max_measure, /* (i/o) Currently maximum measure */
+       int *best_index,/* (o) Currently the best index */
+       float *gain,    /* (o) Currently the best gain */
+       float *energy,      /* (o) Energy of augmented codebook
+                                  vectors */
+       float *invenergy/* (o) Inv energy of augmented codebook
+                                  vectors */
+   ) {
+       int icount, ilow, j, tmpIndex;
+       float *pp, *ppo, *ppi, *ppe, crossDot, alfa;
+       float weighted, measure, nrjRecursive;
+       float ftmp;
+
+       /* Compute the energy for the first (low-5)
+          noninterpolated samples */
+       nrjRecursive = (float) 0.0;
+       pp = buffer - low + 1;
+       for (j=0; j<(low-5); j++) {
+           nrjRecursive += ( (*pp)*(*pp) );
+           pp++;
+       }
+       ppe = buffer - low;
+
+
+       for (icount=low; icount<=high; icount++) {
+
+           /* Index of the codebook vector used for retrieving
+              energy values */
+           tmpIndex = startIndex+icount-20;
+
+           ilow = icount-4;
+
+           /* Update the energy recursively to save complexity */
+           nrjRecursive = nrjRecursive + (*ppe)*(*ppe);
+           ppe--;
+           energy[tmpIndex] = nrjRecursive;
+
+           /* Compute cross dot product for the first (low-5)
+              samples */
+
+
+
+
+
+           crossDot = (float) 0.0;
+           pp = buffer-icount;
+           for (j=0; j<ilow; j++) {
+               crossDot += target[j]*(*pp++);
+           }
+
+           /* interpolation */
+           alfa = (float) 0.2;
+           ppo = buffer-4;
+           ppi = buffer-icount-4;
+           for (j=ilow; j<icount; j++) {
+               weighted = ((float)1.0-alfa)*(*ppo)+alfa*(*ppi);
+               ppo++;
+               ppi++;
+               energy[tmpIndex] += weighted*weighted;
+               crossDot += target[j]*weighted;
+               alfa += (float)0.2;
+           }
+
+           /* Compute energy and cross dot product for the
+              remaining samples */
+           pp = buffer - icount;
+           for (j=icount; j<SUBL; j++) {
+               energy[tmpIndex] += (*pp)*(*pp);
+               crossDot += target[j]*(*pp++);
+           }
+
+           if (energy[tmpIndex]>0.0) {
+               invenergy[tmpIndex]=(float)1.0/(energy[tmpIndex]+EPS);
+           } else {
+               invenergy[tmpIndex] = (float) 0.0;
+           }
+
+           if (stage==0) {
+               measure = (float)-10000000.0;
+
+               if (crossDot > 0.0) {
+                   measure = crossDot*crossDot*invenergy[tmpIndex];
+               }
+           }
+           else {
+               measure = crossDot*crossDot*invenergy[tmpIndex];
+           }
+
+           /* check if measure is better */
+           ftmp = crossDot*invenergy[tmpIndex];
+
+           if ((measure>*max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
+
+
+
+
+
+               *best_index = tmpIndex;
+               *max_measure = measure;
+               *gain = ftmp;
+           }
+       }
+   }
+
+
+   /*----------------------------------------------------------------*
+    *  Recreate a specific codebook vector from the augmented part.
+    *
+    *----------------------------------------------------------------*/
+
+   void createAugmentedVec(
+       int index,      /* (i) Index for the augmented vector
+                              to be created */
+       float *buffer,  /* (i) Pointer to the end of the buffer for
+                              augmented codebook construction */
+       float *cbVec/* (o) The construced codebook vector */
+   ) {
+       int ilow, j;
+       float *pp, *ppo, *ppi, alfa, alfa1, weighted;
+
+       ilow = index-5;
+
+       /* copy the first noninterpolated part */
+
+       pp = buffer-index;
+       memcpy(cbVec,pp,sizeof(float)*index);
+
+       /* interpolation */
+
+       alfa1 = (float)0.2;
+       alfa = 0.0;
+       ppo = buffer-5;
+       ppi = buffer-index-5;
+       for (j=ilow; j<index; j++) {
+           weighted = ((float)1.0-alfa)*(*ppo)+alfa*(*ppi);
+           ppo++;
+           ppi++;
+           cbVec[j] = weighted;
+           alfa += alfa1;
+       }
+
+       /* copy the second noninterpolated part */
+
+       pp = buffer - index;
+       memcpy(cbVec+index,pp,sizeof(float)*(SUBL-index));
+
+
+
+
+
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/createCB.h b/sflphone-common/libs/pjproject/third_party/ilbc/createCB.h
new file mode 100644
index 0000000000..eda547c669
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/createCB.h
@@ -0,0 +1,58 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       createCB.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_CREATECB_H
+   #define __iLBC_CREATECB_H
+
+   void filteredCBvecs(
+       float *cbvectors,   /* (o) Codebook vector for the
+                                  higher section */
+
+
+
+
+
+       float *mem,         /* (i) Buffer to create codebook
+                                  vectors from */
+       int lMem        /* (i) Length of buffer */
+   );
+
+   void searchAugmentedCB(
+       int low,        /* (i) Start index for the search */
+       int high,           /* (i) End index for the search */
+       int stage,          /* (i) Current stage */
+       int startIndex,     /* (i) CB index for the first
+                                  augmented vector */
+       float *target,      /* (i) Target vector for encoding */
+       float *buffer,      /* (i) Pointer to the end of the
+                                  buffer for augmented codebook
+                                  construction */
+       float *max_measure, /* (i/o) Currently maximum measure */
+       int *best_index,/* (o) Currently the best index */
+       float *gain,    /* (o) Currently the best gain */
+       float *energy,      /* (o) Energy of augmented
+                                  codebook vectors */
+       float *invenergy/* (o) Inv energy of aug codebook
+                                  vectors */
+   );
+
+   void createAugmentedVec(
+       int index,          /* (i) Index for the aug vector
+                                  to be created */
+       float *buffer,      /* (i) Pointer to the end of the
+                                  buffer for augmented codebook
+                                  construction */
+       float *cbVec    /* (o) The construced codebook vector */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c b/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c
new file mode 100644
index 0000000000..9fa4584fe8
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c
@@ -0,0 +1,270 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       doCPLC.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <string.h>
+   #include <stdio.h>
+
+
+
+
+
+   #include "iLBC_define.h"
+
+   /*----------------------------------------------------------------*
+    *  Compute cross correlation and pitch gain for pitch prediction
+    *  of last subframe at given lag.
+    *---------------------------------------------------------------*/
+
+   void compCorr(
+       float *cc,      /* (o) cross correlation coefficient */
+       float *gc,      /* (o) gain */
+       float *pm,
+       float *buffer,  /* (i) signal buffer */
+       int lag,    /* (i) pitch lag */
+       int bLen,       /* (i) length of buffer */
+       int sRange      /* (i) correlation search length */
+   ){
+       int i;
+       float ftmp1, ftmp2, ftmp3;
+
+       /* Guard against getting outside buffer */
+       if ((bLen-sRange-lag)<0) {
+           sRange=bLen-lag;
+       }
+
+       ftmp1 = 0.0;
+       ftmp2 = 0.0;
+       ftmp3 = 0.0;
+       for (i=0; i<sRange; i++) {
+           ftmp1 += buffer[bLen-sRange+i] *
+               buffer[bLen-sRange+i-lag];
+           ftmp2 += buffer[bLen-sRange+i-lag] *
+                   buffer[bLen-sRange+i-lag];
+           ftmp3 += buffer[bLen-sRange+i] *
+                   buffer[bLen-sRange+i];
+       }
+
+       if (ftmp2 > 0.0) {
+           *cc = ftmp1*ftmp1/ftmp2;
+           *gc = (float)fabs(ftmp1/ftmp2);
+           *pm=(float)fabs(ftmp1)/
+               ((float)sqrt(ftmp2)*(float)sqrt(ftmp3));
+       }
+       else {
+           *cc = 0.0;
+           *gc = 0.0;
+           *pm=0.0;
+       }
+   }
+
+
+
+
+
+   /*----------------------------------------------------------------*
+    *  Packet loss concealment routine. Conceals a residual signal
+    *  and LP parameters. If no packet loss, update state.
+    *---------------------------------------------------------------*/
+
+   void doThePLC(
+       float *PLCresidual, /* (o) concealed residual */
+       float *PLClpc,      /* (o) concealed LP parameters */
+       int PLI,        /* (i) packet loss indicator
+                                  0 - no PL, 1 = PL */
+       float *decresidual, /* (i) decoded residual */
+       float *lpc,         /* (i) decoded LPC (only used for no PL) */
+       int inlag,          /* (i) pitch lag */
+       iLBC_Dec_Inst_t *iLBCdec_inst
+                           /* (i/o) decoder instance */
+   ){
+       int lag=20, randlag;
+       float gain, maxcc;
+       float use_gain;
+       float gain_comp, maxcc_comp, per, max_per=0;
+       int i, pick, use_lag;
+       float ftmp, randvec[BLOCKL_MAX], pitchfact, energy;
+
+       /* Packet Loss */
+
+       if (PLI == 1) {
+
+           iLBCdec_inst->consPLICount += 1;
+
+           /* if previous frame not lost,
+              determine pitch pred. gain */
+
+           if (iLBCdec_inst->prevPLI != 1) {
+
+               /* Search around the previous lag to find the
+                  best pitch period */
+
+               lag=inlag-3;
+               compCorr(&maxcc, &gain, &max_per,
+                   iLBCdec_inst->prevResidual,
+                   lag, iLBCdec_inst->blockl, 60);
+               for (i=inlag-2;i<=inlag+3;i++) {
+                   compCorr(&maxcc_comp, &gain_comp, &per,
+                       iLBCdec_inst->prevResidual,
+                       i, iLBCdec_inst->blockl, 60);
+
+                   if (maxcc_comp>maxcc) {
+                       maxcc=maxcc_comp;
+
+
+
+
+
+                       gain=gain_comp;
+                       lag=i;
+                       max_per=per;
+                   }
+               }
+
+           }
+
+           /* previous frame lost, use recorded lag and periodicity */
+
+           else {
+               lag=iLBCdec_inst->prevLag;
+               max_per=iLBCdec_inst->per;
+           }
+
+           /* downscaling */
+
+           use_gain=1.0;
+           if (iLBCdec_inst->consPLICount*iLBCdec_inst->blockl>320)
+               use_gain=(float)0.9;
+           else if (iLBCdec_inst->consPLICount*
+                           iLBCdec_inst->blockl>2*320)
+               use_gain=(float)0.7;
+           else if (iLBCdec_inst->consPLICount*
+                           iLBCdec_inst->blockl>3*320)
+               use_gain=(float)0.5;
+           else if (iLBCdec_inst->consPLICount*
+                           iLBCdec_inst->blockl>4*320)
+               use_gain=(float)0.0;
+
+           /* mix noise and pitch repeatition */
+           ftmp=(float)sqrt(max_per);
+           if (ftmp>(float)0.7)
+               pitchfact=(float)1.0;
+           else if (ftmp>(float)0.4)
+               pitchfact=(ftmp-(float)0.4)/((float)0.7-(float)0.4);
+           else
+               pitchfact=0.0;
+
+
+           /* avoid repetition of same pitch cycle */
+           use_lag=lag;
+           if (lag<80) {
+               use_lag=2*lag;
+           }
+
+           /* compute concealed residual */
+
+
+
+
+
+
+           energy = 0.0;
+           for (i=0; i<iLBCdec_inst->blockl; i++) {
+
+               /* noise component */
+
+               iLBCdec_inst->seed=(iLBCdec_inst->seed*69069L+1) &
+                   (0x80000000L-1);
+               randlag = 50 + ((signed long) iLBCdec_inst->seed)%70;
+               pick = i - randlag;
+
+               if (pick < 0) {
+                   randvec[i] =
+                       iLBCdec_inst->prevResidual[
+                                   iLBCdec_inst->blockl+pick];
+               } else {
+                   randvec[i] =  randvec[pick];
+               }
+
+               /* pitch repeatition component */
+               pick = i - use_lag;
+
+               if (pick < 0) {
+                   PLCresidual[i] =
+                       iLBCdec_inst->prevResidual[
+                                   iLBCdec_inst->blockl+pick];
+               } else {
+                   PLCresidual[i] = PLCresidual[pick];
+               }
+
+               /* mix random and periodicity component */
+
+               if (i<80)
+                   PLCresidual[i] = use_gain*(pitchfact *
+                               PLCresidual[i] +
+                               ((float)1.0 - pitchfact) * randvec[i]);
+               else if (i<160)
+                   PLCresidual[i] = (float)0.95*use_gain*(pitchfact *
+                               PLCresidual[i] +
+                               ((float)1.0 - pitchfact) * randvec[i]);
+               else
+                   PLCresidual[i] = (float)0.9*use_gain*(pitchfact *
+                               PLCresidual[i] +
+                               ((float)1.0 - pitchfact) * randvec[i]);
+
+               energy += PLCresidual[i] * PLCresidual[i];
+           }
+
+           /* less than 30 dB, use only noise */
+
+
+
+
+
+
+           if (sqrt(energy/(float)iLBCdec_inst->blockl) < 30.0) {
+               gain=0.0;
+               for (i=0; i<iLBCdec_inst->blockl; i++) {
+                   PLCresidual[i] = randvec[i];
+               }
+           }
+
+           /* use old LPC */
+
+           memcpy(PLClpc,iLBCdec_inst->prevLpc,
+               (LPC_FILTERORDER+1)*sizeof(float));
+
+       }
+
+       /* no packet loss, copy input */
+
+       else {
+           memcpy(PLCresidual, decresidual,
+               iLBCdec_inst->blockl*sizeof(float));
+           memcpy(PLClpc, lpc, (LPC_FILTERORDER+1)*sizeof(float));
+           iLBCdec_inst->consPLICount = 0;
+       }
+
+       /* update state */
+
+       if (PLI) {
+           iLBCdec_inst->prevLag = lag;
+           iLBCdec_inst->per=max_per;
+       }
+
+       iLBCdec_inst->prevPLI = PLI;
+       memcpy(iLBCdec_inst->prevLpc, PLClpc,
+           (LPC_FILTERORDER+1)*sizeof(float));
+       memcpy(iLBCdec_inst->prevResidual, PLCresidual,
+           iLBCdec_inst->blockl*sizeof(float));
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h b/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h
new file mode 100644
index 0000000000..2bda7a1441
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h
@@ -0,0 +1,29 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       doCPLC.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_DOLPC_H
+   #define __iLBC_DOLPC_H
+
+   void doThePLC(
+       float *PLCresidual, /* (o) concealed residual */
+       float *PLClpc,      /* (o) concealed LP parameters */
+       int PLI,        /* (i) packet loss indicator
+                                  0 - no PL, 1 = PL */
+       float *decresidual, /* (i) decoded residual */
+       float *lpc,         /* (i) decoded LPC (only used for no PL) */
+       int inlag,          /* (i) pitch lag */
+       iLBC_Dec_Inst_t *iLBCdec_inst
+                           /* (i/o) decoder instance */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c b/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c
new file mode 100644
index 0000000000..dee13b03d5
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c
@@ -0,0 +1,701 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       enhancer.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <string.h>
+   #include "iLBC_define.h"
+   #include "constants.h"
+   #include "filter.h"
+
+   /*----------------------------------------------------------------*
+    * Find index in array such that the array element with said
+    * index is the element of said array closest to "value"
+    * according to the squared-error criterion
+    *---------------------------------------------------------------*/
+
+   void NearestNeighbor(
+
+
+
+
+
+       int   *index,   /* (o) index of array element closest
+                              to value */
+       float *array,   /* (i) data array */
+       float value,/* (i) value */
+       int arlength/* (i) dimension of data array */
+   ){
+       int i;
+       float bestcrit,crit;
+
+       crit=array[0]-value;
+       bestcrit=crit*crit;
+       *index=0;
+       for (i=1; i<arlength; i++) {
+           crit=array[i]-value;
+           crit=crit*crit;
+
+           if (crit<bestcrit) {
+               bestcrit=crit;
+               *index=i;
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    * compute cross correlation between sequences
+    *---------------------------------------------------------------*/
+
+   void mycorr1(
+       float* corr,    /* (o) correlation of seq1 and seq2 */
+       float* seq1,    /* (i) first sequence */
+       int dim1,           /* (i) dimension first seq1 */
+       const float *seq2,  /* (i) second sequence */
+       int dim2        /* (i) dimension seq2 */
+   ){
+       int i,j;
+
+       for (i=0; i<=dim1-dim2; i++) {
+           corr[i]=0.0;
+           for (j=0; j<dim2; j++) {
+               corr[i] += seq1[i+j] * seq2[j];
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    * upsample finite array assuming zeros outside bounds
+    *---------------------------------------------------------------*/
+
+
+
+
+
+
+   void enh_upsample(
+       float* useq1,   /* (o) upsampled output sequence */
+       float* seq1,/* (i) unupsampled sequence */
+       int dim1,       /* (i) dimension seq1 */
+       int hfl         /* (i) polyphase filter length=2*hfl+1 */
+   ){
+       float *pu,*ps;
+       int i,j,k,q,filterlength,hfl2;
+       const float *polyp[ENH_UPS0]; /* pointers to
+                                        polyphase columns */
+       const float *pp;
+
+       /* define pointers for filter */
+
+       filterlength=2*hfl+1;
+
+       if ( filterlength > dim1 ) {
+           hfl2=(int) (dim1/2);
+           for (j=0; j<ENH_UPS0; j++) {
+               polyp[j]=polyphaserTbl+j*filterlength+hfl-hfl2;
+           }
+           hfl=hfl2;
+           filterlength=2*hfl+1;
+       }
+       else {
+           for (j=0; j<ENH_UPS0; j++) {
+               polyp[j]=polyphaserTbl+j*filterlength;
+           }
+       }
+
+       /* filtering: filter overhangs left side of sequence */
+
+       pu=useq1;
+       for (i=hfl; i<filterlength; i++) {
+           for (j=0; j<ENH_UPS0; j++) {
+               *pu=0.0;
+               pp = polyp[j];
+               ps = seq1+i;
+               for (k=0; k<=i; k++) {
+                   *pu += *ps-- * *pp++;
+               }
+               pu++;
+           }
+       }
+
+       /* filtering: simple convolution=inner products */
+
+       for (i=filterlength; i<dim1; i++) {
+
+
+
+
+
+           for (j=0;j<ENH_UPS0; j++){
+               *pu=0.0;
+               pp = polyp[j];
+               ps = seq1+i;
+               for (k=0; k<filterlength; k++) {
+                   *pu += *ps-- * *pp++;
+               }
+               pu++;
+           }
+       }
+
+       /* filtering: filter overhangs right side of sequence */
+
+       for (q=1; q<=hfl; q++) {
+           for (j=0; j<ENH_UPS0; j++) {
+               *pu=0.0;
+               pp = polyp[j]+q;
+               ps = seq1+dim1-1;
+               for (k=0; k<filterlength-q; k++) {
+                   *pu += *ps-- * *pp++;
+               }
+               pu++;
+           }
+       }
+   }
+
+
+   /*----------------------------------------------------------------*
+    * find segment starting near idata+estSegPos that has highest
+    * correlation with idata+centerStartPos through
+    * idata+centerStartPos+ENH_BLOCKL-1 segment is found at a
+    * resolution of ENH_UPSO times the original of the original
+    * sampling rate
+    *---------------------------------------------------------------*/
+
+   void refiner(
+       float *seg,         /* (o) segment array */
+       float *updStartPos, /* (o) updated start point */
+       float* idata,       /* (i) original data buffer */
+       int idatal,         /* (i) dimension of idata */
+       int centerStartPos, /* (i) beginning center segment */
+       float estSegPos,/* (i) estimated beginning other segment */
+       float period    /* (i) estimated pitch period */
+   ){
+       int estSegPosRounded,searchSegStartPos,searchSegEndPos,corrdim;
+       int tloc,tloc2,i,st,en,fraction;
+       float vect[ENH_VECTL],corrVec[ENH_CORRDIM],maxv;
+       float corrVecUps[ENH_CORRDIM*ENH_UPS0];
+
+       (void)period;
+
+
+
+       /* defining array bounds */
+
+       estSegPosRounded=(int)(estSegPos - 0.5);
+
+       searchSegStartPos=estSegPosRounded-ENH_SLOP;
+
+       if (searchSegStartPos<0) {
+           searchSegStartPos=0;
+       }
+       searchSegEndPos=estSegPosRounded+ENH_SLOP;
+
+       if (searchSegEndPos+ENH_BLOCKL >= idatal) {
+           searchSegEndPos=idatal-ENH_BLOCKL-1;
+       }
+       corrdim=searchSegEndPos-searchSegStartPos+1;
+
+       /* compute upsampled correlation (corr33) and find
+          location of max */
+
+       mycorr1(corrVec,idata+searchSegStartPos,
+           corrdim+ENH_BLOCKL-1,idata+centerStartPos,ENH_BLOCKL);
+       enh_upsample(corrVecUps,corrVec,corrdim,ENH_FL0);
+       tloc=0; maxv=corrVecUps[0];
+       for (i=1; i<ENH_UPS0*corrdim; i++) {
+
+           if (corrVecUps[i]>maxv) {
+               tloc=i;
+               maxv=corrVecUps[i];
+           }
+       }
+
+       /* make vector can be upsampled without ever running outside
+          bounds */
+
+       *updStartPos= (float)searchSegStartPos +
+           (float)tloc/(float)ENH_UPS0+(float)1.0;
+       tloc2=(int)(tloc/ENH_UPS0);
+
+       if (tloc>tloc2*ENH_UPS0) {
+           tloc2++;
+       }
+       st=searchSegStartPos+tloc2-ENH_FL0;
+
+       if (st<0) {
+           memset(vect,0,-st*sizeof(float));
+           memcpy(&vect[-st],idata, (ENH_VECTL+st)*sizeof(float));
+       }
+       else {
+
+
+
+
+
+           en=st+ENH_VECTL;
+
+           if (en>idatal) {
+               memcpy(vect, &idata[st],
+                   (ENH_VECTL-(en-idatal))*sizeof(float));
+               memset(&vect[ENH_VECTL-(en-idatal)], 0,
+                   (en-idatal)*sizeof(float));
+           }
+           else {
+               memcpy(vect, &idata[st], ENH_VECTL*sizeof(float));
+           }
+       }
+       fraction=tloc2*ENH_UPS0-tloc;
+
+       /* compute the segment (this is actually a convolution) */
+
+       mycorr1(seg,vect,ENH_VECTL,polyphaserTbl+(2*ENH_FL0+1)*fraction,
+           2*ENH_FL0+1);
+   }
+
+   /*----------------------------------------------------------------*
+    * find the smoothed output data
+    *---------------------------------------------------------------*/
+
+   void smath(
+       float *odata,   /* (o) smoothed output */
+       float *sseq,/* (i) said second sequence of waveforms */
+       int hl,         /* (i) 2*hl+1 is sseq dimension */
+       float alpha0/* (i) max smoothing energy fraction */
+   ){
+       int i,k;
+       float w00,w10,w11,A,B,C,*psseq,err,errs;
+       float surround[BLOCKL_MAX]; /* shape contributed by other than
+                                      current */
+       float wt[2*ENH_HL+1];       /* waveform weighting to get
+                                      surround shape */
+       float denom;
+
+       /* create shape of contribution from all waveforms except the
+          current one */
+
+       for (i=1; i<=2*hl+1; i++) {
+           wt[i-1] = (float)0.5*(1 - (float)cos(2*PI*i/(2*hl+2)));
+       }
+       wt[hl]=0.0; /* for clarity, not used */
+       for (i=0; i<ENH_BLOCKL; i++) {
+           surround[i]=sseq[i]*wt[0];
+       }
+
+
+
+
+
+       for (k=1; k<hl; k++) {
+           psseq=sseq+k*ENH_BLOCKL;
+           for(i=0;i<ENH_BLOCKL; i++) {
+               surround[i]+=psseq[i]*wt[k];
+           }
+       }
+       for (k=hl+1; k<=2*hl; k++) {
+           psseq=sseq+k*ENH_BLOCKL;
+           for(i=0;i<ENH_BLOCKL; i++) {
+               surround[i]+=psseq[i]*wt[k];
+           }
+       }
+
+       /* compute some inner products */
+
+       w00 = w10 = w11 = 0.0;
+       psseq=sseq+hl*ENH_BLOCKL; /* current block  */
+       for (i=0; i<ENH_BLOCKL;i++) {
+           w00+=psseq[i]*psseq[i];
+           w11+=surround[i]*surround[i];
+           w10+=surround[i]*psseq[i];
+       }
+
+       if (fabs(w11) < 1.0) {
+           w11=1.0;
+       }
+       C = (float)sqrt( w00/w11);
+
+       /* first try enhancement without power-constraint */
+
+       errs=0.0;
+       psseq=sseq+hl*ENH_BLOCKL;
+       for (i=0; i<ENH_BLOCKL; i++) {
+           odata[i]=C*surround[i];
+           err=psseq[i]-odata[i];
+           errs+=err*err;
+       }
+
+       /* if constraint violated by first try, add constraint */
+
+       if (errs > alpha0 * w00) {
+           if ( w00 < 1) {
+               w00=1;
+           }
+           denom = (w11*w00-w10*w10)/(w00*w00);
+
+           if (denom > 0.0001) { /* eliminates numerical problems
+                                    for if smooth */
+
+
+
+
+
+               A = (float)sqrt( (alpha0- alpha0*alpha0/4)/denom);
+               B = -alpha0/2 - A * w10/w00;
+               B = B+1;
+           }
+           else { /* essentially no difference between cycles;
+                     smoothing not needed */
+               A= 0.0;
+               B= 1.0;
+           }
+
+           /* create smoothed sequence */
+
+           psseq=sseq+hl*ENH_BLOCKL;
+           for (i=0; i<ENH_BLOCKL; i++) {
+               odata[i]=A*surround[i]+B*psseq[i];
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    * get the pitch-synchronous sample sequence
+    *---------------------------------------------------------------*/
+
+   void getsseq(
+       float *sseq,    /* (o) the pitch-synchronous sequence */
+       float *idata,       /* (i) original data */
+       int idatal,         /* (i) dimension of data */
+       int centerStartPos, /* (i) where current block starts */
+       float *period,      /* (i) rough-pitch-period array */
+       float *plocs,       /* (i) where periods of period array
+                                  are taken */
+       int periodl,    /* (i) dimension period array */
+       int hl              /* (i) 2*hl+1 is the number of sequences */
+   ){
+       int i,centerEndPos,q;
+       float blockStartPos[2*ENH_HL+1];
+       int lagBlock[2*ENH_HL+1];
+       float plocs2[ENH_PLOCSL];
+       float *psseq;
+
+       centerEndPos=centerStartPos+ENH_BLOCKL-1;
+
+       /* present */
+
+       NearestNeighbor(lagBlock+hl,plocs,
+           (float)0.5*(centerStartPos+centerEndPos),periodl);
+
+       blockStartPos[hl]=(float)centerStartPos;
+
+
+
+
+
+       psseq=sseq+ENH_BLOCKL*hl;
+       memcpy(psseq, idata+centerStartPos, ENH_BLOCKL*sizeof(float));
+
+       /* past */
+
+       for (q=hl-1; q>=0; q--) {
+           blockStartPos[q]=blockStartPos[q+1]-period[lagBlock[q+1]];
+           NearestNeighbor(lagBlock+q,plocs,
+               blockStartPos[q]+
+               ENH_BLOCKL_HALF-period[lagBlock[q+1]], periodl);
+
+
+           if (blockStartPos[q]-ENH_OVERHANG>=0) {
+               refiner(sseq+q*ENH_BLOCKL, blockStartPos+q, idata,
+                   idatal, centerStartPos, blockStartPos[q],
+                   period[lagBlock[q+1]]);
+           } else {
+               psseq=sseq+q*ENH_BLOCKL;
+               memset(psseq, 0, ENH_BLOCKL*sizeof(float));
+           }
+       }
+
+       /* future */
+
+       for (i=0; i<periodl; i++) {
+           plocs2[i]=plocs[i]-period[i];
+       }
+       for (q=hl+1; q<=2*hl; q++) {
+           NearestNeighbor(lagBlock+q,plocs2,
+               blockStartPos[q-1]+ENH_BLOCKL_HALF,periodl);
+
+           blockStartPos[q]=blockStartPos[q-1]+period[lagBlock[q]];
+           if (blockStartPos[q]+ENH_BLOCKL+ENH_OVERHANG<idatal) {
+               refiner(sseq+ENH_BLOCKL*q, blockStartPos+q, idata,
+                   idatal, centerStartPos, blockStartPos[q],
+                   period[lagBlock[q]]);
+           }
+           else {
+               psseq=sseq+q*ENH_BLOCKL;
+               memset(psseq, 0, ENH_BLOCKL*sizeof(float));
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    * perform enhancement on idata+centerStartPos through
+    * idata+centerStartPos+ENH_BLOCKL-1
+    *---------------------------------------------------------------*/
+
+
+
+
+
+   void enhancer(
+       float *odata,       /* (o) smoothed block, dimension blockl */
+       float *idata,       /* (i) data buffer used for enhancing */
+       int idatal,         /* (i) dimension idata */
+       int centerStartPos, /* (i) first sample current block
+                                  within idata */
+       float alpha0,       /* (i) max correction-energy-fraction
+                                 (in [0,1]) */
+       float *period,      /* (i) pitch period array */
+       float *plocs,       /* (i) locations where period array
+                                  values valid */
+       int periodl         /* (i) dimension of period and plocs */
+   ){
+       float sseq[(2*ENH_HL+1)*ENH_BLOCKL];
+
+       /* get said second sequence of segments */
+
+       getsseq(sseq,idata,idatal,centerStartPos,period,
+           plocs,periodl,ENH_HL);
+
+       /* compute the smoothed output from said second sequence */
+
+       smath(odata,sseq,ENH_HL,alpha0);
+
+   }
+
+   /*----------------------------------------------------------------*
+    * cross correlation
+    *---------------------------------------------------------------*/
+
+   float xCorrCoef(
+       float *target,      /* (i) first array */
+       float *regressor,   /* (i) second array */
+       int subl        /* (i) dimension arrays */
+   ){
+       int i;
+       float ftmp1, ftmp2;
+
+       ftmp1 = 0.0;
+       ftmp2 = 0.0;
+       for (i=0; i<subl; i++) {
+           ftmp1 += target[i]*regressor[i];
+           ftmp2 += regressor[i]*regressor[i];
+       }
+
+       if (ftmp1 > 0.0) {
+           return (float)(ftmp1*ftmp1/ftmp2);
+       }
+
+
+
+
+
+       else {
+           return (float)0.0;
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    * interface for enhancer
+    *---------------------------------------------------------------*/
+
+   int enhancerInterface(
+       float *out,                     /* (o) enhanced signal */
+       float *in,                      /* (i) unenhanced signal */
+       iLBC_Dec_Inst_t *iLBCdec_inst   /* (i) buffers etc */
+   ){
+       float *enh_buf, *enh_period;
+       int iblock, isample;
+       int lag=0, ilag, i, ioffset;
+       float cc, maxcc;
+       float ftmp1, ftmp2;
+       float *inPtr, *enh_bufPtr1, *enh_bufPtr2;
+       float plc_pred[ENH_BLOCKL];
+
+       float lpState[6], downsampled[(ENH_NBLOCKS*ENH_BLOCKL+120)/2];
+       int inLen=ENH_NBLOCKS*ENH_BLOCKL+120;
+       int start, plc_blockl, inlag;
+
+       enh_buf=iLBCdec_inst->enh_buf;
+       enh_period=iLBCdec_inst->enh_period;
+
+       memmove(enh_buf, &enh_buf[iLBCdec_inst->blockl],
+           (ENH_BUFL-iLBCdec_inst->blockl)*sizeof(float));
+
+       memcpy(&enh_buf[ENH_BUFL-iLBCdec_inst->blockl], in,
+           iLBCdec_inst->blockl*sizeof(float));
+
+       if (iLBCdec_inst->mode==30)
+           plc_blockl=ENH_BLOCKL;
+       else
+           plc_blockl=40;
+
+       /* when 20 ms frame, move processing one block */
+       ioffset=0;
+       if (iLBCdec_inst->mode==20) ioffset=1;
+
+       i=3-ioffset;
+       memmove(enh_period, &enh_period[i],
+           (ENH_NBLOCKS_TOT-i)*sizeof(float));
+
+
+
+
+
+
+       /* Set state information to the 6 samples right before
+          the samples to be downsampled. */
+
+       memcpy(lpState,
+           enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-126,
+           6*sizeof(float));
+
+       /* Down sample a factor 2 to save computations */
+
+       DownSample(enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-120,
+                   lpFilt_coefsTbl, inLen-ioffset*ENH_BLOCKL,
+                   lpState, downsampled);
+
+       /* Estimate the pitch in the down sampled domain. */
+       for (iblock = 0; iblock<ENH_NBLOCKS-ioffset; iblock++) {
+
+           lag = 10;
+           maxcc = xCorrCoef(downsampled+60+iblock*
+               ENH_BLOCKL_HALF, downsampled+60+iblock*
+               ENH_BLOCKL_HALF-lag, ENH_BLOCKL_HALF);
+           for (ilag=11; ilag<60; ilag++) {
+               cc = xCorrCoef(downsampled+60+iblock*
+                   ENH_BLOCKL_HALF, downsampled+60+iblock*
+                   ENH_BLOCKL_HALF-ilag, ENH_BLOCKL_HALF);
+
+               if (cc > maxcc) {
+                   maxcc = cc;
+                   lag = ilag;
+               }
+           }
+
+           /* Store the estimated lag in the non-downsampled domain */
+           enh_period[iblock+ENH_NBLOCKS_EXTRA+ioffset] = (float)lag*2;
+
+
+       }
+
+
+       /* PLC was performed on the previous packet */
+       if (iLBCdec_inst->prev_enh_pl==1) {
+
+           inlag=(int)enh_period[ENH_NBLOCKS_EXTRA+ioffset];
+
+           lag = inlag-1;
+           maxcc = xCorrCoef(in, in+lag, plc_blockl);
+           for (ilag=inlag; ilag<=inlag+1; ilag++) {
+               cc = xCorrCoef(in, in+ilag, plc_blockl);
+
+
+
+
+
+
+               if (cc > maxcc) {
+                   maxcc = cc;
+                   lag = ilag;
+               }
+           }
+
+           enh_period[ENH_NBLOCKS_EXTRA+ioffset-1]=(float)lag;
+
+           /* compute new concealed residual for the old lookahead,
+              mix the forward PLC with a backward PLC from
+              the new frame */
+
+           inPtr=&in[lag-1];
+
+           enh_bufPtr1=&plc_pred[plc_blockl-1];
+
+           if (lag>plc_blockl) {
+               start=plc_blockl;
+           } else {
+               start=lag;
+           }
+
+           for (isample = start; isample>0; isample--) {
+               *enh_bufPtr1-- = *inPtr--;
+           }
+
+           enh_bufPtr2=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
+           for (isample = (plc_blockl-1-lag); isample>=0; isample--) {
+               *enh_bufPtr1-- = *enh_bufPtr2--;
+           }
+
+           /* limit energy change */
+           ftmp2=0.0;
+           ftmp1=0.0;
+           for (i=0;i<plc_blockl;i++) {
+               ftmp2+=enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i]*
+                   enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i];
+               ftmp1+=plc_pred[i]*plc_pred[i];
+           }
+           ftmp1=(float)sqrt(ftmp1/(float)plc_blockl);
+           ftmp2=(float)sqrt(ftmp2/(float)plc_blockl);
+           if (ftmp1>(float)2.0*ftmp2 && ftmp1>0.0) {
+               for (i=0;i<plc_blockl-10;i++) {
+                   plc_pred[i]*=(float)2.0*ftmp2/ftmp1;
+               }
+               for (i=plc_blockl-10;i<plc_blockl;i++) {
+                   plc_pred[i]*=(float)(i-plc_blockl+10)*
+                       ((float)1.0-(float)2.0*ftmp2/ftmp1)/(float)(10)+
+
+
+
+
+
+                       (float)2.0*ftmp2/ftmp1;
+               }
+           }
+
+           enh_bufPtr1=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
+           for (i=0; i<plc_blockl; i++) {
+               ftmp1 = (float) (i+1) / (float) (plc_blockl+1);
+               *enh_bufPtr1 *= ftmp1;
+               *enh_bufPtr1 += ((float)1.0-ftmp1)*
+                                   plc_pred[plc_blockl-1-i];
+               enh_bufPtr1--;
+           }
+       }
+
+       if (iLBCdec_inst->mode==20) {
+           /* Enhancer with 40 samples delay */
+           for (iblock = 0; iblock<2; iblock++) {
+               enhancer(out+iblock*ENH_BLOCKL, enh_buf,
+                   ENH_BUFL, (5+iblock)*ENH_BLOCKL+40,
+                   ENH_ALPHA0, enh_period, enh_plocsTbl,
+                       ENH_NBLOCKS_TOT);
+           }
+       } else if (iLBCdec_inst->mode==30) {
+           /* Enhancer with 80 samples delay */
+           for (iblock = 0; iblock<3; iblock++) {
+               enhancer(out+iblock*ENH_BLOCKL, enh_buf,
+                   ENH_BUFL, (4+iblock)*ENH_BLOCKL,
+                   ENH_ALPHA0, enh_period, enh_plocsTbl,
+                       ENH_NBLOCKS_TOT);
+           }
+       }
+
+       return (lag*2);
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h b/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h
new file mode 100644
index 0000000000..8a081fb1bc
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h
@@ -0,0 +1,36 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       enhancer.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+
+
+
+
+   ******************************************************************/
+
+   #ifndef __ENHANCER_H
+   #define __ENHANCER_H
+
+   #include "iLBC_define.h"
+
+   float xCorrCoef(
+       float *target,      /* (i) first array */
+       float *regressor,   /* (i) second array */
+       int subl        /* (i) dimension arrays */
+   );
+
+   int enhancerInterface(
+       float *out,         /* (o) the enhanced recidual signal */
+       float *in,          /* (i) the recidual signal to enhance */
+       iLBC_Dec_Inst_t *iLBCdec_inst
+                           /* (i/o) the decoder state structure */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/filter.c b/sflphone-common/libs/pjproject/third_party/ilbc/filter.c
new file mode 100644
index 0000000000..6565c2beee
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/filter.c
@@ -0,0 +1,175 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       filter.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "iLBC_define.h"
+
+   /*----------------------------------------------------------------*
+    *  all-pole filter
+    *---------------------------------------------------------------*/
+
+   void AllPoleFilter(
+       float *InOut,   /* (i/o) on entrance InOut[-orderCoef] to
+                              InOut[-1] contain the state of the
+                              filter (delayed samples). InOut[0] to
+                              InOut[lengthInOut-1] contain the filter
+                              input, on en exit InOut[-orderCoef] to
+                              InOut[-1] is unchanged and InOut[0] to
+                              InOut[lengthInOut-1] contain filtered
+                              samples */
+       float *Coef,/* (i) filter coefficients, Coef[0] is assumed
+                              to be 1.0 */
+       int lengthInOut,/* (i) number of input/output samples */
+       int orderCoef   /* (i) number of filter coefficients */
+   ){
+       int n,k;
+
+       for(n=0;n<lengthInOut;n++){
+           for(k=1;k<=orderCoef;k++){
+               *InOut -= Coef[k]*InOut[-k];
+
+
+
+
+
+           }
+           InOut++;
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  all-zero filter
+    *---------------------------------------------------------------*/
+
+   void AllZeroFilter(
+       float *In,      /* (i) In[0] to In[lengthInOut-1] contain
+                              filter input samples */
+       float *Coef,/* (i) filter coefficients (Coef[0] is assumed
+                              to be 1.0) */
+       int lengthInOut,/* (i) number of input/output samples */
+       int orderCoef,  /* (i) number of filter coefficients */
+       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
+                              contain the filter state, on exit Out[0]
+                              to Out[lengthInOut-1] contain filtered
+                              samples */
+   ){
+       int n,k;
+
+       for(n=0;n<lengthInOut;n++){
+           *Out = Coef[0]*In[0];
+           for(k=1;k<=orderCoef;k++){
+               *Out += Coef[k]*In[-k];
+           }
+           Out++;
+           In++;
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  pole-zero filter
+    *---------------------------------------------------------------*/
+
+   void ZeroPoleFilter(
+       float *In,      /* (i) In[0] to In[lengthInOut-1] contain
+                              filter input samples In[-orderCoef] to
+                              In[-1] contain state of all-zero
+                              section */
+       float *ZeroCoef,/* (i) filter coefficients for all-zero
+                              section (ZeroCoef[0] is assumed to
+                              be 1.0) */
+       float *PoleCoef,/* (i) filter coefficients for all-pole section
+                              (ZeroCoef[0] is assumed to be 1.0) */
+       int lengthInOut,/* (i) number of input/output samples */
+
+
+
+
+
+       int orderCoef,  /* (i) number of filter coefficients */
+       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
+                              contain state of all-pole section. On
+                              exit Out[0] to Out[lengthInOut-1]
+                              contain filtered samples */
+   ){
+       AllZeroFilter(In,ZeroCoef,lengthInOut,orderCoef,Out);
+       AllPoleFilter(Out,PoleCoef,lengthInOut,orderCoef);
+   }
+
+   /*----------------------------------------------------------------*
+    * downsample (LP filter and decimation)
+    *---------------------------------------------------------------*/
+
+   void DownSample (
+       float  *In,     /* (i) input samples */
+       float  *Coef,   /* (i) filter coefficients */
+       int lengthIn,   /* (i) number of input samples */
+       float  *state,  /* (i) filter state */
+       float  *Out     /* (o) downsampled output */
+   ){
+       float   o;
+       float *Out_ptr = Out;
+       float *Coef_ptr, *In_ptr;
+       float *state_ptr;
+       int i, j, stop;
+
+       /* LP filter and decimate at the same time */
+
+       for (i = DELAY_DS; i < lengthIn; i+=FACTOR_DS)
+       {
+           Coef_ptr = &Coef[0];
+           In_ptr = &In[i];
+           state_ptr = &state[FILTERORDER_DS-2];
+
+           o = (float)0.0;
+
+           stop = (i < FILTERORDER_DS) ? i + 1 : FILTERORDER_DS;
+
+           for (j = 0; j < stop; j++)
+           {
+               o += *Coef_ptr++ * (*In_ptr--);
+           }
+           for (j = i + 1; j < FILTERORDER_DS; j++)
+           {
+               o += *Coef_ptr++ * (*state_ptr--);
+           }
+
+
+
+
+
+
+           *Out_ptr++ = o;
+       }
+
+       /* Get the last part (use zeros as input for the future) */
+
+       for (i=(lengthIn+FACTOR_DS); i<(lengthIn+DELAY_DS);
+               i+=FACTOR_DS) {
+
+           o=(float)0.0;
+
+           if (i<lengthIn) {
+               Coef_ptr = &Coef[0];
+               In_ptr = &In[i];
+               for (j=0; j<FILTERORDER_DS; j++) {
+                       o += *Coef_ptr++ * (*Out_ptr--);
+               }
+           } else {
+               Coef_ptr = &Coef[i-lengthIn];
+               In_ptr = &In[lengthIn-1];
+               for (j=0; j<FILTERORDER_DS-(i-lengthIn); j++) {
+                       o += *Coef_ptr++ * (*In_ptr--);
+               }
+           }
+           *Out_ptr++ = o;
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/filter.h b/sflphone-common/libs/pjproject/third_party/ilbc/filter.h
new file mode 100644
index 0000000000..4c512cd937
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/filter.h
@@ -0,0 +1,80 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       filter.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+
+
+
+
+
+   #ifndef __iLBC_FILTER_H
+   #define __iLBC_FILTER_H
+
+   void AllPoleFilter(
+       float *InOut,   /* (i/o) on entrance InOut[-orderCoef] to
+                              InOut[-1] contain the state of the
+                              filter (delayed samples). InOut[0] to
+                              InOut[lengthInOut-1] contain the filter
+                              input, on en exit InOut[-orderCoef] to
+                              InOut[-1] is unchanged and InOut[0] to
+                              InOut[lengthInOut-1] contain filtered
+                              samples */
+       float *Coef,/* (i) filter coefficients, Coef[0] is assumed
+                              to be 1.0 */
+       int lengthInOut,/* (i) number of input/output samples */
+       int orderCoef   /* (i) number of filter coefficients */
+   );
+
+   void AllZeroFilter(
+       float *In,      /* (i) In[0] to In[lengthInOut-1] contain
+                              filter input samples */
+       float *Coef,/* (i) filter coefficients (Coef[0] is assumed
+                              to be 1.0) */
+       int lengthInOut,/* (i) number of input/output samples */
+       int orderCoef,  /* (i) number of filter coefficients */
+       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
+                              contain the filter state, on exit Out[0]
+                              to Out[lengthInOut-1] contain filtered
+                              samples */
+   );
+
+   void ZeroPoleFilter(
+       float *In,      /* (i) In[0] to In[lengthInOut-1] contain filter
+                              input samples In[-orderCoef] to In[-1]
+                              contain state of all-zero section */
+       float *ZeroCoef,/* (i) filter coefficients for all-zero
+                              section (ZeroCoef[0] is assumed to
+                              be 1.0) */
+       float *PoleCoef,/* (i) filter coefficients for all-pole section
+                              (ZeroCoef[0] is assumed to be 1.0) */
+       int lengthInOut,/* (i) number of input/output samples */
+       int orderCoef,  /* (i) number of filter coefficients */
+       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
+                              contain state of all-pole section. On
+                              exit Out[0] to Out[lengthInOut-1]
+                              contain filtered samples */
+   );
+
+
+
+
+
+
+   void DownSample (
+       float  *In,     /* (i) input samples */
+       float  *Coef,   /* (i) filter coefficients */
+       int lengthIn,   /* (i) number of input samples */
+       float  *state,  /* (i) filter state */
+       float  *Out     /* (o) downsampled output */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c b/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c
new file mode 100644
index 0000000000..0e74ff8270
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c
@@ -0,0 +1,116 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+
+
+
+
+
+       gainquant.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <string.h>
+   #include <math.h>
+   #include "constants.h"
+   #include "filter.h"
+
+   /*----------------------------------------------------------------*
+    *  quantizer for the gain in the gain-shape coding of residual
+    *---------------------------------------------------------------*/
+
+   float gainquant(/* (o) quantized gain value */
+       float in,       /* (i) gain value */
+       float maxIn,/* (i) maximum of gain value */
+       int cblen,      /* (i) number of quantization indices */
+       int *index      /* (o) quantization index */
+   ){
+       int i, tindex;
+       float minmeasure,measure, *cb, scale;
+
+       /* ensure a lower bound on the scaling factor */
+
+       scale=maxIn;
+
+       if (scale<0.1) {
+           scale=(float)0.1;
+       }
+
+       /* select the quantization table */
+
+       if (cblen == 8) {
+           cb = gain_sq3Tbl;
+       } else if (cblen == 16) {
+           cb = gain_sq4Tbl;
+       } else  {
+           cb = gain_sq5Tbl;
+       }
+
+       /* select the best index in the quantization table */
+
+       minmeasure=10000000.0;
+       tindex=0;
+       for (i=0; i<cblen; i++) {
+
+
+
+
+
+           measure=(in-scale*cb[i])*(in-scale*cb[i]);
+
+           if (measure<minmeasure) {
+               tindex=i;
+               minmeasure=measure;
+           }
+       }
+       *index=tindex;
+
+       /* return the quantized value */
+
+       return scale*cb[tindex];
+   }
+
+   /*----------------------------------------------------------------*
+    *  decoder for quantized gains in the gain-shape coding of
+    *  residual
+    *---------------------------------------------------------------*/
+
+   float gaindequant(  /* (o) quantized gain value */
+       int index,      /* (i) quantization index */
+       float maxIn,/* (i) maximum of unquantized gain */
+       int cblen       /* (i) number of quantization indices */
+   ){
+       float scale;
+
+       /* obtain correct scale factor */
+
+       scale=(float)fabs(maxIn);
+
+       if (scale<0.1) {
+           scale=(float)0.1;
+       }
+
+       /* select the quantization table and return the decoded value */
+
+       if (cblen==8) {
+           return scale*gain_sq3Tbl[index];
+       } else if (cblen==16) {
+           return scale*gain_sq4Tbl[index];
+       }
+       else if (cblen==32) {
+           return scale*gain_sq5Tbl[index];
+       }
+
+       return 0.0;
+   }
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h b/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h
new file mode 100644
index 0000000000..0d024246d7
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h
@@ -0,0 +1,30 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       gainquant.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_GAINQUANT_H
+   #define __iLBC_GAINQUANT_H
+
+   float gainquant(/* (o) quantized gain value */
+       float in,       /* (i) gain value */
+       float maxIn,/* (i) maximum of gain value */
+       int cblen,      /* (i) number of quantization indices */
+       int *index      /* (o) quantization index */
+   );
+
+   float gaindequant(  /* (o) quantized gain value */
+       int index,      /* (i) quantization index */
+       float maxIn,/* (i) maximum of unquantized gain */
+       int cblen       /* (i) number of quantization indices */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c b/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c
new file mode 100644
index 0000000000..4f2d291417
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c
@@ -0,0 +1,193 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       getCBvec.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "iLBC_define.h"
+   #include "constants.h"
+   #include <string.h>
+
+   /*----------------------------------------------------------------*
+    *  Construct codebook vector for given index.
+    *---------------------------------------------------------------*/
+
+   void getCBvec(
+
+
+
+
+
+       float *cbvec,   /* (o) Constructed codebook vector */
+       float *mem,     /* (i) Codebook buffer */
+       int index,      /* (i) Codebook index */
+       int lMem,       /* (i) Length of codebook buffer */
+       int cbveclen/* (i) Codebook vector length */
+   ){
+       int j, k, n, memInd, sFilt;
+       float tmpbuf[CB_MEML];
+       int base_size;
+       int ilow, ihigh;
+       float alfa, alfa1;
+
+       /* Determine size of codebook sections */
+
+       base_size=lMem-cbveclen+1;
+
+       if (cbveclen==SUBL) {
+           base_size+=cbveclen/2;
+       }
+
+       /* No filter -> First codebook section */
+
+       if (index<lMem-cbveclen+1) {
+
+           /* first non-interpolated vectors */
+
+           k=index+cbveclen;
+           /* get vector */
+           memcpy(cbvec, mem+lMem-k, cbveclen*sizeof(float));
+
+       } else if (index < base_size) {
+
+           k=2*(index-(lMem-cbveclen+1))+cbveclen;
+
+           ihigh=k/2;
+           ilow=ihigh-5;
+
+           /* Copy first noninterpolated part */
+
+           memcpy(cbvec, mem+lMem-k/2, ilow*sizeof(float));
+
+           /* interpolation */
+
+           alfa1=(float)0.2;
+           alfa=0.0;
+           for (j=ilow; j<ihigh; j++) {
+               cbvec[j]=((float)1.0-alfa)*mem[lMem-k/2+j]+
+                   alfa*mem[lMem-k+j];
+
+
+
+
+
+               alfa+=alfa1;
+           }
+
+           /* Copy second noninterpolated part */
+
+           memcpy(cbvec+ihigh, mem+lMem-k+ihigh,
+               (cbveclen-ihigh)*sizeof(float));
+
+       }
+
+       /* Higher codebook section based on filtering */
+
+       else {
+
+           /* first non-interpolated vectors */
+
+           if (index-base_size<lMem-cbveclen+1) {
+               float tempbuff2[CB_MEML+CB_FILTERLEN+1];
+               float *pos;
+               float *pp, *pp1;
+
+               memset(tempbuff2, 0,
+                   CB_HALFFILTERLEN*sizeof(float));
+               memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,
+                   lMem*sizeof(float));
+               memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,
+                   (CB_HALFFILTERLEN+1)*sizeof(float));
+
+               k=index-base_size+cbveclen;
+               sFilt=lMem-k;
+               memInd=sFilt+1-CB_HALFFILTERLEN;
+
+               /* do filtering */
+               pos=cbvec;
+               memset(pos, 0, cbveclen*sizeof(float));
+               for (n=0; n<cbveclen; n++) {
+                   pp=&tempbuff2[memInd+n+CB_HALFFILTERLEN];
+                   pp1=&cbfiltersTbl[CB_FILTERLEN-1];
+                   for (j=0; j<CB_FILTERLEN; j++) {
+                       (*pos)+=(*pp++)*(*pp1--);
+                   }
+                   pos++;
+               }
+           }
+
+           /* interpolated vectors */
+
+           else {
+
+
+
+
+
+               float tempbuff2[CB_MEML+CB_FILTERLEN+1];
+
+               float *pos;
+               float *pp, *pp1;
+               int i;
+
+               memset(tempbuff2, 0,
+                   CB_HALFFILTERLEN*sizeof(float));
+               memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,
+                   lMem*sizeof(float));
+               memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,
+                   (CB_HALFFILTERLEN+1)*sizeof(float));
+
+               k=2*(index-base_size-
+                   (lMem-cbveclen+1))+cbveclen;
+               sFilt=lMem-k;
+               memInd=sFilt+1-CB_HALFFILTERLEN;
+
+               /* do filtering */
+               pos=&tmpbuf[sFilt];
+               memset(pos, 0, k*sizeof(float));
+               for (i=0; i<k; i++) {
+                   pp=&tempbuff2[memInd+i+CB_HALFFILTERLEN];
+                   pp1=&cbfiltersTbl[CB_FILTERLEN-1];
+                   for (j=0; j<CB_FILTERLEN; j++) {
+                       (*pos)+=(*pp++)*(*pp1--);
+                   }
+                   pos++;
+               }
+
+               ihigh=k/2;
+               ilow=ihigh-5;
+
+               /* Copy first noninterpolated part */
+
+               memcpy(cbvec, tmpbuf+lMem-k/2,
+                   ilow*sizeof(float));
+
+               /* interpolation */
+
+               alfa1=(float)0.2;
+               alfa=0.0;
+               for (j=ilow; j<ihigh; j++) {
+                   cbvec[j]=((float)1.0-alfa)*
+                       tmpbuf[lMem-k/2+j]+alfa*tmpbuf[lMem-k+j];
+                   alfa+=alfa1;
+               }
+
+
+
+
+
+
+               /* Copy second noninterpolated part */
+
+               memcpy(cbvec+ihigh, tmpbuf+lMem-k+ihigh,
+                   (cbveclen-ihigh)*sizeof(float));
+           }
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h b/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h
new file mode 100644
index 0000000000..0080907c02
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h
@@ -0,0 +1,25 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       getCBvec.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_GETCBVEC_H
+   #define __iLBC_GETCBVEC_H
+
+   void getCBvec(
+       float *cbvec,   /* (o) Constructed codebook vector */
+       float *mem,     /* (i) Codebook buffer */
+       int index,      /* (i) Codebook index */
+       int lMem,       /* (i) Length of codebook buffer */
+       int cbveclen/* (i) Codebook vector length */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c b/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c
new file mode 100644
index 0000000000..1aba65788f
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c
@@ -0,0 +1,326 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       helpfun.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+
+   #include "iLBC_define.h"
+   #include "constants.h"
+
+   /*----------------------------------------------------------------*
+    *  calculation of auto correlation
+    *---------------------------------------------------------------*/
+
+   void autocorr(
+       float *r,       /* (o) autocorrelation vector */
+       const float *x, /* (i) data vector */
+       int N,          /* (i) length of data vector */
+       int order       /* largest lag for calculated
+                          autocorrelations */
+   ){
+       int     lag, n;
+       float   sum;
+
+       for (lag = 0; lag <= order; lag++) {
+           sum = 0;
+           for (n = 0; n < N - lag; n++) {
+               sum += x[n] * x[n+lag];
+           }
+           r[lag] = sum;
+       }
+
+
+
+
+
+   }
+
+   /*----------------------------------------------------------------*
+    *  window multiplication
+    *---------------------------------------------------------------*/
+
+   void window(
+       float *z,       /* (o) the windowed data */
+       const float *x, /* (i) the original data vector */
+       const float *y, /* (i) the window */
+       int N           /* (i) length of all vectors */
+   ){
+       int     i;
+
+       for (i = 0; i < N; i++) {
+           z[i] = x[i] * y[i];
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  levinson-durbin solution for lpc coefficients
+    *---------------------------------------------------------------*/
+
+   void levdurb(
+       float *a,       /* (o) lpc coefficient vector starting
+                              with 1.0 */
+       float *k,       /* (o) reflection coefficients */
+       float *r,       /* (i) autocorrelation vector */
+       int order       /* (i) order of lpc filter */
+   ){
+       float  sum, alpha;
+       int     m, m_h, i;
+
+       a[0] = 1.0;
+
+       if (r[0] < EPS) { /* if r[0] <= 0, set LPC coeff. to zero */
+           for (i = 0; i < order; i++) {
+               k[i] = 0;
+               a[i+1] = 0;
+           }
+       } else {
+           a[1] = k[0] = -r[1]/r[0];
+           alpha = r[0] + r[1] * k[0];
+           for (m = 1; m < order; m++){
+               sum = r[m + 1];
+               for (i = 0; i < m; i++){
+                   sum += a[i+1] * r[m - i];
+               }
+
+
+
+
+
+               k[m] = -sum / alpha;
+               alpha += k[m] * sum;
+               m_h = (m + 1) >> 1;
+               for (i = 0; i < m_h; i++){
+                   sum = a[i+1] + k[m] * a[m - i];
+                   a[m - i] += k[m] * a[i+1];
+                   a[i+1] = sum;
+               }
+               a[m+1] = k[m];
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  interpolation between vectors
+    *---------------------------------------------------------------*/
+
+   void interpolate(
+       float *out,      /* (o) the interpolated vector */
+       float *in1,     /* (i) the first vector for the
+                              interpolation */
+       float *in2,     /* (i) the second vector for the
+                              interpolation */
+       float coef,      /* (i) interpolation weights */
+       int length      /* (i) length of all vectors */
+   ){
+       int i;
+       float invcoef;
+
+       invcoef = (float)1.0 - coef;
+       for (i = 0; i < length; i++) {
+           out[i] = coef * in1[i] + invcoef * in2[i];
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  lpc bandwidth expansion
+    *---------------------------------------------------------------*/
+
+   void bwexpand(
+       float *out,      /* (o) the bandwidth expanded lpc
+                              coefficients */
+       float *in,      /* (i) the lpc coefficients before bandwidth
+                              expansion */
+       float coef,     /* (i) the bandwidth expansion factor */
+       int length      /* (i) the length of lpc coefficient vectors */
+   ){
+       int i;
+
+
+
+
+
+       float  chirp;
+
+       chirp = coef;
+
+       out[0] = in[0];
+       for (i = 1; i < length; i++) {
+           out[i] = chirp * in[i];
+           chirp *= coef;
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  vector quantization
+    *---------------------------------------------------------------*/
+
+   void vq(
+       float *Xq,      /* (o) the quantized vector */
+       int *index,     /* (o) the quantization index */
+       const float *CB,/* (i) the vector quantization codebook */
+       float *X,       /* (i) the vector to quantize */
+       int n_cb,       /* (i) the number of vectors in the codebook */
+       int dim         /* (i) the dimension of all vectors */
+   ){
+       int     i, j;
+       int     pos, minindex;
+       float   dist, tmp, mindist;
+
+       pos = 0;
+       mindist = FLOAT_MAX;
+       minindex = 0;
+       for (j = 0; j < n_cb; j++) {
+           dist = X[0] - CB[pos];
+           dist *= dist;
+           for (i = 1; i < dim; i++) {
+               tmp = X[i] - CB[pos + i];
+               dist += tmp*tmp;
+           }
+
+           if (dist < mindist) {
+               mindist = dist;
+               minindex = j;
+           }
+           pos += dim;
+       }
+       for (i = 0; i < dim; i++) {
+           Xq[i] = CB[minindex*dim + i];
+       }
+       *index = minindex;
+
+
+
+
+
+   }
+
+   /*----------------------------------------------------------------*
+    *  split vector quantization
+    *---------------------------------------------------------------*/
+
+   void SplitVQ(
+       float *qX,      /* (o) the quantized vector */
+       int *index,     /* (o) a vector of indexes for all vector
+                              codebooks in the split */
+       float *X,       /* (i) the vector to quantize */
+       const float *CB,/* (i) the quantizer codebook */
+       int nsplit,     /* the number of vector splits */
+       const int *dim, /* the dimension of X and qX */
+       const int *cbsize /* the number of vectors in the codebook */
+   ){
+       int    cb_pos, X_pos, i;
+
+       cb_pos = 0;
+       X_pos= 0;
+       for (i = 0; i < nsplit; i++) {
+           vq(qX + X_pos, index + i, CB + cb_pos, X + X_pos,
+               cbsize[i], dim[i]);
+           X_pos += dim[i];
+           cb_pos += dim[i] * cbsize[i];
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  scalar quantization
+    *---------------------------------------------------------------*/
+
+   void sort_sq(
+       float *xq,      /* (o) the quantized value */
+       int *index,     /* (o) the quantization index */
+       float x,    /* (i) the value to quantize */
+       const float *cb,/* (i) the quantization codebook */
+       int cb_size      /* (i) the size of the quantization codebook */
+   ){
+       int i;
+
+       if (x <= cb[0]) {
+           *index = 0;
+           *xq = cb[0];
+       } else {
+           i = 0;
+           while ((x > cb[i]) && i < cb_size - 1) {
+               i++;
+
+
+
+
+
+           }
+
+           if (x > ((cb[i] + cb[i - 1])/2)) {
+               *index = i;
+               *xq = cb[i];
+           } else {
+               *index = i - 1;
+               *xq = cb[i - 1];
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  check for stability of lsf coefficients
+    *---------------------------------------------------------------*/
+
+   int LSF_check(    /* (o) 1 for stable lsf vectors and 0 for
+                              nonstable ones */
+       float *lsf,     /* (i) a table of lsf vectors */
+       int dim,    /* (i) the dimension of each lsf vector */
+       int NoAn    /* (i) the number of lsf vectors in the
+                              table */
+   ){
+       int k,n,m, Nit=2, change=0,pos;
+       float tmp;
+       static float eps=(float)0.039; /* 50 Hz */
+       static float eps2=(float)0.0195;
+       static float maxlsf=(float)3.14; /* 4000 Hz */
+       static float minlsf=(float)0.01; /* 0 Hz */
+
+       /* LSF separation check*/
+
+       for (n=0; n<Nit; n++) { /* Run through a couple of times */
+           for (m=0; m<NoAn; m++) { /* Number of analyses per frame */
+               for (k=0; k<(dim-1); k++) {
+                   pos=m*dim+k;
+
+                   if ((lsf[pos+1]-lsf[pos])<eps) {
+
+                       if (lsf[pos+1]<lsf[pos]) {
+                           tmp=lsf[pos+1];
+                           lsf[pos+1]= lsf[pos]+eps2;
+                           lsf[pos]= lsf[pos+1]-eps2;
+                       } else {
+                           lsf[pos]-=eps2;
+                           lsf[pos+1]+=eps2;
+                       }
+                       change=1;
+
+
+
+
+
+                   }
+
+                   if (lsf[pos]<minlsf) {
+                       lsf[pos]=minlsf;
+                       change=1;
+                   }
+
+                   if (lsf[pos]>maxlsf) {
+                       lsf[pos]=maxlsf;
+                       change=1;
+                   }
+               }
+           }
+       }
+
+       return change;
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h b/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h
new file mode 100644
index 0000000000..931ca68a64
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h
@@ -0,0 +1,106 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       helpfun.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_HELPFUN_H
+   #define __iLBC_HELPFUN_H
+
+   void autocorr(
+       float *r,       /* (o) autocorrelation vector */
+       const float *x, /* (i) data vector */
+       int N,          /* (i) length of data vector */
+       int order       /* largest lag for calculated
+                          autocorrelations */
+   );
+
+   void window(
+       float *z,       /* (o) the windowed data */
+       const float *x, /* (i) the original data vector */
+       const float *y, /* (i) the window */
+       int N           /* (i) length of all vectors */
+   );
+
+   void levdurb(
+       float *a,       /* (o) lpc coefficient vector starting
+                              with 1.0 */
+       float *k,       /* (o) reflection coefficients */
+       float *r,       /* (i) autocorrelation vector */
+       int order       /* (i) order of lpc filter */
+   );
+
+   void interpolate(
+
+
+
+
+
+       float *out,     /* (o) the interpolated vector */
+       float *in1,     /* (i) the first vector for the
+                              interpolation */
+       float *in2,     /* (i) the second vector for the
+                              interpolation */
+       float coef,     /* (i) interpolation weights */
+       int length      /* (i) length of all vectors */
+   );
+
+   void bwexpand(
+       float *out,     /* (o) the bandwidth expanded lpc
+                              coefficients */
+       float *in,      /* (i) the lpc coefficients before bandwidth
+                              expansion */
+       float coef,     /* (i) the bandwidth expansion factor */
+       int length      /* (i) the length of lpc coefficient vectors */
+   );
+
+   void vq(
+       float *Xq,      /* (o) the quantized vector */
+       int *index,     /* (o) the quantization index */
+       const float *CB,/* (i) the vector quantization codebook */
+       float *X,       /* (i) the vector to quantize */
+       int n_cb,       /* (i) the number of vectors in the codebook */
+       int dim         /* (i) the dimension of all vectors */
+   );
+
+   void SplitVQ(
+       float *qX,      /* (o) the quantized vector */
+       int *index,     /* (o) a vector of indexes for all vector
+                              codebooks in the split */
+       float *X,       /* (i) the vector to quantize */
+       const float *CB,/* (i) the quantizer codebook */
+       int nsplit,     /* the number of vector splits */
+       const int *dim, /* the dimension of X and qX */
+       const int *cbsize /* the number of vectors in the codebook */
+   );
+
+
+   void sort_sq(
+       float *xq,      /* (o) the quantized value */
+       int *index,     /* (o) the quantization index */
+       float x,    /* (i) the value to quantize */
+       const float *cb,/* (i) the quantization codebook */
+       int cb_size     /* (i) the size of the quantization codebook */
+   );
+
+   int LSF_check(      /* (o) 1 for stable lsf vectors and 0 for
+
+
+
+
+
+                              nonstable ones */
+       float *lsf,     /* (i) a table of lsf vectors */
+       int dim,    /* (i) the dimension of each lsf vector */
+       int NoAn    /* (i) the number of lsf vectors in the
+                              table */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c b/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c
new file mode 100644
index 0000000000..7ceee09643
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c
@@ -0,0 +1,65 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+
+
+
+
+       hpInput.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "constants.h"
+
+   /*----------------------------------------------------------------*
+    *  Input high-pass filter
+    *---------------------------------------------------------------*/
+
+   void hpInput(
+       float *In,  /* (i) vector to filter */
+       int len,    /* (i) length of vector to filter */
+       float *Out, /* (o) the resulting filtered vector */
+       float *mem  /* (i/o) the filter state */
+   ){
+       int i;
+       float *pi, *po;
+
+       /* all-zero section*/
+
+       pi = &In[0];
+       po = &Out[0];
+       for (i=0; i<len; i++) {
+           *po = hpi_zero_coefsTbl[0] * (*pi);
+           *po += hpi_zero_coefsTbl[1] * mem[0];
+           *po += hpi_zero_coefsTbl[2] * mem[1];
+
+           mem[1] = mem[0];
+           mem[0] = *pi;
+           po++;
+           pi++;
+
+       }
+
+       /* all-pole section*/
+
+       po = &Out[0];
+       for (i=0; i<len; i++) {
+           *po -= hpi_pole_coefsTbl[1] * mem[2];
+           *po -= hpi_pole_coefsTbl[2] * mem[3];
+
+           mem[3] = mem[2];
+           mem[2] = *po;
+           po++;
+
+
+
+
+
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h b/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h
new file mode 100644
index 0000000000..3b020d11df
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h
@@ -0,0 +1,24 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       hpInput.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_HPINPUT_H
+   #define __iLBC_HPINPUT_H
+
+   void hpInput(
+       float *In,  /* (i) vector to filter */
+       int len,    /* (i) length of vector to filter */
+       float *Out, /* (o) the resulting filtered vector */
+       float *mem  /* (i/o) the filter state */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c b/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c
new file mode 100644
index 0000000000..756160a657
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c
@@ -0,0 +1,61 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       hpOutput.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "constants.h"
+
+   /*----------------------------------------------------------------*
+    *  Output high-pass filter
+    *---------------------------------------------------------------*/
+
+   void hpOutput(
+
+
+
+
+
+       float *In,  /* (i) vector to filter */
+       int len,/* (i) length of vector to filter */
+       float *Out, /* (o) the resulting filtered vector */
+       float *mem  /* (i/o) the filter state */
+   ){
+       int i;
+       float *pi, *po;
+
+       /* all-zero section*/
+
+       pi = &In[0];
+       po = &Out[0];
+       for (i=0; i<len; i++) {
+           *po = hpo_zero_coefsTbl[0] * (*pi);
+           *po += hpo_zero_coefsTbl[1] * mem[0];
+           *po += hpo_zero_coefsTbl[2] * mem[1];
+
+           mem[1] = mem[0];
+           mem[0] = *pi;
+           po++;
+           pi++;
+
+       }
+
+       /* all-pole section*/
+
+       po = &Out[0];
+       for (i=0; i<len; i++) {
+           *po -= hpo_pole_coefsTbl[1] * mem[2];
+           *po -= hpo_pole_coefsTbl[2] * mem[3];
+
+           mem[3] = mem[2];
+           mem[2] = *po;
+           po++;
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h b/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h
new file mode 100644
index 0000000000..b213a19348
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h
@@ -0,0 +1,24 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       hpOutput.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_HPOUTPUT_H
+   #define __iLBC_HPOUTPUT_H
+
+   void hpOutput(
+       float *In,  /* (i) vector to filter */
+       int len,/* (i) length of vector to filter */
+       float *Out, /* (o) the resulting filtered vector */
+       float *mem  /* (i/o) the filter state */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c b/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c
new file mode 100644
index 0000000000..ee9a73ca58
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c
@@ -0,0 +1,112 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iCBConstruct.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+
+   #include "iLBC_define.h"
+   #include "gainquant.h"
+   #include "getCBvec.h"
+
+   /*----------------------------------------------------------------*
+    *  Convert the codebook indexes to make the search easier
+    *---------------------------------------------------------------*/
+
+
+
+
+
+
+   void index_conv_enc(
+       int *index          /* (i/o) Codebook indexes */
+   ){
+       int k;
+
+       for (k=1; k<CB_NSTAGES; k++) {
+
+           if ((index[k]>=108)&&(index[k]<172)) {
+               index[k]-=64;
+           } else if (index[k]>=236) {
+               index[k]-=128;
+           } else {
+               /* ERROR */
+           }
+       }
+   }
+
+   void index_conv_dec(
+       int *index          /* (i/o) Codebook indexes */
+   ){
+       int k;
+
+       for (k=1; k<CB_NSTAGES; k++) {
+
+           if ((index[k]>=44)&&(index[k]<108)) {
+               index[k]+=64;
+           } else if ((index[k]>=108)&&(index[k]<128)) {
+               index[k]+=128;
+           } else {
+               /* ERROR */
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  Construct decoded vector from codebook and gains.
+    *---------------------------------------------------------------*/
+
+   void iCBConstruct(
+       float *decvector,   /* (o) Decoded vector */
+       int *index,         /* (i) Codebook indices */
+       int *gain_index,/* (i) Gain quantization indices */
+       float *mem,         /* (i) Buffer for codevector construction */
+       int lMem,           /* (i) Length of buffer */
+       int veclen,         /* (i) Length of vector */
+       int nStages         /* (i) Number of codebook stages */
+   ){
+       int j,k;
+
+
+
+
+
+       float gain[CB_NSTAGES];
+       float cbvec[SUBL];
+
+       /* gain de-quantization */
+
+       gain[0] = gaindequant(gain_index[0], 1.0, 32);
+       if (nStages > 1) {
+           gain[1] = gaindequant(gain_index[1],
+               (float)fabs(gain[0]), 16);
+       }
+       if (nStages > 2) {
+           gain[2] = gaindequant(gain_index[2],
+               (float)fabs(gain[1]), 8);
+       }
+
+       /* codebook vector construction and construction of
+       total vector */
+
+       getCBvec(cbvec, mem, index[0], lMem, veclen);
+       for (j=0;j<veclen;j++){
+           decvector[j] = gain[0]*cbvec[j];
+       }
+       if (nStages > 1) {
+           for (k=1; k<nStages; k++) {
+               getCBvec(cbvec, mem, index[k], lMem, veclen);
+               for (j=0;j<veclen;j++) {
+                   decvector[j] += gain[k]*cbvec[j];
+               }
+           }
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h b/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h
new file mode 100644
index 0000000000..143501ed64
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h
@@ -0,0 +1,40 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iCBConstruct.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+
+
+
+
+
+   ******************************************************************/
+
+   #ifndef __iLBC_ICBCONSTRUCT_H
+   #define __iLBC_ICBCONSTRUCT_H
+
+   void index_conv_enc(
+       int *index          /* (i/o) Codebook indexes */
+   );
+
+   void index_conv_dec(
+       int *index          /* (i/o) Codebook indexes */
+   );
+
+   void iCBConstruct(
+       float *decvector,   /* (o) Decoded vector */
+       int *index,         /* (i) Codebook indices */
+       int *gain_index,/* (i) Gain quantization indices */
+       float *mem,         /* (i) Buffer for codevector construction */
+       int lMem,           /* (i) Length of buffer */
+       int veclen,         /* (i) Length of vector */
+       int nStages         /* (i) Number of codebook stages */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c b/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c
new file mode 100644
index 0000000000..e0442bf054
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c
@@ -0,0 +1,515 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iCBSearch.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <string.h>
+
+   #include "iLBC_define.h"
+   #include "gainquant.h"
+   #include "createCB.h"
+   #include "filter.h"
+   #include "constants.h"
+
+   /*----------------------------------------------------------------*
+    *  Search routine for codebook encoding and gain quantization.
+    *---------------------------------------------------------------*/
+
+   void iCBSearch(
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i) the encoder state structure */
+       int *index,         /* (o) Codebook indices */
+       int *gain_index,/* (o) Gain quantization indices */
+
+
+
+
+
+       float *intarget,/* (i) Target vector for encoding */
+       float *mem,         /* (i) Buffer for codebook construction */
+       int lMem,           /* (i) Length of buffer */
+       int lTarget,    /* (i) Length of vector */
+       int nStages,    /* (i) Number of codebook stages */
+       float *weightDenum, /* (i) weighting filter coefficients */
+       float *weightState, /* (i) weighting filter state */
+       int block           /* (i) the sub-block number */
+   ){
+       int i, j, icount, stage, best_index, range, counter;
+       float max_measure, gain, measure, crossDot, ftmp;
+       float gains[CB_NSTAGES];
+       float target[SUBL];
+       int base_index, sInd, eInd, base_size;
+       int sIndAug=0, eIndAug=0;
+       float buf[CB_MEML+SUBL+2*LPC_FILTERORDER];
+       float invenergy[CB_EXPAND*128], energy[CB_EXPAND*128];
+       float *pp, *ppi=0, *ppo=0, *ppe=0;
+       float cbvectors[CB_MEML];
+       float tene, cene, cvec[SUBL];
+       float aug_vec[SUBL];
+
+       memset(cvec,0,SUBL*sizeof(float));
+
+       /* Determine size of codebook sections */
+
+       base_size=lMem-lTarget+1;
+
+       if (lTarget==SUBL) {
+           base_size=lMem-lTarget+1+lTarget/2;
+       }
+
+       /* setup buffer for weighting */
+
+       memcpy(buf,weightState,sizeof(float)*LPC_FILTERORDER);
+       memcpy(buf+LPC_FILTERORDER,mem,lMem*sizeof(float));
+       memcpy(buf+LPC_FILTERORDER+lMem,intarget,lTarget*sizeof(float));
+
+       /* weighting */
+
+       AllPoleFilter(buf+LPC_FILTERORDER, weightDenum,
+           lMem+lTarget, LPC_FILTERORDER);
+
+       /* Construct the codebook and target needed */
+
+       memcpy(target, buf+LPC_FILTERORDER+lMem, lTarget*sizeof(float));
+
+       tene=0.0;
+
+
+
+
+
+       for (i=0; i<lTarget; i++) {
+           tene+=target[i]*target[i];
+       }
+
+       /* Prepare search over one more codebook section. This section
+          is created by filtering the original buffer with a filter. */
+
+       filteredCBvecs(cbvectors, buf+LPC_FILTERORDER, lMem);
+
+       /* The Main Loop over stages */
+
+       for (stage=0; stage<nStages; stage++) {
+
+           range = search_rangeTbl[block][stage];
+
+           /* initialize search measure */
+
+           max_measure = (float)-10000000.0;
+           gain = (float)0.0;
+           best_index = 0;
+
+           /* Compute cross dot product between the target
+              and the CB memory */
+
+           crossDot=0.0;
+           pp=buf+LPC_FILTERORDER+lMem-lTarget;
+           for (j=0; j<lTarget; j++) {
+               crossDot += target[j]*(*pp++);
+           }
+
+           if (stage==0) {
+
+               /* Calculate energy in the first block of
+                 'lTarget' samples. */
+               ppe = energy;
+               ppi = buf+LPC_FILTERORDER+lMem-lTarget-1;
+               ppo = buf+LPC_FILTERORDER+lMem-1;
+
+               *ppe=0.0;
+               pp=buf+LPC_FILTERORDER+lMem-lTarget;
+               for (j=0; j<lTarget; j++) {
+                   *ppe+=(*pp)*(*pp);
+		   ++pp;
+               }
+
+               if (*ppe>0.0) {
+                   invenergy[0] = (float) 1.0 / (*ppe + EPS);
+               } else {
+                   invenergy[0] = (float) 0.0;
+
+
+
+
+
+               }
+               ppe++;
+
+               measure=(float)-10000000.0;
+
+               if (crossDot > 0.0) {
+                      measure = crossDot*crossDot*invenergy[0];
+               }
+           }
+           else {
+               measure = crossDot*crossDot*invenergy[0];
+           }
+
+           /* check if measure is better */
+           ftmp = crossDot*invenergy[0];
+
+           if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
+               best_index = 0;
+               max_measure = measure;
+               gain = ftmp;
+           }
+
+           /* loop over the main first codebook section,
+              full search */
+
+           for (icount=1; icount<range; icount++) {
+
+               /* calculate measure */
+
+               crossDot=0.0;
+               pp = buf+LPC_FILTERORDER+lMem-lTarget-icount;
+
+               for (j=0; j<lTarget; j++) {
+                   crossDot += target[j]*(*pp++);
+               }
+
+               if (stage==0) {
+                   *ppe++ = energy[icount-1] + (*ppi)*(*ppi) -
+                       (*ppo)*(*ppo);
+                   ppo--;
+                   ppi--;
+
+                   if (energy[icount]>0.0) {
+                       invenergy[icount] =
+                           (float)1.0/(energy[icount]+EPS);
+                   } else {
+                       invenergy[icount] = (float) 0.0;
+                   }
+
+
+
+
+
+                   measure=(float)-10000000.0;
+
+                   if (crossDot > 0.0) {
+                       measure = crossDot*crossDot*invenergy[icount];
+                   }
+               }
+               else {
+                   measure = crossDot*crossDot*invenergy[icount];
+               }
+
+               /* check if measure is better */
+               ftmp = crossDot*invenergy[icount];
+
+               if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
+                   best_index = icount;
+                   max_measure = measure;
+                   gain = ftmp;
+               }
+           }
+
+           /* Loop over augmented part in the first codebook
+            * section, full search.
+            * The vectors are interpolated.
+            */
+
+           if (lTarget==SUBL) {
+
+               /* Search for best possible cb vector and
+                  compute the CB-vectors' energy. */
+               searchAugmentedCB(20, 39, stage, base_size-lTarget/2,
+                   target, buf+LPC_FILTERORDER+lMem,
+                   &max_measure, &best_index, &gain, energy,
+                   invenergy);
+           }
+
+           /* set search range for following codebook sections */
+
+           base_index=best_index;
+
+           /* unrestricted search */
+
+#	   if CB_RESRANGE == -1
+           //if (CB_RESRANGE == -1) {
+               sInd=0;
+               eInd=range-1;
+               sIndAug=20;
+               eIndAug=39;
+           //}
+
+#	   else
+
+           /* restricted search around best index from first
+           codebook section */
+
+           //else {
+               /* Initialize search indices */
+               sIndAug=0;
+               eIndAug=0;
+               sInd=base_index-CB_RESRANGE/2;
+               eInd=sInd+CB_RESRANGE;
+
+               if (lTarget==SUBL) {
+
+                   if (sInd<0) {
+
+                       sIndAug = 40 + sInd;
+                       eIndAug = 39;
+                       sInd=0;
+
+                   } else if ( base_index < (base_size-20) ) {
+
+                       if (eInd > range) {
+                           sInd -= (eInd-range);
+                           eInd = range;
+                       }
+                   } else { /* base_index >= (base_size-20) */
+
+                       if (sInd < (base_size-20)) {
+                           sIndAug = 20;
+                           sInd = 0;
+                           eInd = 0;
+                           eIndAug = 19 + CB_RESRANGE;
+
+                           if(eIndAug > 39) {
+                               eInd = eIndAug-39;
+                               eIndAug = 39;
+                           }
+                       } else {
+                           sIndAug = 20 + sInd - (base_size-20);
+                           eIndAug = 39;
+                           sInd = 0;
+                           eInd = CB_RESRANGE - (eIndAug-sIndAug+1);
+                       }
+                   }
+
+               } else { /* lTarget = 22 or 23 */
+
+                   if (sInd < 0) {
+                       eInd -= sInd;
+
+
+
+
+
+                       sInd = 0;
+                   }
+
+                   if(eInd > range) {
+                       sInd -= (eInd - range);
+                       eInd = range;
+                   }
+               }
+
+           //}
+#	   endif /* CB_RESRANGE == -1 */
+
+
+           /* search of higher codebook section */
+
+           /* index search range */
+           counter = sInd;
+           sInd += base_size;
+           eInd += base_size;
+
+
+           if (stage==0) {
+               ppe = energy+base_size;
+               *ppe=0.0;
+
+               pp=cbvectors+lMem-lTarget;
+               for (j=0; j<lTarget; j++) {
+                   *ppe+=(*pp)*(*pp);
+		   ++pp;
+               }
+
+               ppi = cbvectors + lMem - 1 - lTarget;
+               ppo = cbvectors + lMem - 1;
+
+               for (j=0; j<(range-1); j++) {
+                   *(ppe+1) = *ppe + (*ppi)*(*ppi) - (*ppo)*(*ppo);
+                   ppo--;
+                   ppi--;
+                   ppe++;
+               }
+           }
+
+           /* loop over search range */
+
+           for (icount=sInd; icount<eInd; icount++) {
+
+               /* calculate measure */
+
+               crossDot=0.0;
+               pp=cbvectors + lMem - (counter++) - lTarget;
+
+               for (j=0;j<lTarget;j++) {
+
+
+
+
+
+                   crossDot += target[j]*(*pp++);
+               }
+
+               if (energy[icount]>0.0) {
+                   invenergy[icount] =(float)1.0/(energy[icount]+EPS);
+               } else {
+                   invenergy[icount] =(float)0.0;
+               }
+
+               if (stage==0) {
+
+                   measure=(float)-10000000.0;
+
+                   if (crossDot > 0.0) {
+                       measure = crossDot*crossDot*
+                           invenergy[icount];
+                   }
+               }
+               else {
+                   measure = crossDot*crossDot*invenergy[icount];
+               }
+
+               /* check if measure is better */
+               ftmp = crossDot*invenergy[icount];
+
+               if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
+                   best_index = icount;
+                   max_measure = measure;
+                   gain = ftmp;
+               }
+           }
+
+           /* Search the augmented CB inside the limited range. */
+
+           if ((lTarget==SUBL)&&(sIndAug!=0)) {
+               searchAugmentedCB(sIndAug, eIndAug, stage,
+                   2*base_size-20, target, cbvectors+lMem,
+                   &max_measure, &best_index, &gain, energy,
+                   invenergy);
+           }
+
+           /* record best index */
+
+           index[stage] = best_index;
+
+           /* gain quantization */
+
+           if (stage==0){
+
+
+
+
+
+
+               if (gain<0.0){
+                   gain = 0.0;
+               }
+
+               if (gain>CB_MAXGAIN) {
+                   gain = (float)CB_MAXGAIN;
+               }
+               gain = gainquant(gain, 1.0, 32, &gain_index[stage]);
+           }
+           else {
+               if (stage==1) {
+                   gain = gainquant(gain, (float)fabs(gains[stage-1]),
+                       16, &gain_index[stage]);
+               } else {
+                   gain = gainquant(gain, (float)fabs(gains[stage-1]),
+                       8, &gain_index[stage]);
+               }
+           }
+
+           /* Extract the best (according to measure)
+              codebook vector */
+
+           if (lTarget==(STATE_LEN-iLBCenc_inst->state_short_len)) {
+
+               if (index[stage]<base_size) {
+                   pp=buf+LPC_FILTERORDER+lMem-lTarget-index[stage];
+               } else {
+                   pp=cbvectors+lMem-lTarget-
+                       index[stage]+base_size;
+               }
+           } else {
+
+               if (index[stage]<base_size) {
+                   if (index[stage]<(base_size-20)) {
+                       pp=buf+LPC_FILTERORDER+lMem-
+                           lTarget-index[stage];
+                   } else {
+                       createAugmentedVec(index[stage]-base_size+40,
+                               buf+LPC_FILTERORDER+lMem,aug_vec);
+                       pp=aug_vec;
+                   }
+               } else {
+                   int filterno, position;
+
+                   filterno=index[stage]/base_size;
+                   position=index[stage]-filterno*base_size;
+
+
+
+
+
+
+
+                   if (position<(base_size-20)) {
+                       pp=cbvectors+filterno*lMem-lTarget-
+                           index[stage]+filterno*base_size;
+                   } else {
+                       createAugmentedVec(
+                           index[stage]-(filterno+1)*base_size+40,
+                           cbvectors+filterno*lMem,aug_vec);
+                       pp=aug_vec;
+                   }
+               }
+           }
+
+           /* Subtract the best codebook vector, according
+              to measure, from the target vector */
+
+           for (j=0;j<lTarget;j++) {
+               cvec[j] += gain*(*pp);
+               target[j] -= gain*(*pp++);
+           }
+
+           /* record quantized gain */
+
+           gains[stage]=gain;
+
+       }/* end of Main Loop. for (stage=0;... */
+
+       /* Gain adjustment for energy matching */
+       cene=0.0;
+       for (i=0; i<lTarget; i++) {
+           cene+=cvec[i]*cvec[i];
+       }
+       j=gain_index[0];
+
+       for (i=gain_index[0]; i<32; i++) {
+           ftmp=cene*gain_sq5Tbl[i]*gain_sq5Tbl[i];
+
+           if ((ftmp<(tene*gains[0]*gains[0])) &&
+               (gain_sq5Tbl[j]<(2.0*gains[0]))) {
+               j=i;
+           }
+       }
+       gain_index[0]=j;
+   }
+
+
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h b/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h
new file mode 100644
index 0000000000..a61db15403
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h
@@ -0,0 +1,37 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iCBSearch.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_ICBSEARCH_H
+   #define __iLBC_ICBSEARCH_H
+
+
+
+
+
+
+   void iCBSearch(
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                           /* (i) the encoder state structure */
+       int *index,         /* (o) Codebook indices */
+       int *gain_index,/* (o) Gain quantization indices */
+       float *intarget,/* (i) Target vector for encoding */
+       float *mem,         /* (i) Buffer for codebook construction */
+       int lMem,           /* (i) Length of buffer */
+       int lTarget,    /* (i) Length of vector */
+       int nStages,    /* (i) Number of codebook stages */
+       float *weightDenum, /* (i) weighting filter coefficients */
+       float *weightState, /* (i) weighting filter state */
+       int block           /* (i) the sub-block number */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c
new file mode 100644
index 0000000000..33d3f740f4
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c
@@ -0,0 +1,652 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iLBC_decode.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <stdlib.h>
+
+   #include "iLBC_define.h"
+   #include "StateConstructW.h"
+   #include "LPCdecode.h"
+   #include "iCBConstruct.h"
+   #include "doCPLC.h"
+   #include "helpfun.h"
+   #include "constants.h"
+   #include "packing.h"
+   #include "string.h"
+   #include "enhancer.h"
+   #include "hpOutput.h"
+   #include "syntFilter.h"
+
+   /*----------------------------------------------------------------*
+    *  Initiation of decoder instance.
+    *---------------------------------------------------------------*/
+
+   short initDecode(                   /* (o) Number of decoded
+                                              samples */
+       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) Decoder instance */
+       int mode,                       /* (i) frame size mode */
+       int use_enhancer                /* (i) 1 to use enhancer
+                                              0 to run without
+                                                enhancer */
+   ){
+       int i;
+
+       iLBCdec_inst->mode = mode;
+
+
+
+
+
+       if (mode==30) {
+           iLBCdec_inst->blockl = BLOCKL_30MS;
+           iLBCdec_inst->nsub = NSUB_30MS;
+           iLBCdec_inst->nasub = NASUB_30MS;
+           iLBCdec_inst->lpc_n = LPC_N_30MS;
+           iLBCdec_inst->no_of_bytes = NO_OF_BYTES_30MS;
+           iLBCdec_inst->no_of_words = NO_OF_WORDS_30MS;
+           iLBCdec_inst->state_short_len=STATE_SHORT_LEN_30MS;
+           /* ULP init */
+           iLBCdec_inst->ULP_inst=&ULP_30msTbl;
+       }
+       else if (mode==20) {
+           iLBCdec_inst->blockl = BLOCKL_20MS;
+           iLBCdec_inst->nsub = NSUB_20MS;
+           iLBCdec_inst->nasub = NASUB_20MS;
+           iLBCdec_inst->lpc_n = LPC_N_20MS;
+           iLBCdec_inst->no_of_bytes = NO_OF_BYTES_20MS;
+           iLBCdec_inst->no_of_words = NO_OF_WORDS_20MS;
+           iLBCdec_inst->state_short_len=STATE_SHORT_LEN_20MS;
+           /* ULP init */
+           iLBCdec_inst->ULP_inst=&ULP_20msTbl;
+       }
+       else {
+           exit(2);
+       }
+
+       memset(iLBCdec_inst->syntMem, 0,
+           LPC_FILTERORDER*sizeof(float));
+       memcpy((*iLBCdec_inst).lsfdeqold, lsfmeanTbl,
+           LPC_FILTERORDER*sizeof(float));
+
+       memset(iLBCdec_inst->old_syntdenum, 0,
+           ((LPC_FILTERORDER + 1)*NSUB_MAX)*sizeof(float));
+       for (i=0; i<NSUB_MAX; i++)
+           iLBCdec_inst->old_syntdenum[i*(LPC_FILTERORDER+1)]=1.0;
+
+       iLBCdec_inst->last_lag = 20;
+
+       iLBCdec_inst->prevLag = 120;
+       iLBCdec_inst->per = 0.0;
+       iLBCdec_inst->consPLICount = 0;
+       iLBCdec_inst->prevPLI = 0;
+       iLBCdec_inst->prevLpc[0] = 1.0;
+       memset(iLBCdec_inst->prevLpc+1,0,
+           LPC_FILTERORDER*sizeof(float));
+       memset(iLBCdec_inst->prevResidual, 0, BLOCKL_MAX*sizeof(float));
+       iLBCdec_inst->seed=777;
+
+
+
+
+
+
+       memset(iLBCdec_inst->hpomem, 0, 4*sizeof(float));
+
+       iLBCdec_inst->use_enhancer = use_enhancer;
+       memset(iLBCdec_inst->enh_buf, 0, ENH_BUFL*sizeof(float));
+       for (i=0;i<ENH_NBLOCKS_TOT;i++)
+           iLBCdec_inst->enh_period[i]=(float)40.0;
+
+       iLBCdec_inst->prev_enh_pl = 0;
+
+       return (short)(iLBCdec_inst->blockl);
+   }
+
+   /*----------------------------------------------------------------*
+    *  frame residual decoder function (subrutine to iLBC_decode)
+    *---------------------------------------------------------------*/
+
+   void Decode(
+       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) the decoder state
+                                                structure */
+       float *decresidual,             /* (o) decoded residual frame */
+       int start,                      /* (i) location of start
+                                              state */
+       int idxForMax,                  /* (i) codebook index for the
+                                              maximum value */
+       int *idxVec,                /* (i) codebook indexes for the
+                                              samples  in the start
+                                              state */
+       float *syntdenum,               /* (i) the decoded synthesis
+                                              filter coefficients */
+       int *cb_index,                  /* (i) the indexes for the
+                                              adaptive codebook */
+       int *gain_index,            /* (i) the indexes for the
+                                              corresponding gains */
+       int *extra_cb_index,        /* (i) the indexes for the
+                                              adaptive codebook part
+                                              of start state */
+       int *extra_gain_index,          /* (i) the indexes for the
+                                              corresponding gains */
+       int state_first                 /* (i) 1 if non adaptive part
+                                              of start state comes
+                                              first 0 if that part
+                                              comes last */
+   ){
+       float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
+       int k, meml_gotten, Nfor, Nback, i;
+       int diff, start_pos;
+       int subcount, subframe;
+
+
+
+
+
+
+       diff = STATE_LEN - iLBCdec_inst->state_short_len;
+
+       if (state_first == 1) {
+           start_pos = (start-1)*SUBL;
+       } else {
+           start_pos = (start-1)*SUBL + diff;
+       }
+
+       /* decode scalar part of start state */
+
+       StateConstructW(idxForMax, idxVec,
+           &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
+           &decresidual[start_pos], iLBCdec_inst->state_short_len);
+
+
+       if (state_first) { /* put adaptive part in the end */
+
+           /* setup memory */
+
+           memset(mem, 0,
+               (CB_MEML-iLBCdec_inst->state_short_len)*sizeof(float));
+           memcpy(mem+CB_MEML-iLBCdec_inst->state_short_len,
+               decresidual+start_pos,
+               iLBCdec_inst->state_short_len*sizeof(float));
+
+           /* construct decoded vector */
+
+           iCBConstruct(
+               &decresidual[start_pos+iLBCdec_inst->state_short_len],
+               extra_cb_index, extra_gain_index, mem+CB_MEML-stMemLTbl,
+               stMemLTbl, diff, CB_NSTAGES);
+
+       }
+       else {/* put adaptive part in the beginning */
+
+           /* create reversed vectors for prediction */
+
+           for (k=0; k<diff; k++) {
+               reverseDecresidual[k] =
+                   decresidual[(start+1)*SUBL-1-
+                           (k+iLBCdec_inst->state_short_len)];
+           }
+
+           /* setup memory */
+
+           meml_gotten = iLBCdec_inst->state_short_len;
+           for (k=0; k<meml_gotten; k++){
+               mem[CB_MEML-1-k] = decresidual[start_pos + k];
+
+
+
+
+
+           }
+           memset(mem, 0, (CB_MEML-k)*sizeof(float));
+
+           /* construct decoded vector */
+
+           iCBConstruct(reverseDecresidual, extra_cb_index,
+               extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
+               diff, CB_NSTAGES);
+
+           /* get decoded residual from reversed vector */
+
+           for (k=0; k<diff; k++) {
+               decresidual[start_pos-1-k] = reverseDecresidual[k];
+           }
+       }
+
+       /* counter for predicted sub-frames */
+
+       subcount=0;
+
+       /* forward prediction of sub-frames */
+
+       Nfor = iLBCdec_inst->nsub-start-1;
+
+       if ( Nfor > 0 ){
+
+           /* setup memory */
+
+           memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
+           memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
+               STATE_LEN*sizeof(float));
+
+           /* loop over sub-frames to encode */
+
+           for (subframe=0; subframe<Nfor; subframe++) {
+
+               /* construct decoded vector */
+
+               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
+                   cb_index+subcount*CB_NSTAGES,
+                   gain_index+subcount*CB_NSTAGES,
+                   mem+CB_MEML-memLfTbl[subcount],
+                   memLfTbl[subcount], SUBL, CB_NSTAGES);
+
+               /* update memory */
+
+               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+               memcpy(mem+CB_MEML-SUBL,
+
+
+
+
+
+                   &decresidual[(start+1+subframe)*SUBL],
+                   SUBL*sizeof(float));
+
+               subcount++;
+
+           }
+
+       }
+
+       /* backward prediction of sub-frames */
+
+       Nback = start-1;
+
+       if ( Nback > 0 ) {
+
+           /* setup memory */
+
+           meml_gotten = SUBL*(iLBCdec_inst->nsub+1-start);
+
+           if ( meml_gotten > CB_MEML ) {
+               meml_gotten=CB_MEML;
+           }
+           for (k=0; k<meml_gotten; k++) {
+               mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
+           }
+           memset(mem, 0, (CB_MEML-k)*sizeof(float));
+
+           /* loop over subframes to decode */
+
+           for (subframe=0; subframe<Nback; subframe++) {
+
+               /* construct decoded vector */
+
+               iCBConstruct(&reverseDecresidual[subframe*SUBL],
+                   cb_index+subcount*CB_NSTAGES,
+                   gain_index+subcount*CB_NSTAGES,
+                   mem+CB_MEML-memLfTbl[subcount], memLfTbl[subcount],
+                   SUBL, CB_NSTAGES);
+
+               /* update memory */
+
+               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+               memcpy(mem+CB_MEML-SUBL,
+                   &reverseDecresidual[subframe*SUBL],
+                   SUBL*sizeof(float));
+
+               subcount++;
+           }
+
+
+
+
+
+           /* get decoded residual from reversed vector */
+
+           for (i=0; i<SUBL*Nback; i++)
+               decresidual[SUBL*Nback - i - 1] =
+               reverseDecresidual[i];
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  main decoder function
+    *---------------------------------------------------------------*/
+
+   void iLBC_decode(
+       float *decblock,            /* (o) decoded signal block */
+       unsigned char *bytes,           /* (i) encoded signal bits */
+       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) the decoder state
+                                                structure */
+       int mode                    /* (i) 0: bad packet, PLC,
+                                              1: normal */
+   ){
+       float data[BLOCKL_MAX];
+       float lsfdeq[LPC_FILTERORDER*LPC_N_MAX];
+       float PLCresidual[BLOCKL_MAX], PLClpc[LPC_FILTERORDER + 1];
+       float zeros[BLOCKL_MAX], one[LPC_FILTERORDER + 1];
+       int k, i, start, idxForMax, pos, lastpart, ulp;
+       int lag, ilag;
+       float cc, maxcc;
+       int idxVec[STATE_LEN];
+       int check;
+       int gain_index[NASUB_MAX*CB_NSTAGES],
+           extra_gain_index[CB_NSTAGES];
+       int cb_index[CB_NSTAGES*NASUB_MAX], extra_cb_index[CB_NSTAGES];
+       int lsf_i[LSF_NSPLIT*LPC_N_MAX];
+       int state_first;
+       int last_bit;
+       unsigned char *pbytes;
+       float weightdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
+       int order_plus_one;
+       float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
+       float decresidual[BLOCKL_MAX];
+
+       if (mode>0) { /* the data are good */
+
+           /* decode data */
+
+           pbytes=bytes;
+           pos=0;
+
+
+
+
+
+
+           /* Set everything to zero before decoding */
+
+           for (k=0; k<LSF_NSPLIT*LPC_N_MAX; k++) {
+               lsf_i[k]=0;
+           }
+           start=0;
+           state_first=0;
+           idxForMax=0;
+           for (k=0; k<iLBCdec_inst->state_short_len; k++) {
+               idxVec[k]=0;
+           }
+           for (k=0; k<CB_NSTAGES; k++) {
+               extra_cb_index[k]=0;
+           }
+           for (k=0; k<CB_NSTAGES; k++) {
+               extra_gain_index[k]=0;
+           }
+           for (i=0; i<iLBCdec_inst->nasub; i++) {
+               for (k=0; k<CB_NSTAGES; k++) {
+                   cb_index[i*CB_NSTAGES+k]=0;
+               }
+           }
+           for (i=0; i<iLBCdec_inst->nasub; i++) {
+               for (k=0; k<CB_NSTAGES; k++) {
+                   gain_index[i*CB_NSTAGES+k]=0;
+               }
+           }
+
+           /* loop over ULP classes */
+
+           for (ulp=0; ulp<3; ulp++) {
+
+               /* LSF */
+               for (k=0; k<LSF_NSPLIT*iLBCdec_inst->lpc_n; k++){
+                   unpack( &pbytes, &lastpart,
+                       iLBCdec_inst->ULP_inst->lsf_bits[k][ulp], &pos);
+                   packcombine(&lsf_i[k], lastpart,
+                       iLBCdec_inst->ULP_inst->lsf_bits[k][ulp]);
+               }
+
+               /* Start block info */
+
+               unpack( &pbytes, &lastpart,
+                   iLBCdec_inst->ULP_inst->start_bits[ulp], &pos);
+               packcombine(&start, lastpart,
+                   iLBCdec_inst->ULP_inst->start_bits[ulp]);
+
+               unpack( &pbytes, &lastpart,
+
+
+
+
+
+                   iLBCdec_inst->ULP_inst->startfirst_bits[ulp], &pos);
+               packcombine(&state_first, lastpart,
+                   iLBCdec_inst->ULP_inst->startfirst_bits[ulp]);
+
+               unpack( &pbytes, &lastpart,
+                   iLBCdec_inst->ULP_inst->scale_bits[ulp], &pos);
+               packcombine(&idxForMax, lastpart,
+                   iLBCdec_inst->ULP_inst->scale_bits[ulp]);
+
+               for (k=0; k<iLBCdec_inst->state_short_len; k++) {
+                   unpack( &pbytes, &lastpart,
+                       iLBCdec_inst->ULP_inst->state_bits[ulp], &pos);
+                   packcombine(idxVec+k, lastpart,
+                       iLBCdec_inst->ULP_inst->state_bits[ulp]);
+               }
+
+               /* 23/22 (20ms/30ms) sample block */
+
+               for (k=0; k<CB_NSTAGES; k++) {
+                   unpack( &pbytes, &lastpart,
+                       iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp],
+                       &pos);
+                   packcombine(extra_cb_index+k, lastpart,
+                       iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp]);
+               }
+               for (k=0; k<CB_NSTAGES; k++) {
+                   unpack( &pbytes, &lastpart,
+                       iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp],
+                       &pos);
+                   packcombine(extra_gain_index+k, lastpart,
+                       iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp]);
+               }
+
+               /* The two/four (20ms/30ms) 40 sample sub-blocks */
+
+               for (i=0; i<iLBCdec_inst->nasub; i++) {
+                   for (k=0; k<CB_NSTAGES; k++) {
+                       unpack( &pbytes, &lastpart,
+                       iLBCdec_inst->ULP_inst->cb_index[i][k][ulp],
+                           &pos);
+                       packcombine(cb_index+i*CB_NSTAGES+k, lastpart,
+                       iLBCdec_inst->ULP_inst->cb_index[i][k][ulp]);
+                   }
+               }
+
+               for (i=0; i<iLBCdec_inst->nasub; i++) {
+                   for (k=0; k<CB_NSTAGES; k++) {
+                       unpack( &pbytes, &lastpart,
+
+
+
+
+
+                       iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp],
+                           &pos);
+                       packcombine(gain_index+i*CB_NSTAGES+k, lastpart,
+                           iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp]);
+                   }
+               }
+           }
+           /* Extract last bit. If it is 1 this indicates an
+              empty/lost frame */
+           unpack( &pbytes, &last_bit, 1, &pos);
+
+           /* Check for bit errors or empty/lost frames */
+           if (start<1)
+               mode = 0;
+           if (iLBCdec_inst->mode==20 && start>3)
+               mode = 0;
+           if (iLBCdec_inst->mode==30 && start>5)
+               mode = 0;
+           if (last_bit==1)
+               mode = 0;
+
+           if (mode==1) { /* No bit errors was detected,
+                             continue decoding */
+
+               /* adjust index */
+               index_conv_dec(cb_index);
+
+               /* decode the lsf */
+
+               SimplelsfDEQ(lsfdeq, lsf_i, iLBCdec_inst->lpc_n);
+               check=LSF_check(lsfdeq, LPC_FILTERORDER,
+                   iLBCdec_inst->lpc_n);
+               DecoderInterpolateLSF(syntdenum, weightdenum,
+                   lsfdeq, LPC_FILTERORDER, iLBCdec_inst);
+
+               Decode(iLBCdec_inst, decresidual, start, idxForMax,
+                   idxVec, syntdenum, cb_index, gain_index,
+                   extra_cb_index, extra_gain_index,
+                   state_first);
+
+               /* preparing the plc for a future loss! */
+
+               doThePLC(PLCresidual, PLClpc, 0, decresidual,
+                   syntdenum +
+                   (LPC_FILTERORDER + 1)*(iLBCdec_inst->nsub - 1),
+                   (*iLBCdec_inst).last_lag, iLBCdec_inst);
+
+
+
+
+
+
+
+               memcpy(decresidual, PLCresidual,
+                   iLBCdec_inst->blockl*sizeof(float));
+           }
+
+       }
+
+       if (mode == 0) {
+           /* the data is bad (either a PLC call
+            * was made or a severe bit error was detected)
+            */
+
+           /* packet loss conceal */
+
+           memset(zeros, 0, BLOCKL_MAX*sizeof(float));
+
+           one[0] = 1;
+           memset(one+1, 0, LPC_FILTERORDER*sizeof(float));
+
+           start=0;
+
+           doThePLC(PLCresidual, PLClpc, 1, zeros, one,
+               (*iLBCdec_inst).last_lag, iLBCdec_inst);
+           memcpy(decresidual, PLCresidual,
+               iLBCdec_inst->blockl*sizeof(float));
+
+           order_plus_one = LPC_FILTERORDER + 1;
+           for (i = 0; i < iLBCdec_inst->nsub; i++) {
+               memcpy(syntdenum+(i*order_plus_one), PLClpc,
+                   order_plus_one*sizeof(float));
+           }
+       }
+
+       if (iLBCdec_inst->use_enhancer == 1) {
+
+           /* post filtering */
+
+           iLBCdec_inst->last_lag =
+               enhancerInterface(data, decresidual, iLBCdec_inst);
+
+           /* synthesis filtering */
+
+           if (iLBCdec_inst->mode==20) {
+               /* Enhancer has 40 samples delay */
+               i=0;
+               syntFilter(data + i*SUBL,
+                   iLBCdec_inst->old_syntdenum +
+                   (i+iLBCdec_inst->nsub-1)*(LPC_FILTERORDER+1),
+                   SUBL, iLBCdec_inst->syntMem);
+
+
+
+
+
+               for (i=1; i < iLBCdec_inst->nsub; i++) {
+                   syntFilter(data + i*SUBL,
+                       syntdenum + (i-1)*(LPC_FILTERORDER+1),
+                       SUBL, iLBCdec_inst->syntMem);
+               }
+           } else if (iLBCdec_inst->mode==30) {
+               /* Enhancer has 80 samples delay */
+               for (i=0; i < 2; i++) {
+                   syntFilter(data + i*SUBL,
+                       iLBCdec_inst->old_syntdenum +
+                       (i+iLBCdec_inst->nsub-2)*(LPC_FILTERORDER+1),
+                       SUBL, iLBCdec_inst->syntMem);
+               }
+               for (i=2; i < iLBCdec_inst->nsub; i++) {
+                   syntFilter(data + i*SUBL,
+                       syntdenum + (i-2)*(LPC_FILTERORDER+1), SUBL,
+                       iLBCdec_inst->syntMem);
+               }
+           }
+
+       } else {
+
+           /* Find last lag */
+           lag = 20;
+           maxcc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
+               &decresidual[BLOCKL_MAX-ENH_BLOCKL-lag], ENH_BLOCKL);
+
+           for (ilag=21; ilag<120; ilag++) {
+               cc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
+                   &decresidual[BLOCKL_MAX-ENH_BLOCKL-ilag],
+                   ENH_BLOCKL);
+
+               if (cc > maxcc) {
+                   maxcc = cc;
+                   lag = ilag;
+               }
+           }
+           iLBCdec_inst->last_lag = lag;
+
+           /* copy data and run synthesis filter */
+
+           memcpy(data, decresidual,
+               iLBCdec_inst->blockl*sizeof(float));
+           for (i=0; i < iLBCdec_inst->nsub; i++) {
+               syntFilter(data + i*SUBL,
+                   syntdenum + i*(LPC_FILTERORDER+1), SUBL,
+                   iLBCdec_inst->syntMem);
+           }
+
+
+
+
+
+       }
+
+       /* high pass filtering on output if desired, otherwise
+          copy to out */
+
+       hpOutput(data, iLBCdec_inst->blockl,
+                   decblock,iLBCdec_inst->hpomem);
+
+       /* memcpy(decblock,data,iLBCdec_inst->blockl*sizeof(float));*/
+
+       memcpy(iLBCdec_inst->old_syntdenum, syntdenum,
+
+           iLBCdec_inst->nsub*(LPC_FILTERORDER+1)*sizeof(float));
+
+       iLBCdec_inst->prev_enh_pl=0;
+
+       if (mode==0) { /* PLC was used */
+           iLBCdec_inst->prev_enh_pl=1;
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h
new file mode 100644
index 0000000000..5f4384dcde
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h
@@ -0,0 +1,42 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iLBC_decode.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_ILBCDECODE_H
+   #define __iLBC_ILBCDECODE_H
+
+   #include "iLBC_define.h"
+
+   short initDecode(                   /* (o) Number of decoded
+                                              samples */
+       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) Decoder instance */
+       int mode,                       /* (i) frame size mode */
+       int use_enhancer                /* (i) 1 to use enhancer
+                                              0 to run without
+                                                enhancer */
+   );
+
+   void iLBC_decode(
+       float *decblock,            /* (o) decoded signal block */
+       unsigned char *bytes,           /* (i) encoded signal bits */
+       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) the decoder state
+                                                structure */
+       int mode                    /* (i) 0: bad packet, PLC,
+                                              1: normal */
+
+
+
+
+
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h
new file mode 100644
index 0000000000..480c834b97
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h
@@ -0,0 +1,217 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iLBC_define.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+   #include <string.h>
+
+   #ifndef __iLBC_ILBCDEFINE_H
+   #define __iLBC_ILBCDEFINE_H
+
+   /* general codec settings */
+
+   #define FS                      (float)8000.0
+   #define BLOCKL_20MS             160
+   #define BLOCKL_30MS             240
+   #define BLOCKL_MAX              240
+   #define NSUB_20MS               4
+   #define NSUB_30MS               6
+   #define NSUB_MAX            6
+   #define NASUB_20MS              2
+
+
+
+
+
+   #define NASUB_30MS              4
+   #define NASUB_MAX               4
+   #define SUBL                40
+   #define STATE_LEN               80
+   #define STATE_SHORT_LEN_30MS    58
+   #define STATE_SHORT_LEN_20MS    57
+
+   /* LPC settings */
+
+   #define LPC_FILTERORDER         10
+   #define LPC_CHIRP_SYNTDENUM     (float)0.9025
+   #define LPC_CHIRP_WEIGHTDENUM   (float)0.4222
+   #define LPC_LOOKBACK        60
+   #define LPC_N_20MS              1
+   #define LPC_N_30MS              2
+   #define LPC_N_MAX               2
+   #define LPC_ASYMDIFF        20
+   #define LPC_BW                  (float)60.0
+   #define LPC_WN                  (float)1.0001
+   #define LSF_NSPLIT              3
+   #define LSF_NUMBER_OF_STEPS     4
+   #define LPC_HALFORDER           (LPC_FILTERORDER/2)
+
+   /* cb settings */
+
+   #define CB_NSTAGES              3
+   #define CB_EXPAND               2
+   #define CB_MEML                 147
+   #define CB_FILTERLEN        2*4
+   #define CB_HALFFILTERLEN    4
+   #define CB_RESRANGE             34
+   #define CB_MAXGAIN              (float)1.3
+
+   /* enhancer */
+
+   #define ENH_BLOCKL              80  /* block length */
+   #define ENH_BLOCKL_HALF         (ENH_BLOCKL/2)
+   #define ENH_HL                  3   /* 2*ENH_HL+1 is number blocks
+                                          in said second sequence */
+   #define ENH_SLOP            2   /* max difference estimated and
+                                          correct pitch period */
+   #define ENH_PLOCSL              20  /* pitch-estimates and pitch-
+                                          locations buffer length */
+   #define ENH_OVERHANG        2
+   #define ENH_UPS0            4   /* upsampling rate */
+   #define ENH_FL0                 3   /* 2*FLO+1 is the length of
+                                          each filter */
+   #define ENH_VECTL               (ENH_BLOCKL+2*ENH_FL0)
+
+
+
+
+
+   #define ENH_CORRDIM             (2*ENH_SLOP+1)
+   #define ENH_NBLOCKS             (BLOCKL_MAX/ENH_BLOCKL)
+   #define ENH_NBLOCKS_EXTRA       5
+   #define ENH_NBLOCKS_TOT         8   /* ENH_NBLOCKS +
+                                          ENH_NBLOCKS_EXTRA */
+   #define ENH_BUFL            (ENH_NBLOCKS_TOT)*ENH_BLOCKL
+   #define ENH_ALPHA0              (float)0.05
+
+   /* Down sampling */
+
+   #define FILTERORDER_DS          7
+   #define DELAY_DS            3
+   #define FACTOR_DS               2
+
+   /* bit stream defs */
+
+   #define NO_OF_BYTES_20MS    38
+   #define NO_OF_BYTES_30MS    50
+   #define NO_OF_WORDS_20MS    19
+   #define NO_OF_WORDS_30MS    25
+   #define STATE_BITS              3
+   #define BYTE_LEN            8
+   #define ULP_CLASSES             3
+
+   /* help parameters */
+
+   #define FLOAT_MAX               (float)1.0e37
+   #define EPS                     (float)2.220446049250313e-016
+   #define PI                      (float)3.14159265358979323846
+   #define MIN_SAMPLE              -32768
+   #define MAX_SAMPLE              32767
+   #define TWO_PI                  (float)6.283185307
+   #define PI2                     (float)0.159154943
+
+   /* type definition encoder instance */
+   typedef struct iLBC_ULP_Inst_t_ {
+       int lsf_bits[6][ULP_CLASSES+2];
+       int start_bits[ULP_CLASSES+2];
+       int startfirst_bits[ULP_CLASSES+2];
+       int scale_bits[ULP_CLASSES+2];
+       int state_bits[ULP_CLASSES+2];
+       int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2];
+       int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2];
+       int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2];
+       int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2];
+   } iLBC_ULP_Inst_t;
+
+   /* type definition encoder instance */
+
+
+
+
+
+   typedef struct iLBC_Enc_Inst_t_ {
+
+       /* flag for frame size mode */
+       int mode;
+
+       /* basic parameters for different frame sizes */
+       int blockl;
+       int nsub;
+       int nasub;
+       int no_of_bytes, no_of_words;
+       int lpc_n;
+       int state_short_len;
+       const iLBC_ULP_Inst_t *ULP_inst;
+
+       /* analysis filter state */
+       float anaMem[LPC_FILTERORDER];
+
+       /* old lsf parameters for interpolation */
+       float lsfold[LPC_FILTERORDER];
+       float lsfdeqold[LPC_FILTERORDER];
+
+       /* signal buffer for LP analysis */
+       float lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX];
+
+       /* state of input HP filter */
+       float hpimem[4];
+
+   } iLBC_Enc_Inst_t;
+
+   /* type definition decoder instance */
+   typedef struct iLBC_Dec_Inst_t_ {
+
+       /* flag for frame size mode */
+       int mode;
+
+       /* basic parameters for different frame sizes */
+       int blockl;
+       int nsub;
+       int nasub;
+       int no_of_bytes, no_of_words;
+       int lpc_n;
+       int state_short_len;
+       const iLBC_ULP_Inst_t *ULP_inst;
+
+       /* synthesis filter state */
+       float syntMem[LPC_FILTERORDER];
+
+       /* old LSF for interpolation */
+
+
+
+
+
+       float lsfdeqold[LPC_FILTERORDER];
+
+       /* pitch lag estimated in enhancer and used in PLC */
+       int last_lag;
+
+       /* PLC state information */
+       int prevLag, consPLICount, prevPLI, prev_enh_pl;
+       float prevLpc[LPC_FILTERORDER+1];
+       float prevResidual[NSUB_MAX*SUBL];
+       float per;
+       unsigned long seed;
+
+       /* previous synthesis filter parameters */
+       float old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
+
+       /* state of output HP filter */
+       float hpomem[4];
+
+       /* enhancer state information */
+       int use_enhancer;
+       float enh_buf[ENH_BUFL];
+       float enh_period[ENH_NBLOCKS_TOT];
+
+   } iLBC_Dec_Inst_t;
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c
new file mode 100644
index 0000000000..438545883d
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c
@@ -0,0 +1,543 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iLBC_encode.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <stdlib.h>
+   #include <string.h>
+
+   #include "iLBC_define.h"
+   #include "LPCencode.h"
+   #include "FrameClassify.h"
+   #include "StateSearchW.h"
+   #include "StateConstructW.h"
+   #include "helpfun.h"
+   #include "constants.h"
+   #include "packing.h"
+   #include "iCBSearch.h"
+   #include "iCBConstruct.h"
+   #include "hpInput.h"
+   #include "anaFilter.h"
+   #include "syntFilter.h"
+
+   /*----------------------------------------------------------------*
+    *  Initiation of encoder instance.
+    *---------------------------------------------------------------*/
+
+   short initEncode(                   /* (o) Number of bytes
+                                              encoded */
+       iLBC_Enc_Inst_t *iLBCenc_inst,  /* (i/o) Encoder instance */
+       int mode                    /* (i) frame size mode */
+   ){
+       iLBCenc_inst->mode = mode;
+       if (mode==30) {
+           iLBCenc_inst->blockl = BLOCKL_30MS;
+           iLBCenc_inst->nsub = NSUB_30MS;
+           iLBCenc_inst->nasub = NASUB_30MS;
+           iLBCenc_inst->lpc_n = LPC_N_30MS;
+           iLBCenc_inst->no_of_bytes = NO_OF_BYTES_30MS;
+           iLBCenc_inst->no_of_words = NO_OF_WORDS_30MS;
+
+
+
+
+
+           iLBCenc_inst->state_short_len=STATE_SHORT_LEN_30MS;
+           /* ULP init */
+           iLBCenc_inst->ULP_inst=&ULP_30msTbl;
+       }
+       else if (mode==20) {
+           iLBCenc_inst->blockl = BLOCKL_20MS;
+           iLBCenc_inst->nsub = NSUB_20MS;
+           iLBCenc_inst->nasub = NASUB_20MS;
+           iLBCenc_inst->lpc_n = LPC_N_20MS;
+           iLBCenc_inst->no_of_bytes = NO_OF_BYTES_20MS;
+           iLBCenc_inst->no_of_words = NO_OF_WORDS_20MS;
+           iLBCenc_inst->state_short_len=STATE_SHORT_LEN_20MS;
+           /* ULP init */
+           iLBCenc_inst->ULP_inst=&ULP_20msTbl;
+       }
+       else {
+           exit(2);
+       }
+
+       memset((*iLBCenc_inst).anaMem, 0,
+           LPC_FILTERORDER*sizeof(float));
+       memcpy((*iLBCenc_inst).lsfold, lsfmeanTbl,
+           LPC_FILTERORDER*sizeof(float));
+       memcpy((*iLBCenc_inst).lsfdeqold, lsfmeanTbl,
+           LPC_FILTERORDER*sizeof(float));
+       memset((*iLBCenc_inst).lpc_buffer, 0,
+           (LPC_LOOKBACK+BLOCKL_MAX)*sizeof(float));
+       memset((*iLBCenc_inst).hpimem, 0, 4*sizeof(float));
+
+       return (short)(iLBCenc_inst->no_of_bytes);
+   }
+
+   /*----------------------------------------------------------------*
+    *  main encoder function
+    *---------------------------------------------------------------*/
+
+   void iLBC_encode(
+       unsigned char *bytes,           /* (o) encoded data bits iLBC */
+       float *block,                   /* (o) speech vector to
+                                              encode */
+       iLBC_Enc_Inst_t *iLBCenc_inst   /* (i/o) the general encoder
+                                              state */
+   ){
+
+       float data[BLOCKL_MAX];
+       float residual[BLOCKL_MAX], reverseResidual[BLOCKL_MAX];
+
+       int start, idxForMax, idxVec[STATE_LEN];
+
+
+
+
+
+       float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
+       int n, k, meml_gotten, Nfor, Nback, i, pos;
+       int gain_index[CB_NSTAGES*NASUB_MAX],
+           extra_gain_index[CB_NSTAGES];
+       int cb_index[CB_NSTAGES*NASUB_MAX],extra_cb_index[CB_NSTAGES];
+       int lsf_i[LSF_NSPLIT*LPC_N_MAX];
+       unsigned char *pbytes;
+       int diff, start_pos, state_first;
+       float en1, en2;
+       int index, ulp, firstpart;
+       int subcount, subframe;
+       float weightState[LPC_FILTERORDER];
+       float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
+       float weightdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
+       float decresidual[BLOCKL_MAX];
+
+       /* high pass filtering of input signal if such is not done
+              prior to calling this function */
+
+       hpInput(block, iLBCenc_inst->blockl,
+                   data, (*iLBCenc_inst).hpimem);
+
+       /* otherwise simply copy */
+
+       /*memcpy(data,block,iLBCenc_inst->blockl*sizeof(float));*/
+
+       /* LPC of hp filtered input data */
+
+       LPCencode(syntdenum, weightdenum, lsf_i, data, iLBCenc_inst);
+
+
+       /* inverse filter to get residual */
+
+       for (n=0; n<iLBCenc_inst->nsub; n++) {
+           anaFilter(&data[n*SUBL], &syntdenum[n*(LPC_FILTERORDER+1)],
+               SUBL, &residual[n*SUBL], iLBCenc_inst->anaMem);
+       }
+
+       /* find state location */
+
+       start = FrameClassify(iLBCenc_inst, residual);
+
+       /* check if state should be in first or last part of the
+       two subframes */
+
+       diff = STATE_LEN - iLBCenc_inst->state_short_len;
+       en1 = 0;
+       index = (start-1)*SUBL;
+
+
+
+
+
+       for (i = 0; i < iLBCenc_inst->state_short_len; i++) {
+           en1 += residual[index+i]*residual[index+i];
+       }
+       en2 = 0;
+       index = (start-1)*SUBL+diff;
+       for (i = 0; i < iLBCenc_inst->state_short_len; i++) {
+           en2 += residual[index+i]*residual[index+i];
+       }
+
+
+       if (en1 > en2) {
+           state_first = 1;
+           start_pos = (start-1)*SUBL;
+       } else {
+           state_first = 0;
+           start_pos = (start-1)*SUBL + diff;
+       }
+
+       /* scalar quantization of state */
+
+       StateSearchW(iLBCenc_inst, &residual[start_pos],
+           &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
+           &weightdenum[(start-1)*(LPC_FILTERORDER+1)], &idxForMax,
+           idxVec, iLBCenc_inst->state_short_len, state_first);
+
+       StateConstructW(idxForMax, idxVec,
+           &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
+           &decresidual[start_pos], iLBCenc_inst->state_short_len);
+
+       /* predictive quantization in state */
+
+       if (state_first) { /* put adaptive part in the end */
+
+           /* setup memory */
+
+           memset(mem, 0,
+               (CB_MEML-iLBCenc_inst->state_short_len)*sizeof(float));
+           memcpy(mem+CB_MEML-iLBCenc_inst->state_short_len,
+               decresidual+start_pos,
+               iLBCenc_inst->state_short_len*sizeof(float));
+           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
+
+           /* encode sub-frames */
+
+           iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index,
+               &residual[start_pos+iLBCenc_inst->state_short_len],
+               mem+CB_MEML-stMemLTbl,
+               stMemLTbl, diff, CB_NSTAGES,
+
+
+
+
+
+               &weightdenum[start*(LPC_FILTERORDER+1)],
+               weightState, 0);
+
+           /* construct decoded vector */
+
+           iCBConstruct(
+               &decresidual[start_pos+iLBCenc_inst->state_short_len],
+               extra_cb_index, extra_gain_index,
+               mem+CB_MEML-stMemLTbl,
+               stMemLTbl, diff, CB_NSTAGES);
+
+       }
+       else { /* put adaptive part in the beginning */
+
+           /* create reversed vectors for prediction */
+
+           for (k=0; k<diff; k++) {
+               reverseResidual[k] = residual[(start+1)*SUBL-1
+                   -(k+iLBCenc_inst->state_short_len)];
+           }
+
+           /* setup memory */
+
+           meml_gotten = iLBCenc_inst->state_short_len;
+           for (k=0; k<meml_gotten; k++) {
+               mem[CB_MEML-1-k] = decresidual[start_pos + k];
+           }
+           memset(mem, 0, (CB_MEML-k)*sizeof(float));
+           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
+
+           /* encode sub-frames */
+
+           iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index,
+               reverseResidual, mem+CB_MEML-stMemLTbl, stMemLTbl,
+               diff, CB_NSTAGES,
+               &weightdenum[(start-1)*(LPC_FILTERORDER+1)],
+               weightState, 0);
+
+           /* construct decoded vector */
+
+           iCBConstruct(reverseDecresidual, extra_cb_index,
+               extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
+               diff, CB_NSTAGES);
+
+           /* get decoded residual from reversed vector */
+
+           for (k=0; k<diff; k++) {
+               decresidual[start_pos-1-k] = reverseDecresidual[k];
+
+
+
+
+
+           }
+       }
+
+       /* counter for predicted sub-frames */
+
+       subcount=0;
+
+       /* forward prediction of sub-frames */
+
+       Nfor = iLBCenc_inst->nsub-start-1;
+
+
+       if ( Nfor > 0 ) {
+
+           /* setup memory */
+
+           memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
+           memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
+               STATE_LEN*sizeof(float));
+           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
+
+           /* loop over sub-frames to encode */
+
+           for (subframe=0; subframe<Nfor; subframe++) {
+
+               /* encode sub-frame */
+
+               iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,
+                   gain_index+subcount*CB_NSTAGES,
+                   &residual[(start+1+subframe)*SUBL],
+                   mem+CB_MEML-memLfTbl[subcount],
+                   memLfTbl[subcount], SUBL, CB_NSTAGES,
+                   &weightdenum[(start+1+subframe)*
+                               (LPC_FILTERORDER+1)],
+                   weightState, subcount+1);
+
+               /* construct decoded vector */
+
+               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
+                   cb_index+subcount*CB_NSTAGES,
+                   gain_index+subcount*CB_NSTAGES,
+                   mem+CB_MEML-memLfTbl[subcount],
+                   memLfTbl[subcount], SUBL, CB_NSTAGES);
+
+               /* update memory */
+
+               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+               memcpy(mem+CB_MEML-SUBL,
+
+
+
+
+
+                   &decresidual[(start+1+subframe)*SUBL],
+                   SUBL*sizeof(float));
+               memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
+
+               subcount++;
+           }
+       }
+
+
+       /* backward prediction of sub-frames */
+
+       Nback = start-1;
+
+
+       if ( Nback > 0 ) {
+
+           /* create reverse order vectors */
+
+           for (n=0; n<Nback; n++) {
+               for (k=0; k<SUBL; k++) {
+                   reverseResidual[n*SUBL+k] =
+                       residual[(start-1)*SUBL-1-n*SUBL-k];
+                   reverseDecresidual[n*SUBL+k] =
+                       decresidual[(start-1)*SUBL-1-n*SUBL-k];
+               }
+           }
+
+           /* setup memory */
+
+           meml_gotten = SUBL*(iLBCenc_inst->nsub+1-start);
+
+
+           if ( meml_gotten > CB_MEML ) {
+               meml_gotten=CB_MEML;
+           }
+           for (k=0; k<meml_gotten; k++) {
+               mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
+           }
+           memset(mem, 0, (CB_MEML-k)*sizeof(float));
+           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
+
+           /* loop over sub-frames to encode */
+
+           for (subframe=0; subframe<Nback; subframe++) {
+
+               /* encode sub-frame */
+
+               iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,
+
+
+
+
+
+                   gain_index+subcount*CB_NSTAGES,
+                   &reverseResidual[subframe*SUBL],
+                   mem+CB_MEML-memLfTbl[subcount],
+                   memLfTbl[subcount], SUBL, CB_NSTAGES,
+                   &weightdenum[(start-2-subframe)*
+                               (LPC_FILTERORDER+1)],
+                   weightState, subcount+1);
+
+               /* construct decoded vector */
+
+               iCBConstruct(&reverseDecresidual[subframe*SUBL],
+                   cb_index+subcount*CB_NSTAGES,
+                   gain_index+subcount*CB_NSTAGES,
+                   mem+CB_MEML-memLfTbl[subcount],
+                   memLfTbl[subcount], SUBL, CB_NSTAGES);
+
+               /* update memory */
+
+               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
+               memcpy(mem+CB_MEML-SUBL,
+                   &reverseDecresidual[subframe*SUBL],
+                   SUBL*sizeof(float));
+               memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
+
+               subcount++;
+
+           }
+
+           /* get decoded residual from reversed vector */
+
+           for (i=0; i<SUBL*Nback; i++) {
+               decresidual[SUBL*Nback - i - 1] =
+                   reverseDecresidual[i];
+           }
+       }
+       /* end encoding part */
+
+       /* adjust index */
+       index_conv_enc(cb_index);
+
+       /* pack bytes */
+
+       pbytes=bytes;
+       pos=0;
+
+       /* loop over the 3 ULP classes */
+
+       for (ulp=0; ulp<3; ulp++) {
+
+
+
+
+
+
+           /* LSF */
+           for (k=0; k<LSF_NSPLIT*iLBCenc_inst->lpc_n; k++) {
+               packsplit(&lsf_i[k], &firstpart, &lsf_i[k],
+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp],
+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp]+
+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+1]+
+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+2]);
+               dopack( &pbytes, firstpart,
+                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], &pos);
+           }
+
+           /* Start block info */
+
+           packsplit(&start, &firstpart, &start,
+               iLBCenc_inst->ULP_inst->start_bits[ulp],
+               iLBCenc_inst->ULP_inst->start_bits[ulp]+
+               iLBCenc_inst->ULP_inst->start_bits[ulp+1]+
+               iLBCenc_inst->ULP_inst->start_bits[ulp+2]);
+           dopack( &pbytes, firstpart,
+               iLBCenc_inst->ULP_inst->start_bits[ulp], &pos);
+
+           packsplit(&state_first, &firstpart, &state_first,
+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp],
+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp]+
+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp+1]+
+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp+2]);
+           dopack( &pbytes, firstpart,
+               iLBCenc_inst->ULP_inst->startfirst_bits[ulp], &pos);
+
+           packsplit(&idxForMax, &firstpart, &idxForMax,
+               iLBCenc_inst->ULP_inst->scale_bits[ulp],
+               iLBCenc_inst->ULP_inst->scale_bits[ulp]+
+               iLBCenc_inst->ULP_inst->scale_bits[ulp+1]+
+               iLBCenc_inst->ULP_inst->scale_bits[ulp+2]);
+           dopack( &pbytes, firstpart,
+               iLBCenc_inst->ULP_inst->scale_bits[ulp], &pos);
+
+           for (k=0; k<iLBCenc_inst->state_short_len; k++) {
+               packsplit(idxVec+k, &firstpart, idxVec+k,
+                   iLBCenc_inst->ULP_inst->state_bits[ulp],
+                   iLBCenc_inst->ULP_inst->state_bits[ulp]+
+                   iLBCenc_inst->ULP_inst->state_bits[ulp+1]+
+                   iLBCenc_inst->ULP_inst->state_bits[ulp+2]);
+               dopack( &pbytes, firstpart,
+                   iLBCenc_inst->ULP_inst->state_bits[ulp], &pos);
+           }
+
+
+
+
+
+
+           /* 23/22 (20ms/30ms) sample block */
+
+           for (k=0;k<CB_NSTAGES;k++) {
+               packsplit(extra_cb_index+k, &firstpart,
+                   extra_cb_index+k,
+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],
+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp]+
+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+1]+
+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+2]);
+               dopack( &pbytes, firstpart,
+                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],
+                   &pos);
+           }
+
+           for (k=0;k<CB_NSTAGES;k++) {
+               packsplit(extra_gain_index+k, &firstpart,
+                   extra_gain_index+k,
+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],
+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp]+
+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+1]+
+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+2]);
+               dopack( &pbytes, firstpart,
+                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],
+                   &pos);
+           }
+
+           /* The two/four (20ms/30ms) 40 sample sub-blocks */
+
+           for (i=0; i<iLBCenc_inst->nasub; i++) {
+               for (k=0; k<CB_NSTAGES; k++) {
+                   packsplit(cb_index+i*CB_NSTAGES+k, &firstpart,
+                       cb_index+i*CB_NSTAGES+k,
+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],
+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp]+
+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+1]+
+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+2]);
+                   dopack( &pbytes, firstpart,
+                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],
+                       &pos);
+               }
+           }
+
+           for (i=0; i<iLBCenc_inst->nasub; i++) {
+               for (k=0; k<CB_NSTAGES; k++) {
+                   packsplit(gain_index+i*CB_NSTAGES+k, &firstpart,
+                       gain_index+i*CB_NSTAGES+k,
+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],
+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp]+
+
+
+
+
+
+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+1]+
+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+2]);
+                   dopack( &pbytes, firstpart,
+                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],
+                       &pos);
+               }
+           }
+       }
+
+       /* set the last bit to zero (otherwise the decoder
+          will treat it as a lost frame) */
+       dopack( &pbytes, 0, 1, &pos);
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h
new file mode 100644
index 0000000000..a3ab55f9dc
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h
@@ -0,0 +1,39 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iLBC_encode.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_ILBCENCODE_H
+   #define __iLBC_ILBCENCODE_H
+
+   #include "iLBC_define.h"
+
+   short initEncode(                   /* (o) Number of bytes
+                                              encoded */
+       iLBC_Enc_Inst_t *iLBCenc_inst,  /* (i/o) Encoder instance */
+       int mode                    /* (i) frame size mode */
+   );
+
+   void iLBC_encode(
+
+       unsigned char *bytes,           /* (o) encoded data bits iLBC */
+       float *block,                   /* (o) speech vector to
+                                              encode */
+       iLBC_Enc_Inst_t *iLBCenc_inst   /* (i/o) the general encoder
+                                              state */
+   );
+
+   #endif
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c
new file mode 100644
index 0000000000..81985c09a5
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c
@@ -0,0 +1,310 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       iLBC_test.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <stdlib.h>
+   #include <stdio.h>
+   #include <string.h>
+   #include "iLBC_define.h"
+   #include "iLBC_encode.h"
+   #include "iLBC_decode.h"
+
+   /* Runtime statistics */
+   #include <time.h>
+
+   #define ILBCNOOFWORDS_MAX   (NO_OF_BYTES_30MS/2)
+
+   /*----------------------------------------------------------------*
+    *  Encoder interface function
+
+
+
+
+
+    *---------------------------------------------------------------*/
+
+   short encode(   /* (o) Number of bytes encoded */
+       iLBC_Enc_Inst_t *iLBCenc_inst,
+                                   /* (i/o) Encoder instance */
+       short *encoded_data,    /* (o) The encoded bytes */
+       short *data                 /* (i) The signal block to encode*/
+   ){
+       float block[BLOCKL_MAX];
+       int k;
+
+       /* convert signal to float */
+
+       for (k=0; k<iLBCenc_inst->blockl; k++)
+           block[k] = (float)data[k];
+
+       /* do the actual encoding */
+
+       iLBC_encode((unsigned char *)encoded_data, block, iLBCenc_inst);
+
+
+       return (iLBCenc_inst->no_of_bytes);
+   }
+
+   /*----------------------------------------------------------------*
+    *  Decoder interface function
+    *---------------------------------------------------------------*/
+
+   short decode(       /* (o) Number of decoded samples */
+       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) Decoder instance */
+       short *decoded_data,        /* (o) Decoded signal block*/
+       short *encoded_data,        /* (i) Encoded bytes */
+       short mode                       /* (i) 0=PL, 1=Normal */
+   ){
+       int k;
+       float decblock[BLOCKL_MAX], dtmp;
+
+       /* check if mode is valid */
+
+       if (mode<0 || mode>1) {
+           printf("\nERROR - Wrong mode - 0, 1 allowed\n"); exit(3);}
+
+       /* do actual decoding of block */
+
+       iLBC_decode(decblock, (unsigned char *)encoded_data,
+           iLBCdec_inst, mode);
+
+       /* convert to short */
+
+
+
+
+
+       for (k=0; k<iLBCdec_inst->blockl; k++){
+           dtmp=decblock[k];
+
+           if (dtmp<MIN_SAMPLE)
+               dtmp=MIN_SAMPLE;
+           else if (dtmp>MAX_SAMPLE)
+               dtmp=MAX_SAMPLE;
+           decoded_data[k] = (short) dtmp;
+       }
+
+       return (iLBCdec_inst->blockl);
+   }
+
+   /*---------------------------------------------------------------*
+    *  Main program to test iLBC encoding and decoding
+    *
+    *  Usage:
+    *    exefile_name.exe <infile> <bytefile> <outfile> <channel>
+    *
+    *    <infile>   : Input file, speech for encoder (16-bit pcm file)
+    *    <bytefile> : Bit stream output from the encoder
+    *    <outfile>  : Output file, decoded speech (16-bit pcm file)
+    *    <channel>  : Bit error file, optional (16-bit)
+    *                     1 - Packet received correctly
+    *                     0 - Packet Lost
+    *
+    *--------------------------------------------------------------*/
+
+   int main(int argc, char* argv[])
+   {
+
+       /* Runtime statistics */
+
+       float starttime;
+       float runtime;
+       float outtime;
+
+       FILE *ifileid,*efileid,*ofileid, *cfileid;
+       short data[BLOCKL_MAX];
+       short encoded_data[ILBCNOOFWORDS_MAX], decoded_data[BLOCKL_MAX];
+       int len;
+       short pli, mode;
+       int blockcount = 0;
+       int packetlosscount = 0;
+
+       /* Create structs */
+       iLBC_Enc_Inst_t Enc_Inst;
+       iLBC_Dec_Inst_t Dec_Inst;
+
+
+
+
+
+       /* get arguments and open files */
+
+       if ((argc!=5) && (argc!=6)) {
+           fprintf(stderr,
+           "\n*-----------------------------------------------*\n");
+           fprintf(stderr,
+           "   %s <20,30> input encoded decoded (channel)\n\n",
+               argv[0]);
+           fprintf(stderr,
+           "   mode    : Frame size for the encoding/decoding\n");
+           fprintf(stderr,
+           "                 20 - 20 ms\n");
+           fprintf(stderr,
+           "                 30 - 30 ms\n");
+           fprintf(stderr,
+           "   input   : Speech for encoder (16-bit pcm file)\n");
+           fprintf(stderr,
+           "   encoded : Encoded bit stream\n");
+           fprintf(stderr,
+           "   decoded : Decoded speech (16-bit pcm file)\n");
+           fprintf(stderr,
+           "   channel : Packet loss pattern, optional (16-bit)\n");
+           fprintf(stderr,
+           "                  1 - Packet received correctly\n");
+           fprintf(stderr,
+           "                  0 - Packet Lost\n");
+           fprintf(stderr,
+           "*-----------------------------------------------*\n\n");
+           exit(1);
+       }
+       mode=atoi(argv[1]);
+       if (mode != 20 && mode != 30) {
+           fprintf(stderr,"Wrong mode %s, must be 20, or 30\n",
+               argv[1]);
+           exit(2);
+       }
+       if ( (ifileid=fopen(argv[2],"rb")) == NULL) {
+           fprintf(stderr,"Cannot open input file %s\n", argv[2]);
+           exit(2);}
+       if ( (efileid=fopen(argv[3],"wb")) == NULL) {
+           fprintf(stderr, "Cannot open encoded file %s\n",
+               argv[3]); exit(1);}
+       if ( (ofileid=fopen(argv[4],"wb")) == NULL) {
+           fprintf(stderr, "Cannot open decoded file %s\n",
+               argv[4]); exit(1);}
+       if (argc==6) {
+           if( (cfileid=fopen(argv[5],"rb")) == NULL) {
+               fprintf(stderr, "Cannot open channel file %s\n",
+
+
+
+
+
+                   argv[5]);
+               exit(1);
+           }
+       } else {
+           cfileid=NULL;
+       }
+
+       /* print info */
+
+       fprintf(stderr, "\n");
+       fprintf(stderr,
+           "*---------------------------------------------------*\n");
+       fprintf(stderr,
+           "*                                                   *\n");
+       fprintf(stderr,
+           "*      iLBC test program                            *\n");
+       fprintf(stderr,
+           "*                                                   *\n");
+       fprintf(stderr,
+           "*                                                   *\n");
+       fprintf(stderr,
+           "*---------------------------------------------------*\n");
+       fprintf(stderr,"\nMode           : %2d ms\n", mode);
+       fprintf(stderr,"Input file     : %s\n", argv[2]);
+       fprintf(stderr,"Encoded file   : %s\n", argv[3]);
+       fprintf(stderr,"Output file    : %s\n", argv[4]);
+       if (argc==6) {
+           fprintf(stderr,"Channel file   : %s\n", argv[5]);
+       }
+       fprintf(stderr,"\n");
+
+       /* Initialization */
+
+       initEncode(&Enc_Inst, mode);
+       initDecode(&Dec_Inst, mode, 1);
+
+       /* Runtime statistics */
+
+       starttime=clock()/(float)CLOCKS_PER_SEC;
+
+       /* loop over input blocks */
+
+       while (fread(data,sizeof(short),Enc_Inst.blockl,ifileid)==
+               (size_t)Enc_Inst.blockl) {
+
+           blockcount++;
+
+           /* encoding */
+
+
+
+
+
+           fprintf(stderr, "--- Encoding block %i --- ",blockcount);
+           len=encode(&Enc_Inst, encoded_data, data);
+           fprintf(stderr, "\r");
+
+           /* write byte file */
+
+           fwrite(encoded_data, sizeof(unsigned char), len, efileid);
+
+           /* get channel data if provided */
+           if (argc==6) {
+               if (fread(&pli, sizeof(short), 1, cfileid)) {
+                   if ((pli!=0)&&(pli!=1)) {
+                       fprintf(stderr, "Error in channel file\n");
+                       exit(0);
+                   }
+                   if (pli==0) {
+                       /* Packet loss -> remove info from frame */
+                       memset(encoded_data, 0,
+                           sizeof(short)*ILBCNOOFWORDS_MAX);
+                       packetlosscount++;
+                   }
+               } else {
+                   fprintf(stderr, "Error. Channel file too short\n");
+                   exit(0);
+               }
+           } else {
+               pli=1;
+           }
+
+           /* decoding */
+
+           fprintf(stderr, "--- Decoding block %i --- ",blockcount);
+
+           len=decode(&Dec_Inst, decoded_data, encoded_data, pli);
+           fprintf(stderr, "\r");
+
+           /* write output file */
+
+           fwrite(decoded_data,sizeof(short),len,ofileid);
+       }
+
+       /* Runtime statistics */
+
+       runtime = (float)(clock()/(float)CLOCKS_PER_SEC-starttime);
+       outtime = (float)((float)blockcount*(float)mode/1000.0);
+       printf("\n\nLength of speech file: %.1f s\n", outtime);
+       printf("Packet loss          : %.1f%%\n",
+           100.0*(float)packetlosscount/(float)blockcount);
+
+
+
+
+
+       printf("Time to run iLBC     :");
+       printf(" %.1f s (%.1f %% of realtime)\n\n", runtime,
+           (100*runtime/outtime));
+
+       /* close files */
+
+       fclose(ifileid);  fclose(efileid); fclose(ofileid);
+       if (argc==6) {
+           fclose(cfileid);
+       }
+       return(0);
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/lsf.c b/sflphone-common/libs/pjproject/third_party/ilbc/lsf.c
new file mode 100644
index 0000000000..b4fe0eda3d
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/lsf.c
@@ -0,0 +1,283 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       lsf.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <string.h>
+
+
+
+
+
+   #include <math.h>
+
+   #include "iLBC_define.h"
+
+   /*----------------------------------------------------------------*
+    *  conversion from lpc coefficients to lsf coefficients
+    *---------------------------------------------------------------*/
+
+   void a2lsf(
+       float *freq,/* (o) lsf coefficients */
+       float *a    /* (i) lpc coefficients */
+   ){
+       float steps[LSF_NUMBER_OF_STEPS] =
+           {(float)0.00635, (float)0.003175, (float)0.0015875,
+           (float)0.00079375};
+       float step;
+       int step_idx;
+       int lsp_index;
+       float p[LPC_HALFORDER];
+       float q[LPC_HALFORDER];
+       float p_pre[LPC_HALFORDER];
+       float q_pre[LPC_HALFORDER];
+       float old_p, old_q, *old;
+       float *pq_coef;
+       float omega, old_omega;
+       int i;
+       float hlp, hlp1, hlp2, hlp3, hlp4, hlp5;
+
+       for (i=0; i<LPC_HALFORDER; i++) {
+           p[i] = (float)-1.0 * (a[i + 1] + a[LPC_FILTERORDER - i]);
+           q[i] = a[LPC_FILTERORDER - i] - a[i + 1];
+       }
+
+       p_pre[0] = (float)-1.0 - p[0];
+       p_pre[1] = - p_pre[0] - p[1];
+       p_pre[2] = - p_pre[1] - p[2];
+       p_pre[3] = - p_pre[2] - p[3];
+       p_pre[4] = - p_pre[3] - p[4];
+       p_pre[4] = p_pre[4] / 2;
+
+       q_pre[0] = (float)1.0 - q[0];
+       q_pre[1] = q_pre[0] - q[1];
+       q_pre[2] = q_pre[1] - q[2];
+       q_pre[3] = q_pre[2] - q[3];
+       q_pre[4] = q_pre[3] - q[4];
+       q_pre[4] = q_pre[4] / 2;
+
+       omega = 0.0;
+
+
+
+
+
+       old_omega = 0.0;
+
+       old_p = FLOAT_MAX;
+       old_q = FLOAT_MAX;
+
+       /* Here we loop through lsp_index to find all the
+          LPC_FILTERORDER roots for omega. */
+
+       for (lsp_index = 0; lsp_index<LPC_FILTERORDER; lsp_index++) {
+
+           /* Depending on lsp_index being even or odd, we
+           alternatively solve the roots for the two LSP equations. */
+
+
+           if ((lsp_index & 0x1) == 0) {
+               pq_coef = p_pre;
+               old = &old_p;
+           } else {
+               pq_coef = q_pre;
+               old = &old_q;
+           }
+
+           /* Start with low resolution grid */
+
+           for (step_idx = 0, step = steps[step_idx];
+               step_idx < LSF_NUMBER_OF_STEPS;){
+
+               /*  cos(10piw) + pq(0)cos(8piw) + pq(1)cos(6piw) +
+               pq(2)cos(4piw) + pq(3)cod(2piw) + pq(4) */
+
+               hlp = (float)cos(omega * TWO_PI);
+               hlp1 = (float)2.0 * hlp + pq_coef[0];
+               hlp2 = (float)2.0 * hlp * hlp1 - (float)1.0 +
+                   pq_coef[1];
+               hlp3 = (float)2.0 * hlp * hlp2 - hlp1 + pq_coef[2];
+               hlp4 = (float)2.0 * hlp * hlp3 - hlp2 + pq_coef[3];
+               hlp5 = hlp * hlp4 - hlp3 + pq_coef[4];
+
+
+               if (((hlp5 * (*old)) <= 0.0) || (omega >= 0.5)){
+
+                   if (step_idx == (LSF_NUMBER_OF_STEPS - 1)){
+
+                       if (fabs(hlp5) >= fabs(*old)) {
+                           freq[lsp_index] = omega - step;
+                       } else {
+                           freq[lsp_index] = omega;
+                       }
+
+
+
+
+
+
+
+                       if ((*old) >= 0.0){
+                           *old = (float)-1.0 * FLOAT_MAX;
+                       } else {
+                           *old = FLOAT_MAX;
+                       }
+
+                       omega = old_omega;
+                       step_idx = 0;
+
+                       step_idx = LSF_NUMBER_OF_STEPS;
+                   } else {
+
+                       if (step_idx == 0) {
+                           old_omega = omega;
+                       }
+
+                       step_idx++;
+                       omega -= steps[step_idx];
+
+                       /* Go back one grid step */
+
+                       step = steps[step_idx];
+                   }
+               } else {
+
+               /* increment omega until they are of different sign,
+               and we know there is at least one root between omega
+               and old_omega */
+                   *old = hlp5;
+                   omega += step;
+               }
+           }
+       }
+
+       for (i = 0; i<LPC_FILTERORDER; i++) {
+           freq[i] = freq[i] * TWO_PI;
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  conversion from lsf coefficients to lpc coefficients
+    *---------------------------------------------------------------*/
+
+   void lsf2a(
+       float *a_coef,  /* (o) lpc coefficients */
+       float *freq     /* (i) lsf coefficients */
+
+
+
+
+
+   ){
+       int i, j;
+       float hlp;
+       float p[LPC_HALFORDER], q[LPC_HALFORDER];
+       float a[LPC_HALFORDER + 1], a1[LPC_HALFORDER],
+           a2[LPC_HALFORDER];
+       float b[LPC_HALFORDER + 1], b1[LPC_HALFORDER],
+           b2[LPC_HALFORDER];
+
+       for (i=0; i<LPC_FILTERORDER; i++) {
+           freq[i] = freq[i] * PI2;
+       }
+
+       /* Check input for ill-conditioned cases.  This part is not
+       found in the TIA standard.  It involves the following 2 IF
+       blocks.  If "freq" is judged ill-conditioned, then we first
+       modify freq[0] and freq[LPC_HALFORDER-1] (normally
+       LPC_HALFORDER = 10 for LPC applications), then we adjust
+       the other "freq" values slightly */
+
+
+       if ((freq[0] <= 0.0) || (freq[LPC_FILTERORDER - 1] >= 0.5)){
+
+
+           if (freq[0] <= 0.0) {
+               freq[0] = (float)0.022;
+           }
+
+
+           if (freq[LPC_FILTERORDER - 1] >= 0.5) {
+               freq[LPC_FILTERORDER - 1] = (float)0.499;
+           }
+
+           hlp = (freq[LPC_FILTERORDER - 1] - freq[0]) /
+               (float) (LPC_FILTERORDER - 1);
+
+           for (i=1; i<LPC_FILTERORDER; i++) {
+               freq[i] = freq[i - 1] + hlp;
+           }
+       }
+
+       memset(a1, 0, LPC_HALFORDER*sizeof(float));
+       memset(a2, 0, LPC_HALFORDER*sizeof(float));
+       memset(b1, 0, LPC_HALFORDER*sizeof(float));
+       memset(b2, 0, LPC_HALFORDER*sizeof(float));
+       memset(a, 0, (LPC_HALFORDER+1)*sizeof(float));
+       memset(b, 0, (LPC_HALFORDER+1)*sizeof(float));
+
+
+
+
+
+
+       /* p[i] and q[i] compute cos(2*pi*omega_{2j}) and
+       cos(2*pi*omega_{2j-1} in eqs. 4.2.2.2-1 and 4.2.2.2-2.
+       Note that for this code p[i] specifies the coefficients
+       used in .Q_A(z) while q[i] specifies the coefficients used
+       in .P_A(z) */
+
+       for (i=0; i<LPC_HALFORDER; i++) {
+           p[i] = (float)cos(TWO_PI * freq[2 * i]);
+           q[i] = (float)cos(TWO_PI * freq[2 * i + 1]);
+       }
+
+       a[0] = 0.25;
+       b[0] = 0.25;
+
+       for (i= 0; i<LPC_HALFORDER; i++) {
+           a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
+           b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
+           a2[i] = a1[i];
+           a1[i] = a[i];
+           b2[i] = b1[i];
+           b1[i] = b[i];
+       }
+
+       for (j=0; j<LPC_FILTERORDER; j++) {
+
+           if (j == 0) {
+               a[0] = 0.25;
+               b[0] = -0.25;
+           } else {
+               a[0] = b[0] = 0.0;
+           }
+
+           for (i=0; i<LPC_HALFORDER; i++) {
+               a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
+               b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
+               a2[i] = a1[i];
+               a1[i] = a[i];
+               b2[i] = b1[i];
+               b1[i] = b[i];
+           }
+
+           a_coef[j + 1] = 2 * (a[LPC_HALFORDER] + b[LPC_HALFORDER]);
+       }
+
+       a_coef[0] = 1.0;
+   }
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/lsf.h b/sflphone-common/libs/pjproject/third_party/ilbc/lsf.h
new file mode 100644
index 0000000000..caff77ec0d
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/lsf.h
@@ -0,0 +1,27 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       lsf.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_LSF_H
+   #define __iLBC_LSF_H
+
+   void a2lsf(
+       float *freq,/* (o) lsf coefficients */
+       float *a    /* (i) lpc coefficients */
+   );
+
+   void lsf2a(
+       float *a_coef,  /* (o) lpc coefficients */
+       float *freq     /* (i) lsf coefficients */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/packing.c b/sflphone-common/libs/pjproject/third_party/ilbc/packing.c
new file mode 100644
index 0000000000..b7496a48ea
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/packing.c
@@ -0,0 +1,182 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       packing.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include <math.h>
+   #include <stdlib.h>
+
+   #include "iLBC_define.h"
+   #include "constants.h"
+   #include "helpfun.h"
+   #include "string.h"
+
+   /*----------------------------------------------------------------*
+    *  splitting an integer into first most significant bits and
+    *  remaining least significant bits
+    *---------------------------------------------------------------*/
+
+   void packsplit(
+       int *index,                 /* (i) the value to split */
+       int *firstpart,             /* (o) the value specified by most
+                                          significant bits */
+       int *rest,                  /* (o) the value specified by least
+                                          significant bits */
+
+
+
+
+
+       int bitno_firstpart,    /* (i) number of bits in most
+                                          significant part */
+       int bitno_total             /* (i) number of bits in full range
+                                          of value */
+   ){
+       int bitno_rest = bitno_total-bitno_firstpart;
+
+       *firstpart = *index>>(bitno_rest);
+       *rest = *index-(*firstpart<<(bitno_rest));
+   }
+
+   /*----------------------------------------------------------------*
+    *  combining a value corresponding to msb's with a value
+    *  corresponding to lsb's
+    *---------------------------------------------------------------*/
+
+   void packcombine(
+       int *index,                 /* (i/o) the msb value in the
+                                          combined value out */
+       int rest,                   /* (i) the lsb value */
+       int bitno_rest              /* (i) the number of bits in the
+                                          lsb part */
+   ){
+       *index = *index<<bitno_rest;
+       *index += rest;
+   }
+
+   /*----------------------------------------------------------------*
+    *  packing of bits into bitstream, i.e., vector of bytes
+    *---------------------------------------------------------------*/
+
+   void dopack(
+       unsigned char **bitstream,  /* (i/o) on entrance pointer to
+                                          place in bitstream to pack
+                                          new data, on exit pointer
+                                          to place in bitstream to
+                                          pack future data */
+       int index,                  /* (i) the value to pack */
+       int bitno,                  /* (i) the number of bits that the
+                                          value will fit within */
+       int *pos                /* (i/o) write position in the
+                                          current byte */
+   ){
+       int posLeft;
+
+       /* Clear the bits before starting in a new byte */
+
+       if ((*pos)==0) {
+
+
+
+
+
+           **bitstream=0;
+       }
+
+       while (bitno>0) {
+
+           /* Jump to the next byte if end of this byte is reached*/
+
+           if (*pos==8) {
+               *pos=0;
+               (*bitstream)++;
+               **bitstream=0;
+           }
+
+           posLeft=8-(*pos);
+
+           /* Insert index into the bitstream */
+
+           if (bitno <= posLeft) {
+               **bitstream |= (unsigned char)(index<<(posLeft-bitno));
+               *pos+=bitno;
+               bitno=0;
+           } else {
+               **bitstream |= (unsigned char)(index>>(bitno-posLeft));
+
+               *pos=8;
+               index-=((index>>(bitno-posLeft))<<(bitno-posLeft));
+
+               bitno-=posLeft;
+           }
+       }
+   }
+
+   /*----------------------------------------------------------------*
+    *  unpacking of bits from bitstream, i.e., vector of bytes
+    *---------------------------------------------------------------*/
+
+   void unpack(
+       unsigned char **bitstream,  /* (i/o) on entrance pointer to
+                                          place in bitstream to
+                                          unpack new data from, on
+                                          exit pointer to place in
+                                          bitstream to unpack future
+                                          data from */
+       int *index,                 /* (o) resulting value */
+       int bitno,                  /* (i) number of bits used to
+                                          represent the value */
+       int *pos                /* (i/o) read position in the
+                                          current byte */
+
+
+
+
+
+   ){
+       int BitsLeft;
+
+       *index=0;
+
+       while (bitno>0) {
+
+           /* move forward in bitstream when the end of the
+              byte is reached */
+
+           if (*pos==8) {
+               *pos=0;
+               (*bitstream)++;
+           }
+
+           BitsLeft=8-(*pos);
+
+           /* Extract bits to index */
+
+           if (BitsLeft>=bitno) {
+               *index+=((((**bitstream)<<(*pos)) & 0xFF)>>(8-bitno));
+
+               *pos+=bitno;
+               bitno=0;
+           } else {
+
+               if ((8-bitno)>0) {
+                   *index+=((((**bitstream)<<(*pos)) & 0xFF)>>
+                       (8-bitno));
+                   *pos=8;
+               } else {
+                   *index+=(((int)(((**bitstream)<<(*pos)) & 0xFF))<<
+                       (bitno-8));
+                   *pos=8;
+               }
+               bitno-=BitsLeft;
+           }
+       }
+   }
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/packing.h b/sflphone-common/libs/pjproject/third_party/ilbc/packing.h
new file mode 100644
index 0000000000..cbb9f82dfd
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/packing.h
@@ -0,0 +1,68 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       packing.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __PACKING_H
+   #define __PACKING_H
+
+   void packsplit(
+       int *index,                 /* (i) the value to split */
+       int *firstpart,             /* (o) the value specified by most
+                                          significant bits */
+       int *rest,                  /* (o) the value specified by least
+                                          significant bits */
+       int bitno_firstpart,    /* (i) number of bits in most
+                                          significant part */
+       int bitno_total             /* (i) number of bits in full range
+                                          of value */
+   );
+
+   void packcombine(
+       int *index,                 /* (i/o) the msb value in the
+                                          combined value out */
+       int rest,                   /* (i) the lsb value */
+       int bitno_rest              /* (i) the number of bits in the
+                                          lsb part */
+   );
+
+   void dopack(
+       unsigned char **bitstream,  /* (i/o) on entrance pointer to
+                                          place in bitstream to pack
+                                          new data, on exit pointer
+                                          to place in bitstream to
+                                          pack future data */
+       int index,                  /* (i) the value to pack */
+       int bitno,                  /* (i) the number of bits that the
+                                          value will fit within */
+       int *pos                /* (i/o) write position in the
+                                          current byte */
+   );
+
+
+
+
+
+   void unpack(
+       unsigned char **bitstream,  /* (i/o) on entrance pointer to
+                                          place in bitstream to
+                                          unpack new data from, on
+                                          exit pointer to place in
+                                          bitstream to unpack future
+                                          data from */
+       int *index,                 /* (o) resulting value */
+       int bitno,                  /* (i) number of bits used to
+                                          represent the value */
+       int *pos                /* (i/o) read position in the
+                                          current byte */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c b/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c
new file mode 100644
index 0000000000..190eb009db
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c
@@ -0,0 +1,80 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       syntFilter.c
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #include "iLBC_define.h"
+
+   /*----------------------------------------------------------------*
+    *  LP synthesis filter.
+    *---------------------------------------------------------------*/
+
+   void syntFilter(
+       float *Out,     /* (i/o) Signal to be filtered */
+       float *a,       /* (i) LP parameters */
+       int len,    /* (i) Length of signal */
+
+
+
+
+
+       float *mem      /* (i/o) Filter state */
+   ){
+       int i, j;
+       float *po, *pi, *pa, *pm;
+
+       po=Out;
+
+       /* Filter first part using memory from past */
+
+       for (i=0; i<LPC_FILTERORDER; i++) {
+           pi=&Out[i-1];
+           pa=&a[1];
+           pm=&mem[LPC_FILTERORDER-1];
+           for (j=1; j<=i; j++) {
+               *po-=(*pa++)*(*pi--);
+           }
+           for (j=i+1; j<LPC_FILTERORDER+1; j++) {
+               *po-=(*pa++)*(*pm--);
+           }
+           po++;
+       }
+
+       /* Filter last part where the state is entirely in
+          the output vector */
+
+       for (i=LPC_FILTERORDER; i<len; i++) {
+           pi=&Out[i-1];
+           pa=&a[1];
+           for (j=1; j<LPC_FILTERORDER+1; j++) {
+               *po-=(*pa++)*(*pi--);
+           }
+           po++;
+       }
+
+       /* Update state vector */
+
+       memcpy(mem, &Out[len-LPC_FILTERORDER],
+           LPC_FILTERORDER*sizeof(float));
+   }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h b/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h
new file mode 100644
index 0000000000..8865b8917f
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h
@@ -0,0 +1,24 @@
+
+   /******************************************************************
+
+       iLBC Speech Coder ANSI-C Source Code
+
+       syntFilter.h
+
+       Copyright (C) The Internet Society (2004).
+       All Rights Reserved.
+
+   ******************************************************************/
+
+   #ifndef __iLBC_SYNTFILTER_H
+   #define __iLBC_SYNTFILTER_H
+
+   void syntFilter(
+       float *Out,     /* (i/o) Signal to be filtered */
+       float *a,       /* (i) LP parameters */
+       int len,    /* (i) Length of signal */
+       float *mem      /* (i/o) Filter state */
+   );
+
+   #endif
+
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/milenage.c b/sflphone-common/libs/pjproject/third_party/milenage/milenage.c
new file mode 100644
index 0000000000..66dae9bb10
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/milenage/milenage.c
@@ -0,0 +1,284 @@
+/*-------------------------------------------------------------------
+ *          Example algorithms f1, f1*, f2, f3, f4, f5, f5*
+ *-------------------------------------------------------------------
+ *
+ *  A sample implementation of the example 3GPP authentication and
+ *  key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.  This is
+ *  a byte-oriented implementation of the functions, and of the block
+ *  cipher kernel function Rijndael.
+ *
+ *  This has been coded for clarity, not necessarily for efficiency.
+ *
+ *  The functions f2, f3, f4 and f5 share the same inputs and have
+ *  been coded together as a single function.  f1, f1* and f5* are
+ *  all coded separately.
+ *
+ *-----------------------------------------------------------------*/
+
+#include "milenage.h"
+#include "rijndael.h"
+
+/*--------------------------- prototypes --------------------------*/
+
+
+
+/*-------------------------------------------------------------------
+ *                            Algorithm f1
+ *-------------------------------------------------------------------
+ *
+ *  Computes network authentication code MAC-A from key K, random
+ *  challenge RAND, sequence number SQN and authentication management
+ *  field AMF.
+ *
+ *-----------------------------------------------------------------*/
+
+void f1    ( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], 
+             u8 mac_a[8], u8 op[16] )
+{
+  u8 op_c[16];
+  u8 temp[16];
+  u8 in1[16];
+  u8 out1[16];
+  u8 rijndaelInput[16];
+  u8 i;
+
+  RijndaelKeySchedule( k );
+
+  ComputeOPc( op_c, op );
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] = rand[i] ^ op_c[i];
+  RijndaelEncrypt( rijndaelInput, temp );
+
+  for (i=0; i<6; i++)
+  {
+    in1[i]    = sqn[i];
+    in1[i+8]  = sqn[i];
+  }
+  for (i=0; i<2; i++)
+  {
+    in1[i+6]  = amf[i];
+    in1[i+14] = amf[i];
+  }
+
+  /* XOR op_c and in1, rotate by r1=64, and XOR *
+   * on the constant c1 (which is all zeroes)   */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[(i+8) % 16] = in1[i] ^ op_c[i];
+
+  /* XOR on the value temp computed before */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] ^= temp[i];
+  
+  RijndaelEncrypt( rijndaelInput, out1 );
+  for (i=0; i<16; i++)
+    out1[i] ^= op_c[i];
+
+  for (i=0; i<8; i++)
+    mac_a[i] = out1[i];
+
+  return;
+} /* end of function f1 */
+
+
+  
+/*-------------------------------------------------------------------
+ *                            Algorithms f2-f5
+ *-------------------------------------------------------------------
+ *
+ *  Takes key K and random challenge RAND, and returns response RES,
+ *  confidentiality key CK, integrity key IK and anonymity key AK.
+ *
+ *-----------------------------------------------------------------*/
+
+void f2345 ( u8 k[16], u8 rand[16],
+             u8 res[8], u8 ck[16], u8 ik[16], u8 ak[6], u8 op[16] )
+{
+  u8 op_c[16];
+  u8 temp[16];
+  u8 out[16];
+  u8 rijndaelInput[16];
+  u8 i;
+
+  RijndaelKeySchedule( k );
+
+  ComputeOPc( op_c, op );
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] = rand[i] ^ op_c[i];
+  RijndaelEncrypt( rijndaelInput, temp );
+
+  /* To obtain output block OUT2: XOR OPc and TEMP,    *
+   * rotate by r2=0, and XOR on the constant c2 (which *
+   * is all zeroes except that the last bit is 1).     */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] = temp[i] ^ op_c[i];
+  rijndaelInput[15] ^= 1;
+
+  RijndaelEncrypt( rijndaelInput, out );
+  for (i=0; i<16; i++)
+    out[i] ^= op_c[i];
+
+  for (i=0; i<8; i++)
+    res[i] = out[i+8];
+  for (i=0; i<6; i++)
+    ak[i]  = out[i];
+
+  /* To obtain output block OUT3: XOR OPc and TEMP,        *
+   * rotate by r3=32, and XOR on the constant c3 (which    *
+   * is all zeroes except that the next to last bit is 1). */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[(i+12) % 16] = temp[i] ^ op_c[i];
+  rijndaelInput[15] ^= 2;
+
+  RijndaelEncrypt( rijndaelInput, out );
+  for (i=0; i<16; i++)
+    out[i] ^= op_c[i];
+
+  for (i=0; i<16; i++)
+    ck[i] = out[i];
+
+  /* To obtain output block OUT4: XOR OPc and TEMP,         *
+   * rotate by r4=64, and XOR on the constant c4 (which     *
+   * is all zeroes except that the 2nd from last bit is 1). */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[(i+8) % 16] = temp[i] ^ op_c[i];
+  rijndaelInput[15] ^= 4;
+
+  RijndaelEncrypt( rijndaelInput, out );
+  for (i=0; i<16; i++)
+    out[i] ^= op_c[i];
+
+  for (i=0; i<16; i++)
+    ik[i] = out[i];
+
+  return;
+} /* end of function f2345 */
+
+  
+/*-------------------------------------------------------------------
+ *                            Algorithm f1*
+ *-------------------------------------------------------------------
+ *
+ *  Computes resynch authentication code MAC-S from key K, random
+ *  challenge RAND, sequence number SQN and authentication management
+ *  field AMF.
+ *
+ *-----------------------------------------------------------------*/
+
+void f1star( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], 
+             u8 mac_s[8], u8 op[16] )
+{
+  u8 op_c[16];
+  u8 temp[16];
+  u8 in1[16];
+  u8 out1[16];
+  u8 rijndaelInput[16];
+  u8 i;
+
+  RijndaelKeySchedule( k );
+
+  ComputeOPc( op_c, op );
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] = rand[i] ^ op_c[i];
+  RijndaelEncrypt( rijndaelInput, temp );
+
+  for (i=0; i<6; i++)
+  {
+    in1[i]    = sqn[i];
+    in1[i+8]  = sqn[i];
+  }
+  for (i=0; i<2; i++)
+  {
+    in1[i+6]  = amf[i];
+    in1[i+14] = amf[i];
+  }
+
+  /* XOR op_c and in1, rotate by r1=64, and XOR *
+   * on the constant c1 (which is all zeroes)   */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[(i+8) % 16] = in1[i] ^ op_c[i];
+
+  /* XOR on the value temp computed before */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] ^= temp[i];
+  
+  RijndaelEncrypt( rijndaelInput, out1 );
+  for (i=0; i<16; i++)
+    out1[i] ^= op_c[i];
+
+  for (i=0; i<8; i++)
+    mac_s[i] = out1[i+8];
+
+  return;
+} /* end of function f1star */
+
+  
+/*-------------------------------------------------------------------
+ *                            Algorithm f5*
+ *-------------------------------------------------------------------
+ *
+ *  Takes key K and random challenge RAND, and returns resynch
+ *  anonymity key AK.
+ *
+ *-----------------------------------------------------------------*/
+
+void f5star( u8 k[16], u8 rand[16],
+             u8 ak[6], u8 op[16] )
+{
+  u8 op_c[16];
+  u8 temp[16];
+  u8 out[16];
+  u8 rijndaelInput[16];
+  u8 i;
+
+  RijndaelKeySchedule( k );
+
+  ComputeOPc( op_c, op );
+
+  for (i=0; i<16; i++)
+    rijndaelInput[i] = rand[i] ^ op_c[i];
+  RijndaelEncrypt( rijndaelInput, temp );
+
+  /* To obtain output block OUT5: XOR OPc and TEMP,         *
+   * rotate by r5=96, and XOR on the constant c5 (which     *
+   * is all zeroes except that the 3rd from last bit is 1). */
+
+  for (i=0; i<16; i++)
+    rijndaelInput[(i+4) % 16] = temp[i] ^ op_c[i];
+  rijndaelInput[15] ^= 8;
+
+  RijndaelEncrypt( rijndaelInput, out );
+  for (i=0; i<16; i++)
+    out[i] ^= op_c[i];
+
+  for (i=0; i<6; i++)
+    ak[i] = out[i];
+
+  return;
+} /* end of function f5star */
+
+  
+/*-------------------------------------------------------------------
+ *  Function to compute OPc from OP and K.  Assumes key schedule has
+    already been performed.
+ *-----------------------------------------------------------------*/
+
+void ComputeOPc( u8 op_c[16], u8 op[16] )
+{
+  u8 i;
+  
+  RijndaelEncrypt( op, op_c );
+  for (i=0; i<16; i++)
+    op_c[i] ^= op[i];
+
+  return;
+} /* end of function ComputeOPc */
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/milenage.h b/sflphone-common/libs/pjproject/third_party/milenage/milenage.h
new file mode 100644
index 0000000000..a5f407f378
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/milenage/milenage.h
@@ -0,0 +1,35 @@
+/*-------------------------------------------------------------------
+ *          Example algorithms f1, f1*, f2, f3, f4, f5, f5*
+ *-------------------------------------------------------------------
+ *
+ *  A sample implementation of the example 3GPP authentication and
+ *  key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.  This is
+ *  a byte-oriented implementation of the functions, and of the block
+ *  cipher kernel function Rijndael.
+ *
+ *  This has been coded for clarity, not necessarily for efficiency.
+ *
+ *  The functions f2, f3, f4 and f5 share the same inputs and have
+ *  been coded together as a single function.  f1, f1* and f5* are
+ *  all coded separately.
+ *
+ *-----------------------------------------------------------------*/
+
+#ifndef MILENAGE_H
+#define MILENAGE_H
+
+typedef unsigned char u8;
+
+
+void f1    ( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2],
+             u8 mac_a[8], u8 op[16] );
+void f2345 ( u8 k[16], u8 rand[16],
+             u8 res[8], u8 ck[16], u8 ik[16], u8 ak[6], u8 op[16] );
+void f1star( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2],
+             u8 mac_s[8], u8 op[16] );
+void f5star( u8 k[16], u8 rand[16],
+             u8 ak[6], u8 op[16] );
+void ComputeOPc( u8 op_c[16], u8 op[16] );
+
+
+#endif
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/rijndael.c b/sflphone-common/libs/pjproject/third_party/milenage/rijndael.c
new file mode 100644
index 0000000000..86557b92e4
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/milenage/rijndael.c
@@ -0,0 +1,444 @@
+/*-------------------------------------------------------------------
+ *                      Rijndael Implementation
+ *-------------------------------------------------------------------
+ *
+ *  A sample 32-bit orientated implementation of Rijndael, the
+ *  suggested kernel for the example 3GPP authentication and key
+ *  agreement functions.
+ *
+ *  This implementation draws on the description in section 5.2 of
+ *  the AES proposal and also on the implementation by
+ *  Dr B. R. Gladman <brg@gladman.uk.net> 9th October 2000.
+ *  It uses a number of large (4k) lookup tables to implement the
+ *  algorithm in an efficient manner.
+ *
+ *  Note: in this implementation the State is stored in four 32-bit
+ *  words, one per column of the State, with the top byte of the
+ *  column being the _least_ significant byte of the word.
+ *
+*-----------------------------------------------------------------*/
+
+#include <pj/types.h>
+
+#if defined(PJ_IS_LITTLE_ENDIAN) && PJ_IS_LITTLE_ENDIAN != 0
+#	define LITTLE_ENDIAN	/* For INTEL architecture */
+#endif
+
+typedef unsigned char   u8;
+typedef unsigned int	 u32;
+
+/* Circular byte rotates of 32 bit values */
+
+#define rot1(x) ((x <<  8) | (x >> 24))
+#define rot2(x) ((x << 16) | (x >> 16))
+#define rot3(x) ((x << 24) | (x >>  8))
+
+/* Extract a byte from a 32-bit u32 */
+
+#define byte0(x)    ((u8)(x))
+#define byte1(x)    ((u8)(x >>  8))
+#define byte2(x)    ((u8)(x >> 16))
+#define byte3(x)    ((u8)(x >> 24))
+
+
+/* Put or get a 32 bit u32 (v) in machine order from a byte	*
+ * address in (x)                                           */
+
+#ifdef  LITTLE_ENDIAN
+
+#define u32_in(x)     (*(u32*)(x))
+#define u32_out(x,y)  (*(u32*)(x) = y)
+
+#else
+
+/* Invert byte order in a 32 bit variable */
+
+__inline u32 byte_swap(const u32 x)
+{
+    return rot1(x) & 0x00ff00ff | rot3(x) & 0xff00ff00;
+}
+__inline u32 u32_in(const u8 x[])
+{
+  return byte_swap(*(u32*)x);
+};
+__inline void u32_out(u8 x[], const u32 v) 
+{
+  *(u32*)x = byte_swap(v);
+};
+
+#endif
+
+/*--------------- The lookup tables ----------------------------*/
+
+static u32 rnd_con[10] = 
+{ 
+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36
+};
+
+static u32 ft_tab[4][256] = 
+{
+ {
+ 0xA56363C6,0x847C7CF8,0x997777EE,0x8D7B7BF6,0x0DF2F2FF,0xBD6B6BD6,0xB16F6FDE,0x54C5C591,
+ 0x50303060,0x03010102,0xA96767CE,0x7D2B2B56,0x19FEFEE7,0x62D7D7B5,0xE6ABAB4D,0x9A7676EC,
+ 0x45CACA8F,0x9D82821F,0x40C9C989,0x877D7DFA,0x15FAFAEF,0xEB5959B2,0xC947478E,0x0BF0F0FB,
+ 0xECADAD41,0x67D4D4B3,0xFDA2A25F,0xEAAFAF45,0xBF9C9C23,0xF7A4A453,0x967272E4,0x5BC0C09B,
+ 0xC2B7B775,0x1CFDFDE1,0xAE93933D,0x6A26264C,0x5A36366C,0x413F3F7E,0x02F7F7F5,0x4FCCCC83,
+ 0x5C343468,0xF4A5A551,0x34E5E5D1,0x08F1F1F9,0x937171E2,0x73D8D8AB,0x53313162,0x3F15152A,
+ 0x0C040408,0x52C7C795,0x65232346,0x5EC3C39D,0x28181830,0xA1969637,0x0F05050A,0xB59A9A2F,
+ 0x0907070E,0x36121224,0x9B80801B,0x3DE2E2DF,0x26EBEBCD,0x6927274E,0xCDB2B27F,0x9F7575EA,
+ 0x1B090912,0x9E83831D,0x742C2C58,0x2E1A1A34,0x2D1B1B36,0xB26E6EDC,0xEE5A5AB4,0xFBA0A05B,
+ 0xF65252A4,0x4D3B3B76,0x61D6D6B7,0xCEB3B37D,0x7B292952,0x3EE3E3DD,0x712F2F5E,0x97848413,
+ 0xF55353A6,0x68D1D1B9,0000000000,0x2CEDEDC1,0x60202040,0x1FFCFCE3,0xC8B1B179,0xED5B5BB6,
+ 0xBE6A6AD4,0x46CBCB8D,0xD9BEBE67,0x4B393972,0xDE4A4A94,0xD44C4C98,0xE85858B0,0x4ACFCF85,
+ 0x6BD0D0BB,0x2AEFEFC5,0xE5AAAA4F,0x16FBFBED,0xC5434386,0xD74D4D9A,0x55333366,0x94858511,
+ 0xCF45458A,0x10F9F9E9,0x06020204,0x817F7FFE,0xF05050A0,0x443C3C78,0xBA9F9F25,0xE3A8A84B,
+ 0xF35151A2,0xFEA3A35D,0xC0404080,0x8A8F8F05,0xAD92923F,0xBC9D9D21,0x48383870,0x04F5F5F1,
+ 0xDFBCBC63,0xC1B6B677,0x75DADAAF,0x63212142,0x30101020,0x1AFFFFE5,0x0EF3F3FD,0x6DD2D2BF,
+ 0x4CCDCD81,0x140C0C18,0x35131326,0x2FECECC3,0xE15F5FBE,0xA2979735,0xCC444488,0x3917172E,
+ 0x57C4C493,0xF2A7A755,0x827E7EFC,0x473D3D7A,0xAC6464C8,0xE75D5DBA,0x2B191932,0x957373E6,
+ 0xA06060C0,0x98818119,0xD14F4F9E,0x7FDCDCA3,0x66222244,0x7E2A2A54,0xAB90903B,0x8388880B,
+ 0xCA46468C,0x29EEEEC7,0xD3B8B86B,0x3C141428,0x79DEDEA7,0xE25E5EBC,0x1D0B0B16,0x76DBDBAD,
+ 0x3BE0E0DB,0x56323264,0x4E3A3A74,0x1E0A0A14,0xDB494992,0x0A06060C,0x6C242448,0xE45C5CB8,
+ 0x5DC2C29F,0x6ED3D3BD,0xEFACAC43,0xA66262C4,0xA8919139,0xA4959531,0x37E4E4D3,0x8B7979F2,
+ 0x32E7E7D5,0x43C8C88B,0x5937376E,0xB76D6DDA,0x8C8D8D01,0x64D5D5B1,0xD24E4E9C,0xE0A9A949,
+ 0xB46C6CD8,0xFA5656AC,0x07F4F4F3,0x25EAEACF,0xAF6565CA,0x8E7A7AF4,0xE9AEAE47,0x18080810,
+ 0xD5BABA6F,0x887878F0,0x6F25254A,0x722E2E5C,0x241C1C38,0xF1A6A657,0xC7B4B473,0x51C6C697,
+ 0x23E8E8CB,0x7CDDDDA1,0x9C7474E8,0x211F1F3E,0xDD4B4B96,0xDCBDBD61,0x868B8B0D,0x858A8A0F,
+ 0x907070E0,0x423E3E7C,0xC4B5B571,0xAA6666CC,0xD8484890,0x05030306,0x01F6F6F7,0x120E0E1C,
+ 0xA36161C2,0x5F35356A,0xF95757AE,0xD0B9B969,0x91868617,0x58C1C199,0x271D1D3A,0xB99E9E27,
+ 0x38E1E1D9,0x13F8F8EB,0xB398982B,0x33111122,0xBB6969D2,0x70D9D9A9,0x898E8E07,0xA7949433,
+ 0xB69B9B2D,0x221E1E3C,0x92878715,0x20E9E9C9,0x49CECE87,0xFF5555AA,0x78282850,0x7ADFDFA5,
+ 0x8F8C8C03,0xF8A1A159,0x80898909,0x170D0D1A,0xDABFBF65,0x31E6E6D7,0xC6424284,0xB86868D0,
+ 0xC3414182,0xB0999929,0x772D2D5A,0x110F0F1E,0xCBB0B07B,0xFC5454A8,0xD6BBBB6D,0x3A16162C 
+ },
+ {
+ 0x6363C6A5,0x7C7CF884,0x7777EE99,0x7B7BF68D,0xF2F2FF0D,0x6B6BD6BD,0x6F6FDEB1,0xC5C59154,
+ 0x30306050,0x01010203,0x6767CEA9,0x2B2B567D,0xFEFEE719,0xD7D7B562,0xABAB4DE6,0x7676EC9A,
+ 0xCACA8F45,0x82821F9D,0xC9C98940,0x7D7DFA87,0xFAFAEF15,0x5959B2EB,0x47478EC9,0xF0F0FB0B,
+ 0xADAD41EC,0xD4D4B367,0xA2A25FFD,0xAFAF45EA,0x9C9C23BF,0xA4A453F7,0x7272E496,0xC0C09B5B,
+ 0xB7B775C2,0xFDFDE11C,0x93933DAE,0x26264C6A,0x36366C5A,0x3F3F7E41,0xF7F7F502,0xCCCC834F,
+ 0x3434685C,0xA5A551F4,0xE5E5D134,0xF1F1F908,0x7171E293,0xD8D8AB73,0x31316253,0x15152A3F,
+ 0x0404080C,0xC7C79552,0x23234665,0xC3C39D5E,0x18183028,0x969637A1,0x05050A0F,0x9A9A2FB5,
+ 0x07070E09,0x12122436,0x80801B9B,0xE2E2DF3D,0xEBEBCD26,0x27274E69,0xB2B27FCD,0x7575EA9F,
+ 0x0909121B,0x83831D9E,0x2C2C5874,0x1A1A342E,0x1B1B362D,0x6E6EDCB2,0x5A5AB4EE,0xA0A05BFB,
+ 0x5252A4F6,0x3B3B764D,0xD6D6B761,0xB3B37DCE,0x2929527B,0xE3E3DD3E,0x2F2F5E71,0x84841397,
+ 0x5353A6F5,0xD1D1B968,0000000000,0xEDEDC12C,0x20204060,0xFCFCE31F,0xB1B179C8,0x5B5BB6ED,
+ 0x6A6AD4BE,0xCBCB8D46,0xBEBE67D9,0x3939724B,0x4A4A94DE,0x4C4C98D4,0x5858B0E8,0xCFCF854A,
+ 0xD0D0BB6B,0xEFEFC52A,0xAAAA4FE5,0xFBFBED16,0x434386C5,0x4D4D9AD7,0x33336655,0x85851194,
+ 0x45458ACF,0xF9F9E910,0x02020406,0x7F7FFE81,0x5050A0F0,0x3C3C7844,0x9F9F25BA,0xA8A84BE3,
+ 0x5151A2F3,0xA3A35DFE,0x404080C0,0x8F8F058A,0x92923FAD,0x9D9D21BC,0x38387048,0xF5F5F104,
+ 0xBCBC63DF,0xB6B677C1,0xDADAAF75,0x21214263,0x10102030,0xFFFFE51A,0xF3F3FD0E,0xD2D2BF6D,
+ 0xCDCD814C,0x0C0C1814,0x13132635,0xECECC32F,0x5F5FBEE1,0x979735A2,0x444488CC,0x17172E39,
+ 0xC4C49357,0xA7A755F2,0x7E7EFC82,0x3D3D7A47,0x6464C8AC,0x5D5DBAE7,0x1919322B,0x7373E695,
+ 0x6060C0A0,0x81811998,0x4F4F9ED1,0xDCDCA37F,0x22224466,0x2A2A547E,0x90903BAB,0x88880B83,
+ 0x46468CCA,0xEEEEC729,0xB8B86BD3,0x1414283C,0xDEDEA779,0x5E5EBCE2,0x0B0B161D,0xDBDBAD76,
+ 0xE0E0DB3B,0x32326456,0x3A3A744E,0x0A0A141E,0x494992DB,0x06060C0A,0x2424486C,0x5C5CB8E4,
+ 0xC2C29F5D,0xD3D3BD6E,0xACAC43EF,0x6262C4A6,0x919139A8,0x959531A4,0xE4E4D337,0x7979F28B,
+ 0xE7E7D532,0xC8C88B43,0x37376E59,0x6D6DDAB7,0x8D8D018C,0xD5D5B164,0x4E4E9CD2,0xA9A949E0,
+ 0x6C6CD8B4,0x5656ACFA,0xF4F4F307,0xEAEACF25,0x6565CAAF,0x7A7AF48E,0xAEAE47E9,0x08081018,
+ 0xBABA6FD5,0x7878F088,0x25254A6F,0x2E2E5C72,0x1C1C3824,0xA6A657F1,0xB4B473C7,0xC6C69751,
+ 0xE8E8CB23,0xDDDDA17C,0x7474E89C,0x1F1F3E21,0x4B4B96DD,0xBDBD61DC,0x8B8B0D86,0x8A8A0F85,
+ 0x7070E090,0x3E3E7C42,0xB5B571C4,0x6666CCAA,0x484890D8,0x03030605,0xF6F6F701,0x0E0E1C12,
+ 0x6161C2A3,0x35356A5F,0x5757AEF9,0xB9B969D0,0x86861791,0xC1C19958,0x1D1D3A27,0x9E9E27B9,
+ 0xE1E1D938,0xF8F8EB13,0x98982BB3,0x11112233,0x6969D2BB,0xD9D9A970,0x8E8E0789,0x949433A7,
+ 0x9B9B2DB6,0x1E1E3C22,0x87871592,0xE9E9C920,0xCECE8749,0x5555AAFF,0x28285078,0xDFDFA57A,
+ 0x8C8C038F,0xA1A159F8,0x89890980,0x0D0D1A17,0xBFBF65DA,0xE6E6D731,0x424284C6,0x6868D0B8,
+ 0x414182C3,0x999929B0,0x2D2D5A77,0x0F0F1E11,0xB0B07BCB,0x5454A8FC,0xBBBB6DD6,0x16162C3A 
+ },
+ {
+ 0x63C6A563,0x7CF8847C,0x77EE9977,0x7BF68D7B,0xF2FF0DF2,0x6BD6BD6B,0x6FDEB16F,0xC59154C5,
+ 0x30605030,0x01020301,0x67CEA967,0x2B567D2B,0xFEE719FE,0xD7B562D7,0xAB4DE6AB,0x76EC9A76,
+ 0xCA8F45CA,0x821F9D82,0xC98940C9,0x7DFA877D,0xFAEF15FA,0x59B2EB59,0x478EC947,0xF0FB0BF0,
+ 0xAD41ECAD,0xD4B367D4,0xA25FFDA2,0xAF45EAAF,0x9C23BF9C,0xA453F7A4,0x72E49672,0xC09B5BC0,
+ 0xB775C2B7,0xFDE11CFD,0x933DAE93,0x264C6A26,0x366C5A36,0x3F7E413F,0xF7F502F7,0xCC834FCC,
+ 0x34685C34,0xA551F4A5,0xE5D134E5,0xF1F908F1,0x71E29371,0xD8AB73D8,0x31625331,0x152A3F15,
+ 0x04080C04,0xC79552C7,0x23466523,0xC39D5EC3,0x18302818,0x9637A196,0x050A0F05,0x9A2FB59A,
+ 0x070E0907,0x12243612,0x801B9B80,0xE2DF3DE2,0xEBCD26EB,0x274E6927,0xB27FCDB2,0x75EA9F75,
+ 0x09121B09,0x831D9E83,0x2C58742C,0x1A342E1A,0x1B362D1B,0x6EDCB26E,0x5AB4EE5A,0xA05BFBA0,
+ 0x52A4F652,0x3B764D3B,0xD6B761D6,0xB37DCEB3,0x29527B29,0xE3DD3EE3,0x2F5E712F,0x84139784,
+ 0x53A6F553,0xD1B968D1,0000000000,0xEDC12CED,0x20406020,0xFCE31FFC,0xB179C8B1,0x5BB6ED5B,
+ 0x6AD4BE6A,0xCB8D46CB,0xBE67D9BE,0x39724B39,0x4A94DE4A,0x4C98D44C,0x58B0E858,0xCF854ACF,
+ 0xD0BB6BD0,0xEFC52AEF,0xAA4FE5AA,0xFBED16FB,0x4386C543,0x4D9AD74D,0x33665533,0x85119485,
+ 0x458ACF45,0xF9E910F9,0x02040602,0x7FFE817F,0x50A0F050,0x3C78443C,0x9F25BA9F,0xA84BE3A8,
+ 0x51A2F351,0xA35DFEA3,0x4080C040,0x8F058A8F,0x923FAD92,0x9D21BC9D,0x38704838,0xF5F104F5,
+ 0xBC63DFBC,0xB677C1B6,0xDAAF75DA,0x21426321,0x10203010,0xFFE51AFF,0xF3FD0EF3,0xD2BF6DD2,
+ 0xCD814CCD,0x0C18140C,0x13263513,0xECC32FEC,0x5FBEE15F,0x9735A297,0x4488CC44,0x172E3917,
+ 0xC49357C4,0xA755F2A7,0x7EFC827E,0x3D7A473D,0x64C8AC64,0x5DBAE75D,0x19322B19,0x73E69573,
+ 0x60C0A060,0x81199881,0x4F9ED14F,0xDCA37FDC,0x22446622,0x2A547E2A,0x903BAB90,0x880B8388,
+ 0x468CCA46,0xEEC729EE,0xB86BD3B8,0x14283C14,0xDEA779DE,0x5EBCE25E,0x0B161D0B,0xDBAD76DB,
+ 0xE0DB3BE0,0x32645632,0x3A744E3A,0x0A141E0A,0x4992DB49,0x060C0A06,0x24486C24,0x5CB8E45C,
+ 0xC29F5DC2,0xD3BD6ED3,0xAC43EFAC,0x62C4A662,0x9139A891,0x9531A495,0xE4D337E4,0x79F28B79,
+ 0xE7D532E7,0xC88B43C8,0x376E5937,0x6DDAB76D,0x8D018C8D,0xD5B164D5,0x4E9CD24E,0xA949E0A9,
+ 0x6CD8B46C,0x56ACFA56,0xF4F307F4,0xEACF25EA,0x65CAAF65,0x7AF48E7A,0xAE47E9AE,0x08101808,
+ 0xBA6FD5BA,0x78F08878,0x254A6F25,0x2E5C722E,0x1C38241C,0xA657F1A6,0xB473C7B4,0xC69751C6,
+ 0xE8CB23E8,0xDDA17CDD,0x74E89C74,0x1F3E211F,0x4B96DD4B,0xBD61DCBD,0x8B0D868B,0x8A0F858A,
+ 0x70E09070,0x3E7C423E,0xB571C4B5,0x66CCAA66,0x4890D848,0x03060503,0xF6F701F6,0x0E1C120E,
+ 0x61C2A361,0x356A5F35,0x57AEF957,0xB969D0B9,0x86179186,0xC19958C1,0x1D3A271D,0x9E27B99E,
+ 0xE1D938E1,0xF8EB13F8,0x982BB398,0x11223311,0x69D2BB69,0xD9A970D9,0x8E07898E,0x9433A794,
+ 0x9B2DB69B,0x1E3C221E,0x87159287,0xE9C920E9,0xCE8749CE,0x55AAFF55,0x28507828,0xDFA57ADF,
+ 0x8C038F8C,0xA159F8A1,0x89098089,0x0D1A170D,0xBF65DABF,0xE6D731E6,0x4284C642,0x68D0B868,
+ 0x4182C341,0x9929B099,0x2D5A772D,0x0F1E110F,0xB07BCBB0,0x54A8FC54,0xBB6DD6BB,0x162C3A16 
+ },
+ {
+ 0xC6A56363,0xF8847C7C,0xEE997777,0xF68D7B7B,0xFF0DF2F2,0xD6BD6B6B,0xDEB16F6F,0x9154C5C5,
+ 0x60503030,0x02030101,0xCEA96767,0x567D2B2B,0xE719FEFE,0xB562D7D7,0x4DE6ABAB,0xEC9A7676,
+ 0x8F45CACA,0x1F9D8282,0x8940C9C9,0xFA877D7D,0xEF15FAFA,0xB2EB5959,0x8EC94747,0xFB0BF0F0,
+ 0x41ECADAD,0xB367D4D4,0x5FFDA2A2,0x45EAAFAF,0x23BF9C9C,0x53F7A4A4,0xE4967272,0x9B5BC0C0,
+ 0x75C2B7B7,0xE11CFDFD,0x3DAE9393,0x4C6A2626,0x6C5A3636,0x7E413F3F,0xF502F7F7,0x834FCCCC,
+ 0x685C3434,0x51F4A5A5,0xD134E5E5,0xF908F1F1,0xE2937171,0xAB73D8D8,0x62533131,0x2A3F1515,
+ 0x080C0404,0x9552C7C7,0x46652323,0x9D5EC3C3,0x30281818,0x37A19696,0x0A0F0505,0x2FB59A9A,
+ 0x0E090707,0x24361212,0x1B9B8080,0xDF3DE2E2,0xCD26EBEB,0x4E692727,0x7FCDB2B2,0xEA9F7575,
+ 0x121B0909,0x1D9E8383,0x58742C2C,0x342E1A1A,0x362D1B1B,0xDCB26E6E,0xB4EE5A5A,0x5BFBA0A0,
+ 0xA4F65252,0x764D3B3B,0xB761D6D6,0x7DCEB3B3,0x527B2929,0xDD3EE3E3,0x5E712F2F,0x13978484,
+ 0xA6F55353,0xB968D1D1,0000000000,0xC12CEDED,0x40602020,0xE31FFCFC,0x79C8B1B1,0xB6ED5B5B,
+ 0xD4BE6A6A,0x8D46CBCB,0x67D9BEBE,0x724B3939,0x94DE4A4A,0x98D44C4C,0xB0E85858,0x854ACFCF,
+ 0xBB6BD0D0,0xC52AEFEF,0x4FE5AAAA,0xED16FBFB,0x86C54343,0x9AD74D4D,0x66553333,0x11948585,
+ 0x8ACF4545,0xE910F9F9,0x04060202,0xFE817F7F,0xA0F05050,0x78443C3C,0x25BA9F9F,0x4BE3A8A8,
+ 0xA2F35151,0x5DFEA3A3,0x80C04040,0x058A8F8F,0x3FAD9292,0x21BC9D9D,0x70483838,0xF104F5F5,
+ 0x63DFBCBC,0x77C1B6B6,0xAF75DADA,0x42632121,0x20301010,0xE51AFFFF,0xFD0EF3F3,0xBF6DD2D2,
+ 0x814CCDCD,0x18140C0C,0x26351313,0xC32FECEC,0xBEE15F5F,0x35A29797,0x88CC4444,0x2E391717,
+ 0x9357C4C4,0x55F2A7A7,0xFC827E7E,0x7A473D3D,0xC8AC6464,0xBAE75D5D,0x322B1919,0xE6957373,
+ 0xC0A06060,0x19988181,0x9ED14F4F,0xA37FDCDC,0x44662222,0x547E2A2A,0x3BAB9090,0x0B838888,
+ 0x8CCA4646,0xC729EEEE,0x6BD3B8B8,0x283C1414,0xA779DEDE,0xBCE25E5E,0x161D0B0B,0xAD76DBDB,
+ 0xDB3BE0E0,0x64563232,0x744E3A3A,0x141E0A0A,0x92DB4949,0x0C0A0606,0x486C2424,0xB8E45C5C,
+ 0x9F5DC2C2,0xBD6ED3D3,0x43EFACAC,0xC4A66262,0x39A89191,0x31A49595,0xD337E4E4,0xF28B7979,
+ 0xD532E7E7,0x8B43C8C8,0x6E593737,0xDAB76D6D,0x018C8D8D,0xB164D5D5,0x9CD24E4E,0x49E0A9A9,
+ 0xD8B46C6C,0xACFA5656,0xF307F4F4,0xCF25EAEA,0xCAAF6565,0xF48E7A7A,0x47E9AEAE,0x10180808,
+ 0x6FD5BABA,0xF0887878,0x4A6F2525,0x5C722E2E,0x38241C1C,0x57F1A6A6,0x73C7B4B4,0x9751C6C6,
+ 0xCB23E8E8,0xA17CDDDD,0xE89C7474,0x3E211F1F,0x96DD4B4B,0x61DCBDBD,0x0D868B8B,0x0F858A8A,
+ 0xE0907070,0x7C423E3E,0x71C4B5B5,0xCCAA6666,0x90D84848,0x06050303,0xF701F6F6,0x1C120E0E,
+ 0xC2A36161,0x6A5F3535,0xAEF95757,0x69D0B9B9,0x17918686,0x9958C1C1,0x3A271D1D,0x27B99E9E,
+ 0xD938E1E1,0xEB13F8F8,0x2BB39898,0x22331111,0xD2BB6969,0xA970D9D9,0x07898E8E,0x33A79494,
+ 0x2DB69B9B,0x3C221E1E,0x15928787,0xC920E9E9,0x8749CECE,0xAAFF5555,0x50782828,0xA57ADFDF,
+ 0x038F8C8C,0x59F8A1A1,0x09808989,0x1A170D0D,0x65DABFBF,0xD731E6E6,0x84C64242,0xD0B86868,
+ 0x82C34141,0x29B09999,0x5A772D2D,0x1E110F0F,0x7BCBB0B0,0xA8FC5454,0x6DD6BBBB,0x2C3A1616 
+ } 
+};
+
+static u32 fl_tab[4][256] = 
+{
+ {
+ 0x00000063,0x0000007C,0x00000077,0x0000007B,0x000000F2,0x0000006B,0x0000006F,0x000000C5,
+ 0x00000030,0x00000001,0x00000067,0x0000002B,0x000000FE,0x000000D7,0x000000AB,0x00000076,
+ 0x000000CA,0x00000082,0x000000C9,0x0000007D,0x000000FA,0x00000059,0x00000047,0x000000F0,
+ 0x000000AD,0x000000D4,0x000000A2,0x000000AF,0x0000009C,0x000000A4,0x00000072,0x000000C0,
+ 0x000000B7,0x000000FD,0x00000093,0x00000026,0x00000036,0x0000003F,0x000000F7,0x000000CC,
+ 0x00000034,0x000000A5,0x000000E5,0x000000F1,0x00000071,0x000000D8,0x00000031,0x00000015,
+ 0x00000004,0x000000C7,0x00000023,0x000000C3,0x00000018,0x00000096,0x00000005,0x0000009A,
+ 0x00000007,0x00000012,0x00000080,0x000000E2,0x000000EB,0x00000027,0x000000B2,0x00000075,
+ 0x00000009,0x00000083,0x0000002C,0x0000001A,0x0000001B,0x0000006E,0x0000005A,0x000000A0,
+ 0x00000052,0x0000003B,0x000000D6,0x000000B3,0x00000029,0x000000E3,0x0000002F,0x00000084,
+ 0x00000053,0x000000D1,0x00000000,0x000000ED,0x00000020,0x000000FC,0x000000B1,0x0000005B,
+ 0x0000006A,0x000000CB,0x000000BE,0x00000039,0x0000004A,0x0000004C,0x00000058,0x000000CF,
+ 0x000000D0,0x000000EF,0x000000AA,0x000000FB,0x00000043,0x0000004D,0x00000033,0x00000085,
+ 0x00000045,0x000000F9,0x00000002,0x0000007F,0x00000050,0x0000003C,0x0000009F,0x000000A8,
+ 0x00000051,0x000000A3,0x00000040,0x0000008F,0x00000092,0x0000009D,0x00000038,0x000000F5,
+ 0x000000BC,0x000000B6,0x000000DA,0x00000021,0x00000010,0x000000FF,0x000000F3,0x000000D2,
+ 0x000000CD,0x0000000C,0x00000013,0x000000EC,0x0000005F,0x00000097,0x00000044,0x00000017,
+ 0x000000C4,0x000000A7,0x0000007E,0x0000003D,0x00000064,0x0000005D,0x00000019,0x00000073,
+ 0x00000060,0x00000081,0x0000004F,0x000000DC,0x00000022,0x0000002A,0x00000090,0x00000088,
+ 0x00000046,0x000000EE,0x000000B8,0x00000014,0x000000DE,0x0000005E,0x0000000B,0x000000DB,
+ 0x000000E0,0x00000032,0x0000003A,0x0000000A,0x00000049,0x00000006,0x00000024,0x0000005C,
+ 0x000000C2,0x000000D3,0x000000AC,0x00000062,0x00000091,0x00000095,0x000000E4,0x00000079,
+ 0x000000E7,0x000000C8,0x00000037,0x0000006D,0x0000008D,0x000000D5,0x0000004E,0x000000A9,
+ 0x0000006C,0x00000056,0x000000F4,0x000000EA,0x00000065,0x0000007A,0x000000AE,0x00000008,
+ 0x000000BA,0x00000078,0x00000025,0x0000002E,0x0000001C,0x000000A6,0x000000B4,0x000000C6,
+ 0x000000E8,0x000000DD,0x00000074,0x0000001F,0x0000004B,0x000000BD,0x0000008B,0x0000008A,
+ 0x00000070,0x0000003E,0x000000B5,0x00000066,0x00000048,0x00000003,0x000000F6,0x0000000E,
+ 0x00000061,0x00000035,0x00000057,0x000000B9,0x00000086,0x000000C1,0x0000001D,0x0000009E,
+ 0x000000E1,0x000000F8,0x00000098,0x00000011,0x00000069,0x000000D9,0x0000008E,0x00000094,
+ 0x0000009B,0x0000001E,0x00000087,0x000000E9,0x000000CE,0x00000055,0x00000028,0x000000DF,
+ 0x0000008C,0x000000A1,0x00000089,0x0000000D,0x000000BF,0x000000E6,0x00000042,0x00000068,
+ 0x00000041,0x00000099,0x0000002D,0x0000000F,0x000000B0,0x00000054,0x000000BB,0x00000016 
+ },
+ {
+ 0x00006300,0x00007C00,0x00007700,0x00007B00,0x0000F200,0x00006B00,0x00006F00,0x0000C500,
+ 0x00003000,0x00000100,0x00006700,0x00002B00,0x0000FE00,0x0000D700,0x0000AB00,0x00007600,
+ 0x0000CA00,0x00008200,0x0000C900,0x00007D00,0x0000FA00,0x00005900,0x00004700,0x0000F000,
+ 0x0000AD00,0x0000D400,0x0000A200,0x0000AF00,0x00009C00,0x0000A400,0x00007200,0x0000C000,
+ 0x0000B700,0x0000FD00,0x00009300,0x00002600,0x00003600,0x00003F00,0x0000F700,0x0000CC00,
+ 0x00003400,0x0000A500,0x0000E500,0x0000F100,0x00007100,0x0000D800,0x00003100,0x00001500,
+ 0x00000400,0x0000C700,0x00002300,0x0000C300,0x00001800,0x00009600,0x00000500,0x00009A00,
+ 0x00000700,0x00001200,0x00008000,0x0000E200,0x0000EB00,0x00002700,0x0000B200,0x00007500,
+ 0x00000900,0x00008300,0x00002C00,0x00001A00,0x00001B00,0x00006E00,0x00005A00,0x0000A000,
+ 0x00005200,0x00003B00,0x0000D600,0x0000B300,0x00002900,0x0000E300,0x00002F00,0x00008400,
+ 0x00005300,0x0000D100,0000000000,0x0000ED00,0x00002000,0x0000FC00,0x0000B100,0x00005B00,
+ 0x00006A00,0x0000CB00,0x0000BE00,0x00003900,0x00004A00,0x00004C00,0x00005800,0x0000CF00,
+ 0x0000D000,0x0000EF00,0x0000AA00,0x0000FB00,0x00004300,0x00004D00,0x00003300,0x00008500,
+ 0x00004500,0x0000F900,0x00000200,0x00007F00,0x00005000,0x00003C00,0x00009F00,0x0000A800,
+ 0x00005100,0x0000A300,0x00004000,0x00008F00,0x00009200,0x00009D00,0x00003800,0x0000F500,
+ 0x0000BC00,0x0000B600,0x0000DA00,0x00002100,0x00001000,0x0000FF00,0x0000F300,0x0000D200,
+ 0x0000CD00,0x00000C00,0x00001300,0x0000EC00,0x00005F00,0x00009700,0x00004400,0x00001700,
+ 0x0000C400,0x0000A700,0x00007E00,0x00003D00,0x00006400,0x00005D00,0x00001900,0x00007300,
+ 0x00006000,0x00008100,0x00004F00,0x0000DC00,0x00002200,0x00002A00,0x00009000,0x00008800,
+ 0x00004600,0x0000EE00,0x0000B800,0x00001400,0x0000DE00,0x00005E00,0x00000B00,0x0000DB00,
+ 0x0000E000,0x00003200,0x00003A00,0x00000A00,0x00004900,0x00000600,0x00002400,0x00005C00,
+ 0x0000C200,0x0000D300,0x0000AC00,0x00006200,0x00009100,0x00009500,0x0000E400,0x00007900,
+ 0x0000E700,0x0000C800,0x00003700,0x00006D00,0x00008D00,0x0000D500,0x00004E00,0x0000A900,
+ 0x00006C00,0x00005600,0x0000F400,0x0000EA00,0x00006500,0x00007A00,0x0000AE00,0x00000800,
+ 0x0000BA00,0x00007800,0x00002500,0x00002E00,0x00001C00,0x0000A600,0x0000B400,0x0000C600,
+ 0x0000E800,0x0000DD00,0x00007400,0x00001F00,0x00004B00,0x0000BD00,0x00008B00,0x00008A00,
+ 0x00007000,0x00003E00,0x0000B500,0x00006600,0x00004800,0x00000300,0x0000F600,0x00000E00,
+ 0x00006100,0x00003500,0x00005700,0x0000B900,0x00008600,0x0000C100,0x00001D00,0x00009E00,
+ 0x0000E100,0x0000F800,0x00009800,0x00001100,0x00006900,0x0000D900,0x00008E00,0x00009400,
+ 0x00009B00,0x00001E00,0x00008700,0x0000E900,0x0000CE00,0x00005500,0x00002800,0x0000DF00,
+ 0x00008C00,0x0000A100,0x00008900,0x00000D00,0x0000BF00,0x0000E600,0x00004200,0x00006800,
+ 0x00004100,0x00009900,0x00002D00,0x00000F00,0x0000B000,0x00005400,0x0000BB00,0x00001600 
+ },
+ {
+ 0x00630000,0x007C0000,0x00770000,0x007B0000,0x00F20000,0x006B0000,0x006F0000,0x00C50000,
+ 0x00300000,0x00010000,0x00670000,0x002B0000,0x00FE0000,0x00D70000,0x00AB0000,0x00760000,
+ 0x00CA0000,0x00820000,0x00C90000,0x007D0000,0x00FA0000,0x00590000,0x00470000,0x00F00000,
+ 0x00AD0000,0x00D40000,0x00A20000,0x00AF0000,0x009C0000,0x00A40000,0x00720000,0x00C00000,
+ 0x00B70000,0x00FD0000,0x00930000,0x00260000,0x00360000,0x003F0000,0x00F70000,0x00CC0000,
+ 0x00340000,0x00A50000,0x00E50000,0x00F10000,0x00710000,0x00D80000,0x00310000,0x00150000,
+ 0x00040000,0x00C70000,0x00230000,0x00C30000,0x00180000,0x00960000,0x00050000,0x009A0000,
+ 0x00070000,0x00120000,0x00800000,0x00E20000,0x00EB0000,0x00270000,0x00B20000,0x00750000,
+ 0x00090000,0x00830000,0x002C0000,0x001A0000,0x001B0000,0x006E0000,0x005A0000,0x00A00000,
+ 0x00520000,0x003B0000,0x00D60000,0x00B30000,0x00290000,0x00E30000,0x002F0000,0x00840000,
+ 0x00530000,0x00D10000,0000000000,0x00ED0000,0x00200000,0x00FC0000,0x00B10000,0x005B0000,
+ 0x006A0000,0x00CB0000,0x00BE0000,0x00390000,0x004A0000,0x004C0000,0x00580000,0x00CF0000,
+ 0x00D00000,0x00EF0000,0x00AA0000,0x00FB0000,0x00430000,0x004D0000,0x00330000,0x00850000,
+ 0x00450000,0x00F90000,0x00020000,0x007F0000,0x00500000,0x003C0000,0x009F0000,0x00A80000,
+ 0x00510000,0x00A30000,0x00400000,0x008F0000,0x00920000,0x009D0000,0x00380000,0x00F50000,
+ 0x00BC0000,0x00B60000,0x00DA0000,0x00210000,0x00100000,0x00FF0000,0x00F30000,0x00D20000,
+ 0x00CD0000,0x000C0000,0x00130000,0x00EC0000,0x005F0000,0x00970000,0x00440000,0x00170000,
+ 0x00C40000,0x00A70000,0x007E0000,0x003D0000,0x00640000,0x005D0000,0x00190000,0x00730000,
+ 0x00600000,0x00810000,0x004F0000,0x00DC0000,0x00220000,0x002A0000,0x00900000,0x00880000,
+ 0x00460000,0x00EE0000,0x00B80000,0x00140000,0x00DE0000,0x005E0000,0x000B0000,0x00DB0000,
+ 0x00E00000,0x00320000,0x003A0000,0x000A0000,0x00490000,0x00060000,0x00240000,0x005C0000,
+ 0x00C20000,0x00D30000,0x00AC0000,0x00620000,0x00910000,0x00950000,0x00E40000,0x00790000,
+ 0x00E70000,0x00C80000,0x00370000,0x006D0000,0x008D0000,0x00D50000,0x004E0000,0x00A90000,
+ 0x006C0000,0x00560000,0x00F40000,0x00EA0000,0x00650000,0x007A0000,0x00AE0000,0x00080000,
+ 0x00BA0000,0x00780000,0x00250000,0x002E0000,0x001C0000,0x00A60000,0x00B40000,0x00C60000,
+ 0x00E80000,0x00DD0000,0x00740000,0x001F0000,0x004B0000,0x00BD0000,0x008B0000,0x008A0000,
+ 0x00700000,0x003E0000,0x00B50000,0x00660000,0x00480000,0x00030000,0x00F60000,0x000E0000,
+ 0x00610000,0x00350000,0x00570000,0x00B90000,0x00860000,0x00C10000,0x001D0000,0x009E0000,
+ 0x00E10000,0x00F80000,0x00980000,0x00110000,0x00690000,0x00D90000,0x008E0000,0x00940000,
+ 0x009B0000,0x001E0000,0x00870000,0x00E90000,0x00CE0000,0x00550000,0x00280000,0x00DF0000,
+ 0x008C0000,0x00A10000,0x00890000,0x000D0000,0x00BF0000,0x00E60000,0x00420000,0x00680000,
+ 0x00410000,0x00990000,0x002D0000,0x000F0000,0x00B00000,0x00540000,0x00BB0000,0x00160000 
+ },
+ {
+ 0x63000000,0x7C000000,0x77000000,0x7B000000,0xF2000000,0x6B000000,0x6F000000,0xC5000000,
+ 0x30000000,0x01000000,0x67000000,0x2B000000,0xFE000000,0xD7000000,0xAB000000,0x76000000,
+ 0xCA000000,0x82000000,0xC9000000,0x7D000000,0xFA000000,0x59000000,0x47000000,0xF0000000,
+ 0xAD000000,0xD4000000,0xA2000000,0xAF000000,0x9C000000,0xA4000000,0x72000000,0xC0000000,
+ 0xB7000000,0xFD000000,0x93000000,0x26000000,0x36000000,0x3F000000,0xF7000000,0xCC000000,
+ 0x34000000,0xA5000000,0xE5000000,0xF1000000,0x71000000,0xD8000000,0x31000000,0x15000000,
+ 0x04000000,0xC7000000,0x23000000,0xC3000000,0x18000000,0x96000000,0x05000000,0x9A000000,
+ 0x07000000,0x12000000,0x80000000,0xE2000000,0xEB000000,0x27000000,0xB2000000,0x75000000,
+ 0x09000000,0x83000000,0x2C000000,0x1A000000,0x1B000000,0x6E000000,0x5A000000,0xA0000000,
+ 0x52000000,0x3B000000,0xD6000000,0xB3000000,0x29000000,0xE3000000,0x2F000000,0x84000000,
+ 0x53000000,0xD1000000,0000000000,0xED000000,0x20000000,0xFC000000,0xB1000000,0x5B000000,
+ 0x6A000000,0xCB000000,0xBE000000,0x39000000,0x4A000000,0x4C000000,0x58000000,0xCF000000,
+ 0xD0000000,0xEF000000,0xAA000000,0xFB000000,0x43000000,0x4D000000,0x33000000,0x85000000,
+ 0x45000000,0xF9000000,0x02000000,0x7F000000,0x50000000,0x3C000000,0x9F000000,0xA8000000,
+ 0x51000000,0xA3000000,0x40000000,0x8F000000,0x92000000,0x9D000000,0x38000000,0xF5000000,
+ 0xBC000000,0xB6000000,0xDA000000,0x21000000,0x10000000,0xFF000000,0xF3000000,0xD2000000,
+ 0xCD000000,0x0C000000,0x13000000,0xEC000000,0x5F000000,0x97000000,0x44000000,0x17000000,
+ 0xC4000000,0xA7000000,0x7E000000,0x3D000000,0x64000000,0x5D000000,0x19000000,0x73000000,
+ 0x60000000,0x81000000,0x4F000000,0xDC000000,0x22000000,0x2A000000,0x90000000,0x88000000,
+ 0x46000000,0xEE000000,0xB8000000,0x14000000,0xDE000000,0x5E000000,0x0B000000,0xDB000000,
+ 0xE0000000,0x32000000,0x3A000000,0x0A000000,0x49000000,0x06000000,0x24000000,0x5C000000,
+ 0xC2000000,0xD3000000,0xAC000000,0x62000000,0x91000000,0x95000000,0xE4000000,0x79000000,
+ 0xE7000000,0xC8000000,0x37000000,0x6D000000,0x8D000000,0xD5000000,0x4E000000,0xA9000000,
+ 0x6C000000,0x56000000,0xF4000000,0xEA000000,0x65000000,0x7A000000,0xAE000000,0x08000000,
+ 0xBA000000,0x78000000,0x25000000,0x2E000000,0x1C000000,0xA6000000,0xB4000000,0xC6000000,
+ 0xE8000000,0xDD000000,0x74000000,0x1F000000,0x4B000000,0xBD000000,0x8B000000,0x8A000000,
+ 0x70000000,0x3E000000,0xB5000000,0x66000000,0x48000000,0x03000000,0xF6000000,0x0E000000,
+ 0x61000000,0x35000000,0x57000000,0xB9000000,0x86000000,0xC1000000,0x1D000000,0x9E000000,
+ 0xE1000000,0xF8000000,0x98000000,0x11000000,0x69000000,0xD9000000,0x8E000000,0x94000000,
+ 0x9B000000,0x1E000000,0x87000000,0xE9000000,0xCE000000,0x55000000,0x28000000,0xDF000000,
+ 0x8C000000,0xA1000000,0x89000000,0x0D000000,0xBF000000,0xE6000000,0x42000000,0x68000000,
+ 0x41000000,0x99000000,0x2D000000,0x0F000000,0xB0000000,0x54000000,0xBB000000,0x16000000 
+ } 
+};
+
+/*----------------- The workspace ------------------------------*/
+
+static u32 Ekey[44];	/* The expanded key */
+
+/*------ The round Function.  4 table lookups and 4 Exors ------*/
+#define f_rnd(x, n)                     \
+  ( ft_tab[0][byte0(x[n])]              \
+  ^ ft_tab[1][byte1(x[(n + 1) & 3])]    \
+  ^ ft_tab[2][byte2(x[(n + 2) & 3])]    \
+  ^ ft_tab[3][byte3(x[(n + 3) & 3])] )
+
+#define f_round(bo, bi, k)          \
+    bo[0] = f_rnd(bi, 0) ^ k[0];    \
+    bo[1] = f_rnd(bi, 1) ^ k[1];    \
+    bo[2] = f_rnd(bi, 2) ^ k[2];    \
+    bo[3] = f_rnd(bi, 3) ^ k[3];    \
+    k += 4
+
+/*--- The S Box lookup used in constructing the Key schedule ---*/
+#define ls_box(x)       \
+ (  fl_tab[0][byte0(x)] \
+  ^ fl_tab[1][byte1(x)] \
+  ^ fl_tab[2][byte2(x)] \
+  ^ fl_tab[3][byte3(x)] )
+
+/*------------ The last round function (no MixColumn) ----------*/
+#define lf_rnd(x, n)                    \
+  ( fl_tab[0][byte0(x[n])]              \
+  ^ fl_tab[1][byte1(x[(n + 1) & 3])]    \
+  ^ fl_tab[2][byte2(x[(n + 2) & 3])]    \
+  ^ fl_tab[3][byte3(x[(n + 3) & 3])] )
+
+
+/*-----------------------------------------------------------
+ * RijndaelKeySchedule
+ *   Initialise the key schedule from a supplied key
+ */
+void RijndaelKeySchedule(u8 key[16])
+{
+    u32  t;
+    u32  *ek=Ekey,	    /* pointer to the expanded key   */
+         *rc=rnd_con;   /* pointer to the round constant */
+
+    Ekey[0] = u32_in(key     );
+    Ekey[1] = u32_in(key +  4);
+    Ekey[2] = u32_in(key +  8);
+    Ekey[3] = u32_in(key + 12);
+
+	while(ek < Ekey + 40)
+    {
+		t = rot3(ek[3]);
+        ek[4] = ek[0] ^ ls_box(t) ^ *rc++;
+        ek[5] = ek[1] ^ ek[4];
+        ek[6] = ek[2] ^ ek[5];
+        ek[7] = ek[3] ^ ek[6];
+        ek += 4;
+    }
+}
+
+/*-----------------------------------------------------------
+ * RijndaelEncrypt
+ *   Encrypt an input block
+ */
+void RijndaelEncrypt(u8 in[16], u8 out[16])
+{
+    u32    b0[4], b1[4], *kp = Ekey;
+
+    b0[0] = u32_in(in     ) ^ *kp++;
+    b0[1] = u32_in(in +  4) ^ *kp++;
+    b0[2] = u32_in(in +  8) ^ *kp++;
+    b0[3] = u32_in(in + 12) ^ *kp++;
+
+    f_round(b1, b0, kp); 
+    f_round(b0, b1, kp);
+    f_round(b1, b0, kp); 
+    f_round(b0, b1, kp);
+    f_round(b1, b0, kp); 
+    f_round(b0, b1, kp);
+    f_round(b1, b0, kp); 
+    f_round(b0, b1, kp);
+    f_round(b1, b0, kp); 
+
+    u32_out(out,      lf_rnd(b1, 0) ^ kp[0]); 
+    u32_out(out +  4, lf_rnd(b1, 1) ^ kp[1]);
+    u32_out(out +  8, lf_rnd(b1, 2) ^ kp[2]); 
+    u32_out(out + 12, lf_rnd(b1, 3) ^ kp[3]);
+}
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/rijndael.h b/sflphone-common/libs/pjproject/third_party/milenage/rijndael.h
new file mode 100644
index 0000000000..4e728a5b3e
--- /dev/null
+++ b/sflphone-common/libs/pjproject/third_party/milenage/rijndael.h
@@ -0,0 +1,26 @@
+/*-------------------------------------------------------------------
+ *          Example algorithms f1, f1*, f2, f3, f4, f5, f5*
+ *-------------------------------------------------------------------
+ *
+ *  A sample implementation of the example 3GPP authentication and
+ *  key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.  This is
+ *  a byte-oriented implementation of the functions, and of the block
+ *  cipher kernel function Rijndael.
+ *
+ *  This has been coded for clarity, not necessarily for efficiency.
+ *
+ *  The functions f2, f3, f4 and f5 share the same inputs and have
+ *  been coded together as a single function.  f1, f1* and f5* are
+ *  all coded separately.
+ *
+ *-----------------------------------------------------------------*/
+
+#ifndef RIJNDAEL_H
+#define RIJNDAEL_H
+
+
+void RijndaelKeySchedule( u8 key[16] );
+void RijndaelEncrypt( u8 input[16], u8 output[16] );
+
+
+#endif
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/build/msvc/readme.txt b/sflphone-common/libs/pjproject/third_party/portaudio/build/msvc/readme.txt
index 5364797db1..b7d2f0bedd 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/build/msvc/readme.txt
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/build/msvc/readme.txt
@@ -14,6 +14,8 @@ This DLL contains all 3 current win32 PA APIS (MM/DS/ASIO)
   portaudio19svn\src\hostapi\asio\ASIOSDK\host\mac (not needed)
   
   You dont need "driver"
+
+  To build without ASIO (or another Host API) see the "Building without ASIO support" section below.
   
 2)
   *If you have Visual Studio 6.0*, please make sure you have it updated with the latest (and final)
@@ -76,5 +78,32 @@ PaAsio_GetInputChannelName          @53
 PaAsio_GetOutputChannelName         @54
 PaUtil_SetLogPrintFunction          @55
 
+
+*** Building without ASIO support ***
+
+To build PortAudio without ASIO support you need to:
+  A. Make sure your project doesn't try to build any ASIO SDK files.
+     If you're using one of the shipped projects, remove the ASIO related files 
+     from the project.
+
+  B. Make sure your project doesn't try to build the PortAudio ASIO
+     implementation files:
+	 src/hostapi/pa_asio.cpp src/hostapi/iasiothiscallresolver.cpp
+     If you're using one of the shipped projects remove them from the project.
+
+  C. Define the PA_NO_ASIO preprocessor symbol in the project properties.
+     In VS2005 this can be added under
+     Project Properties > Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions
+
+     Defining PA_NO_ASIO stops src/os/win/pa_win_hostapis.c 
+     from trying to initialize the PA ASIO implementation.
+
+  D. Remove PaAsio_* entry points from portaudio.def
+
+A similar procedure can be used to omit any of the other host APIs from the 
+build. The relevant preprocessor symbols used by pa_win_hostapis.c are:
+PA_NO_WMME, PA_NO_DS, PA_NO_ASIO, PA_NO_WASAPI and PA_NO_WDMKS
+
+
 -----
 David Viens, davidv@plogue.com
\ No newline at end of file
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/configure.in b/sflphone-common/libs/pjproject/third_party/portaudio/configure.in
index 749e3a47b1..087ff712ba 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/configure.in
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/configure.in
@@ -1,7 +1,7 @@
 dnl
 dnl portaudio V19 configure.in script
 dnl
-dnl Dominic Mazzoni, Arve Knudsen
+dnl Dominic Mazzoni, Arve Knudsen, Stelios Bounanos
 dnl
 
 dnl Require autoconf >= 2.13
@@ -11,63 +11,87 @@ dnl Init autoconf and make sure configure is being called
 dnl from the right directory
 AC_INIT([include/portaudio.h])
 
+dnl Define build, build_cpu, build_vendor, build_os
+AC_CANONICAL_BUILD
+dnl Define host, host_cpu, host_vendor, host_os
+AC_CANONICAL_HOST
+dnl Define target, target_cpu, target_vendor, target_os
+AC_CANONICAL_TARGET
+
 dnl Specify options
 
-AC_ARG_WITH(alsa, 
-            [  --with-alsa (default=yes)],
-            with_alsa=$withval, with_alsa="yes")
+AC_ARG_WITH(alsa,
+            AS_HELP_STRING([--with-alsa], [Enable support for ALSA @<:@autodetect@:>@]),
+            [with_alsa=$withval])
 
-AC_ARG_WITH(jack, 
-            [  --with-jack (default=yes)],
-            with_jack=$withval, with_jack="yes")
+AC_ARG_WITH(jack,
+            AS_HELP_STRING([--with-jack], [Enable support for JACK @<:@autodetect@:>@]),
+            [with_jack=$withval])
 
-AC_ARG_WITH(oss, 
-            [  --with-oss (default=yes)],
-            with_oss=$withval, with_oss="yes")
+AC_ARG_WITH(oss,
+            AS_HELP_STRING([--with-oss], [Enable support for OSS @<:@autodetect@:>@]),
+            [with_oss=$withval])
 
 AC_ARG_WITH(asihpi,
-            [  --with-asihpi (default=auto)],
-            with_asihpi=$withval, with_asihpi="yes")
-
-AC_ARG_WITH(host_os, 
-            [  --with-host_os (no default)],
-            host_os=$withval)
+            AS_HELP_STRING([--with-asihpi], [Enable support for ASIHPI @<:@autodetect@:>@]),
+            [with_asihpi=$withval])
 
 AC_ARG_WITH(winapi,
-            [  --with-winapi ((wmme/directx/asio) default=wmme)],
-            with_winapi=$withval, with_winapi="wmme")
-
-dnl Mac API added for ASIO, can have other api's listed
-AC_ARG_WITH(macapi,
-            [  --with-macapi ((asio/core/sm) default=core)],
-            with_macapi=$withval, with_macapi="core")
+            AS_HELP_STRING([--with-winapi],
+                           [Select Windows API support (@<:@wmme|directx|asio|wdmks@:>@@<:@,...@:>@) @<:@wmme@:>@]),
+            [with_winapi=$withval], [with_winapi="wmme"])
+case "$target_os" in *mingw* | *cygwin*)
+     with_wmme=no
+     with_directx=no
+     with_asio=no
+     with_wdmks=no
+     for api in $(echo $with_winapi | sed 's/,/ /g'); do
+         case "$api" in
+             wmme|directx|asio|wdmks)
+                 eval with_$api=yes
+                 ;;
+             *)
+                 AC_MSG_ERROR([unknown Windows API \"$api\" (do you need --help?)])
+                 ;;
+         esac
+     done
+     ;;
+esac
 
 AC_ARG_WITH(asiodir,
-            [  --with-asiodir (default=/usr/local/asiosdk2)],
+            AS_HELP_STRING([--with-asiodir], [ASIO directory @<:@/usr/local/asiosdk2@:>@]),
             with_asiodir=$withval, with_asiodir="/usr/local/asiosdk2")
 
 AC_ARG_WITH(dxdir,
-            [  --with-dxdir (default=/usr/local/dx7sdk)],
+            AS_HELP_STRING([--with-dxdir], [DirectX directory @<:@/usr/local/dx7sdk@:>@]),
             with_dxdir=$withval, with_dxdir="/usr/local/dx7sdk")
 
+debug_output=no
 AC_ARG_ENABLE(debug-output,
-            [  --enable-debug-output],
-            [if test x$enableval != xno ; then
-                AC_DEFINE(PA_ENABLE_DEBUG_OUTPUT,,[Enable debugging messages])
-             fi
-            ])
+              AS_HELP_STRING([--enable-debug-output], [Enable debug output @<:@no@:>@]),
+              [if test "x$enableval" != "xno" ; then
+                  AC_DEFINE(PA_ENABLE_DEBUG_OUTPUT,,[Enable debugging messages])
+                  debug_output=yes
+               fi
+              ])
 
 AC_ARG_ENABLE(cxx,
-            [  --enable-cxx (default=no)],
-            enable_cxx=$enableval, enable_cxx="no")
+              AS_HELP_STRING([--enable-cxx], [Enable C++ bindings @<:@no@:>@]),
+              enable_cxx=$enableval, enable_cxx="no")
 
 AC_ARG_ENABLE(mac-debug,
-            [  --enable-mac-debug (default=no)],
-            enable_mac_debug=$enableval, enable_mac_debug="no")
+              AS_HELP_STRING([--enable-mac-debug], [Enable Mac debug @<:@no@:>@]),
+              enable_mac_debug=$enableval, enable_mac_debug="no")
 
 AC_ARG_ENABLE(mac-universal,
-            [  --enable-mac-universal (default=yes)],
-            enable_mac_universal=$enableval, enable_mac_universal="yes")
+              AS_HELP_STRING([--enable-mac-universal], [Build Mac universal binaries @<:@yes@:>@]),
+              enable_mac_universal=$enableval, enable_mac_universal="yes")
+
+dnl Continue to accept --host_os for compatibility but do not document
+dnl it (the correct way to change host_os is with --host=...).  Moved
+dnl here because the empty help string generates a blank line which we
+dnl can use to separate PA options from libtool options.
+AC_ARG_WITH(host_os, [], host_os=$withval)
 
 dnl Checks for programs.
 
@@ -87,20 +111,27 @@ AC_C_BIGENDIAN
 dnl checks for various host APIs and arguments to configure that
 dnl turn them on or off
 
-AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes, have_alsa=no)
-AC_CHECK_LIB(hpi, HPI_SubSysCreate, have_asihpi=yes, have_asihpi=no, -lm)
-AC_CHECK_LIB(ossaudio, _oss_ioctl, have_libossaudio=yes, have_libossaudio=no)
-
-dnl Determine the host description for the subsequent test.
-dnl PKG_CHECK_MODULES seems to check and set the host variable also, but
-dnl that then requires pkg-config availability which is not standard on
-dnl MinGW systems and can be a pain to install.
-dnl AC_CANONICAL_HOST
-
-PKG_CHECK_MODULES(JACK, jack, have_jack=yes, have_jack=no)
+have_alsa=no
+if test "x$with_alsa" != "xno"; then
+    AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes, have_alsa=no)
+fi
+have_asihpi=no
+if test "x$with_asihpi" != "xno"; then
+    AC_CHECK_LIB(hpi, HPI_SubSysCreate, have_asihpi=yes, have_asihpi=no, -lm)
+fi
+have_libossaudio=no
+have_oss=no
+if test "x$with_oss" != "xno"; then
+    AC_CHECK_HEADERS([sys/soundcard.h linux/soundcard.h machine/soundcard.h], [have_oss=yes])
+    if test "x$have_oss" = "xyes"; then
+        AC_CHECK_LIB(ossaudio, _oss_ioctl, have_libossaudio=yes, have_libossaudio=no)
+    fi
+fi
+have_jack=no
+if test "x$with_jack" != "xno"; then
+    PKG_CHECK_MODULES(JACK, jack, have_jack=yes, have_jack=no)
+fi
 
-dnl checks for header files
-AC_CHECK_HEADERS([sys/soundcard.h linux/soundcard.h machine/soundcard.h])
 
 dnl sizeof checks: we will need a 16-bit and a 32-bit type
 
@@ -149,6 +180,13 @@ else
    CFLAGS="$CFLAGS -DPA_LITTLE_ENDIAN"
 fi
 
+add_objects()
+{
+    for o in $@; do
+        test "${OTHER_OBJS#*${o}*}" = "${OTHER_OBJS}" && OTHER_OBJS="$OTHER_OBJS $o"
+    done
+}
+
 case "${host_os}" in
   darwin* )
         dnl Mac OS X configuration
@@ -176,81 +214,50 @@ case "${host_os}" in
         CFLAGS="-std=c99 $CFLAGS $mac_arches $mac_sysroot $mac_version_min"
         OTHER_OBJS="src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o src/hostapi/coreaudio/pa_mac_core.o src/hostapi/coreaudio/pa_mac_core_utilities.o src/hostapi/coreaudio/pa_mac_core_blocking.o src/common/pa_ringbuffer.o"
         PADLL="libportaudio.dylib"
-        if [[ $with_macapi = "asio" ]] ; then
-            if [[ $with_asiodir ]] ; then
-              ASIODIR="$with_asiodir"
-            else
-              ASIODIR="/usr/local/asiosdk2"
-            fi
-            echo "ASIODIR: $ASIODIR"
-
-            OTHER_OBJS="src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/host/asiodrivers.o $ASIODIR/common/asio.o $ASIODIR/host/mac/asioshlib.o"
-            CFLAGS="$CFLAGS -I\$(top_srcdir)/src/hostapi/asio -I$ASIODIR/host/mac -I$ASIODIR/common"
-            CXXFLAGS="$CFLAGS"
-        fi
         ;;
 
   mingw* )
         dnl MingW configuration
 
-        echo "WINAPI: $with_winapi"
-        if [[ $with_winapi = "directx" ]] ; then
-            if [[ $with_dxdir ]] ; then
-              DXDIR="$with_dxdir"
-            else
-              DXDIR="/usr/local/dx7sdk"
-            fi
-            echo "DXDIR: $DXDIR"
-            OTHER_OBJS="src/hostapi/dsound/pa_win_ds.o src/hostapi/dsound/pa_win_ds_dynlink.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o"
+        PADLL="portaudio.dll"
+        THREAD_CFLAGS="-mthreads"
+        SHARED_FLAGS="-shared"
+        CFLAGS="$CFLAGS -I\$(top_srcdir)/include -DPA_NO_WMME -DPA_NO_ASIO -DPA_NO_WDMKS -DPA_NO_DS"
+
+        if [[ "x$with_directx" = "xyes" ]]; then
+            DXDIR="$with_dxdir"
+            add_objects src/hostapi/dsound/pa_win_ds.o src/hostapi/dsound/pa_win_ds_dynlink.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o
             LIBS="-lwinmm -lm -ldsound -lole32"
-            PADLL="portaudio.dll"
-            THREAD_CFLAGS="-mthreads"
-            SHARED_FLAGS="-shared"
-            DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L./dx7sdk/lib -ldsound -lole32"
+            DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -ldsound -lole32"
             #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\""
             #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO"
-            CFLAGS="$CFLAGS -I\$(top_srcdir)/include -I$DXDIR/include -DPA_NO_WMME -DPA_NO_ASIO" -DPA_NO_WDMKS
-        elif [[ $with_winapi = "asio" ]] ; then
-            if [[ $with_asiodir ]] ; then
-              ASIODIR="$with_asiodir"
-            else
-              ASIODIR="/usr/local/asiosdk2"
-            fi
-            echo "ASIODIR: $ASIODIR"
-
-
-            OTHER_OBJS="src/hostapi/asio/pa_asio.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/common/asio.o $ASIODIR/host/asiodrivers.o $ASIODIR/host/pc/asiolist.o"
-            LIBS="-lwinmm -lm -lstdc++ -lole32 -luuid"
-            PADLL="portaudio.dll"
-            THREAD_CFLAGS="-mthreads"
-            SHARED_FLAGS="-shared"
-            DLL_LIBS="${DLL_LIBS} -lwinmm -lm -lstdc++ -lole32 -luuid"
-            CFLAGS="$CFLAGS -ffast-math -fomit-frame-pointer -I\$(top_srcdir)/src/common -I\$(top_srcdir)/src/hostapi/asio -I$ASIODIR/host/pc -I$ASIODIR/common -I$ASIODIR/host -DPA_NO_WMME -DPA_NO_DS -DPA_NO_WDMKS -DWINDOWS"
+            CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/win -I$DXDIR/include -UPA_NO_DS"
+        fi
+
+        if [[ "x$with_asio" = "xyes" ]]; then
+            ASIODIR="$with_asiodir"
+            add_objects src/hostapi/asio/pa_asio.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/common/asio.o $ASIODIR/host/asiodrivers.o $ASIODIR/host/pc/asiolist.o
+            LIBS="-lwinmm -lm -lole32 -luuid"
+            DLL_LIBS="${DLL_LIBS} -lwinmm -lm -lole32 -luuid"
+            CFLAGS="$CFLAGS -ffast-math -fomit-frame-pointer -I\$(top_srcdir)/src/common -I\$(top_srcdir)/src/hostapi/asio -I$ASIODIR/host/pc -I$ASIODIR/common -I$ASIODIR/host -UPA_NO_ASIO -DWINDOWS"
             CXXFLAGS="$CFLAGS"
-        elif [[ $with_winapi = "wdmks" ]] ; then
-            if [[ $with_dxdir ]] ; then
-              DXDIR="$with_dxdir"
-            else
-              DXDIR="/usr/local/dx7sdk"
-            fi
-            echo "DXDIR: $DXDIR"
-            OTHER_OBJS="src/hostapi/wdmks/pa_win_wdmks.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o"
+        fi
+
+        if [[ "x$with_wdmks" = "xyes" ]]; then
+            DXDIR="$with_dxdir"
+            add_objects src/hostapi/wdmks/pa_win_wdmks.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o
             LIBS="-lwinmm -lm -luuid -lsetupapi -lole32"
-            PADLL="portaudio.dll"
-            THREAD_CFLAGS="-mthreads"
-            SHARED_FLAGS="-shared"
-            DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L./dx7sdk/lib -luuid -lsetupapi -lole32"
+            DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -luuid -lsetupapi -lole32"
             #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\""
             #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO"
-            CFLAGS="$CFLAGS -I\$(top_srcdir)/src/common -I$DXDIR/include -DPA_NO_WMME -DPA_NO_DS -DPA_NO_ASIO"
-        else   # WMME default
-            OTHER_OBJS="src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o"
-            LIBS="-lwinmm -lm -lstdc++ -lole32 -luuid"
-            PADLL="portaudio.dll"
-            THREAD_CFLAGS="-mthreads"
-            SHARED_FLAGS="-shared"
+            CFLAGS="$CFLAGS -I\$(top_srcdir)/src/common -I$DXDIR/include -UPA_NO_WDMKS"
+        fi
+
+        if [[ "x$with_wmme" = "xyes" ]]; then
+            add_objects src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o
+            LIBS="-lwinmm -lm -lole32 -luuid"
             DLL_LIBS="${DLL_LIBS} -lwinmm"
-            CFLAGS="$CFLAGS -I\$(top_srcdir)/src/common -DPA_NO_DS -DPA_NO_ASIO -DPA_NO_WDMKS"
+            CFLAGS="$CFLAGS -I\$(top_srcdir)/src/common -UPA_NO_WMME"
         fi
         ;;
 
@@ -298,30 +305,30 @@ case "${host_os}" in
         AC_CHECK_LIB(pthread, pthread_create,[have_pthread="yes"],
                 AC_MSG_ERROR([libpthread not found!]))
 
-        if [[ $have_alsa = "yes" ] && [ $with_alsa != "no" ]] ; then
+        if [[ "$have_alsa" = "yes" ] && [ "$with_alsa" != "no" ]] ; then
            DLL_LIBS="$DLL_LIBS -lasound"
            LIBS="$LIBS -lasound"
            OTHER_OBJS="$OTHER_OBJS src/hostapi/alsa/pa_linux_alsa.o"
            AC_DEFINE(PA_USE_ALSA)
         fi
 
-        if [[ $have_jack = "yes" ] && [ $with_jack != "no" ]] ; then
+        if [[ "$have_jack" = "yes" ] && [ "$with_jack" != "no" ]] ; then
            DLL_LIBS="$DLL_LIBS $JACK_LIBS"
            CFLAGS="$CFLAGS $JACK_CFLAGS"
            OTHER_OBJS="$OTHER_OBJS src/hostapi/jack/pa_jack.o src/common/pa_ringbuffer.o"
            AC_DEFINE(PA_USE_JACK)
         fi
 
-        if [[ $with_oss != "no" ]] ; then
+        if [[ "$with_oss" != "no" ]] ; then
            OTHER_OBJS="$OTHER_OBJS src/hostapi/oss/pa_unix_oss.o"
-           if [[ $have_libossaudio = "yes" ]] ; then
+           if [[ "$have_libossaudio" = "yes" ]] ; then
                    DLL_LIBS="$DLL_LIBS -lossaudio"
                    LIBS="$LIBS -lossaudio"
            fi      
            AC_DEFINE(PA_USE_OSS)
         fi
 
-        if [[ $have_asihpi = "yes" ] && [ $with_asihpi != "no" ]] ; then
+        if [[ "$have_asihpi" = "yes" ] && [ "$with_asihpi" != "no" ]] ; then
            LIBS="$LIBS -lhpi"
            DLL_LIBS="$DLL_LIBS -lhpi"
            OTHER_OBJS="$OTHER_OBJS src/hostapi/asihpi/pa_linux_asihpi.o"
@@ -359,4 +366,52 @@ fi
 AC_SUBST(ENABLE_CXX_TRUE)
 AC_SUBST(ENABLE_CXX_FALSE)
 
+if test "x$with_asio" = "xyes"; then
+   WITH_ASIO_TRUE=""
+   WITH_ASIO_FALSE="@ #"
+else
+   WITH_ASIO_TRUE="@ #"
+   WITH_ASIO_FALSE=""
+fi
+AC_SUBST(WITH_ASIO_TRUE)
+AC_SUBST(WITH_ASIO_FALSE)
+
 AC_OUTPUT([Makefile portaudio-2.0.pc])
+
+AC_MSG_RESULT([
+Configuration summary:
+
+  Target ...................... $target
+  C++ bindings ................ $enable_cxx
+  Debug output ................ $debug_output])
+
+case "$target_os" in *linux*)
+    AC_MSG_RESULT([
+  ALSA ........................ $have_alsa
+  ASIHPI ...................... $have_asihpi])
+    ;;
+esac
+case "$target_os" in
+    *mingw* | *cygwin*)
+        test "x$with_directx" = "xyes" && with_directx="$with_directx (${with_dxdir})"
+        test "x$with_wdmks" = "xyes" && with_wdmks="$with_wdmks (${with_dxdir})"
+        test "x$with_asio" = "xyes" && with_asio="$with_asio (${with_asiodir})"
+        AC_MSG_RESULT([
+  WMME ........................ $with_wmme
+  DSound ...................... $with_directx
+  WDMKS ....................... $with_wdmks
+  ASIO ........................ $with_asio
+])
+        ;;
+    *darwin*)
+        AC_MSG_RESULT([
+  Mac debug flags ............. $enable_mac_debug
+])
+        ;;
+     *)
+	AC_MSG_RESULT([
+  OSS ......................... $have_oss
+  JACK ........................ $have_jack
+])
+        ;;
+esac
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_asio.h b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_asio.h
index 363444ea50..64d1bd4e7c 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_asio.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_asio.h
@@ -1,7 +1,7 @@
 #ifndef PA_ASIO_H
 #define PA_ASIO_H
 /*
- * $Id: pa_asio.h 1337 2008-02-15 07:32:09Z rossb $
+ * $Id: pa_asio.h 1400 2009-01-21 10:20:42Z rossb $
  * PortAudio Portable Real-Time Audio Library
  * ASIO specific extensions
  *
@@ -100,6 +100,19 @@ PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,
         const char** channelName );
 
 
+/** Set the sample rate of an open paASIO stream.
+ 
+ @param stream The stream to operate on.
+ @param sampleRate The new sample rate. 
+
+ Note that this function may fail if the stream is alredy running and the 
+ ASIO driver does not support switching the sample rate of a running stream.
+
+ Returns paIncompatibleStreamHostApi if stream is not a paASIO stream.
+*/
+PaError PaAsio_SetStreamSampleRate( PaStream* stream, double sampleRate );
+
+
 #define paAsioUseChannelSelectors      (0x01)
 
 typedef struct PaAsioStreamInfo{
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_linux_alsa.h b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_linux_alsa.h
index 9d41e4882e..de89ae9bff 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_linux_alsa.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_linux_alsa.h
@@ -2,7 +2,7 @@
 #define PA_LINUX_ALSA_H
 
 /*
- * $Id: pa_linux_alsa.h 1337 2008-02-15 07:32:09Z rossb $
+ * $Id: pa_linux_alsa.h 1414 2009-05-24 17:02:10Z aknudsen $
  * PortAudio Portable Real-Time Audio Library
  * ALSA-specific extensions
  *
@@ -87,6 +87,11 @@ PaError PaAlsa_GetStreamOutputCard( PaStream *s, int *card );
  */
 PaError PaAlsa_SetNumPeriods( int numPeriods );
 
+/** Set the maximum number of times to retry opening busy device (sleeping for a
+ * short interval inbetween).
+ */
+PaError PaAlsa_SetRetriesBusy( int retries );
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_waveformat.h b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_waveformat.h
index 63bf1c9587..dce18c0d93 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_waveformat.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_waveformat.h
@@ -157,16 +157,34 @@ typedef struct{
 #define PAWIN_INDEXOF_DWCHANNELMASK			(PAWIN_SIZEOF_WAVEFORMATEX+2)
 #define PAWIN_INDEXOF_SUBFORMAT				(PAWIN_SIZEOF_WAVEFORMATEX+6)
 
+
+/*
+    Valid values to pass for the waveFormatTag PaWin_InitializeWaveFormatEx and
+    PaWin_InitializeWaveFormatExtensible functions below. These must match
+    the standard Windows WAVE_FORMAT_* values.
+*/
+#define PAWIN_WAVE_FORMAT_PCM               (1)
+#define PAWIN_WAVE_FORMAT_IEEE_FLOAT        (3)
+#define PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF   (0x0092)
+#define PAWIN_WAVE_FORMAT_WMA_SPDIF         (0x0164)
+
+
+/*
+    returns PAWIN_WAVE_FORMAT_PCM or PAWIN_WAVE_FORMAT_IEEE_FLOAT
+    depending on the sampleFormat parameter.
+*/
+int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat );
+
 /*
 	Use the following two functions to initialize the waveformat structure.
 */
 
 void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, 
-		int numChannels, PaSampleFormat sampleFormat, double sampleRate );
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate );
 
 
 void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, 
-		int numChannels, PaSampleFormat sampleFormat, double sampleRate,
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate,
 	    PaWinWaveFormatChannelMask channelMask );
 
 
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_wmme.h b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_wmme.h
index 58b74e3da7..deffd1006f 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_wmme.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/include/pa_win_wmme.h
@@ -1,7 +1,7 @@
 #ifndef PA_WIN_WMME_H
 #define PA_WIN_WMME_H
 /*
- * $Id: pa_win_wmme.h 1337 2008-02-15 07:32:09Z rossb $
+ * $Id: pa_win_wmme.h 1405 2009-03-08 08:10:55Z rossb $
  * PortAudio Portable Real-Time Audio Library
  * MME specific extensions
  *
@@ -53,6 +53,10 @@ extern "C"
 #endif /* __cplusplus */
 
 
+/* The following are flags which can be set in 
+  PaWinMmeStreamInfo's flags field.
+*/
+
 #define paWinMmeUseLowLevelLatencyParameters            (0x01)
 #define paWinMmeUseMultipleDevices                      (0x02)  /* use mme specific multiple device feature */
 #define paWinMmeUseChannelMask                          (0x04)
@@ -64,6 +68,11 @@ extern "C"
 */
 #define paWinMmeDontThrottleOverloadedProcessingThread  (0x08)
 
+/*  Flags for non-PCM spdif passthrough.
+*/
+#define paWinMmeWaveFormatDolbyAc3Spdif                 (0x10)
+#define paWinMmeWaveFormatWmaSpdif                      (0x20)
+
 
 typedef struct PaWinMmeDeviceAndChannelCount{
     PaDeviceIndex device;
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.c
index 6f6c9a1a61..7a1b13125b 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_dither.c 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_dither.c 1418 2009-10-12 21:00:53Z philburk $
  * Portable Audio I/O Library triangular dither generator
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -42,9 +42,14 @@
  @brief Functions for generating dither noise
 */
 
-
-#include "pa_dither.h"
 #include "pa_types.h"
+#include "pa_dither.h"
+
+
+/* Note that the linear congruential algorithm requires 32 bit integers
+ * because it uses arithmetic overflow. So use PaUint32 instead of
+ * unsigned long so it will work on 64 bit systems.
+ */
 
 #define PA_DITHER_BITS_   (15)
 
@@ -57,9 +62,9 @@ void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *st
 }
 
 
-signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *state )
 {
-    signed long current, highPass;
+    PaInt32 current, highPass;
 
     /* Generate two random numbers. */
     state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
@@ -69,9 +74,10 @@ signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerato
      * Shift before adding to prevent overflow which would skew the distribution.
      * Also shift an extra bit for the high pass filter. 
      */
-#define DITHER_SHIFT_  ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
-    current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
-              (((signed long)state->randSeed2)>>DITHER_SHIFT_);
+#define DITHER_SHIFT_  ((sizeof(PaInt32)*8 - PA_DITHER_BITS_) + 1)
+	
+    current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
+              (((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
 
     /* High pass filter to reduce audibility. */
     highPass = current - state->previous;
@@ -86,7 +92,7 @@ static const float const_float_dither_scale_ = PA_FLOAT_DITHER_SCALE_;
 
 float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *state )
 {
-    signed long current, highPass;
+    PaInt32 current, highPass;
 
     /* Generate two random numbers. */
     state->randSeed1 = (state->randSeed1 * 196314165) + 907633515;
@@ -96,9 +102,8 @@ float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *sta
      * Shift before adding to prevent overflow which would skew the distribution.
      * Also shift an extra bit for the high pass filter. 
      */
-#define DITHER_SHIFT_  ((SIZEOF_LONG*8 - PA_DITHER_BITS_) + 1)
-    current = (((signed long)state->randSeed1)>>DITHER_SHIFT_) +
-              (((signed long)state->randSeed2)>>DITHER_SHIFT_);
+    current = (((PaInt32)state->randSeed1)>>DITHER_SHIFT_) +
+              (((PaInt32)state->randSeed2)>>DITHER_SHIFT_);
 
     /* High pass filter to reduce audibility. */
     highPass = current - state->previous;
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.h b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.h
index e77ce470d2..a5131b27fa 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_dither.h
@@ -1,7 +1,7 @@
 #ifndef PA_DITHER_H
 #define PA_DITHER_H
 /*
- * $Id: pa_dither.h 1097 2006-08-26 08:27:53Z rossb $
+ * $Id: pa_dither.h 1418 2009-10-12 21:00:53Z philburk $
  * Portable Audio I/O Library triangular dither generator
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -44,18 +44,24 @@
  @brief Functions for generating dither noise
 */
 
+#include "pa_types.h"
+
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif /* __cplusplus */
 
+/* Note that the linear congruential algorithm requires 32 bit integers
+ * because it uses arithmetic overflow. So use PaUint32 instead of
+ * unsigned long so it will work on 64 bit systems.
+ */
 
 /** @brief State needed to generate a dither signal */
 typedef struct PaUtilTriangularDitherGenerator{
-    unsigned long previous;
-    unsigned long randSeed1;
-    unsigned long randSeed2;
+    PaUint32 previous;
+    PaUint32 randSeed1;
+    PaUint32 randSeed2;
 } PaUtilTriangularDitherGenerator;
 
 
@@ -73,9 +79,9 @@ void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *di
     signed short out = (signed short)(((in>>1) + dither) >> 15);
 </pre>
  @return
- A signed long with a range of +32767 to -32768
+ A signed 32-bit integer with a range of +32767 to -32768
 */
-signed long PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );
+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );
 
 
 /**
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_front.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_front.c
index 3e90560939..28f0c60e8d 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_front.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_front.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_front.c 1387 2008-06-28 18:28:07Z philburk $
+ * $Id: pa_front.c 1396 2008-11-03 19:31:30Z philburk $
  * Portable Audio I/O Library Multi-Host API front end
  * Validate function parameters and manage multiple host APIs.
  *
@@ -1506,7 +1506,7 @@ const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream )
         result = 0;
 
         PA_LOGAPI(("Pa_GetStreamInfo returned:\n" ));
-        PA_LOGAPI(("\tconst PaStreamInfo*: 0 [PaError error:%d ( %s )]\n", result, error, Pa_GetErrorText( error ) ));
+        PA_LOGAPI(("\tconst PaStreamInfo*: 0 [PaError error:%d ( %s )]\n", error, Pa_GetErrorText( error ) ));
 
     }
     else
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_memorybarrier.h b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_memorybarrier.h
index 5efeed2487..f689622201 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_memorybarrier.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_memorybarrier.h
@@ -98,7 +98,7 @@
 #         error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.
 #      endif
 #   endif
-#elif (_MSC_VER >= 1400)
+#elif (_MSC_VER >= 1400) && !defined(_WIN32_WCE)
 #   include <intrin.h>
 #   pragma intrinsic(_ReadWriteBarrier)
 #   pragma intrinsic(_ReadBarrier)
@@ -106,6 +106,10 @@
 #   define PaUtil_FullMemoryBarrier()  _ReadWriteBarrier()
 #   define PaUtil_ReadMemoryBarrier()  _ReadBarrier()
 #   define PaUtil_WriteMemoryBarrier() _WriteBarrier()
+#elif defined(_WIN32_WCE)
+#   define PaUtil_FullMemoryBarrier()
+#   define PaUtil_ReadMemoryBarrier()
+#   define PaUtil_WriteMemoryBarrier()
 #elif defined(_MSC_VER) || defined(__BORLANDC__)
 #   define PaUtil_FullMemoryBarrier()  _asm { lock add    [esp], 0 }
 #   define PaUtil_ReadMemoryBarrier()  _asm { lock add    [esp], 0 }
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_process.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_process.c
index 93f863caa6..4770610b86 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_process.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_process.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_process.c 1341 2008-02-15 11:43:43Z rossb $
+ * $Id: pa_process.c 1408 2009-03-13 16:41:39Z rossb $
  * Portable Audio I/O Library
  * streamCallback <-> host buffer processing adapter
  *
@@ -997,7 +997,7 @@ static unsigned long AdaptingInputOnlyProcess( PaUtilBufferProcessor *bp,
                         bp->framesPerUserBuffer, bp->timeInfo,
                         bp->callbackStatusFlags, bp->userData );
 
-                bp->timeInfo->inputBufferAdcTime += frameCount * bp->samplePeriod;
+                bp->timeInfo->inputBufferAdcTime += bp->framesPerUserBuffer * bp->samplePeriod;
             }
             
             bp->framesInTempInputBuffer = 0;
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.c
index ad9e2ae567..310d719f2c 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_ringbuffer.c 1346 2008-02-20 10:09:20Z rossb $
+ * $Id: pa_ringbuffer.c 1421 2009-11-18 16:09:05Z bjornroche $
  * Portable Audio I/O Library
  * Ring Buffer utility.
  *
@@ -63,7 +63,7 @@
  * Initialize FIFO.
  * elementCount must be power of 2, returns -1 if not.
  */
-long PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, long elementSizeBytes, long elementCount, void *dataPtr )
+ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr )
 {
     if( ((elementCount-1) & elementCount) != 0) return -1; /* Not Power of two. */
     rbuf->bufferSize = elementCount;
@@ -77,14 +77,14 @@ long PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, long elementSizeBytes,
 
 /***************************************************************************
 ** Return number of elements available for reading. */
-long PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf )
+ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf )
 {
     PaUtil_ReadMemoryBarrier();
     return ( (rbuf->writeIndex - rbuf->readIndex) & rbuf->bigMask );
 }
 /***************************************************************************
 ** Return number of elements available for writing. */
-long PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf )
+ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf )
 {
     /* Since we are calling PaUtil_GetRingBufferReadAvailable, we don't need an aditional MB */
     return ( rbuf->bufferSize - PaUtil_GetRingBufferReadAvailable(rbuf));
@@ -103,19 +103,19 @@ void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf )
 ** If non-contiguous, size2 will be the size of second region.
 ** Returns room available to be written or elementCount, whichever is smaller.
 */
-long PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, long elementCount,
-                                       void **dataPtr1, long *sizePtr1,
-                                       void **dataPtr2, long *sizePtr2 )
+ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                       void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                       void **dataPtr2, ring_buffer_size_t *sizePtr2 )
 {
-    long   index;
-    long   available = PaUtil_GetRingBufferWriteAvailable( rbuf );
+    ring_buffer_size_t   index;
+    ring_buffer_size_t   available = PaUtil_GetRingBufferWriteAvailable( rbuf );
     if( elementCount > available ) elementCount = available;
     /* Check to see if write is not contiguous. */
     index = rbuf->writeIndex & rbuf->smallMask;
     if( (index + elementCount) > rbuf->bufferSize )
     {
         /* Write data in two blocks that wrap the buffer. */
-        long   firstHalf = rbuf->bufferSize - index;
+        ring_buffer_size_t   firstHalf = rbuf->bufferSize - index;
         *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes];
         *sizePtr1 = firstHalf;
         *dataPtr2 = &rbuf->buffer[0];
@@ -134,7 +134,7 @@ long PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, long elementCount
 
 /***************************************************************************
 */
-long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long elementCount )
+ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount )
 {
     /* we need to ensure that previous writes are seen before we update the write index */
     PaUtil_WriteMemoryBarrier();
@@ -147,19 +147,19 @@ long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long elementCou
 ** If non-contiguous, size2 will be the size of second region.
 ** Returns room available to be written or elementCount, whichever is smaller.
 */
-long PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, long elementCount,
-                                void **dataPtr1, long *sizePtr1,
-                                void **dataPtr2, long *sizePtr2 )
+ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                void **dataPtr2, ring_buffer_size_t *sizePtr2 )
 {
-    long   index;
-    long   available = PaUtil_GetRingBufferReadAvailable( rbuf );
+    ring_buffer_size_t   index;
+    ring_buffer_size_t   available = PaUtil_GetRingBufferReadAvailable( rbuf );
     if( elementCount > available ) elementCount = available;
     /* Check to see if read is not contiguous. */
     index = rbuf->readIndex & rbuf->smallMask;
     if( (index + elementCount) > rbuf->bufferSize )
     {
         /* Write data in two blocks that wrap the buffer. */
-        long firstHalf = rbuf->bufferSize - index;
+        ring_buffer_size_t firstHalf = rbuf->bufferSize - index;
         *dataPtr1 = &rbuf->buffer[index*rbuf->elementSizeBytes];
         *sizePtr1 = firstHalf;
         *dataPtr2 = &rbuf->buffer[0];
@@ -176,7 +176,7 @@ long PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, long elementCount,
 }
 /***************************************************************************
 */
-long PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, long elementCount )
+ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount )
 {
     /* we need to ensure that previous writes are always seen before updating the index. */
     PaUtil_WriteMemoryBarrier();
@@ -185,9 +185,9 @@ long PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, long elementCoun
 
 /***************************************************************************
 ** Return elements written. */
-long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long elementCount )
+ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount )
 {
-    long size1, size2, numWritten;
+    ring_buffer_size_t size1, size2, numWritten;
     void *data1, *data2;
     numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 );
     if( size2 > 0 )
@@ -207,9 +207,9 @@ long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long elem
 
 /***************************************************************************
 ** Return elements read. */
-long PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, long elementCount )
+ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount )
 {
-    long size1, size2, numRead;
+    ring_buffer_size_t size1, size2, numRead;
     void *data1, *data2;
     numRead = PaUtil_GetRingBufferReadRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 );
     if( size2 > 0 )
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.h b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.h
index fd92882a6d..7efd1914d9 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/common/pa_ringbuffer.h
@@ -1,7 +1,7 @@
 #ifndef PA_RINGBUFFER_H
 #define PA_RINGBUFFER_H
 /*
- * $Id: pa_ringbuffer.h 1347 2008-02-21 04:54:36Z rossb $
+ * $Id: pa_ringbuffer.h 1421 2009-11-18 16:09:05Z bjornroche $
  * Portable Audio I/O Library
  * Ring Buffer utility.
  *
@@ -67,6 +67,21 @@
  the use of the ring buffer.
 */
 
+#if defined(__APPLE__)
+#include <sys/types.h>
+typedef int32_t ring_buffer_size_t;
+#elif defined( __GNUC__ )
+typedef long ring_buffer_size_t;
+#elif (_MSC_VER >= 1400)
+typedef long ring_buffer_size_t;
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+typedef long ring_buffer_size_t;
+#else
+typedef long ring_buffer_size_t;
+#endif
+
+
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -74,12 +89,12 @@ extern "C"
 
 typedef struct PaUtilRingBuffer
 {
-    long  bufferSize; /**< Number of elements in FIFO. Power of 2. Set by PaUtil_InitRingBuffer. */
-    long  writeIndex; /**< Index of next writable element. Set by PaUtil_AdvanceRingBufferWriteIndex. */
-    long  readIndex;  /**< Index of next readable element. Set by PaUtil_AdvanceRingBufferReadIndex. */
-    long  bigMask;    /**< Used for wrapping indices with extra bit to distinguish full/empty. */
-    long  smallMask;  /**< Used for fitting indices to buffer. */
-    long  elementSizeBytes; /**< Number of bytes per element. */
+    ring_buffer_size_t  bufferSize; /**< Number of elements in FIFO. Power of 2. Set by PaUtil_InitRingBuffer. */
+    ring_buffer_size_t  writeIndex; /**< Index of next writable element. Set by PaUtil_AdvanceRingBufferWriteIndex. */
+    ring_buffer_size_t  readIndex;  /**< Index of next readable element. Set by PaUtil_AdvanceRingBufferReadIndex. */
+    ring_buffer_size_t  bigMask;    /**< Used for wrapping indices with extra bit to distinguish full/empty. */
+    ring_buffer_size_t  smallMask;  /**< Used for fitting indices to buffer. */
+    ring_buffer_size_t  elementSizeBytes; /**< Number of bytes per element. */
     char  *buffer;    /**< Pointer to the buffer containing the actual data. */
 }PaUtilRingBuffer;
 
@@ -96,7 +111,7 @@ typedef struct PaUtilRingBuffer
 
  @return -1 if elementCount is not a power of 2, otherwise 0.
 */
-long PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, long elementSizeBytes, long elementCount, void *dataPtr );
+ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr );
 
 /** Clear buffer. Should only be called when buffer is NOT being read.
 
@@ -110,7 +125,7 @@ void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf );
 
  @return The number of elements available for writing.
 */
-long PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf );
+ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf );
 
 /** Retrieve the number of elements available in the ring buffer for reading.
 
@@ -118,7 +133,7 @@ long PaUtil_GetRingBufferWriteAvailable( PaUtilRingBuffer *rbuf );
 
  @return The number of elements available for reading.
 */
-long PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf );
+ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf );
 
 /** Write data to the ring buffer.
 
@@ -130,7 +145,7 @@ long PaUtil_GetRingBufferReadAvailable( PaUtilRingBuffer *rbuf );
 
  @return The number of elements written.
 */
-long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long elementCount );
+ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount );
 
 /** Read data from the ring buffer.
 
@@ -142,7 +157,7 @@ long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long elem
 
  @return The number of elements read.
 */
-long PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, long elementCount );
+ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount );
 
 /** Get address of region(s) to which we can write data.
 
@@ -164,9 +179,9 @@ long PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, long elementCoun
 
  @return The room available to be written or elementCount, whichever is smaller.
 */
-long PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, long elementCount,
-                                       void **dataPtr1, long *sizePtr1,
-                                       void **dataPtr2, long *sizePtr2 );
+ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                       void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                       void **dataPtr2, ring_buffer_size_t *sizePtr2 );
 
 /** Advance the write index to the next location to be written.
 
@@ -176,7 +191,7 @@ long PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, long elementCount
 
  @return The new position.
 */
-long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long elementCount );
+ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount );
 
 /** Get address of region(s) from which we can write data.
 
@@ -198,9 +213,9 @@ long PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, long elementCou
 
  @return The number of elements available for reading.
 */
-long PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, long elementCount,
-                                      void **dataPtr1, long *sizePtr1,
-                                      void **dataPtr2, long *sizePtr2 );
+ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,
+                                      void **dataPtr1, ring_buffer_size_t *sizePtr1,
+                                      void **dataPtr2, ring_buffer_size_t *sizePtr2 );
 
 /** Advance the read index to the next location to be read.
 
@@ -210,7 +225,7 @@ long PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, long elementCount,
 
  @return The new position.
 */
-long PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, long elementCount );
+ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount );
 
 #ifdef __cplusplus
 }
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/alsa/pa_linux_alsa.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/alsa/pa_linux_alsa.c
index 75b6204680..224f4ff636 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/alsa/pa_linux_alsa.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/alsa/pa_linux_alsa.c
@@ -1,11 +1,12 @@
 /*
- * $Id: pa_linux_alsa.c 1362 2008-02-28 21:43:57Z aknudsen $
+ * $Id: pa_linux_alsa.c 1415 2009-06-03 18:57:56Z aknudsen $
  * PortAudio Portable Real-Time Audio Library
  * Latest Version at: http://www.portaudio.com
  * ALSA implementation by Joshua Haberman and Arve Knudsen
  *
  * Copyright (c) 2002 Joshua Haberman <joshua@haberman.com>
- * Copyright (c) 2005-2007 Arve Knudsen <aknuds-1@broadpark.no>
+ * Copyright (c) 2005-2009 Arve Knudsen <arve.knudsen@gmail.com>
+ * Copyright (c) 2008 Kevin Kofler <kevin.kofler@chello.at>
  *
  * Based on the Open Source API proposed by Ross Bencina
  * Copyright (c) 1999-2002 Ross Bencina, Phil Burk
@@ -99,6 +100,7 @@
 
 static int aErr_;               /* Used with ENSURE_ */
 static int numPeriods_ = 4;
+static int busyRetries_ = 100;
 
 int PaAlsa_SetNumPeriods( int numPeriods )
 {
@@ -118,6 +120,8 @@ typedef struct
     unsigned long framesPerBuffer;
     int numUserChannels, numHostChannels;
     int userInterleaved, hostInterleaved;
+    int canMmap;
+    void *nonMmapBuffer;
     PaDeviceIndex device;     /* Keep the device index */
 
     snd_pcm_t *pcm;
@@ -321,7 +325,7 @@ static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
  * and a suitable result returned. The device is closed before returning.
  */
 static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, int openBlocking,
-        PaAlsaDeviceInfo* devInfo, int* canMmap )
+        PaAlsaDeviceInfo* devInfo )
 {
     PaError result = paNoError;
     snd_pcm_hw_params_t *hwParams;
@@ -354,9 +358,6 @@ static PaError GropeDevice( snd_pcm_t* pcm, int isPlug, StreamDirection mode, in
     snd_pcm_hw_params_alloca( &hwParams );
     snd_pcm_hw_params_any( pcm, hwParams );
 
-    *canMmap = snd_pcm_hw_params_test_access( pcm, hwParams, SND_PCM_ACCESS_MMAP_INTERLEAVED ) >= 0 ||
-            snd_pcm_hw_params_test_access( pcm, hwParams, SND_PCM_ACCESS_MMAP_NONINTERLEAVED ) >= 0;
-
     if( defaultSr >= 0 )
     {
         /* Could be that the device opened in one mode supports samplerates that the other mode wont have,
@@ -539,7 +540,7 @@ static int IgnorePlugin( const char *pluginId )
  **/
 static int OpenPcm( snd_pcm_t **pcmp, const char *name, snd_pcm_stream_t stream, int mode, int waitOnBusy )
 {
-    int tries = 0, maxTries = waitOnBusy ? 100 : 0;
+    int tries = 0, maxTries = waitOnBusy ? busyRetries_ : 0;
     int ret = snd_pcm_open( pcmp, name, stream, mode );
     for( tries = 0; tries < maxTries && -EBUSY == ret; ++tries )
     {
@@ -566,7 +567,6 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
     PaError result = 0;
     PaDeviceInfo *baseDeviceInfo = &devInfo->baseDeviceInfo;
     snd_pcm_t *pcm;
-    int canMmap = -1;
     PaUtilHostApiRepresentation *baseApi = &alsaApi->baseHostApiRep;
 
     /* Zero fields */
@@ -580,8 +580,7 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
             OpenPcm( &pcm, deviceName->alsaName, SND_PCM_STREAM_CAPTURE, blocking, 0 )
             >= 0 )
     {
-        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_In, blocking, devInfo,
-                    &canMmap ) != paNoError )
+        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_In, blocking, devInfo ) != paNoError )
         {
             /* Error */
             PA_DEBUG(("%s: Failed groping %s for capture\n", __FUNCTION__, deviceName->alsaName));
@@ -594,8 +593,7 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
             OpenPcm( &pcm, deviceName->alsaName, SND_PCM_STREAM_PLAYBACK, blocking, 0 )
             >= 0 )
     {
-        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_Out, blocking, devInfo,
-                    &canMmap ) != paNoError )
+        if( GropeDevice( pcm, deviceName->isPlug, StreamDirection_Out, blocking, devInfo ) != paNoError )
         {
             /* Error */
             PA_DEBUG(("%s: Failed groping %s for playback\n", __FUNCTION__, deviceName->alsaName));
@@ -603,12 +601,6 @@ static PaError FillInDevInfo( PaAlsaHostApiRepresentation *alsaApi, HwDevInfo* d
         }
     }
 
-    if( 0 == canMmap )
-    {
-        PA_DEBUG(("%s: Device %s doesn't support mmap\n", __FUNCTION__, deviceName->alsaName));
-        goto end;
-    }
-
     baseDeviceInfo->structVersion = 2;
     baseDeviceInfo->hostApi = alsaApi->hostApiIndex;
     baseDeviceInfo->name = deviceName->name;
@@ -1197,6 +1189,8 @@ static PaError PaAlsaStreamComponent_Initialize( PaAlsaStreamComponent *self, Pa
     self->hostInterleaved = self->userInterleaved = !(userSampleFormat & paNonInterleaved);
     self->numUserChannels = params->channelCount;
     self->streamDir = streamDir;
+    self->canMmap = 0;
+    self->nonMmapBuffer = NULL;
 
     if( !callbackMode && !self->userInterleaved )
     {
@@ -1239,6 +1233,7 @@ static PaError PaAlsaStreamComponent_InitialConfigure( PaAlsaStreamComponent *se
 
     PaError result = paNoError;
     snd_pcm_access_t accessMode, alternateAccessMode;
+    snd_pcm_access_t rwAccessMode, alternateRwAccessMode;
     int dir = 0;
     snd_pcm_t *pcm = self->pcm;
     double sr = *sampleRate;
@@ -1258,32 +1253,40 @@ static PaError PaAlsaStreamComponent_InitialConfigure( PaAlsaStreamComponent *se
     if( self->userInterleaved )
     {
         accessMode = SND_PCM_ACCESS_MMAP_INTERLEAVED;
+        rwAccessMode = SND_PCM_ACCESS_RW_INTERLEAVED;
         alternateAccessMode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED;
+        alternateRwAccessMode = SND_PCM_ACCESS_RW_NONINTERLEAVED;
     }
     else
     {
         accessMode = SND_PCM_ACCESS_MMAP_NONINTERLEAVED;
+        rwAccessMode = SND_PCM_ACCESS_RW_NONINTERLEAVED;
         alternateAccessMode = SND_PCM_ACCESS_MMAP_INTERLEAVED;
+        alternateRwAccessMode = SND_PCM_ACCESS_RW_INTERLEAVED;
     }
     /* If requested access mode fails, try alternate mode */
+    self->canMmap = 1;
     if( snd_pcm_hw_params_set_access( pcm, hwParams, accessMode ) < 0 )
     {
-        int err = 0;
-        if( (err = snd_pcm_hw_params_set_access( pcm, hwParams, alternateAccessMode )) < 0)
+        if( snd_pcm_hw_params_set_access( pcm, hwParams, rwAccessMode ) >= 0 )
+            self->canMmap = 0;
+        else
         {
-            result = paUnanticipatedHostError;
-            if( -EINVAL == err )
+            if( snd_pcm_hw_params_set_access( pcm, hwParams, alternateAccessMode ) < 0 )
             {
-                PaUtil_SetLastHostErrorInfo( paALSA, err, "PA ALSA requires that a device supports mmap access" );
-            }
-            else
-            {
-                PaUtil_SetLastHostErrorInfo( paALSA, err, snd_strerror( err ) );
+                int err = 0;
+                if( (err = snd_pcm_hw_params_set_access( pcm, hwParams, alternateRwAccessMode )) >= 0)
+                    self->canMmap = 0;
+                else
+                {
+                    result = paUnanticipatedHostError;
+                    PaUtil_SetLastHostErrorInfo( paALSA, err, snd_strerror( err ) );
+                    goto error;
+                }
             }
-            goto error;
+            /* Flip mode */
+            self->hostInterleaved = !self->userInterleaved;
         }
-        /* Flip mode */
-        self->hostInterleaved = !self->userInterleaved;
     }
 
     ENSURE_( snd_pcm_hw_params_set_format( pcm, hwParams, self->nativeFormat ), paUnanticipatedHostError );
@@ -1361,7 +1364,7 @@ static PaError PaAlsaStreamComponent_FinishConfigure( PaAlsaStreamComponent *sel
         
     ENSURE_( snd_pcm_sw_params_set_avail_min( self->pcm, swParams, self->framesPerBuffer ), paUnanticipatedHostError );
     ENSURE_( snd_pcm_sw_params_set_xfer_align( self->pcm, swParams, 1 ), paUnanticipatedHostError );
-    ENSURE_( snd_pcm_sw_params_set_tstamp_mode( self->pcm, swParams, SND_PCM_TSTAMP_MMAP ), paUnanticipatedHostError );
+    ENSURE_( snd_pcm_sw_params_set_tstamp_mode( self->pcm, swParams, SND_PCM_TSTAMP_ENABLE ), paUnanticipatedHostError );
 
     /* Set the parameters! */
     ENSURE_( snd_pcm_sw_params( self->pcm, swParams ), paUnanticipatedHostError );
@@ -1589,6 +1592,10 @@ static PaError PaAlsaStreamComponent_DetermineFramesPerBuffer( PaAlsaStreamCompo
         }
     }
 
+    /* non-mmap mode needs a reasonably-sized buffer or it'll stutter */
+    if( !self->canMmap && framesPerHostBuffer < 2048 )
+        framesPerHostBuffer = 2048;
+
     assert( framesPerHostBuffer > 0 );
     {
         snd_pcm_uframes_t min = 0, max = 0;
@@ -1831,12 +1838,13 @@ static PaError PaAlsaStream_DetermineFramesPerBuffer( PaAlsaStream* self, double
     PA_UNLESS( framesPerHostBuffer != 0, paInternalError );
     self->maxFramesPerHostBuffer = framesPerHostBuffer;
 
-    if( !accurate )
+    if( !self->playback.canMmap || !accurate )
     {
         /* Don't know the exact size per host buffer */
         *hostBufferSizeMode = paUtilBoundedHostBufferSize;
         /* Raise upper bound */
-        ++self->maxFramesPerHostBuffer;
+        if( !accurate )
+            ++self->maxFramesPerHostBuffer;
     }
 
 error:
@@ -1995,11 +2003,11 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
     /* Ok, buffer processor is initialized, now we can deduce it's latency */
     if( numInputChannels > 0 )
-        stream->streamRepresentation.streamInfo.inputLatency = inputLatency + PaUtil_GetBufferProcessorInputLatency(
-                &stream->bufferProcessor );
+        stream->streamRepresentation.streamInfo.inputLatency = inputLatency + (PaTime)(
+                PaUtil_GetBufferProcessorInputLatency( &stream->bufferProcessor ) / sampleRate);
     if( numOutputChannels > 0 )
-        stream->streamRepresentation.streamInfo.outputLatency = outputLatency + PaUtil_GetBufferProcessorOutputLatency(
-                &stream->bufferProcessor );
+        stream->streamRepresentation.streamInfo.outputLatency = outputLatency + (PaTime)(
+                PaUtil_GetBufferProcessorOutputLatency( &stream->bufferProcessor ) / sampleRate);
 
     *s = (PaStream*)stream;
 
@@ -2059,9 +2067,11 @@ static PaError AlsaStart( PaAlsaStream *stream, int priming )
             {
                 /* Buffer isn't primed, so prepare and silence */
                 ENSURE_( snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError );
-                SilenceBuffer( stream );
+                if( stream->playback.canMmap )
+                    SilenceBuffer( stream );
             }
-            ENSURE_( snd_pcm_start( stream->playback.pcm ), paUnanticipatedHostError );
+            if( stream->playback.canMmap )
+                ENSURE_( snd_pcm_start( stream->playback.pcm ), paUnanticipatedHostError );
         }
         else
             ENSURE_( snd_pcm_prepare( stream->playback.pcm ), paUnanticipatedHostError );
@@ -2390,6 +2400,7 @@ static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self )
     snd_pcm_status_t *st;
     PaTime now = PaUtil_GetTime();
     snd_timestamp_t t;
+    int errplayback = 0, errcapture = 0;
 
     snd_pcm_status_alloca( &st );
 
@@ -2400,6 +2411,7 @@ static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self )
         {
             snd_pcm_status_get_trigger_tstamp( st, &t );
             self->underrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000);
+            errplayback = snd_pcm_recover( self->playback.pcm, -EPIPE, 0 );
         }
     }
     if( self->capture.pcm )
@@ -2409,10 +2421,12 @@ static PaError PaAlsaStream_HandleXrun( PaAlsaStream *self )
         {
             snd_pcm_status_get_trigger_tstamp( st, &t );
             self->overrun = now * 1000 - ((PaTime) t.tv_sec * 1000 + (PaTime) t.tv_usec / 1000);
+            errcapture = snd_pcm_recover( self->capture.pcm, -EPIPE, 0 );
         }
     }
 
-    PA_ENSURE( AlsaRestart( self ) );
+    if( errplayback || errcapture )
+        PA_ENSURE( AlsaRestart( self ) );
 
 end:
     return result;
@@ -2563,7 +2577,7 @@ static void CalculateTimeInfo( PaAlsaStream *stream, PaStreamCallbackTimeInfo *t
 static PaError PaAlsaStreamComponent_EndProcessing( PaAlsaStreamComponent *self, unsigned long numFrames, int *xrun )
 {
     PaError result = paNoError;
-    int res;
+    int res = 0;
 
     /* @concern FullDuplex It is possible that only one direction is marked ready after polling, and processed
      * afterwards
@@ -2571,7 +2585,34 @@ static PaError PaAlsaStreamComponent_EndProcessing( PaAlsaStreamComponent *self,
     if( !self->ready )
         goto end;
 
-    res = snd_pcm_mmap_commit( self->pcm, self->offset, numFrames );
+    if( !self->canMmap && StreamDirection_Out == self->streamDir )
+    {
+        /* Play sound */
+        if( self->hostInterleaved )
+            res = snd_pcm_writei( self->pcm, self->nonMmapBuffer, numFrames );
+        else
+        {
+            void *bufs[self->numHostChannels];
+            int bufsize = snd_pcm_format_size( self->nativeFormat, self->framesPerBuffer + 1 );
+            unsigned char *buffer = self->nonMmapBuffer;
+            int i;
+            for( i = 0; i < self->numHostChannels; ++i )
+            {
+                bufs[i] = buffer;
+                buffer += bufsize;
+            }
+            res = snd_pcm_writen( self->pcm, bufs, numFrames );
+        }
+    }
+
+    if( self->canMmap )
+        res = snd_pcm_mmap_commit( self->pcm, self->offset, numFrames );
+    else
+    {
+        free( self->nonMmapBuffer );
+        self->nonMmapBuffer = NULL;
+    }
+
     if( res == -EPIPE || res == -ESTRPIPE )
     {
         *xrun = 1;
@@ -2611,7 +2652,7 @@ static PaError PaAlsaStreamComponent_DoChannelAdaption( PaAlsaStreamComponent *s
     if( self->hostInterleaved )
     {
         int swidth = snd_pcm_format_size( self->nativeFormat, 1 );
-        unsigned char *buffer = ExtractAddress( self->channelAreas, self->offset );
+        unsigned char *buffer = self->canMmap ? ExtractAddress( self->channelAreas, self->offset ) : self->nonMmapBuffer;
 
         /* Start after the last user channel */
         p = buffer + self->numUserChannels * swidth;
@@ -2991,13 +3032,23 @@ static PaError PaAlsaStreamComponent_RegisterChannels( PaAlsaStreamComponent* se
         goto end;
     }
 
-    ENSURE_( snd_pcm_mmap_begin( self->pcm, &areas, &self->offset, numFrames ), paUnanticipatedHostError );
+    if( self->canMmap )
+    {
+        ENSURE_( snd_pcm_mmap_begin( self->pcm, &areas, &self->offset, numFrames ), paUnanticipatedHostError );
+        /* @concern ChannelAdaption Buffer address is recorded so we can do some channel adaption later */
+        self->channelAreas = (snd_pcm_channel_area_t *)areas;
+    }
+    else
+    {
+        free( self->nonMmapBuffer );
+        self->nonMmapBuffer = calloc( self->numHostChannels, snd_pcm_format_size( self->nativeFormat, self->framesPerBuffer + 1 ) );
+    }
 
     if( self->hostInterleaved )
     {
         int swidth = snd_pcm_format_size( self->nativeFormat, 1 );
 
-        p = buffer = ExtractAddress( areas, self->offset );
+        p = buffer = self->canMmap ? ExtractAddress( areas, self->offset ) : self->nonMmapBuffer;
         for( i = 0; i < self->numUserChannels; ++i )
         {
             /* We're setting the channels up to userChannels, but the stride will be hostChannels samples */
@@ -3007,16 +3058,52 @@ static PaError PaAlsaStreamComponent_RegisterChannels( PaAlsaStreamComponent* se
     }
     else
     {
-        for( i = 0; i < self->numUserChannels; ++i )
+        if( self->canMmap )
+            for( i = 0; i < self->numUserChannels; ++i )
+            {
+                area = areas + i;
+                buffer = ExtractAddress( area, self->offset );
+                setChannel( bp, i, buffer, 1 );
+            }
+        else
         {
-            area = areas + i;
-            buffer = ExtractAddress( area, self->offset );
-            setChannel( bp, i, buffer, 1 );
+            int bufsize = snd_pcm_format_size( self->nativeFormat, self->framesPerBuffer + 1 );
+            buffer = self->nonMmapBuffer;
+            for( i = 0; i < self->numUserChannels; ++i )
+            {
+                setChannel( bp, i, buffer, 1 );
+                buffer += bufsize;
+            }
         }
     }
 
-    /* @concern ChannelAdaption Buffer address is recorded so we can do some channel adaption later */
-    self->channelAreas = (snd_pcm_channel_area_t *)areas;
+    if( !self->canMmap && StreamDirection_In == self->streamDir )
+    {
+        /* Read sound */
+        int res;
+        if( self->hostInterleaved )
+            res = snd_pcm_readi( self->pcm, self->nonMmapBuffer, *numFrames );
+        else
+        {
+            void *bufs[self->numHostChannels];
+            int bufsize = snd_pcm_format_size( self->nativeFormat, self->framesPerBuffer + 1 );
+            unsigned char *buffer = self->nonMmapBuffer;
+            int i;
+            for( i = 0; i < self->numHostChannels; ++i )
+            {
+                bufs[i] = buffer;
+                buffer += bufsize;
+            }
+            res = snd_pcm_readn( self->pcm, bufs, *numFrames );
+        }
+        if( res == -EPIPE || res == -ESTRPIPE )
+        {
+            *xrun = 1;
+            *numFrames = 0;
+            free( self->nonMmapBuffer );
+            self->nonMmapBuffer = NULL;
+        }
+    }
 
 end:
 error:
@@ -3584,3 +3671,9 @@ PaError PaAlsa_GetStreamOutputCard(PaStream* s, int* card) {
 error:
     return result;
 }
+
+PaError PaAlsa_SetRetriesBusy( int retries )
+{
+    busyRetries_ = retries;
+    return paNoError;
+}
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
index 1b4b33781f..8dfefbd67b 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
@@ -71,7 +71,7 @@
     (IUnknown functions)
     0   virtual HRESULT STDMETHODCALLTYPE (*QueryInterface)(REFIID riid, void **ppv) = 0;
     4   virtual ULONG STDMETHODCALLTYPE (*AddRef)() = 0;
-    8   virtual ULONG STDMETHODCALLTYPE (*Release)() = 0;
+    8   virtual ULONG STDMETHODCALLTYPE (*Release)() = 0;      
 
     (IASIO functions)
     12	virtual ASIOBool (*init)(void *sysHandle) = 0;
@@ -128,7 +128,7 @@
     with MSVC, and requires that you ship the OpenASIO DLL with your
     application.
 
-
+    
     ACKNOWLEDGEMENTS
 
     Ross Bencina: worked out the thiscall details above, wrote the original
@@ -186,7 +186,7 @@ extern IASIO* theAsioDriver;
 
 // The following macros define the inline assembler for BORLAND first then gcc
 
-#if defined(__BCPLUSPLUS__) || defined(__BORLANDC__)
+#if defined(__BCPLUSPLUS__) || defined(__BORLANDC__)          
 
 
 #define CALL_THISCALL_0( resultName, thisPtr, funcOffset )\
@@ -277,7 +277,7 @@ extern IASIO* theAsioDriver;
                           :"=a"(resultName) /* Output Operands */           \
                           :"c"(thisPtr)     /* Input Operands */            \
                          );                                                 \
- 
+
 
 #define CALL_VOID_THISCALL_1( thisPtr, funcOffset, param1 )                 \
     __asm__ __volatile__ ("pushl %0\n\t"                                    \
@@ -287,7 +287,7 @@ extern IASIO* theAsioDriver;
                           :"r"(param1),     /* Input Operands */            \
                            "c"(thisPtr)                                     \
                          );                                                 \
- 
+
 
 #define CALL_THISCALL_1( resultName, thisPtr, funcOffset, param1 )          \
     __asm__ __volatile__ ("pushl %1\n\t"                                    \
@@ -297,7 +297,7 @@ extern IASIO* theAsioDriver;
                           :"r"(param1),     /* Input Operands */            \
                            "c"(thisPtr)                                     \
                           );                                                \
- 
+
 
 #define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 )   \
     __asm__ __volatile__ ("pushl 4(%1)\n\t"                                 \
@@ -310,7 +310,7 @@ extern IASIO* theAsioDriver;
                            /* when using GCC 3.3.3, and maybe later versions*/\
                            "c"(thisPtr)                                     \
                           );                                                \
- 
+
 
 #define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 )  \
     __asm__ __volatile__ ("pushl %1\n\t"                                    \
@@ -322,7 +322,7 @@ extern IASIO* theAsioDriver;
                            "r"(param1),                                     \
                            "c"(thisPtr)                                     \
                           );                                                \
- 
+
 
 #define CALL_THISCALL_4( resultName, thisPtr, funcOffset, param1, param2, param3, param4 )\
     __asm__ __volatile__ ("pushl %1\n\t"                                    \
@@ -338,7 +338,7 @@ extern IASIO* theAsioDriver;
                            "r"(param1),                                     \
                            "c"(thisPtr)                                     \
                           );                                                \
- 
+
 #endif
 
 
@@ -354,8 +354,8 @@ IASIOThiscallResolver::IASIOThiscallResolver()
 }
 
 // Constructor called from ASIOInit() below
-IASIOThiscallResolver::IASIOThiscallResolver (IASIO* that)
-        : that_ (that)
+IASIOThiscallResolver::IASIOThiscallResolver(IASIO* that)
+: that_( that )
 {
 }
 
@@ -363,11 +363,11 @@ IASIOThiscallResolver::IASIOThiscallResolver (IASIO* that)
 // really a COM object, just a wrapper which will work with the ASIO SDK.
 // If you wanted to use ASIO without the SDK you might want to implement COM
 // aggregation in these methods.
-HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface (REFIID riid, void **ppv)
+HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface(REFIID riid, void **ppv)
 {
-    (void) riid;    // suppress unused variable warning
+    (void)riid;     // suppress unused variable warning
 
-    assert (false);  // this function should never be called by the ASIO SDK.
+    assert( false ); // this function should never be called by the ASIO SDK.
 
     *ppv = NULL;
     return E_NOINTERFACE;
@@ -375,176 +375,176 @@ HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface (REFIID riid, vo
 
 ULONG STDMETHODCALLTYPE IASIOThiscallResolver::AddRef()
 {
-    assert (false);  // this function should never be called by the ASIO SDK.
+    assert( false ); // this function should never be called by the ASIO SDK.
 
     return 1;
 }
 
 ULONG STDMETHODCALLTYPE IASIOThiscallResolver::Release()
 {
-    assert (false);  // this function should never be called by the ASIO SDK.
-
+    assert( false ); // this function should never be called by the ASIO SDK.
+    
     return 1;
 }
 
 
 // Implement the IASIO interface methods by performing the vptr manipulation
 // described above then delegating to the real implementation.
-ASIOBool IASIOThiscallResolver::init (void *sysHandle)
+ASIOBool IASIOThiscallResolver::init(void *sysHandle)
 {
     ASIOBool result;
-    CALL_THISCALL_1 (result, that_, 12, sysHandle);
+    CALL_THISCALL_1( result, that_, 12, sysHandle );
     return result;
 }
 
-void IASIOThiscallResolver::getDriverName (char *name)
+void IASIOThiscallResolver::getDriverName(char *name)
 {
-    CALL_VOID_THISCALL_1 (that_, 16, name);
+    CALL_VOID_THISCALL_1( that_, 16, name );
 }
 
 long IASIOThiscallResolver::getDriverVersion()
 {
     ASIOBool result;
-    CALL_THISCALL_0 (result, that_, 20);
+    CALL_THISCALL_0( result, that_, 20 );
     return result;
 }
 
-void IASIOThiscallResolver::getErrorMessage (char *string)
+void IASIOThiscallResolver::getErrorMessage(char *string)
 {
-    CALL_VOID_THISCALL_1 (that_, 24, string);
+     CALL_VOID_THISCALL_1( that_, 24, string );
 }
 
 ASIOError IASIOThiscallResolver::start()
 {
     ASIOBool result;
-    CALL_THISCALL_0 (result, that_, 28);
+    CALL_THISCALL_0( result, that_, 28 );
     return result;
 }
 
 ASIOError IASIOThiscallResolver::stop()
 {
     ASIOBool result;
-    CALL_THISCALL_0 (result, that_, 32);
+    CALL_THISCALL_0( result, that_, 32 );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getChannels (long *numInputChannels, long *numOutputChannels)
+ASIOError IASIOThiscallResolver::getChannels(long *numInputChannels, long *numOutputChannels)
 {
     ASIOBool result;
-    CALL_THISCALL_2 (result, that_, 36, numInputChannels, numOutputChannels);
+    CALL_THISCALL_2( result, that_, 36, numInputChannels, numOutputChannels );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getLatencies (long *inputLatency, long *outputLatency)
+ASIOError IASIOThiscallResolver::getLatencies(long *inputLatency, long *outputLatency)
 {
     ASIOBool result;
-    CALL_THISCALL_2 (result, that_, 40, inputLatency, outputLatency);
+    CALL_THISCALL_2( result, that_, 40, inputLatency, outputLatency );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getBufferSize (long *minSize, long *maxSize,
+ASIOError IASIOThiscallResolver::getBufferSize(long *minSize, long *maxSize,
         long *preferredSize, long *granularity)
 {
     ASIOBool result;
-    CALL_THISCALL_4 (result, that_, 44, minSize, maxSize, preferredSize, granularity);
+    CALL_THISCALL_4( result, that_, 44, minSize, maxSize, preferredSize, granularity );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::canSampleRate (ASIOSampleRate sampleRate)
+ASIOError IASIOThiscallResolver::canSampleRate(ASIOSampleRate sampleRate)
 {
     ASIOBool result;
-    CALL_THISCALL_1_DOUBLE (result, that_, 48, sampleRate);
+    CALL_THISCALL_1_DOUBLE( result, that_, 48, sampleRate );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getSampleRate (ASIOSampleRate *sampleRate)
+ASIOError IASIOThiscallResolver::getSampleRate(ASIOSampleRate *sampleRate)
 {
     ASIOBool result;
-    CALL_THISCALL_1 (result, that_, 52, sampleRate);
+    CALL_THISCALL_1( result, that_, 52, sampleRate );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::setSampleRate (ASIOSampleRate sampleRate)
-{
+ASIOError IASIOThiscallResolver::setSampleRate(ASIOSampleRate sampleRate)
+{    
     ASIOBool result;
-    CALL_THISCALL_1_DOUBLE (result, that_, 56, sampleRate);
+    CALL_THISCALL_1_DOUBLE( result, that_, 56, sampleRate );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getClockSources (ASIOClockSource *clocks, long *numSources)
+ASIOError IASIOThiscallResolver::getClockSources(ASIOClockSource *clocks, long *numSources)
 {
     ASIOBool result;
-    CALL_THISCALL_2 (result, that_, 60, clocks, numSources);
+    CALL_THISCALL_2( result, that_, 60, clocks, numSources );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::setClockSource (long reference)
+ASIOError IASIOThiscallResolver::setClockSource(long reference)
 {
     ASIOBool result;
-    CALL_THISCALL_1 (result, that_, 64, reference);
+    CALL_THISCALL_1( result, that_, 64, reference );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getSamplePosition (ASIOSamples *sPos, ASIOTimeStamp *tStamp)
+ASIOError IASIOThiscallResolver::getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp)
 {
     ASIOBool result;
-    CALL_THISCALL_2 (result, that_, 68, sPos, tStamp);
+    CALL_THISCALL_2( result, that_, 68, sPos, tStamp );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getChannelInfo (ASIOChannelInfo *info)
+ASIOError IASIOThiscallResolver::getChannelInfo(ASIOChannelInfo *info)
 {
     ASIOBool result;
-    CALL_THISCALL_1 (result, that_, 72, info);
+    CALL_THISCALL_1( result, that_, 72, info );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::createBuffers (ASIOBufferInfo *bufferInfos,
+ASIOError IASIOThiscallResolver::createBuffers(ASIOBufferInfo *bufferInfos,
         long numChannels, long bufferSize, ASIOCallbacks *callbacks)
 {
     ASIOBool result;
-    CALL_THISCALL_4 (result, that_, 76, bufferInfos, numChannels, bufferSize, callbacks);
+    CALL_THISCALL_4( result, that_, 76, bufferInfos, numChannels, bufferSize, callbacks );
     return result;
 }
 
 ASIOError IASIOThiscallResolver::disposeBuffers()
 {
     ASIOBool result;
-    CALL_THISCALL_0 (result, that_, 80);
+    CALL_THISCALL_0( result, that_, 80 );
     return result;
 }
 
 ASIOError IASIOThiscallResolver::controlPanel()
 {
     ASIOBool result;
-    CALL_THISCALL_0 (result, that_, 84);
+    CALL_THISCALL_0( result, that_, 84 );
     return result;
 }
 
-ASIOError IASIOThiscallResolver::future (long selector,void *opt)
+ASIOError IASIOThiscallResolver::future(long selector,void *opt)
 {
     ASIOBool result;
-    CALL_THISCALL_2 (result, that_, 88, selector, opt);
+    CALL_THISCALL_2( result, that_, 88, selector, opt );
     return result;
 }
 
 ASIOError IASIOThiscallResolver::outputReady()
 {
     ASIOBool result;
-    CALL_THISCALL_0 (result, that_, 92);
+    CALL_THISCALL_0( result, that_, 92 );
     return result;
 }
 
 
 // Implement our substitute ASIOInit() method
-ASIOError IASIOThiscallResolver::ASIOInit (ASIODriverInfo *info)
+ASIOError IASIOThiscallResolver::ASIOInit(ASIODriverInfo *info)
 {
     // To ensure that our instance's vptr is correctly constructed, even if
     // ASIOInit is called prior to main(), we explicitly call its constructor
     // (potentially over the top of an existing instance). Note that this is
     // pretty ugly, and is only safe because IASIOThiscallResolver has no
     // destructor and contains no objects with destructors.
-    new ( (void*) &instance) IASIOThiscallResolver (theAsioDriver);
+    new((void*)&instance) IASIOThiscallResolver( theAsioDriver );
 
     // Interpose between ASIO client code and the real driver.
     theAsioDriver = &instance;
@@ -553,7 +553,7 @@ ASIOError IASIOThiscallResolver::ASIOInit (ASIODriverInfo *info)
     // real driver because theAsioDriver is reset to zero in ASIOExit().
 
     // Delegate to the real ASIOInit
-    return ::ASIOInit (info);
+	return ::ASIOInit(info);
 }
 
 
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp
index cf54465cfa..84d1c51179 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_asio.cpp 1386 2008-06-28 18:27:34Z philburk $
+ * $Id: pa_asio.cpp 1416 2009-06-16 16:12:41Z rossb $
  * Portable Audio I/O Library for ASIO Drivers
  *
  * Author: Stephane Letz
@@ -29,13 +29,13 @@
  */
 
 /*
- * The text above constitutes the entire PortAudio license; however,
+ * The text above constitutes the entire PortAudio license; however, 
  * the PortAudio community also makes the following non-binding requests:
  *
  * Any person wishing to distribute modifications to the Software is
  * requested to send the modifications to the original developer so that
- * they can be incorporated into the canonical version. It is also
- * requested that these non-binding requests be included along with the
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
  * license above.
  */
 
@@ -83,7 +83,7 @@
 
     @todo review ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable
 
-    @todo review Blocking i/o latency computations in OpenStream(), changing ring
+    @todo review Blocking i/o latency computations in OpenStream(), changing ring 
           buffer to a non-power-of-two structure could reduce blocking i/o latency.
 
     @todo implement IsFormatSupported
@@ -171,8 +171,8 @@
 
 /* external reference to ASIO SDK's asioDrivers.
 
- This is a bit messy because we want to explicitly manage
- allocation/deallocation of this structure, but some layers of the SDK
+ This is a bit messy because we want to explicitly manage 
+ allocation/deallocation of this structure, but some layers of the SDK 
  which we currently use (eg the implementation in asio.cpp) still
  use this global version.
 
@@ -190,9 +190,9 @@ extern AsioDrivers* asioDrivers;
 
 /* prototypes for functions declared in this file */
 
-extern "C" PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex);
-static void Terminate (struct PaUtilHostApiRepresentation *hostApi);
-static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
+extern "C" PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex );
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -200,109 +200,82 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData);
-static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
+                           void *userData );
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
-                                  double sampleRate);
-static PaError CloseStream (PaStream* stream);
-static PaError StartStream (PaStream *stream);
-static PaError StopStream (PaStream *stream);
-static PaError AbortStream (PaStream *stream);
-static PaError IsStreamStopped (PaStream *s);
-static PaError IsStreamActive (PaStream *stream);
-static PaTime GetStreamTime (PaStream *stream);
-static double GetStreamCpuLoad (PaStream* stream);
-static PaError ReadStream (PaStream* stream, void *buffer, unsigned long frames);
-static PaError WriteStream (PaStream* stream, const void *buffer, unsigned long frames);
-static signed long GetStreamReadAvailable (PaStream* stream);
-static signed long GetStreamWriteAvailable (PaStream* stream);
+                                  double sampleRate );
+static PaError CloseStream( PaStream* stream );
+static PaError StartStream( PaStream *stream );
+static PaError StopStream( PaStream *stream );
+static PaError AbortStream( PaStream *stream );
+static PaError IsStreamStopped( PaStream *s );
+static PaError IsStreamActive( PaStream *stream );
+static PaTime GetStreamTime( PaStream *stream );
+static double GetStreamCpuLoad( PaStream* stream );
+static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
+static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
+static signed long GetStreamReadAvailable( PaStream* stream );
+static signed long GetStreamWriteAvailable( PaStream* stream );
 
 /* Blocking i/o callback function. */
-static int BlockingIoPaCallback (const void                     *inputBuffer    ,
-                                 void                     *outputBuffer   ,
-                                 unsigned long             framesPerBuffer,
-                                 const PaStreamCallbackTimeInfo *timeInfo       ,
-                                 PaStreamCallbackFlags     statusFlags    ,
-                                 void                     *userData);
+static int BlockingIoPaCallback(const void                     *inputBuffer    ,
+                                      void                     *outputBuffer   ,
+                                      unsigned long             framesPerBuffer,
+                                const PaStreamCallbackTimeInfo *timeInfo       ,
+                                      PaStreamCallbackFlags     statusFlags    ,
+                                      void                     *userData       );
 
 /* our ASIO callback functions */
 
-static void bufferSwitch (long index, ASIOBool processNow);
-static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool processNow);
-static void sampleRateChanged (ASIOSampleRate sRate);
-static long asioMessages (long selector, long value, void* message, double* opt);
+static void bufferSwitch(long index, ASIOBool processNow);
+static ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow);
+static void sampleRateChanged(ASIOSampleRate sRate);
+static long asioMessages(long selector, long value, void* message, double* opt);
 
-static ASIOCallbacks asioCallbacks_ = { bufferSwitch, sampleRateChanged, asioMessages, bufferSwitchTimeInfo };
+static ASIOCallbacks asioCallbacks_ =
+    { bufferSwitch, sampleRateChanged, asioMessages, bufferSwitchTimeInfo };
 
 
 #define PA_ASIO_SET_LAST_HOST_ERROR( errorCode, errorText ) \
     PaUtil_SetLastHostErrorInfo( paASIO, errorCode, errorText )
 
 
-static void PaAsio_SetLastSystemError (DWORD errorCode)
+static void PaAsio_SetLastSystemError( DWORD errorCode )
 {
     LPVOID lpMsgBuf;
-    FormatMessage (
+    FormatMessage(
         FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
         NULL,
         errorCode,
-        MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
         (LPTSTR) &lpMsgBuf,
         0,
         NULL
     );
-    PaUtil_SetLastHostErrorInfo (paASIO, errorCode, (const char*) lpMsgBuf);
-    LocalFree (lpMsgBuf);
+    PaUtil_SetLastHostErrorInfo( paASIO, errorCode, (const char*)lpMsgBuf );
+    LocalFree( lpMsgBuf );
 }
 
 #define PA_ASIO_SET_LAST_SYSTEM_ERROR( errorCode ) \
     PaAsio_SetLastSystemError( errorCode )
 
 
-static const char* PaAsio_GetAsioErrorText (ASIOError asioError)
+static const char* PaAsio_GetAsioErrorText( ASIOError asioError )
 {
     const char *result;
 
-    switch (asioError) {
-
+    switch( asioError ){
         case ASE_OK:
-
-        case ASE_SUCCESS:
-            result = "Success";
-            break;
-
-        case ASE_NotPresent:
-            result = "Hardware input or output is not present or available";
-            break;
-
-        case ASE_HWMalfunction:
-            result = "Hardware is malfunctioning";
-            break;
-
-        case ASE_InvalidParameter:
-            result = "Input parameter invalid";
-            break;
-
-        case ASE_InvalidMode:
-            result = "Hardware is in a bad mode or used in a bad mode";
-            break;
-
-        case ASE_SPNotAdvancing:
-            result = "Hardware is not running when sample position is inquired";
-            break;
-
-        case ASE_NoClock:
-            result = "Sample clock or rate cannot be determined or is not present";
-            break;
-
-        case ASE_NoMemory:
-            result = "Not enough memory for completing the request";
-            break;
-
-        default:
-            result = "Unknown ASIO error";
-            break;
+        case ASE_SUCCESS:           result = "Success"; break;
+        case ASE_NotPresent:        result = "Hardware input or output is not present or available"; break;
+        case ASE_HWMalfunction:     result = "Hardware is malfunctioning"; break;
+        case ASE_InvalidParameter:  result = "Input parameter invalid"; break;
+        case ASE_InvalidMode:       result = "Hardware is in a bad mode or used in a bad mode"; break;
+        case ASE_SPNotAdvancing:    result = "Hardware is not running when sample position is inquired"; break;
+        case ASE_NoClock:           result = "Sample clock or rate cannot be determined or is not present"; break;
+        case ASE_NoMemory:          result = "Not enough memory for completing the request"; break;
+        default:                    result = "Unknown ASIO error"; break;
     }
 
     return result;
@@ -317,45 +290,30 @@ static const char* PaAsio_GetAsioErrorText (ASIOError asioError)
 
 // Atomic increment and decrement operations
 #if MAC
-/* need to be implemented on Mac */
-inline long PaAsio_AtomicIncrement (volatile long* v)
-{
-    return ++ (*const_cast<long*> (v));
-}
-
-inline long PaAsio_AtomicDecrement (volatile long* v)
-{
-    return -- (*const_cast<long*> (v));
-}
-
+    /* need to be implemented on Mac */
+    inline long PaAsio_AtomicIncrement(volatile long* v) {return ++(*const_cast<long*>(v));}
+    inline long PaAsio_AtomicDecrement(volatile long* v) {return --(*const_cast<long*>(v));}
 #elif WINDOWS
-inline long PaAsio_AtomicIncrement (volatile long* v)
-{
-    return InterlockedIncrement (const_cast<long*> (v));
-}
-
-inline long PaAsio_AtomicDecrement (volatile long* v)
-{
-    return InterlockedDecrement (const_cast<long*> (v));
-}
-
+    inline long PaAsio_AtomicIncrement(volatile long* v) {return InterlockedIncrement(const_cast<long*>(v));}
+    inline long PaAsio_AtomicDecrement(volatile long* v) {return InterlockedDecrement(const_cast<long*>(v));}
 #endif
 
 
 
-typedef struct PaAsioDriverInfo {
+typedef struct PaAsioDriverInfo
+{
     ASIODriverInfo asioDriverInfo;
     long inputChannelCount, outputChannelCount;
     long bufferMinSize, bufferMaxSize, bufferPreferredSize, bufferGranularity;
     bool postOutput;
 }
-
 PaAsioDriverInfo;
 
 
 /* PaAsioHostApiRepresentation - host api datastructure specific to this implementation */
 
-typedef struct {
+typedef struct
+{
     PaUtilHostApiRepresentation inheritedHostApiRep;
     PaUtilStreamInterface callbackStreamInterface;
     PaUtilStreamInterface blockingStreamInterface;
@@ -364,7 +322,7 @@ typedef struct {
 
     AsioDrivers *asioDrivers;
     void *systemSpecific;
-
+    
     /* the ASIO C API only allows one ASIO driver to be open at a time,
         so we keep track of whether we have the driver open here, and
         use this information to return errors from OpenStream if the
@@ -379,7 +337,6 @@ typedef struct {
     PaDeviceIndex openAsioDeviceIndex;
     PaAsioDriverInfo openAsioDriverInfo;
 }
-
 PaAsioHostApiRepresentation;
 
 
@@ -387,206 +344,117 @@ PaAsioHostApiRepresentation;
     Retrieve <driverCount> driver names from ASIO, returned in a char**
     allocated in <group>.
 */
-static char **GetAsioDriverNames (PaAsioHostApiRepresentation *asioHostApi, PaUtilAllocationGroup *group, long driverCount)
+static char **GetAsioDriverNames( PaAsioHostApiRepresentation *asioHostApi, PaUtilAllocationGroup *group, long driverCount )
 {
     char **result = 0;
     int i;
 
-    result = (char**) PaUtil_GroupAllocateMemory (
-                 group, sizeof (char*) * driverCount);
-
-    if (!result)
+    result =(char**)PaUtil_GroupAllocateMemory(
+            group, sizeof(char*) * driverCount );
+    if( !result )
         goto error;
 
-    result[0] = (char*) PaUtil_GroupAllocateMemory (
-                    group, 32 * driverCount);
-
-    if (!result[0])
+    result[0] = (char*)PaUtil_GroupAllocateMemory(
+            group, 32 * driverCount );
+    if( !result[0] )
         goto error;
 
-    for (i=0; i<driverCount; ++i)
+    for( i=0; i<driverCount; ++i )
         result[i] = result[0] + (32 * i);
 
-    asioHostApi->asioDrivers->getDriverNames (result, driverCount);
+    asioHostApi->asioDrivers->getDriverNames( result, driverCount );
 
 error:
     return result;
 }
 
 
-static PaSampleFormat AsioSampleTypeToPaNativeSampleFormat (ASIOSampleType type)
+static PaSampleFormat AsioSampleTypeToPaNativeSampleFormat(ASIOSampleType type)
 {
     switch (type) {
-
         case ASIOSTInt16MSB:
-
         case ASIOSTInt16LSB:
-            return paInt16;
+                return paInt16;
 
         case ASIOSTFloat32MSB:
-
         case ASIOSTFloat32LSB:
-
         case ASIOSTFloat64MSB:
-
         case ASIOSTFloat64LSB:
-            return paFloat32;
+                return paFloat32;
 
         case ASIOSTInt32MSB:
-
         case ASIOSTInt32LSB:
-
         case ASIOSTInt32MSB16:
-
         case ASIOSTInt32LSB16:
-
         case ASIOSTInt32MSB18:
-
         case ASIOSTInt32MSB20:
-
         case ASIOSTInt32MSB24:
-
         case ASIOSTInt32LSB18:
-
         case ASIOSTInt32LSB20:
-
         case ASIOSTInt32LSB24:
-            return paInt32;
+                return paInt32;
 
         case ASIOSTInt24MSB:
-
         case ASIOSTInt24LSB:
-            return paInt24;
+                return paInt24;
 
         default:
-            return paCustomFormat;
+                return paCustomFormat;
     }
 }
 
-void AsioSampleTypeLOG (ASIOSampleType type)
+void AsioSampleTypeLOG(ASIOSampleType type)
 {
     switch (type) {
-
-        case ASIOSTInt16MSB:
-            PA_DEBUG ( ("ASIOSTInt16MSB\n"));
-            break;
-
-        case ASIOSTInt16LSB:
-            PA_DEBUG ( ("ASIOSTInt16LSB\n"));
-            break;
-
-        case ASIOSTFloat32MSB:
-            PA_DEBUG ( ("ASIOSTFloat32MSB\n"));
-            break;
-
-        case ASIOSTFloat32LSB:
-            PA_DEBUG ( ("ASIOSTFloat32LSB\n"));
-            break;
-
-        case ASIOSTFloat64MSB:
-            PA_DEBUG ( ("ASIOSTFloat64MSB\n"));
-            break;
-
-        case ASIOSTFloat64LSB:
-            PA_DEBUG ( ("ASIOSTFloat64LSB\n"));
-            break;
-
-        case ASIOSTInt32MSB:
-            PA_DEBUG ( ("ASIOSTInt32MSB\n"));
-            break;
-
-        case ASIOSTInt32LSB:
-            PA_DEBUG ( ("ASIOSTInt32LSB\n"));
-            break;
-
-        case ASIOSTInt32MSB16:
-            PA_DEBUG ( ("ASIOSTInt32MSB16\n"));
-            break;
-
-        case ASIOSTInt32LSB16:
-            PA_DEBUG ( ("ASIOSTInt32LSB16\n"));
-            break;
-
-        case ASIOSTInt32MSB18:
-            PA_DEBUG ( ("ASIOSTInt32MSB18\n"));
-            break;
-
-        case ASIOSTInt32MSB20:
-            PA_DEBUG ( ("ASIOSTInt32MSB20\n"));
-            break;
-
-        case ASIOSTInt32MSB24:
-            PA_DEBUG ( ("ASIOSTInt32MSB24\n"));
-            break;
-
-        case ASIOSTInt32LSB18:
-            PA_DEBUG ( ("ASIOSTInt32LSB18\n"));
-            break;
-
-        case ASIOSTInt32LSB20:
-            PA_DEBUG ( ("ASIOSTInt32LSB20\n"));
-            break;
-
-        case ASIOSTInt32LSB24:
-            PA_DEBUG ( ("ASIOSTInt32LSB24\n"));
-            break;
-
-        case ASIOSTInt24MSB:
-            PA_DEBUG ( ("ASIOSTInt24MSB\n"));
-            break;
-
-        case ASIOSTInt24LSB:
-            PA_DEBUG ( ("ASIOSTInt24LSB\n"));
-            break;
-
-        default:
-            PA_DEBUG ( ("Custom Format%d\n",type));
-            break;
+        case ASIOSTInt16MSB:  PA_DEBUG(("ASIOSTInt16MSB\n"));  break;
+        case ASIOSTInt16LSB:  PA_DEBUG(("ASIOSTInt16LSB\n"));  break;
+        case ASIOSTFloat32MSB:PA_DEBUG(("ASIOSTFloat32MSB\n"));break;
+        case ASIOSTFloat32LSB:PA_DEBUG(("ASIOSTFloat32LSB\n"));break;
+        case ASIOSTFloat64MSB:PA_DEBUG(("ASIOSTFloat64MSB\n"));break;
+        case ASIOSTFloat64LSB:PA_DEBUG(("ASIOSTFloat64LSB\n"));break;
+        case ASIOSTInt32MSB:  PA_DEBUG(("ASIOSTInt32MSB\n"));  break;
+        case ASIOSTInt32LSB:  PA_DEBUG(("ASIOSTInt32LSB\n"));  break;
+        case ASIOSTInt32MSB16:PA_DEBUG(("ASIOSTInt32MSB16\n"));break;
+        case ASIOSTInt32LSB16:PA_DEBUG(("ASIOSTInt32LSB16\n"));break;
+        case ASIOSTInt32MSB18:PA_DEBUG(("ASIOSTInt32MSB18\n"));break;
+        case ASIOSTInt32MSB20:PA_DEBUG(("ASIOSTInt32MSB20\n"));break;
+        case ASIOSTInt32MSB24:PA_DEBUG(("ASIOSTInt32MSB24\n"));break;
+        case ASIOSTInt32LSB18:PA_DEBUG(("ASIOSTInt32LSB18\n"));break;
+        case ASIOSTInt32LSB20:PA_DEBUG(("ASIOSTInt32LSB20\n"));break;
+        case ASIOSTInt32LSB24:PA_DEBUG(("ASIOSTInt32LSB24\n"));break;
+        case ASIOSTInt24MSB:  PA_DEBUG(("ASIOSTInt24MSB\n"));  break;
+        case ASIOSTInt24LSB:  PA_DEBUG(("ASIOSTInt24LSB\n"));  break;
+        default:              PA_DEBUG(("Custom Format%d\n",type));break;
 
     }
 }
 
-static int BytesPerAsioSample (ASIOSampleType sampleType)
+static int BytesPerAsioSample( ASIOSampleType sampleType )
 {
     switch (sampleType) {
-
         case ASIOSTInt16MSB:
-
         case ASIOSTInt16LSB:
             return 2;
 
         case ASIOSTFloat64MSB:
-
         case ASIOSTFloat64LSB:
             return 8;
 
         case ASIOSTFloat32MSB:
-
         case ASIOSTFloat32LSB:
-
         case ASIOSTInt32MSB:
-
         case ASIOSTInt32LSB:
-
         case ASIOSTInt32MSB16:
-
         case ASIOSTInt32LSB16:
-
         case ASIOSTInt32MSB18:
-
         case ASIOSTInt32MSB20:
-
         case ASIOSTInt32MSB24:
-
         case ASIOSTInt32LSB18:
-
         case ASIOSTInt32LSB20:
-
         case ASIOSTInt32LSB24:
             return 4;
 
         case ASIOSTInt24MSB:
-
         case ASIOSTInt24LSB:
             return 3;
 
@@ -596,86 +464,93 @@ static int BytesPerAsioSample (ASIOSampleType sampleType)
 }
 
 
-static void Swap16 (void *buffer, long shift, long count)
+static void Swap16( void *buffer, long shift, long count )
 {
-    unsigned short *p = (unsigned short*) buffer;
+    unsigned short *p = (unsigned short*)buffer;
     unsigned short temp;
     (void) shift; /* unused parameter */
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p;
-        *p++ = (unsigned short) ( (temp<<8) | (temp>>8));
+        *p++ = (unsigned short)((temp<<8) | (temp>>8));
     }
 }
 
-static void Swap24 (void *buffer, long shift, long count)
+static void Swap24( void *buffer, long shift, long count )
 {
-    unsigned char *p = (unsigned char*) buffer;
+    unsigned char *p = (unsigned char*)buffer;
     unsigned char temp;
     (void) shift; /* unused parameter */
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p;
-        *p = * (p+2);
-        * (p+2) = temp;
+        *p = *(p+2);
+        *(p+2) = temp;
         p += 3;
     }
 }
 
 #define PA_SWAP32_( x ) ((x>>24) | ((x>>8)&0xFF00) | ((x<<8)&0xFF0000) | (x<<24));
 
-static void Swap32 (void *buffer, long shift, long count)
+static void Swap32( void *buffer, long shift, long count )
 {
-    unsigned long *p = (unsigned long*) buffer;
+    unsigned long *p = (unsigned long*)buffer;
     unsigned long temp;
     (void) shift; /* unused parameter */
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p;
-        *p++ = PA_SWAP32_ (temp);
+        *p++ = PA_SWAP32_( temp);
     }
 }
 
-static void SwapShiftLeft32 (void *buffer, long shift, long count)
+static void SwapShiftLeft32( void *buffer, long shift, long count )
 {
-    unsigned long *p = (unsigned long*) buffer;
+    unsigned long *p = (unsigned long*)buffer;
     unsigned long temp;
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p;
-        temp = PA_SWAP32_ (temp);
+        temp = PA_SWAP32_( temp);
         *p++ = temp << shift;
     }
 }
 
-static void ShiftRightSwap32 (void *buffer, long shift, long count)
+static void ShiftRightSwap32( void *buffer, long shift, long count )
 {
-    unsigned long *p = (unsigned long*) buffer;
+    unsigned long *p = (unsigned long*)buffer;
     unsigned long temp;
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p >> shift;
-        *p++ = PA_SWAP32_ (temp);
+        *p++ = PA_SWAP32_( temp);
     }
 }
 
-static void ShiftLeft32 (void *buffer, long shift, long count)
+static void ShiftLeft32( void *buffer, long shift, long count )
 {
-    unsigned long *p = (unsigned long*) buffer;
+    unsigned long *p = (unsigned long*)buffer;
     unsigned long temp;
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p;
         *p++ = temp << shift;
     }
 }
 
-static void ShiftRight32 (void *buffer, long shift, long count)
+static void ShiftRight32( void *buffer, long shift, long count )
 {
-    unsigned long *p = (unsigned long*) buffer;
+    unsigned long *p = (unsigned long*)buffer;
     unsigned long temp;
 
-    while (count--) {
+    while( count-- )
+    {
         temp = *p;
         *p++ = temp >> shift;
     }
@@ -683,63 +558,65 @@ static void ShiftRight32 (void *buffer, long shift, long count)
 
 #define PA_SWAP_( x, y ) temp=x; x = y; y = temp;
 
-static void Swap64ConvertFloat64ToFloat32 (void *buffer, long shift, long count)
+static void Swap64ConvertFloat64ToFloat32( void *buffer, long shift, long count )
 {
-    double *in = (double*) buffer;
-    float *out = (float*) buffer;
+    double *in = (double*)buffer;
+    float *out = (float*)buffer;
     unsigned char *p;
     unsigned char temp;
     (void) shift; /* unused parameter */
 
-    while (count--) {
-        p = (unsigned char*) in;
-        PA_SWAP_ (p[0], p[7]);
-        PA_SWAP_ (p[1], p[6]);
-        PA_SWAP_ (p[2], p[5]);
-        PA_SWAP_ (p[3], p[4]);
+    while( count-- )
+    {
+        p = (unsigned char*)in;
+        PA_SWAP_( p[0], p[7] );
+        PA_SWAP_( p[1], p[6] );
+        PA_SWAP_( p[2], p[5] );
+        PA_SWAP_( p[3], p[4] );
 
         *out++ = (float) (*in++);
     }
 }
 
-static void ConvertFloat64ToFloat32 (void *buffer, long shift, long count)
+static void ConvertFloat64ToFloat32( void *buffer, long shift, long count )
 {
-    double *in = (double*) buffer;
-    float *out = (float*) buffer;
+    double *in = (double*)buffer;
+    float *out = (float*)buffer;
     (void) shift; /* unused parameter */
 
-    while (count--)
+    while( count-- )
         *out++ = (float) (*in++);
 }
 
-static void ConvertFloat32ToFloat64Swap64 (void *buffer, long shift, long count)
+static void ConvertFloat32ToFloat64Swap64( void *buffer, long shift, long count )
 {
-    float *in = ( (float*) buffer) + (count-1);
-    double *out = ( (double*) buffer) + (count-1);
+    float *in = ((float*)buffer) + (count-1);
+    double *out = ((double*)buffer) + (count-1);
     unsigned char *p;
     unsigned char temp;
     (void) shift; /* unused parameter */
 
-    while (count--) {
+    while( count-- )
+    {
         *out = *in--;
 
-        p = (unsigned char*) out;
-        PA_SWAP_ (p[0], p[7]);
-        PA_SWAP_ (p[1], p[6]);
-        PA_SWAP_ (p[2], p[5]);
-        PA_SWAP_ (p[3], p[4]);
+        p = (unsigned char*)out;
+        PA_SWAP_( p[0], p[7] );
+        PA_SWAP_( p[1], p[6] );
+        PA_SWAP_( p[2], p[5] );
+        PA_SWAP_( p[3], p[4] );
 
         out--;
     }
 }
 
-static void ConvertFloat32ToFloat64 (void *buffer, long shift, long count)
+static void ConvertFloat32ToFloat64( void *buffer, long shift, long count )
 {
-    float *in = ( (float*) buffer) + (count-1);
-    double *out = ( (double*) buffer) + (count-1);
+    float *in = ((float*)buffer) + (count-1);
+    double *out = ((double*)buffer) + (count-1);
     (void) shift; /* unused parameter */
 
-    while (count--)
+    while( count-- )
         *out-- = *in--;
 }
 
@@ -753,337 +630,302 @@ static void ConvertFloat32ToFloat64 (void *buffer, long shift, long count)
 #define PA_LSB_IS_NATIVE_
 #endif
 
-typedef void PaAsioBufferConverter (void *, long, long);
+typedef void PaAsioBufferConverter( void *, long, long );
 
-static void SelectAsioToPaConverter (ASIOSampleType type, PaAsioBufferConverter **converter, long *shift)
+static void SelectAsioToPaConverter( ASIOSampleType type, PaAsioBufferConverter **converter, long *shift )
 {
     *shift = 0;
     *converter = 0;
 
     switch (type) {
-
         case ASIOSTInt16MSB:
             /* dest: paInt16, no conversion necessary, possible byte swap*/
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap16;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap16;
+            #endif
             break;
-
         case ASIOSTInt16LSB:
             /* dest: paInt16, no conversion necessary, possible byte swap*/
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap16;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap16;
+            #endif
             break;
-
         case ASIOSTFloat32MSB:
             /* dest: paFloat32, no conversion necessary, possible byte swap*/
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTFloat32LSB:
             /* dest: paFloat32, no conversion necessary, possible byte swap*/
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTFloat64MSB:
             /* dest: paFloat32, in-place conversion to/from float32, possible byte swap*/
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap64ConvertFloat64ToFloat32;
-#else
-            *converter = ConvertFloat64ToFloat32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap64ConvertFloat64ToFloat32;
+            #else
+                *converter = ConvertFloat64ToFloat32;
+            #endif
             break;
-
         case ASIOSTFloat64LSB:
             /* dest: paFloat32, in-place conversion to/from float32, possible byte swap*/
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap64ConvertFloat64ToFloat32;
-#else
-            *converter = ConvertFloat64ToFloat32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap64ConvertFloat64ToFloat32;
+            #else
+                *converter = ConvertFloat64ToFloat32;
+            #endif
             break;
-
         case ASIOSTInt32MSB:
             /* dest: paInt32, no conversion necessary, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTInt32LSB:
             /* dest: paInt32, no conversion necessary, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTInt32MSB16:
             /* dest: paInt32, 16 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 16;
             break;
-
         case ASIOSTInt32MSB18:
             /* dest: paInt32, 14 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 14;
             break;
-
         case ASIOSTInt32MSB20:
             /* dest: paInt32, 12 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 12;
             break;
-
         case ASIOSTInt32MSB24:
             /* dest: paInt32, 8 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 8;
             break;
-
         case ASIOSTInt32LSB16:
             /* dest: paInt32, 16 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 16;
             break;
-
         case ASIOSTInt32LSB18:
             /* dest: paInt32, 14 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 14;
             break;
-
         case ASIOSTInt32LSB20:
             /* dest: paInt32, 12 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 12;
             break;
-
         case ASIOSTInt32LSB24:
             /* dest: paInt32, 8 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = SwapShiftLeft32;
-#else
-            *converter = ShiftLeft32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = SwapShiftLeft32;
+            #else
+                *converter = ShiftLeft32;
+            #endif
             *shift = 8;
             break;
-
         case ASIOSTInt24MSB:
             /* dest: paInt24, no conversion necessary, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap24;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap24;
+            #endif
             break;
-
         case ASIOSTInt24LSB:
             /* dest: paInt24, no conversion necessary, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap24;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap24;
+            #endif
             break;
     }
 }
 
 
-static void SelectPaToAsioConverter (ASIOSampleType type, PaAsioBufferConverter **converter, long *shift)
+static void SelectPaToAsioConverter( ASIOSampleType type, PaAsioBufferConverter **converter, long *shift )
 {
     *shift = 0;
     *converter = 0;
 
     switch (type) {
-
         case ASIOSTInt16MSB:
             /* src: paInt16, no conversion necessary, possible byte swap*/
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap16;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap16;
+            #endif
             break;
-
         case ASIOSTInt16LSB:
             /* src: paInt16, no conversion necessary, possible byte swap*/
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap16;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap16;
+            #endif
             break;
-
         case ASIOSTFloat32MSB:
             /* src: paFloat32, no conversion necessary, possible byte swap*/
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTFloat32LSB:
             /* src: paFloat32, no conversion necessary, possible byte swap*/
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTFloat64MSB:
             /* src: paFloat32, in-place conversion to/from float32, possible byte swap*/
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = ConvertFloat32ToFloat64Swap64;
-#else
-            *converter = ConvertFloat32ToFloat64;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = ConvertFloat32ToFloat64Swap64;
+            #else
+                *converter = ConvertFloat32ToFloat64;
+            #endif
             break;
-
         case ASIOSTFloat64LSB:
             /* src: paFloat32, in-place conversion to/from float32, possible byte swap*/
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = ConvertFloat32ToFloat64Swap64;
-#else
-            *converter = ConvertFloat32ToFloat64;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = ConvertFloat32ToFloat64Swap64;
+            #else
+                *converter = ConvertFloat32ToFloat64;
+            #endif
             break;
-
         case ASIOSTInt32MSB:
             /* src: paInt32, no conversion necessary, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTInt32LSB:
             /* src: paInt32, no conversion necessary, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap32;
+            #endif
             break;
-
         case ASIOSTInt32MSB16:
             /* src: paInt32, 16 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 16;
             break;
-
         case ASIOSTInt32MSB18:
             /* src: paInt32, 14 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 14;
             break;
-
         case ASIOSTInt32MSB20:
             /* src: paInt32, 12 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 12;
             break;
-
         case ASIOSTInt32MSB24:
             /* src: paInt32, 8 bit shift, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 8;
             break;
-
         case ASIOSTInt32LSB16:
             /* src: paInt32, 16 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 16;
             break;
-
         case ASIOSTInt32LSB18:
             /* src: paInt32, 14 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 14;
             break;
-
         case ASIOSTInt32LSB20:
             /* src: paInt32, 12 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 12;
             break;
-
         case ASIOSTInt32LSB24:
             /* src: paInt32, 8 bit shift, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = ShiftRightSwap32;
-#else
-            *converter = ShiftRight32;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = ShiftRightSwap32;
+            #else
+                *converter = ShiftRight32;
+            #endif
             *shift = 8;
             break;
-
         case ASIOSTInt24MSB:
             /* src: paInt24, no conversion necessary, possible byte swap */
-#ifdef PA_LSB_IS_NATIVE_
-            *converter = Swap24;
-#endif
+            #ifdef PA_LSB_IS_NATIVE_
+                *converter = Swap24;
+            #endif
             break;
-
         case ASIOSTInt24LSB:
             /* src: paInt24, no conversion necessary, possible byte swap */
-#ifdef PA_MSB_IS_NATIVE_
-            *converter = Swap24;
-#endif
+            #ifdef PA_MSB_IS_NATIVE_
+                *converter = Swap24;
+            #endif
             break;
     }
 }
 
 
-typedef struct PaAsioDeviceInfo {
+typedef struct PaAsioDeviceInfo
+{
     PaDeviceInfo commonDeviceInfo;
     long minBufferSize;
     long maxBufferSize;
@@ -1092,25 +934,26 @@ typedef struct PaAsioDeviceInfo {
 
     ASIOChannelInfo *asioChannelInfos;
 }
-
 PaAsioDeviceInfo;
 
 
-PaError PaAsio_GetAvailableLatencyValues (PaDeviceIndex device,
-        long *minLatency, long *maxLatency, long *preferredLatency, long *granularity)
+PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device,
+        long *minLatency, long *maxLatency, long *preferredLatency, long *granularity )
 {
     PaError result;
     PaUtilHostApiRepresentation *hostApi;
     PaDeviceIndex hostApiDevice;
 
-    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
+    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
 
-    if (result == paNoError) {
-        result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
+    if( result == paNoError )
+    {
+        result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
 
-        if (result == paNoError) {
+        if( result == paNoError )
+        {
             PaAsioDeviceInfo *asioDeviceInfo =
-                (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
+                    (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
 
             *minLatency = asioDeviceInfo->minBufferSize;
             *maxLatency = asioDeviceInfo->maxBufferSize;
@@ -1125,10 +968,10 @@ PaError PaAsio_GetAvailableLatencyValues (PaDeviceIndex device,
 /* Unload whatever we loaded in LoadAsioDriver().
    Also balance the call to CoInitialize(0).
 */
-static void UnloadAsioDriver (void)
+static void UnloadAsioDriver( void )
 {
-    ASIOExit();
-    CoUninitialize();
+	ASIOExit();
+	CoUninitialize();
 }
 
 /*
@@ -1137,63 +980,67 @@ static void UnloadAsioDriver (void)
     and must be closed by the called by calling UnloadAsioDriver() - if an error
     is returned the driver will already be unloaded.
 */
-static PaError LoadAsioDriver (PaAsioHostApiRepresentation *asioHostApi, const char *driverName,
-                               PaAsioDriverInfo *driverInfo, void *systemSpecific)
+static PaError LoadAsioDriver( PaAsioHostApiRepresentation *asioHostApi, const char *driverName,
+        PaAsioDriverInfo *driverInfo, void *systemSpecific )
 {
     PaError result = paNoError;
     ASIOError asioError;
     int asioIsInitialized = 0;
 
-    /*
-    ASIO uses CoCreateInstance() to load a driver. That requires that
-    CoInitialize(0) be called for every thread that loads a driver.
-    It is OK to call CoInitialize(0) multiple times form one thread as long
-    as it is balanced by a call to CoUninitialize(). See UnloadAsioDriver().
-
-    The V18 version called CoInitialize() starting on 2/19/02.
-    That was removed from PA V19 for unknown reasons.
-    Phil Burk added it back on 6/27/08 so that JSyn would work.
+    /* 
+	ASIO uses CoCreateInstance() to load a driver. That requires that
+	CoInitialize(0) be called for every thread that loads a driver.
+	It is OK to call CoInitialize(0) multiple times form one thread as long
+	as it is balanced by a call to CoUninitialize(). See UnloadAsioDriver().
+
+	The V18 version called CoInitialize() starting on 2/19/02.
+	That was removed from PA V19 for unknown reasons.
+	Phil Burk added it back on 6/27/08 so that JSyn would work.
     */
-    CoInitialize (0);
+	CoInitialize( 0 );
 
-    if (!asioHostApi->asioDrivers->loadDriver (const_cast<char*> (driverName))) {
-        /* If this returns an error then it might be because CoInitialize(0) was removed.
-          It should be called right before this.
-        */
+    if( !asioHostApi->asioDrivers->loadDriver( const_cast<char*>(driverName) ) )
+    {
+		/* If this returns an error then it might be because CoInitialize(0) was removed.
+		  It should be called right before this.
+	    */
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_HOST_ERROR (0, "Failed to load ASIO driver");
+        PA_ASIO_SET_LAST_HOST_ERROR( 0, "Failed to load ASIO driver" );
         goto error;
     }
 
-    memset (&driverInfo->asioDriverInfo, 0, sizeof (ASIODriverInfo));
-
+    memset( &driverInfo->asioDriverInfo, 0, sizeof(ASIODriverInfo) );
     driverInfo->asioDriverInfo.asioVersion = 2;
     driverInfo->asioDriverInfo.sysRef = systemSpecific;
-
-    if ( (asioError = ASIOInit (&driverInfo->asioDriverInfo)) != ASE_OK) {
+    if( (asioError = ASIOInit( &driverInfo->asioDriverInfo )) != ASE_OK )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         goto error;
-    } else {
+    }
+    else
+    {
         asioIsInitialized = 1;
     }
 
-    if ( (asioError = ASIOGetChannels (&driverInfo->inputChannelCount,
-                                       &driverInfo->outputChannelCount)) != ASE_OK) {
+    if( (asioError = ASIOGetChannels(&driverInfo->inputChannelCount,
+            &driverInfo->outputChannelCount)) != ASE_OK )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         goto error;
     }
 
-    if ( (asioError = ASIOGetBufferSize (&driverInfo->bufferMinSize,
-                                         &driverInfo->bufferMaxSize, &driverInfo->bufferPreferredSize,
-                                         &driverInfo->bufferGranularity)) != ASE_OK) {
+    if( (asioError = ASIOGetBufferSize(&driverInfo->bufferMinSize,
+            &driverInfo->bufferMaxSize, &driverInfo->bufferPreferredSize,
+            &driverInfo->bufferGranularity)) != ASE_OK )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         goto error;
     }
 
-    if (ASIOOutputReady() == ASE_OK)
+    if( ASIOOutputReady() == ASE_OK )
         driverInfo->postOutput = true;
     else
         driverInfo->postOutput = false;
@@ -1201,29 +1048,27 @@ static PaError LoadAsioDriver (PaAsioHostApiRepresentation *asioHostApi, const c
     return result;
 
 error:
-    if (asioIsInitialized) {
-        ASIOExit();
-    }
-
-    CoUninitialize();
-
+    if( asioIsInitialized )
+	{
+		ASIOExit();
+	}
+	CoUninitialize();
     return result;
 }
 
 
 #define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_     13   /* must be the same number of elements as in the array below */
 static ASIOSampleRate defaultSampleRateSearchOrder_[]
-= {44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0,
-   192000.0, 16000.0, 12000.0, 11025.0, 9600.0, 8000.0
-  };
+     = {44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0,
+        192000.0, 16000.0, 12000.0, 11025.0, 9600.0, 8000.0 };
 
 
 /* we look up IsDebuggerPresent at runtime incase it isn't present (on Win95 for example) */
-typedef BOOL (WINAPI *IsDebuggerPresentPtr) (VOID);
+typedef BOOL (WINAPI *IsDebuggerPresentPtr)(VOID);
 IsDebuggerPresentPtr IsDebuggerPresent_ = 0;
 //FARPROC IsDebuggerPresent_ = 0; // this is the current way to do it apparently according to davidv
 
-PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
+PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
 {
     PaError result = paNoError;
     int i, driverCount;
@@ -1232,9 +1077,9 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     char **names;
     PaAsioDriverInfo paAsioDriverInfo;
 
-    asioHostApi = (PaAsioHostApiRepresentation*) PaUtil_AllocateMemory (sizeof (PaAsioHostApiRepresentation));
-
-    if (!asioHostApi) {
+    asioHostApi = (PaAsioHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaAsioHostApiRepresentation) );
+    if( !asioHostApi )
+    {
         result = paInsufficientMemory;
         goto error;
     }
@@ -1242,22 +1087,25 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     asioHostApi->asioDrivers = 0; /* avoid surprises in our error handler below */
 
     asioHostApi->allocations = PaUtil_CreateAllocationGroup();
-
-    if (!asioHostApi->allocations) {
+    if( !asioHostApi->allocations )
+    {
         result = paInsufficientMemory;
         goto error;
     }
 
     /* Allocate the AsioDrivers() driver list (class from ASIO SDK) */
-    try {
+    try
+    {
         asioHostApi->asioDrivers = new AsioDrivers(); /* calls CoInitialize(0) */
-    } catch (std::bad_alloc) {
+    } 
+    catch (std::bad_alloc)
+    {
         asioHostApi->asioDrivers = 0;
     }
-
     /* some implementations of new (ie MSVC, see http://support.microsoft.com/?kbid=167733)
        don't throw std::bad_alloc, so we also explicitly test for a null return. */
-    if (asioHostApi->asioDrivers == 0) {
+    if( asioHostApi->asioDrivers == 0 )
+    {
         result = paInsufficientMemory;
         goto error;
     }
@@ -1274,23 +1122,24 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     (*hostApi)->info.name = "ASIO";
     (*hostApi)->info.deviceCount = 0;
 
-#ifdef WINDOWS
-    /* use desktop window as system specific ptr */
-    asioHostApi->systemSpecific = GetDesktopWindow();
-#endif
+    #ifdef WINDOWS
+        /* use desktop window as system specific ptr */
+        asioHostApi->systemSpecific = GetDesktopWindow();
+    #endif
 
     /* driverCount is the number of installed drivers - not necessarily
         the number of installed physical devices. */
-#if MAC
-    driverCount = asioHostApi->asioDrivers->getNumFragments();
-#elif WINDOWS
-    driverCount = asioHostApi->asioDrivers->asioGetNumDev();
-#endif
+    #if MAC
+        driverCount = asioHostApi->asioDrivers->getNumFragments();
+    #elif WINDOWS
+        driverCount = asioHostApi->asioDrivers->asioGetNumDev();
+    #endif
 
-    if (driverCount > 0) {
-        names = GetAsioDriverNames (asioHostApi, asioHostApi->allocations, driverCount);
-
-        if (!names) {
+    if( driverCount > 0 )
+    {
+        names = GetAsioDriverNames( asioHostApi, asioHostApi->allocations, driverCount );
+        if( !names )
+        {
             result = paInsufficientMemory;
             goto error;
         }
@@ -1298,59 +1147,63 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
 
         /* allocate enough space for all drivers, even if some aren't installed */
 
-        (*hostApi)->deviceInfos = (PaDeviceInfo**) PaUtil_GroupAllocateMemory (
-                                      asioHostApi->allocations, sizeof (PaDeviceInfo*) * driverCount);
-
-        if (! (*hostApi)->deviceInfos) {
+        (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory(
+                asioHostApi->allocations, sizeof(PaDeviceInfo*) * driverCount );
+        if( !(*hostApi)->deviceInfos )
+        {
             result = paInsufficientMemory;
             goto error;
         }
 
         /* allocate all device info structs in a contiguous block */
-        deviceInfoArray = (PaAsioDeviceInfo*) PaUtil_GroupAllocateMemory (
-                              asioHostApi->allocations, sizeof (PaAsioDeviceInfo) * driverCount);
-
-        if (!deviceInfoArray) {
+        deviceInfoArray = (PaAsioDeviceInfo*)PaUtil_GroupAllocateMemory(
+                asioHostApi->allocations, sizeof(PaAsioDeviceInfo) * driverCount );
+        if( !deviceInfoArray )
+        {
             result = paInsufficientMemory;
             goto error;
         }
 
-        IsDebuggerPresent_ = GetProcAddress (LoadLibrary ("Kernel32.dll"), "IsDebuggerPresent");
+        IsDebuggerPresent_ = GetProcAddress( LoadLibrary( "Kernel32.dll" ), "IsDebuggerPresent" );
 
-        for (i=0; i < driverCount; ++i) {
+        for( i=0; i < driverCount; ++i )
+        {
 
-            PA_DEBUG ( ("ASIO names[%d]:%s\n",i,names[i]));
+            PA_DEBUG(("ASIO names[%d]:%s\n",i,names[i]));
 
             // Since portaudio opens ALL ASIO drivers, and no one else does that,
             // we face fact that some drivers were not meant for it, drivers which act
             // like shells on top of REAL drivers, for instance.
             // so we get duplicate handles, locks and other problems.
-            // so lets NOT try to load any such wrappers.
+            // so lets NOT try to load any such wrappers. 
             // The ones i [davidv] know of so far are:
 
-            if (strcmp (names[i],"ASIO DirectX Full Duplex Driver") == 0
-                    || strcmp (names[i],"ASIO Multimedia Driver")          == 0
-                    || strncmp (names[i],"Premiere",8)                      == 0  //"Premiere Elements Windows Sound 1.0"
-                    || strncmp (names[i],"Adobe",5)                         == 0  //"Adobe Default Windows Sound 1.5"
-                    || strncmp (names[i],"ReaRoute ASIO",13)                == 0  //Reaper www.reaper.fm <- fix your stuff man.
-               ) {
-                PA_DEBUG ( ("BLACKLISTED!!!\n"));
+            if (   strcmp (names[i],"ASIO DirectX Full Duplex Driver") == 0
+                || strcmp (names[i],"ASIO Multimedia Driver")          == 0
+                || strncmp(names[i],"Premiere",8)                      == 0   //"Premiere Elements Windows Sound 1.0"
+                || strncmp(names[i],"Adobe",5)                         == 0   //"Adobe Default Windows Sound 1.5"
+               )
+            {
+                PA_DEBUG(("BLACKLISTED!!!\n"));
                 continue;
             }
 
 
-            if (IsDebuggerPresent_ && IsDebuggerPresent_()) {
+            if( IsDebuggerPresent_ && IsDebuggerPresent_() )  
+            {
                 /* ASIO Digidesign Driver uses PACE copy protection which quits out
                    if a debugger is running. So we don't load it if a debugger is running. */
-                if (strcmp (names[i], "ASIO Digidesign Driver") == 0) {
-                    PA_DEBUG ( ("BLACKLISTED!!! ASIO Digidesign Driver would quit the debugger\n"));
-                    continue;
-                }
-            }
+                if( strcmp(names[i], "ASIO Digidesign Driver") == 0 )  
+                {
+                    PA_DEBUG(("BLACKLISTED!!! ASIO Digidesign Driver would quit the debugger\n"));  
+                    continue;  
+                }  
+            }  
 
 
             /* Attempt to load the asio driver... */
-            if (LoadAsioDriver (asioHostApi, names[i], &paAsioDriverInfo, asioHostApi->systemSpecific) == paNoError) {
+            if( LoadAsioDriver( asioHostApi, names[i], &paAsioDriverInfo, asioHostApi->systemSpecific ) == paNoError )
+            {
                 PaAsioDeviceInfo *asioDeviceInfo = &deviceInfoArray[ (*hostApi)->info.deviceCount ];
                 PaDeviceInfo *deviceInfo = &asioDeviceInfo->commonDeviceInfo;
 
@@ -1358,33 +1211,33 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 deviceInfo->hostApi = hostApiIndex;
 
                 deviceInfo->name = names[i];
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d name = %s\n",  i,deviceInfo->name));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d inputChannels       = %d\n", i, paAsioDriverInfo.inputChannelCount));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d outputChannels      = %d\n", i, paAsioDriverInfo.outputChannelCount));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferMinSize       = %d\n", i, paAsioDriverInfo.bufferMinSize));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferMaxSize       = %d\n", i, paAsioDriverInfo.bufferMaxSize));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferPreferredSize = %d\n", i, paAsioDriverInfo.bufferPreferredSize));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferGranularity   = %d\n", i, paAsioDriverInfo.bufferGranularity));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d name = %s\n",  i,deviceInfo->name));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d inputChannels       = %d\n", i, paAsioDriverInfo.inputChannelCount));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d outputChannels      = %d\n", i, paAsioDriverInfo.outputChannelCount));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferMinSize       = %d\n", i, paAsioDriverInfo.bufferMinSize));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferMaxSize       = %d\n", i, paAsioDriverInfo.bufferMaxSize));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferPreferredSize = %d\n", i, paAsioDriverInfo.bufferPreferredSize));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferGranularity   = %d\n", i, paAsioDriverInfo.bufferGranularity));
 
                 deviceInfo->maxInputChannels  = paAsioDriverInfo.inputChannelCount;
                 deviceInfo->maxOutputChannels = paAsioDriverInfo.outputChannelCount;
 
                 deviceInfo->defaultSampleRate = 0.;
                 bool foundDefaultSampleRate = false;
-
-                for (int j=0; j < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++j) {
-                    ASIOError asioError = ASIOCanSampleRate (defaultSampleRateSearchOrder_[j]);
-
-                    if (asioError != ASE_NoClock && asioError != ASE_NotPresent) {
+                for( int j=0; j < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++j )
+                {
+                    ASIOError asioError = ASIOCanSampleRate( defaultSampleRateSearchOrder_[j] );
+                    if( asioError != ASE_NoClock && asioError != ASE_NotPresent )
+                    {
                         deviceInfo->defaultSampleRate = defaultSampleRateSearchOrder_[j];
                         foundDefaultSampleRate = true;
                         break;
                     }
                 }
 
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultSampleRate = %f\n", i, deviceInfo->defaultSampleRate));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultSampleRate = %f\n", i, deviceInfo->defaultSampleRate));
 
-                if (foundDefaultSampleRate) {
+                if( foundDefaultSampleRate ){
 
                     /* calculate default latency values from bufferPreferredSize
                         for default low latency, and bufferPreferredSize * 3
@@ -1395,28 +1248,27 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                     */
 
                     double defaultLowLatency =
-                        paAsioDriverInfo.bufferPreferredSize / deviceInfo->defaultSampleRate;
+                            paAsioDriverInfo.bufferPreferredSize / deviceInfo->defaultSampleRate;
 
                     deviceInfo->defaultLowInputLatency = defaultLowLatency;
                     deviceInfo->defaultLowOutputLatency = defaultLowLatency;
 
                     long defaultHighLatencyBufferSize =
-                        paAsioDriverInfo.bufferPreferredSize * 3;
+                            paAsioDriverInfo.bufferPreferredSize * 3;
 
-                    if (defaultHighLatencyBufferSize > paAsioDriverInfo.bufferMaxSize)
+                    if( defaultHighLatencyBufferSize > paAsioDriverInfo.bufferMaxSize )
                         defaultHighLatencyBufferSize = paAsioDriverInfo.bufferMaxSize;
 
                     double defaultHighLatency =
-                        defaultHighLatencyBufferSize / deviceInfo->defaultSampleRate;
-
-                    if (defaultHighLatency < defaultLowLatency)
-                        defaultHighLatency = defaultLowLatency; /* just incase the driver returns something strange */
+                            defaultHighLatencyBufferSize / deviceInfo->defaultSampleRate;
 
+                    if( defaultHighLatency < defaultLowLatency )
+                        defaultHighLatency = defaultLowLatency; /* just incase the driver returns something strange */ 
+                            
                     deviceInfo->defaultHighInputLatency = defaultHighLatency;
-
                     deviceInfo->defaultHighOutputLatency = defaultHighLatency;
-
-                } else {
+                    
+                }else{
 
                     deviceInfo->defaultLowInputLatency = 0.;
                     deviceInfo->defaultLowOutputLatency = 0.;
@@ -1424,11 +1276,10 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                     deviceInfo->defaultHighOutputLatency = 0.;
                 }
 
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultLowInputLatency = %f\n", i, deviceInfo->defaultLowInputLatency));
-
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultLowOutputLatency = %f\n", i, deviceInfo->defaultLowOutputLatency));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultHighInputLatency = %f\n", i, deviceInfo->defaultHighInputLatency));
-                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultHighOutputLatency = %f\n", i, deviceInfo->defaultHighOutputLatency));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultLowInputLatency = %f\n", i, deviceInfo->defaultLowInputLatency));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultLowOutputLatency = %f\n", i, deviceInfo->defaultLowOutputLatency));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultHighInputLatency = %f\n", i, deviceInfo->defaultHighInputLatency));
+                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultHighOutputLatency = %f\n", i, deviceInfo->defaultHighOutputLatency));
 
                 asioDeviceInfo->minBufferSize = paAsioDriverInfo.bufferMinSize;
                 asioDeviceInfo->maxBufferSize = paAsioDriverInfo.bufferMaxSize;
@@ -1436,39 +1287,39 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 asioDeviceInfo->bufferGranularity = paAsioDriverInfo.bufferGranularity;
 
 
-                asioDeviceInfo->asioChannelInfos = (ASIOChannelInfo*) PaUtil_GroupAllocateMemory (
-                                                       asioHostApi->allocations,
-                                                       sizeof (ASIOChannelInfo) * (deviceInfo->maxInputChannels
-                                                                                   + deviceInfo->maxOutputChannels));
-
-                if (!asioDeviceInfo->asioChannelInfos) {
+                asioDeviceInfo->asioChannelInfos = (ASIOChannelInfo*)PaUtil_GroupAllocateMemory(
+                        asioHostApi->allocations,
+                        sizeof(ASIOChannelInfo) * (deviceInfo->maxInputChannels
+                                + deviceInfo->maxOutputChannels) );
+                if( !asioDeviceInfo->asioChannelInfos )
+                {
                     result = paInsufficientMemory;
                     goto error_unload;
                 }
 
                 int a;
 
-                for (a=0; a < deviceInfo->maxInputChannels; ++a) {
+                for( a=0; a < deviceInfo->maxInputChannels; ++a ){
                     asioDeviceInfo->asioChannelInfos[a].channel = a;
                     asioDeviceInfo->asioChannelInfos[a].isInput = ASIOTrue;
-                    ASIOError asioError = ASIOGetChannelInfo (&asioDeviceInfo->asioChannelInfos[a]);
-
-                    if (asioError != ASE_OK) {
+                    ASIOError asioError = ASIOGetChannelInfo( &asioDeviceInfo->asioChannelInfos[a] );
+                    if( asioError != ASE_OK )
+                    {
                         result = paUnanticipatedHostError;
-                        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+                        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
                         goto error_unload;
                     }
                 }
 
-                for (a=0; a < deviceInfo->maxOutputChannels; ++a) {
+                for( a=0; a < deviceInfo->maxOutputChannels; ++a ){
                     int b = deviceInfo->maxInputChannels + a;
                     asioDeviceInfo->asioChannelInfos[b].channel = a;
                     asioDeviceInfo->asioChannelInfos[b].isInput = ASIOFalse;
-                    ASIOError asioError = ASIOGetChannelInfo (&asioDeviceInfo->asioChannelInfos[b]);
-
-                    if (asioError != ASE_OK) {
+                    ASIOError asioError = ASIOGetChannelInfo( &asioDeviceInfo->asioChannelInfos[b] );
+                    if( asioError != ASE_OK )
+                    {
                         result = paUnanticipatedHostError;
-                        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+                        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
                         goto error_unload;
                     }
                 }
@@ -1478,16 +1329,18 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 UnloadAsioDriver();
 
                 (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo;
-
-                ++ (*hostApi)->info.deviceCount;
+                ++(*hostApi)->info.deviceCount;
             }
         }
     }
 
-    if ( (*hostApi)->info.deviceCount > 0) {
+    if( (*hostApi)->info.deviceCount > 0 )
+    {
         (*hostApi)->info.defaultInputDevice = 0;
         (*hostApi)->info.defaultOutputDevice = 0;
-    } else {
+    }
+    else
+    {
         (*hostApi)->info.defaultInputDevice = paNoDevice;
         (*hostApi)->info.defaultOutputDevice = paNoDevice;
     }
@@ -1497,97 +1350,97 @@ PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     (*hostApi)->OpenStream = OpenStream;
     (*hostApi)->IsFormatSupported = IsFormatSupported;
 
-    PaUtil_InitializeStreamInterface (&asioHostApi->callbackStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface( &asioHostApi->callbackStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, GetStreamCpuLoad,
                                       PaUtil_DummyRead, PaUtil_DummyWrite,
-                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable);
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
 
-    PaUtil_InitializeStreamInterface (&asioHostApi->blockingStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface( &asioHostApi->blockingStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, PaUtil_DummyGetCpuLoad,
-                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable);
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
 
     return result;
 
 error_unload:
-    UnloadAsioDriver();
+	UnloadAsioDriver();
 
 error:
-
-    if (asioHostApi) {
-        if (asioHostApi->allocations) {
-            PaUtil_FreeAllAllocations (asioHostApi->allocations);
-            PaUtil_DestroyAllocationGroup (asioHostApi->allocations);
+    if( asioHostApi )
+    {
+        if( asioHostApi->allocations )
+        {
+            PaUtil_FreeAllAllocations( asioHostApi->allocations );
+            PaUtil_DestroyAllocationGroup( asioHostApi->allocations );
         }
 
         delete asioHostApi->asioDrivers;
-
         asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */
 
-        PaUtil_FreeMemory (asioHostApi);
+        PaUtil_FreeMemory( asioHostApi );
     }
-
     return result;
 }
 
 
-static void Terminate (struct PaUtilHostApiRepresentation *hostApi)
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
 {
-    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
+    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
 
     /*
         IMPLEMENT ME:
             - clean up any resources not handled by the allocation group (need to review if there are any)
     */
 
-    if (asioHostApi->allocations) {
-        PaUtil_FreeAllAllocations (asioHostApi->allocations);
-        PaUtil_DestroyAllocationGroup (asioHostApi->allocations);
+    if( asioHostApi->allocations )
+    {
+        PaUtil_FreeAllAllocations( asioHostApi->allocations );
+        PaUtil_DestroyAllocationGroup( asioHostApi->allocations );
     }
 
     delete asioHostApi->asioDrivers; /* calls CoUninitialize() */
-
     asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */
 
-    PaUtil_FreeMemory (asioHostApi);
+    PaUtil_FreeMemory( asioHostApi );
 }
 
 
-static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
-                                  double sampleRate)
+                                  double sampleRate )
 {
     PaError result = paNoError;
-    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
+    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
     PaAsioDriverInfo *driverInfo = &asioHostApi->openAsioDriverInfo;
     int inputChannelCount, outputChannelCount;
     PaSampleFormat inputSampleFormat, outputSampleFormat;
-    PaDeviceIndex asioDeviceIndex;
+    PaDeviceIndex asioDeviceIndex;                                  
     ASIOError asioError;
-
-    if (inputParameters && outputParameters) {
+    
+    if( inputParameters && outputParameters )
+    {
         /* full duplex ASIO stream must use the same device for input and output */
 
-        if (inputParameters->device != outputParameters->device)
+        if( inputParameters->device != outputParameters->device )
             return paBadIODeviceCombination;
     }
-
-    if (inputParameters) {
+    
+    if( inputParameters )
+    {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-
-        if (inputSampleFormat & paCustomFormat)
+        if( inputSampleFormat & paCustomFormat )
             return paSampleFormatNotSupported;
-
+            
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         asioDeviceIndex = inputParameters->device;
@@ -1596,24 +1449,26 @@ static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
         /** @todo do more validation here */
         // if( inputParameters->hostApiSpecificStreamInfo )
         //    return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
-    } else {
+    }
+    else
+    {
         inputChannelCount = 0;
     }
 
-    if (outputParameters) {
+    if( outputParameters )
+    {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-
-        if (outputSampleFormat & paCustomFormat)
+        if( outputSampleFormat & paCustomFormat )
             return paSampleFormatNotSupported;
-
+            
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         asioDeviceIndex = outputParameters->device;
@@ -1622,7 +1477,9 @@ static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
         /** @todo do more validation here */
         // if( outputParameters->hostApiSpecificStreamInfo )
         //    return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
-    } else {
+    }
+    else
+    {
         outputChannelCount = 0;
     }
 
@@ -1630,8 +1487,9 @@ static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
 
     /* if an ASIO device is open we can only get format information for the currently open device */
 
-    if (asioHostApi->openAsioDeviceIndex != paNoDevice
-            && asioHostApi->openAsioDeviceIndex != asioDeviceIndex) {
+    if( asioHostApi->openAsioDeviceIndex != paNoDevice 
+            && asioHostApi->openAsioDeviceIndex != asioDeviceIndex )
+    {
         return paDeviceUnavailable;
     }
 
@@ -1640,47 +1498,50 @@ static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
         rather than the ones in our device info structure which may be stale */
 
     /* open the device if it's not already open */
-    if (asioHostApi->openAsioDeviceIndex == paNoDevice) {
-        result = LoadAsioDriver (asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
-                                 driverInfo, asioHostApi->systemSpecific);
-
-        if (result != paNoError)
+    if( asioHostApi->openAsioDeviceIndex == paNoDevice )
+    {
+        result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
+                driverInfo, asioHostApi->systemSpecific );
+        if( result != paNoError )
             return result;
     }
 
     /* check that input device can support inputChannelCount */
-    if (inputChannelCount > 0) {
-        if (inputChannelCount > driverInfo->inputChannelCount) {
+    if( inputChannelCount > 0 )
+    {
+        if( inputChannelCount > driverInfo->inputChannelCount )
+        {
             result = paInvalidChannelCount;
             goto done;
         }
     }
 
     /* check that output device can support outputChannelCount */
-    if (outputChannelCount) {
-        if (outputChannelCount > driverInfo->outputChannelCount) {
+    if( outputChannelCount )
+    {
+        if( outputChannelCount > driverInfo->outputChannelCount )
+        {
             result = paInvalidChannelCount;
             goto done;
         }
     }
-
+    
     /* query for sample rate support */
-    asioError = ASIOCanSampleRate (sampleRate);
-
-    if (asioError == ASE_NoClock || asioError == ASE_NotPresent) {
+    asioError = ASIOCanSampleRate( sampleRate );
+    if( asioError == ASE_NoClock || asioError == ASE_NotPresent )
+    {
         result = paInvalidSampleRate;
         goto done;
     }
 
 done:
-
     /* close the device if it wasn't already open */
-
-    if (asioHostApi->openAsioDeviceIndex == paNoDevice) {
+    if( asioHostApi->openAsioDeviceIndex == paNoDevice )
+    {
         UnloadAsioDriver(); /* not sure if we should check for errors here */
     }
 
-    if (result == paNoError)
+    if( result == paNoError )
         return paFormatIsSupported;
     else
         return result;
@@ -1689,8 +1550,8 @@ done:
 
 
 /** A data structure specifically for storing blocking i/o related data. */
-
-typedef struct PaAsioStreamBlockingState {
+typedef struct PaAsioStreamBlockingState
+{
     int stopFlag; /**< Flag indicating that block processing is to be stopped. */
 
     unsigned long writeBuffersRequested; /**< The number of available output buffers, requested by the #WriteStream() function. */
@@ -1718,14 +1579,14 @@ typedef struct PaAsioStreamBlockingState {
     int outputUnderflowFlag; /**< Flag to signal an output underflow from within the callback function. */
     int inputOverflowFlag; /**< Flag to signal an input overflow from within the callback function. */
 }
-
 PaAsioStreamBlockingState;
 
 
 
 /* PaAsioStream - a stream data structure specifically for this implementation */
 
-typedef struct PaAsioStream {
+typedef struct PaAsioStream
+{
     PaUtilStreamRepresentation streamRepresentation;
     PaUtilCpuLoadMeasurer cpuLoadMeasurer;
     PaUtilBufferProcessor bufferProcessor;
@@ -1758,6 +1619,7 @@ typedef struct PaAsioStream {
     HANDLE completedBuffersPlayedEvent;
 
     bool streamFinishedCallbackCalled;
+    int isStopped;
     volatile int isActive;
     volatile bool zeroOutput; /* all future calls to the callback will output silence */
 
@@ -1768,71 +1630,86 @@ typedef struct PaAsioStream {
 
     PaAsioStreamBlockingState *blockingState; /**< Blocking i/o data struct, or NULL when using callback interface. */
 }
-
 PaAsioStream;
 
 static PaAsioStream *theAsioStream = 0; /* due to ASIO sdk limitations there can be only one stream */
 
 
-static void ZeroOutputBuffers (PaAsioStream *stream, long index)
+static void ZeroOutputBuffers( PaAsioStream *stream, long index )
 {
     int i;
 
-    for (i=0; i < stream->outputChannelCount; ++i) {
+    for( i=0; i < stream->outputChannelCount; ++i )
+    {
         void *buffer = stream->asioBufferInfos[ i + stream->inputChannelCount ].buffers[index];
 
-        int bytesPerSample = BytesPerAsioSample (stream->asioChannelInfos[ i + stream->inputChannelCount ].type);
+        int bytesPerSample = BytesPerAsioSample( stream->asioChannelInfos[ i + stream->inputChannelCount ].type );
 
-        memset (buffer, 0, stream->framesPerHostCallback * bytesPerSample);
+        memset( buffer, 0, stream->framesPerHostCallback * bytesPerSample );
     }
 }
 
 
-static unsigned long SelectHostBufferSize (unsigned long suggestedLatencyFrames,
-        PaAsioDriverInfo *driverInfo)
+static unsigned long SelectHostBufferSize( unsigned long suggestedLatencyFrames,
+        PaAsioDriverInfo *driverInfo )
 {
     unsigned long result;
 
-    if (suggestedLatencyFrames == 0) {
+    if( suggestedLatencyFrames == 0 )
+    {
         result = driverInfo->bufferPreferredSize;
-    } else {
-        if (suggestedLatencyFrames <= (unsigned long) driverInfo->bufferMinSize) {
+    }
+    else{
+        if( suggestedLatencyFrames <= (unsigned long)driverInfo->bufferMinSize )
+        {
             result = driverInfo->bufferMinSize;
-        } else if (suggestedLatencyFrames >= (unsigned long) driverInfo->bufferMaxSize) {
+        }
+        else if( suggestedLatencyFrames >= (unsigned long)driverInfo->bufferMaxSize )
+        {
             result = driverInfo->bufferMaxSize;
-        } else {
-            if (driverInfo->bufferGranularity == -1) {
+        }
+        else
+        {
+            if( driverInfo->bufferGranularity == -1 )
+            {
                 /* power-of-two */
                 result = 2;
 
-                while (result < suggestedLatencyFrames)
+                while( result < suggestedLatencyFrames )
                     result *= 2;
 
-                if (result < (unsigned long) driverInfo->bufferMinSize)
+                if( result < (unsigned long)driverInfo->bufferMinSize )
                     result = driverInfo->bufferMinSize;
 
-                if (result > (unsigned long) driverInfo->bufferMaxSize)
+                if( result > (unsigned long)driverInfo->bufferMaxSize )
                     result = driverInfo->bufferMaxSize;
-            } else if (driverInfo->bufferGranularity == 0) {
+            }
+            else if( driverInfo->bufferGranularity == 0 )
+            {
                 /* the documentation states that bufferGranularity should be
                     zero when bufferMinSize, bufferMaxSize and
                     bufferPreferredSize are the same. We assume that is the case.
                 */
 
                 result = driverInfo->bufferPreferredSize;
-            } else {
+            }
+            else
+            {
                 /* modulo granularity */
 
                 unsigned long remainder =
-                    suggestedLatencyFrames % driverInfo->bufferGranularity;
+                        suggestedLatencyFrames % driverInfo->bufferGranularity;
 
-                if (remainder == 0) {
+                if( remainder == 0 )
+                {
                     result = suggestedLatencyFrames;
-                } else {
+                }
+                else
+                {
                     result = suggestedLatencyFrames
-                             + (driverInfo->bufferGranularity - remainder);
+                            + (driverInfo->bufferGranularity - remainder);
 
-                    if (result > (unsigned long) driverInfo->bufferMaxSize)
+                    if( result > (unsigned long)driverInfo->bufferMaxSize )
                         result = driverInfo->bufferMaxSize;
                 }
             }
@@ -1845,29 +1722,31 @@ static unsigned long SelectHostBufferSize (unsigned long suggestedLatencyFrames,
 
 /* returns channelSelectors if present */
 
-static PaError ValidateAsioSpecificStreamInfo (
-    const PaStreamParameters *streamParameters,
-    const PaAsioStreamInfo *streamInfo,
-    int deviceChannelCount,
-    int **channelSelectors)
+static PaError ValidateAsioSpecificStreamInfo(
+        const PaStreamParameters *streamParameters,
+        const PaAsioStreamInfo *streamInfo,
+        int deviceChannelCount,
+        int **channelSelectors )
 {
-    if (streamInfo) {
-        if (streamInfo->size != sizeof (PaAsioStreamInfo)
-                || streamInfo->version != 1) {
+    if( streamInfo )
+    {
+        if( streamInfo->size != sizeof( PaAsioStreamInfo )
+                || streamInfo->version != 1 )
+        {
             return paIncompatibleHostApiSpecificStreamInfo;
         }
 
-        if (streamInfo->flags & paAsioUseChannelSelectors)
+        if( streamInfo->flags & paAsioUseChannelSelectors )
             *channelSelectors = streamInfo->channelSelectors;
 
-        if (! (*channelSelectors))
+        if( !(*channelSelectors) )
             return paIncompatibleHostApiSpecificStreamInfo;
 
-        for (int i=0; i < streamParameters->channelCount; ++i) {
-            if ( (*channelSelectors) [i] < 0
-                    || (*channelSelectors) [i] >= deviceChannelCount) {
+        for( int i=0; i < streamParameters->channelCount; ++i ){
+             if( (*channelSelectors)[i] < 0
+                    || (*channelSelectors)[i] >= deviceChannelCount ){
                 return paInvalidChannelCount;
-            }
+             }           
         }
     }
 
@@ -1875,9 +1754,101 @@ static PaError ValidateAsioSpecificStreamInfo (
 }
 
 
+static bool IsUsingExternalClockSource()
+{
+    bool result = false;
+    ASIOError asioError;
+    ASIOClockSource clocks[32];
+    long numSources=32;
+
+    /* davidv: listing ASIO Clock sources. there is an ongoing investigation by
+       me about whether or not to call ASIOSetSampleRate if an external Clock is
+       used. A few drivers expected different things here */
+    
+    asioError = ASIOGetClockSources(clocks, &numSources);
+    if( asioError != ASE_OK ){
+        PA_DEBUG(("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+    }else{
+        PA_DEBUG(("INFO ASIOGetClockSources listing %d clocks\n", numSources ));
+        for (int i=0;i<numSources;++i){
+            PA_DEBUG(("ASIOClockSource%d %s current:%d\n", i, clocks[i].name, clocks[i].isCurrentSource ));
+           
+            if (clocks[i].isCurrentSource)
+                result = true;
+        }
+    }
+
+    return result;
+}
+
+
+static PaError ValidateAndSetSampleRate( double sampleRate )
+{
+    PaError result = paNoError;
+    ASIOError asioError;
+
+    // check that the device supports the requested sample rate 
+
+    asioError = ASIOCanSampleRate( sampleRate );
+    PA_DEBUG(("ASIOCanSampleRate(%f):%d\n", sampleRate, asioError ));
+
+    if( asioError != ASE_OK )
+    {
+        result = paInvalidSampleRate;
+        PA_DEBUG(("ERROR: ASIOCanSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+        goto error;
+    }
+
+    // retrieve the current sample rate, we only change to the requested
+    // sample rate if the device is not already in that rate.
+
+    ASIOSampleRate oldRate;
+    asioError = ASIOGetSampleRate(&oldRate);
+    if( asioError != ASE_OK )
+    {
+        result = paInvalidSampleRate;
+        PA_DEBUG(("ERROR: ASIOGetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+        goto error;
+    }
+    PA_DEBUG(("ASIOGetSampleRate:%f\n",oldRate));
+
+    if (oldRate != sampleRate){
+        /* Set sample rate */
+
+        PA_DEBUG(("before ASIOSetSampleRate(%f)\n",sampleRate));
+
+        /*
+            If you have problems with some drivers when externally clocked, 
+            try switching on the following line and commenting out the one after it.
+            See IsUsingExternalClockSource() for more info.
+        */
+        //if( IsUsingExternalClockSource() ){
+        if( false ){
+            asioError = ASIOSetSampleRate( 0 );
+        }else{
+            asioError = ASIOSetSampleRate( sampleRate );
+        }
+        if( asioError != ASE_OK )
+        {
+            result = paInvalidSampleRate;
+            PA_DEBUG(("ERROR: ASIOSetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+            goto error;
+        }
+        PA_DEBUG(("after ASIOSetSampleRate(%f)\n",sampleRate));
+    }
+    else
+    {
+        PA_DEBUG(("No Need to change SR\n"));
+    }
+
+error:
+    return result;
+}
+
+
 /* see pa_hostapi.h for a list of validity guarantees made about OpenStream  parameters */
 
-static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -1885,10 +1856,10 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData)
+                           void *userData )
 {
     PaError result = paNoError;
-    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
+    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
     PaAsioStream *stream = 0;
     PaAsioStreamInfo *inputStreamInfo, *outputStreamInfo;
     unsigned long framesPerHostBuffer;
@@ -1906,10 +1877,9 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
     PaAsioDriverInfo *driverInfo;
     int *inputChannelSelectors = 0;
     int *outputChannelSelectors = 0;
-    bool isExternal = false;
 
     /* Are we using blocking i/o interface? */
-    int usingBlockingIo = (!streamCallback) ? TRUE : FALSE;
+    int usingBlockingIo = ( !streamCallback ) ? TRUE : FALSE;
     /* Blocking i/o stuff */
     long lBlockingBufferSize     = 0; /* Desired ring buffer size in samples. */
     long lBlockingBufferSizePow2 = 0; /* Power-of-2 rounded ring buffer size. */
@@ -1922,76 +1892,80 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
 
     /* unless we move to using lower level ASIO calls, we can only have
         one device open at a time */
-
-    if (asioHostApi->openAsioDeviceIndex != paNoDevice) {
-        PA_DEBUG ( ("OpenStream paDeviceUnavailable\n"));
+    if( asioHostApi->openAsioDeviceIndex != paNoDevice )
+    {
+        PA_DEBUG(("OpenStream paDeviceUnavailable\n"));
         return paDeviceUnavailable;
     }
 
-    if (inputParameters && outputParameters) {
+    assert( theAsioStream == 0 );
+
+    if( inputParameters && outputParameters )
+    {
         /* full duplex ASIO stream must use the same device for input and output */
 
-        if (inputParameters->device != outputParameters->device) {
-            PA_DEBUG ( ("OpenStream paBadIODeviceCombination\n"));
+        if( inputParameters->device != outputParameters->device )
+        {
+            PA_DEBUG(("OpenStream paBadIODeviceCombination\n"));
             return paBadIODeviceCombination;
         }
     }
 
-    if (inputParameters) {
+    if( inputParameters )
+    {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
-        suggestedInputLatencyFrames = (unsigned long) ( (inputParameters->suggestedLatency * sampleRate) +0.5f);
+        suggestedInputLatencyFrames = (unsigned long)((inputParameters->suggestedLatency * sampleRate)+0.5f);
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
-
-        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         asioDeviceIndex = inputParameters->device;
 
-        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[asioDeviceIndex];
+        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[asioDeviceIndex];
 
         /* validate hostApiSpecificStreamInfo */
-        inputStreamInfo = (PaAsioStreamInfo*) inputParameters->hostApiSpecificStreamInfo;
-
-        result = ValidateAsioSpecificStreamInfo (inputParameters, inputStreamInfo,
-                 asioDeviceInfo->commonDeviceInfo.maxInputChannels,
-                 &inputChannelSelectors
-                                                );
-
-        if (result != paNoError) return result;
-    } else {
+        inputStreamInfo = (PaAsioStreamInfo*)inputParameters->hostApiSpecificStreamInfo;
+        result = ValidateAsioSpecificStreamInfo( inputParameters, inputStreamInfo,
+            asioDeviceInfo->commonDeviceInfo.maxInputChannels,
+            &inputChannelSelectors
+        );
+        if( result != paNoError ) return result;
+    }
+    else
+    {
         inputChannelCount = 0;
         inputSampleFormat = 0;
         suggestedInputLatencyFrames = 0;
     }
 
-    if (outputParameters) {
+    if( outputParameters )
+    {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
-        suggestedOutputLatencyFrames = (unsigned long) ( (outputParameters->suggestedLatency * sampleRate) +0.5f);
+        suggestedOutputLatencyFrames = (unsigned long)((outputParameters->suggestedLatency * sampleRate)+0.5f);
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
-
-        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         asioDeviceIndex = outputParameters->device;
 
-        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[asioDeviceIndex];
+        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[asioDeviceIndex];
 
         /* validate hostApiSpecificStreamInfo */
-        outputStreamInfo = (PaAsioStreamInfo*) outputParameters->hostApiSpecificStreamInfo;
-
-        result = ValidateAsioSpecificStreamInfo (outputParameters, outputStreamInfo,
-                 asioDeviceInfo->commonDeviceInfo.maxOutputChannels,
-                 &outputChannelSelectors
-                                                );
-
-        if (result != paNoError) return result;
-    } else {
+        outputStreamInfo = (PaAsioStreamInfo*)outputParameters->hostApiSpecificStreamInfo;
+        result = ValidateAsioSpecificStreamInfo( outputParameters, outputStreamInfo,
+            asioDeviceInfo->commonDeviceInfo.maxOutputChannels,
+            &outputChannelSelectors
+        );
+        if( result != paNoError ) return result;
+    }
+    else
+    {
         outputChannelCount = 0;
         outputSampleFormat = 0;
         suggestedOutputLatencyFrames = 0;
@@ -2002,107 +1976,40 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
     /* NOTE: we load the driver and use its current settings
         rather than the ones in our device info structure which may be stale */
 
-    result = LoadAsioDriver (asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
-                             driverInfo, asioHostApi->systemSpecific);
-
-    if (result == paNoError)
+    result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
+            driverInfo, asioHostApi->systemSpecific );
+    if( result == paNoError )
         asioIsInitialized = 1;
-    else {
-        PA_DEBUG ( ("OpenStream ERROR1 - LoadAsioDriver returned %d\n", result));
+    else{
+        PA_DEBUG(("OpenStream ERROR1 - LoadAsioDriver returned %d\n", result));
         goto error;
     }
 
     /* check that input device can support inputChannelCount */
-    if (inputChannelCount > 0) {
-        if (inputChannelCount > driverInfo->inputChannelCount) {
+    if( inputChannelCount > 0 )
+    {
+        if( inputChannelCount > driverInfo->inputChannelCount )
+        {
             result = paInvalidChannelCount;
-            PA_DEBUG ( ("OpenStream ERROR2\n"));
+            PA_DEBUG(("OpenStream ERROR2\n"));
             goto error;
         }
     }
 
     /* check that output device can support outputChannelCount */
-    if (outputChannelCount) {
-        if (outputChannelCount > driverInfo->outputChannelCount) {
+    if( outputChannelCount )
+    {
+        if( outputChannelCount > driverInfo->outputChannelCount )
+        {
             result = paInvalidChannelCount;
-            PA_DEBUG ( ("OpenStream ERROR3\n"));
+            PA_DEBUG(("OpenStream ERROR3\n"));
             goto error;
         }
     }
 
-
-    /* davidv: listing ASIO Clock sources, there is an ongoing investigation by
-       me about whether or not call ASIOSetSampleRate if an external Clock is
-       used. A few drivers expected different things here */
-    {
-        ASIOClockSource clocks[32];
-        long numSources=32;
-        asioError = ASIOGetClockSources (clocks, &numSources);
-
-        if (asioError != ASE_OK) {
-            PA_DEBUG ( ("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText (asioError)));
-        } else {
-            PA_DEBUG ( ("INFO ASIOGetClockSources listing %d clocks\n", numSources));
-
-            for (int i=0;i<numSources;++i) {
-                PA_DEBUG ( ("ASIOClockSource%d %s current:%d\n", i,clocks[i].name, clocks[i].isCurrentSource));
-
-                /*
-                  If you have problems with some drivers when externally clocked,
-                  uncomment the next two lines
-                 */
-                //if (clocks[i].isCurrentSource)
-                //    isExternal = true;
-            }
-        }
-    }
-
-    // check that the device supports the requested sample rate
-
-    asioError = ASIOCanSampleRate (sampleRate);
-
-    PA_DEBUG ( ("ASIOCanSampleRate(%f):%d\n",sampleRate, asioError));
-
-    if (asioError != ASE_OK) {
-        result = paInvalidSampleRate;
-        PA_DEBUG ( ("ERROR: ASIOCanSampleRate: %s\n", PaAsio_GetAsioErrorText (asioError)));
-        goto error;
-    }
-
-
-    // retrieve the current sample rate, we only change to the requested
-    // sample rate if the device is not already in that rate.
-
-    ASIOSampleRate oldRate;
-
-    asioError = ASIOGetSampleRate (&oldRate);
-
-    if (asioError != ASE_OK) {
-        result = paInvalidSampleRate;
-        PA_DEBUG ( ("ERROR: ASIOGetSampleRate: %s\n", PaAsio_GetAsioErrorText (asioError)));
+    result = ValidateAndSetSampleRate( sampleRate );
+    if( result != paNoError )
         goto error;
-    }
-
-    PA_DEBUG ( ("ASIOGetSampleRate:%f\n",oldRate));
-
-    if (oldRate != sampleRate) {
-
-        PA_DEBUG ( ("before ASIOSetSampleRate(%f)\n",sampleRate));
-
-        asioError = ASIOSetSampleRate (isExternal?0:sampleRate);
-        /* Set sample rate */
-
-        if (asioError != ASE_OK) {
-            result = paInvalidSampleRate;
-            PA_DEBUG ( ("ERROR: ASIOSetSampleRate: %s\n", PaAsio_GetAsioErrorText (asioError)));
-            goto error;
-        }
-
-        PA_DEBUG ( ("after ASIOSetSampleRate(%f)\n",sampleRate));
-    } else {
-        PA_DEBUG ( ("No Need to change SR\n"));
-    }
-
 
     /*
         IMPLEMENT ME:
@@ -2111,32 +2018,30 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
     */
 
     /* validate platform specific flags */
-    if ( (streamFlags & paPlatformSpecificFlags) != 0) {
-        PA_DEBUG ( ("OpenStream invalid flags!!\n"));
+    if( (streamFlags & paPlatformSpecificFlags) != 0 ){
+        PA_DEBUG(("OpenStream invalid flags!!\n"));
         return paInvalidFlag; /* unexpected platform specific flag */
     }
 
 
-    stream = (PaAsioStream*) PaUtil_AllocateMemory (sizeof (PaAsioStream));
-
-    if (!stream) {
+    stream = (PaAsioStream*)PaUtil_AllocateMemory( sizeof(PaAsioStream) );
+    if( !stream )
+    {
         result = paInsufficientMemory;
-        PA_DEBUG ( ("OpenStream ERROR5\n"));
+        PA_DEBUG(("OpenStream ERROR5\n"));
         goto error;
     }
-
     stream->blockingState = NULL; /* Blocking i/o not initialized, yet. */
 
 
-    stream->completedBuffersPlayedEvent = CreateEvent (NULL, TRUE, FALSE, NULL);
-
-    if (stream->completedBuffersPlayedEvent == NULL) {
+    stream->completedBuffersPlayedEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
+    if( stream->completedBuffersPlayedEvent == NULL )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
-        PA_DEBUG ( ("OpenStream ERROR6\n"));
+        PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+        PA_DEBUG(("OpenStream ERROR6\n"));
         goto error;
     }
-
     completedBuffersPlayedEventInited = 1;
 
 
@@ -2145,88 +2050,95 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
     stream->bufferPtrs = 0; /* for deallocation in error */
 
     /* Using blocking i/o interface... */
-
-    if (usingBlockingIo) {
+    if( usingBlockingIo )
+    {
         /* Blocking i/o is implemented by running callback mode, using a special blocking i/o callback. */
         streamCallback = BlockingIoPaCallback; /* Setup PA to use the ASIO blocking i/o callback. */
         userData       = &theAsioStream;       /* The callback user data will be the PA ASIO stream. */
-        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
-                                               &asioHostApi->blockingStreamInterface, streamCallback, userData);
-    } else { /* Using callback interface... */
-        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
-                                               &asioHostApi->callbackStreamInterface, streamCallback, userData);
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &asioHostApi->blockingStreamInterface, streamCallback, userData );
+    }
+    else /* Using callback interface... */
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &asioHostApi->callbackStreamInterface, streamCallback, userData );
     }
 
 
-    PaUtil_InitializeCpuLoadMeasurer (&stream->cpuLoadMeasurer, sampleRate);
-
+    PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate );
 
-    stream->asioBufferInfos = (ASIOBufferInfo*) PaUtil_AllocateMemory (
-                                  sizeof (ASIOBufferInfo) * (inputChannelCount + outputChannelCount));
 
-    if (!stream->asioBufferInfos) {
+    stream->asioBufferInfos = (ASIOBufferInfo*)PaUtil_AllocateMemory(
+            sizeof(ASIOBufferInfo) * (inputChannelCount + outputChannelCount) );
+    if( !stream->asioBufferInfos )
+    {
         result = paInsufficientMemory;
-        PA_DEBUG ( ("OpenStream ERROR7\n"));
+        PA_DEBUG(("OpenStream ERROR7\n"));
         goto error;
     }
 
 
-    for (i=0; i < inputChannelCount; ++i) {
+    for( i=0; i < inputChannelCount; ++i )
+    {
         ASIOBufferInfo *info = &stream->asioBufferInfos[i];
 
         info->isInput = ASIOTrue;
 
-        if (inputChannelSelectors) {
+        if( inputChannelSelectors ){
             // inputChannelSelectors values have already been validated in
             // ValidateAsioSpecificStreamInfo() above
             info->channelNum = inputChannelSelectors[i];
-        } else {
+        }else{
             info->channelNum = i;
         }
 
         info->buffers[0] = info->buffers[1] = 0;
     }
 
-    for (i=0; i < outputChannelCount; ++i) {
+    for( i=0; i < outputChannelCount; ++i ){
         ASIOBufferInfo *info = &stream->asioBufferInfos[inputChannelCount+i];
 
         info->isInput = ASIOFalse;
 
-        if (outputChannelSelectors) {
+        if( outputChannelSelectors ){
             // outputChannelSelectors values have already been validated in
             // ValidateAsioSpecificStreamInfo() above
             info->channelNum = outputChannelSelectors[i];
-        } else {
+        }else{
             info->channelNum = i;
         }
-
+        
         info->buffers[0] = info->buffers[1] = 0;
     }
 
 
     /* Using blocking i/o interface... */
-    if (usingBlockingIo) {
-        /** @todo REVIEW selection of host buffer size for blocking i/o */
+    if( usingBlockingIo )
+    {
+/** @todo REVIEW selection of host buffer size for blocking i/o */
         /* Use default host latency for blocking i/o. */
-        framesPerHostBuffer = SelectHostBufferSize (0, driverInfo);
+        framesPerHostBuffer = SelectHostBufferSize( 0, driverInfo );
 
-    } else { /* Using callback interface... */
-        framesPerHostBuffer = SelectHostBufferSize (
-                                  ( (suggestedInputLatencyFrames > suggestedOutputLatencyFrames)
-                                    ? suggestedInputLatencyFrames : suggestedOutputLatencyFrames),
-                                  driverInfo);
+    }
+    else /* Using callback interface... */
+    {
+        framesPerHostBuffer = SelectHostBufferSize(
+                (( suggestedInputLatencyFrames > suggestedOutputLatencyFrames )
+                        ? suggestedInputLatencyFrames : suggestedOutputLatencyFrames),
+                driverInfo );
     }
 
 
-    PA_DEBUG ( ("PaAsioOpenStream: framesPerHostBuffer :%d\n",  framesPerHostBuffer));
+    PA_DEBUG(("PaAsioOpenStream: framesPerHostBuffer :%d\n",  framesPerHostBuffer));
 
-    asioError = ASIOCreateBuffers (stream->asioBufferInfos,
-                                   inputChannelCount+outputChannelCount,
-                                   framesPerHostBuffer, &asioCallbacks_);
+    asioError = ASIOCreateBuffers( stream->asioBufferInfos,
+            inputChannelCount+outputChannelCount,
+            framesPerHostBuffer, &asioCallbacks_ );
 
-    if (asioError != ASE_OK
-            && framesPerHostBuffer != (unsigned long) driverInfo->bufferPreferredSize) {
-        PA_DEBUG ( ("ERROR: ASIOCreateBuffers: %s\n", PaAsio_GetAsioErrorText (asioError)));
+    if( asioError != ASE_OK
+            && framesPerHostBuffer != (unsigned long)driverInfo->bufferPreferredSize )
+    {
+        PA_DEBUG(("ERROR: ASIOCreateBuffers: %s\n", PaAsio_GetAsioErrorText(asioError) ));
         /*
             Some buggy drivers (like the Hoontech DSP24) give incorrect
             [min, preferred, max] values They should work with the preferred size
@@ -2236,217 +2148,221 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
 
         framesPerHostBuffer = driverInfo->bufferPreferredSize;
 
-        PA_DEBUG ( ("PaAsioOpenStream: CORRECTED framesPerHostBuffer :%d\n",  framesPerHostBuffer));
-
-        ASIOError asioError2 = ASIOCreateBuffers (stream->asioBufferInfos,
-                               inputChannelCount+outputChannelCount,
-                               framesPerHostBuffer, &asioCallbacks_);
+        PA_DEBUG(("PaAsioOpenStream: CORRECTED framesPerHostBuffer :%d\n",  framesPerHostBuffer));
 
-        if (asioError2 == ASE_OK)
+        ASIOError asioError2 = ASIOCreateBuffers( stream->asioBufferInfos,
+                inputChannelCount+outputChannelCount,
+                 framesPerHostBuffer, &asioCallbacks_ );
+        if( asioError2 == ASE_OK )
             asioError = ASE_OK;
     }
 
-    if (asioError != ASE_OK) {
+    if( asioError != ASE_OK )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
-        PA_DEBUG ( ("OpenStream ERROR9\n"));
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_DEBUG(("OpenStream ERROR9\n"));
         goto error;
     }
 
     asioBuffersCreated = 1;
 
-    stream->asioChannelInfos = (ASIOChannelInfo*) PaUtil_AllocateMemory (
-                                   sizeof (ASIOChannelInfo) * (inputChannelCount + outputChannelCount));
-
-    if (!stream->asioChannelInfos) {
+    stream->asioChannelInfos = (ASIOChannelInfo*)PaUtil_AllocateMemory(
+            sizeof(ASIOChannelInfo) * (inputChannelCount + outputChannelCount) );
+    if( !stream->asioChannelInfos )
+    {
         result = paInsufficientMemory;
-        PA_DEBUG ( ("OpenStream ERROR10\n"));
+        PA_DEBUG(("OpenStream ERROR10\n"));
         goto error;
     }
 
-    for (i=0; i < inputChannelCount + outputChannelCount; ++i) {
+    for( i=0; i < inputChannelCount + outputChannelCount; ++i )
+    {
         stream->asioChannelInfos[i].channel = stream->asioBufferInfos[i].channelNum;
         stream->asioChannelInfos[i].isInput = stream->asioBufferInfos[i].isInput;
-        asioError = ASIOGetChannelInfo (&stream->asioChannelInfos[i]);
-
-        if (asioError != ASE_OK) {
+        asioError = ASIOGetChannelInfo( &stream->asioChannelInfos[i] );
+        if( asioError != ASE_OK )
+        {
             result = paUnanticipatedHostError;
-            PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
-            PA_DEBUG ( ("OpenStream ERROR11\n"));
+            PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+            PA_DEBUG(("OpenStream ERROR11\n"));
             goto error;
         }
     }
 
-    stream->bufferPtrs = (void**) PaUtil_AllocateMemory (
-
-                             2 * sizeof (void*) * (inputChannelCount + outputChannelCount));
-
-    if (!stream->bufferPtrs) {
+    stream->bufferPtrs = (void**)PaUtil_AllocateMemory(
+            2 * sizeof(void*) * (inputChannelCount + outputChannelCount) );
+    if( !stream->bufferPtrs )
+    {
         result = paInsufficientMemory;
-        PA_DEBUG ( ("OpenStream ERROR12\n"));
+        PA_DEBUG(("OpenStream ERROR12\n"));
         goto error;
     }
 
-    if (inputChannelCount > 0) {
+    if( inputChannelCount > 0 )
+    {
         stream->inputBufferPtrs[0] = stream-> bufferPtrs;
         stream->inputBufferPtrs[1] = &stream->bufferPtrs[inputChannelCount];
 
-        for (i=0; i<inputChannelCount; ++i) {
+        for( i=0; i<inputChannelCount; ++i )
+        {
             stream->inputBufferPtrs[0][i] = stream->asioBufferInfos[i].buffers[0];
             stream->inputBufferPtrs[1][i] = stream->asioBufferInfos[i].buffers[1];
         }
-    } else {
+    }
+    else
+    {
         stream->inputBufferPtrs[0] = 0;
         stream->inputBufferPtrs[1] = 0;
     }
 
-    if (outputChannelCount > 0) {
+    if( outputChannelCount > 0 )
+    {
         stream->outputBufferPtrs[0] = &stream->bufferPtrs[inputChannelCount*2];
         stream->outputBufferPtrs[1] = &stream->bufferPtrs[inputChannelCount*2 + outputChannelCount];
 
-        for (i=0; i<outputChannelCount; ++i) {
+        for( i=0; i<outputChannelCount; ++i )
+        {
             stream->outputBufferPtrs[0][i] = stream->asioBufferInfos[inputChannelCount+i].buffers[0];
             stream->outputBufferPtrs[1][i] = stream->asioBufferInfos[inputChannelCount+i].buffers[1];
         }
-    } else {
+    }
+    else
+    {
         stream->outputBufferPtrs[0] = 0;
         stream->outputBufferPtrs[1] = 0;
     }
 
-    if (inputChannelCount > 0) {
+    if( inputChannelCount > 0 )
+    {
         /* FIXME: assume all channels use the same type for now */
         ASIOSampleType inputType = stream->asioChannelInfos[0].type;
 
-        PA_DEBUG ( ("ASIO Input  type:%d",inputType));
-        AsioSampleTypeLOG (inputType);
-        hostInputSampleFormat = AsioSampleTypeToPaNativeSampleFormat (inputType);
+        PA_DEBUG(("ASIO Input  type:%d",inputType));
+        AsioSampleTypeLOG(inputType);
+        hostInputSampleFormat = AsioSampleTypeToPaNativeSampleFormat( inputType );
 
-        SelectAsioToPaConverter (inputType, &stream->inputBufferConverter, &stream->inputShift);
-    } else {
+        SelectAsioToPaConverter( inputType, &stream->inputBufferConverter, &stream->inputShift );
+    }
+    else
+    {
         hostInputSampleFormat = 0;
         stream->inputBufferConverter = 0;
     }
 
-    if (outputChannelCount > 0) {
+    if( outputChannelCount > 0 )
+    {
         /* FIXME: assume all channels use the same type for now */
         ASIOSampleType outputType = stream->asioChannelInfos[inputChannelCount].type;
 
-        PA_DEBUG ( ("ASIO Output type:%d",outputType));
-        AsioSampleTypeLOG (outputType);
-        hostOutputSampleFormat = AsioSampleTypeToPaNativeSampleFormat (outputType);
+        PA_DEBUG(("ASIO Output type:%d",outputType));
+        AsioSampleTypeLOG(outputType);
+        hostOutputSampleFormat = AsioSampleTypeToPaNativeSampleFormat( outputType );
 
-        SelectPaToAsioConverter (outputType, &stream->outputBufferConverter, &stream->outputShift);
-    } else {
+        SelectPaToAsioConverter( outputType, &stream->outputBufferConverter, &stream->outputShift );
+    }
+    else
+    {
         hostOutputSampleFormat = 0;
         stream->outputBufferConverter = 0;
     }
 
 
-    ASIOGetLatencies (&stream->inputLatency, &stream->outputLatency);
+    ASIOGetLatencies( &stream->inputLatency, &stream->outputLatency );
 
 
     /* Using blocking i/o interface... */
-
-    if (usingBlockingIo) {
+    if( usingBlockingIo )
+    {
         /* Allocate the blocking i/o input ring buffer memory. */
-        stream->blockingState = (PaAsioStreamBlockingState*) PaUtil_AllocateMemory (sizeof (PaAsioStreamBlockingState));
-
-        if (!stream->blockingState) {
+        stream->blockingState = (PaAsioStreamBlockingState*)PaUtil_AllocateMemory( sizeof(PaAsioStreamBlockingState) );
+        if( !stream->blockingState )
+        {
             result = paInsufficientMemory;
-            PA_DEBUG ( ("ERROR! Blocking i/o interface struct allocation failed in OpenStream()\n"));
+            PA_DEBUG(("ERROR! Blocking i/o interface struct allocation failed in OpenStream()\n"));
             goto error;
         }
 
         /* Initialize blocking i/o interface struct. */
         stream->blockingState->readFramesReadyEvent   = NULL; /* Uninitialized, yet. */
-
         stream->blockingState->writeBuffersReadyEvent = NULL; /* Uninitialized, yet. */
-
         stream->blockingState->readRingBufferData     = NULL; /* Uninitialized, yet. */
-
         stream->blockingState->writeRingBufferData    = NULL; /* Uninitialized, yet. */
-
         stream->blockingState->readStreamBuffer       = NULL; /* Uninitialized, yet. */
-
         stream->blockingState->writeStreamBuffer      = NULL; /* Uninitialized, yet. */
-
         stream->blockingState->stopFlag               = TRUE; /* Not started, yet. */
 
 
         /* If the user buffer is unspecified */
-        if (framesPerBuffer == paFramesPerBufferUnspecified) {
+        if( framesPerBuffer == paFramesPerBufferUnspecified )
+        {
             /* Make the user buffer the same size as the host buffer. */
             framesPerBuffer = framesPerHostBuffer;
         }
 
 
         /* Initialize callback buffer processor. */
-        result = PaUtil_InitializeBufferProcessor (&stream->bufferProcessor               ,
-                 inputChannelCount                     ,
-                 inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
-                 hostInputSampleFormat                 , /* Host format. */
-                 outputChannelCount                    ,
-                 outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
-                 hostOutputSampleFormat                , /* Host format. */
-                 sampleRate                            ,
-                 streamFlags                           ,
-                 framesPerBuffer                       , /* Frames per ring buffer block. */
-                 framesPerHostBuffer                   , /* Frames per asio buffer. */
-                 paUtilFixedHostBufferSize             ,
-                 streamCallback                        ,
-                 userData);
-
-        if (result != paNoError) {
-            PA_DEBUG ( ("OpenStream ERROR13\n"));
+        result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor               ,
+                                                    inputChannelCount                     ,
+                                                    inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
+                                                    hostInputSampleFormat                 , /* Host format. */
+                                                    outputChannelCount                    ,
+                                                    outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
+                                                    hostOutputSampleFormat                , /* Host format. */
+                                                    sampleRate                            ,
+                                                    streamFlags                           ,
+                                                    framesPerBuffer                       , /* Frames per ring buffer block. */
+                                                    framesPerHostBuffer                   , /* Frames per asio buffer. */
+                                                    paUtilFixedHostBufferSize             ,
+                                                    streamCallback                        ,
+                                                    userData                               );
+        if( result != paNoError ){
+            PA_DEBUG(("OpenStream ERROR13\n"));
             goto error;
         }
-
         callbackBufferProcessorInited = TRUE;
 
         /* Initialize the blocking i/o buffer processor. */
-        result = PaUtil_InitializeBufferProcessor (&stream->blockingState->bufferProcessor,
-                 inputChannelCount                     ,
-                 inputSampleFormat                     , /* User format. */
-                 inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
-                 outputChannelCount                    ,
-                 outputSampleFormat                    , /* User format. */
-                 outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
-                 sampleRate                            ,
-                 paClipOff | paDitherOff               , /* Don't use dither nor clipping. */
-                 framesPerBuffer                       , /* Frames per user buffer. */
-                 framesPerBuffer                       , /* Frames per ring buffer block. */
-                 paUtilBoundedHostBufferSize           ,
-                 NULL, NULL);                            /* No callback! */
-
-        if (result != paNoError) {
-            PA_DEBUG ( ("ERROR! Blocking i/o buffer processor initialization failed in OpenStream()\n"));
+        result = PaUtil_InitializeBufferProcessor(&stream->blockingState->bufferProcessor,
+                                                   inputChannelCount                     ,
+                                                   inputSampleFormat                     , /* User format. */
+                                                   inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
+                                                   outputChannelCount                    ,
+                                                   outputSampleFormat                    , /* User format. */
+                                                   outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
+                                                   sampleRate                            ,
+                                                   paClipOff | paDitherOff               , /* Don't use dither nor clipping. */
+                                                   framesPerBuffer                       , /* Frames per user buffer. */
+                                                   framesPerBuffer                       , /* Frames per ring buffer block. */
+                                                   paUtilBoundedHostBufferSize           ,
+                                                   NULL, NULL                            );/* No callback! */
+        if( result != paNoError ){
+            PA_DEBUG(("ERROR! Blocking i/o buffer processor initialization failed in OpenStream()\n"));
             goto error;
         }
-
         blockingBufferProcessorInited = TRUE;
 
         /* If input is requested. */
-
-        if (inputChannelCount) {
+        if( inputChannelCount )
+        {
             /* Create the callback sync-event. */
-            stream->blockingState->readFramesReadyEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
-
-            if (stream->blockingState->readFramesReadyEvent == NULL) {
+            stream->blockingState->readFramesReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
+            if( stream->blockingState->readFramesReadyEvent == NULL )
+            {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
-                PA_DEBUG ( ("ERROR! Blocking i/o \"read frames ready\" event creation failed in OpenStream()\n"));
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                PA_DEBUG(("ERROR! Blocking i/o \"read frames ready\" event creation failed in OpenStream()\n"));
                 goto error;
             }
-
             blockingReadFramesReadyEventInitialized = 1;
 
 
             /* Create pointer buffer to access non-interleaved data in ReadStream() */
-            stream->blockingState->readStreamBuffer = (void**) PaUtil_AllocateMemory (sizeof (void*) * inputChannelCount);
-
-            if (!stream->blockingState->readStreamBuffer) {
+            stream->blockingState->readStreamBuffer = (void**)PaUtil_AllocateMemory( sizeof(void*) * inputChannelCount );
+            if( !stream->blockingState->readStreamBuffer )
+            {
                 result = paInsufficientMemory;
-                PA_DEBUG ( ("ERROR! Blocking i/o read stream buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG(("ERROR! Blocking i/o read stream buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
@@ -2465,79 +2381,74 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                5) Get the next larger (or equal) power-of-two buffer size.
              */
             lBlockingBufferSize = suggestedInputLatencyFrames - stream->inputLatency;
-
             lBlockingBufferSize = (lBlockingBufferSize > 0) ? lBlockingBufferSize : 1;
-
             lBlockingBufferSize = (lBlockingBufferSize + framesPerBuffer - 1) / framesPerBuffer;
-
             lBlockingBufferSize = (lBlockingBufferSize + 1) * framesPerBuffer;
 
             /* Get the next larger or equal power-of-two buffersize. */
             lBlockingBufferSizePow2 = 1;
-
-            while (lBlockingBufferSize > (lBlockingBufferSizePow2<<=1));
-
+            while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) );
             lBlockingBufferSize = lBlockingBufferSizePow2;
 
             /* Compute total intput latency in seconds */
             stream->streamRepresentation.streamInfo.inputLatency =
-                (double) (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor)
-                          + PaUtil_GetBufferProcessorInputLatency (&stream->blockingState->bufferProcessor)
-                          + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
-                          + stream->inputLatency)
+                (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor               )
+                        + PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor)
+                        + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
+                        + stream->inputLatency )
                 / sampleRate;
 
             /* The code below prints the ASIO latency which doesn't include
                the buffer processor latency nor the blocking i/o latency. It
                reports the added latency separately.
             */
-            PA_DEBUG ( ("PaAsio : ASIO InputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
-                        stream->inputLatency,
-                        (long) (stream->inputLatency * (1000.0 / sampleRate)),
-                        PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor),
-                        (long) (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor) * (1000.0 / sampleRate)),
-                        PaUtil_GetBufferProcessorInputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
-                        (long) ( (PaUtil_GetBufferProcessorInputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate))
-                       ));
+            PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
+                stream->inputLatency,
+                (long)( stream->inputLatency * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
+                (long)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor) * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
+                (long)( (PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) )
+                ));
 
             /* Determine the size of ring buffer in bytes. */
-            lBytesPerFrame = inputChannelCount * Pa_GetSampleSize (inputSampleFormat);
+            lBytesPerFrame = inputChannelCount * Pa_GetSampleSize(inputSampleFormat );
 
             /* Allocate the blocking i/o input ring buffer memory. */
-            stream->blockingState->readRingBufferData = (void*) PaUtil_AllocateMemory (lBlockingBufferSize * lBytesPerFrame);
-
-            if (!stream->blockingState->readRingBufferData) {
+            stream->blockingState->readRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame );
+            if( !stream->blockingState->readRingBufferData )
+            {
                 result = paInsufficientMemory;
-                PA_DEBUG ( ("ERROR! Blocking i/o input ring buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG(("ERROR! Blocking i/o input ring buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
             /* Initialize the input ring buffer struct. */
-            PaUtil_InitializeRingBuffer (&stream->blockingState->readRingBuffer    ,
-                                         lBytesPerFrame                           ,
-                                         lBlockingBufferSize                      ,
-                                         stream->blockingState->readRingBufferData);
+            PaUtil_InitializeRingBuffer( &stream->blockingState->readRingBuffer    ,
+                                          lBytesPerFrame                           ,
+                                          lBlockingBufferSize                      ,
+                                          stream->blockingState->readRingBufferData );
         }
 
         /* If output is requested. */
-        if (outputChannelCount) {
-            stream->blockingState->writeBuffersReadyEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
-
-            if (stream->blockingState->writeBuffersReadyEvent == NULL) {
+        if( outputChannelCount )
+        {
+            stream->blockingState->writeBuffersReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
+            if( stream->blockingState->writeBuffersReadyEvent == NULL )
+            {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
-                PA_DEBUG ( ("ERROR! Blocking i/o \"write buffers ready\" event creation failed in OpenStream()\n"));
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                PA_DEBUG(("ERROR! Blocking i/o \"write buffers ready\" event creation failed in OpenStream()\n"));
                 goto error;
             }
-
             blockingWriteBuffersReadyEventInitialized = 1;
 
             /* Create pointer buffer to access non-interleaved data in WriteStream() */
-            stream->blockingState->writeStreamBuffer = (const void**) PaUtil_AllocateMemory (sizeof (const void*) * outputChannelCount);
-
-            if (!stream->blockingState->writeStreamBuffer) {
+            stream->blockingState->writeStreamBuffer = (const void**)PaUtil_AllocateMemory( sizeof(const void*) * outputChannelCount );
+            if( !stream->blockingState->writeStreamBuffer )
+            {
                 result = paInsufficientMemory;
-                PA_DEBUG ( ("ERROR! Blocking i/o write stream buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG(("ERROR! Blocking i/o write stream buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
@@ -2556,11 +2467,8 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                5) Get the next larger (or equal) power-of-two buffer size.
              */
             lBlockingBufferSize = suggestedOutputLatencyFrames - stream->outputLatency;
-
             lBlockingBufferSize = (lBlockingBufferSize > 0) ? lBlockingBufferSize : 1;
-
             lBlockingBufferSize = (lBlockingBufferSize + framesPerBuffer - 1) / framesPerBuffer;
-
             lBlockingBufferSize = (lBlockingBufferSize + 1) * framesPerBuffer;
 
             /* The buffer size (without the additional block) corresponds
@@ -2570,163 +2478,159 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
 
             /* Get the next larger or equal power-of-two buffersize. */
             lBlockingBufferSizePow2 = 1;
-
-            while (lBlockingBufferSize > (lBlockingBufferSizePow2<<=1));
-
+            while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) );
             lBlockingBufferSize = lBlockingBufferSizePow2;
 
             /* Compute total output latency in seconds */
             stream->streamRepresentation.streamInfo.outputLatency =
-                (double) (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor)
-                          + PaUtil_GetBufferProcessorOutputLatency (&stream->blockingState->bufferProcessor)
-                          + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
-                          + stream->outputLatency)
+                (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor               )
+                        + PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor)
+                        + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
+                        + stream->outputLatency )
                 / sampleRate;
 
             /* The code below prints the ASIO latency which doesn't include
                the buffer processor latency nor the blocking i/o latency. It
                reports the added latency separately.
             */
-            PA_DEBUG ( ("PaAsio : ASIO OutputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
-                        stream->outputLatency,
-                        (long) (stream->inputLatency * (1000.0 / sampleRate)),
-                        PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor),
-                        (long) (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor) * (1000.0 / sampleRate)),
-                        PaUtil_GetBufferProcessorOutputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
-                        (long) ( (PaUtil_GetBufferProcessorOutputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate))
-                       ));
+            PA_DEBUG(("PaAsio : ASIO OutputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
+                stream->outputLatency,
+                (long)( stream->inputLatency * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
+                (long)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor) * (1000.0 / sampleRate) ),
+                PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
+                (long)( (PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) )
+                ));
 
             /* Determine the size of ring buffer in bytes. */
-            lBytesPerFrame = outputChannelCount * Pa_GetSampleSize (outputSampleFormat);
+            lBytesPerFrame = outputChannelCount * Pa_GetSampleSize(outputSampleFormat);
 
             /* Allocate the blocking i/o output ring buffer memory. */
-            stream->blockingState->writeRingBufferData = (void*) PaUtil_AllocateMemory (lBlockingBufferSize * lBytesPerFrame);
-
-            if (!stream->blockingState->writeRingBufferData) {
+            stream->blockingState->writeRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame );
+            if( !stream->blockingState->writeRingBufferData )
+            {
                 result = paInsufficientMemory;
-                PA_DEBUG ( ("ERROR! Blocking i/o output ring buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG(("ERROR! Blocking i/o output ring buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
             /* Initialize the output ring buffer struct. */
-            PaUtil_InitializeRingBuffer (&stream->blockingState->writeRingBuffer    ,
-                                         lBytesPerFrame                            ,
-                                         lBlockingBufferSize                       ,
-                                         stream->blockingState->writeRingBufferData);
+            PaUtil_InitializeRingBuffer( &stream->blockingState->writeRingBuffer    ,
+                                          lBytesPerFrame                            ,
+                                          lBlockingBufferSize                       ,
+                                          stream->blockingState->writeRingBufferData );
         }
 
         stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
 
 
-    } else { /* Using callback interface... */
-        result =  PaUtil_InitializeBufferProcessor (&stream->bufferProcessor,
-                  inputChannelCount, inputSampleFormat, hostInputSampleFormat,
-                  outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
-                  sampleRate, streamFlags, framesPerBuffer,
-                  framesPerHostBuffer, paUtilFixedHostBufferSize,
-                  streamCallback, userData);
-
-        if (result != paNoError) {
-            PA_DEBUG ( ("OpenStream ERROR13\n"));
+    }
+    else /* Using callback interface... */
+    {
+        result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
+                        inputChannelCount, inputSampleFormat, hostInputSampleFormat,
+                        outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
+                        sampleRate, streamFlags, framesPerBuffer,
+                        framesPerHostBuffer, paUtilFixedHostBufferSize,
+                        streamCallback, userData );
+        if( result != paNoError ){
+            PA_DEBUG(("OpenStream ERROR13\n"));
             goto error;
         }
-
         callbackBufferProcessorInited = TRUE;
 
         stream->streamRepresentation.streamInfo.inputLatency =
-            (double) (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor)
-                      + stream->inputLatency) / sampleRate;   // seconds
+                (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)
+                    + stream->inputLatency) / sampleRate;   // seconds
         stream->streamRepresentation.streamInfo.outputLatency =
-            (double) (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor)
-                      + stream->outputLatency) / sampleRate; // seconds
+                (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)
+                    + stream->outputLatency) / sampleRate; // seconds
         stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
 
         // the code below prints the ASIO latency which doesn't include the
         // buffer processor latency. it reports the added latency separately
-        PA_DEBUG ( ("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
-                    stream->inputLatency,
-                    (long) ( (stream->inputLatency*1000) / sampleRate),
-                    PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor),
-                    (long) ( (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor) *1000) / sampleRate)
-                   ));
-
-        PA_DEBUG ( ("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
-                    stream->outputLatency,
-                    (long) ( (stream->outputLatency*1000) / sampleRate),
-                    PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor),
-                    (long) ( (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor) *1000) / sampleRate)
-                   ));
+        PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
+                stream->inputLatency,
+                (long)((stream->inputLatency*1000)/ sampleRate),  
+                PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
+                (long)((PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
+                ));
+
+        PA_DEBUG(("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
+                stream->outputLatency,
+                (long)((stream->outputLatency*1000)/ sampleRate), 
+                PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
+                (long)((PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
+                ));
     }
 
     stream->asioHostApi = asioHostApi;
-
     stream->framesPerHostCallback = framesPerHostBuffer;
 
     stream->inputChannelCount = inputChannelCount;
     stream->outputChannelCount = outputChannelCount;
     stream->postOutput = driverInfo->postOutput;
+    stream->isStopped = 1;
     stream->isActive = 0;
-
+    
     asioHostApi->openAsioDeviceIndex = asioDeviceIndex;
 
-    *s = (PaStream*) stream;
+    theAsioStream = stream;
+    *s = (PaStream*)stream;
 
     return result;
 
 error:
-    PA_DEBUG ( ("goto errored\n"));
-
-    if (stream) {
-        if (stream->blockingState) {
-            if (blockingBufferProcessorInited)
-                PaUtil_TerminateBufferProcessor (&stream->blockingState->bufferProcessor);
-
-            if (stream->blockingState->writeRingBufferData)
-                PaUtil_FreeMemory (stream->blockingState->writeRingBufferData);
-
-            if (stream->blockingState->writeStreamBuffer)
-                PaUtil_FreeMemory (stream->blockingState->writeStreamBuffer);
-
-            if (blockingWriteBuffersReadyEventInitialized)
-                CloseHandle (stream->blockingState->writeBuffersReadyEvent);
-
-            if (stream->blockingState->readRingBufferData)
-                PaUtil_FreeMemory (stream->blockingState->readRingBufferData);
-
-            if (stream->blockingState->readStreamBuffer)
-                PaUtil_FreeMemory (stream->blockingState->readStreamBuffer);
-
-            if (blockingReadFramesReadyEventInitialized)
-                CloseHandle (stream->blockingState->readFramesReadyEvent);
-
-            PaUtil_FreeMemory (stream->blockingState);
+    PA_DEBUG(("goto errored\n"));
+    if( stream )
+    {
+        if( stream->blockingState )
+        {
+            if( blockingBufferProcessorInited )
+                PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor );
+
+            if( stream->blockingState->writeRingBufferData )
+                PaUtil_FreeMemory( stream->blockingState->writeRingBufferData );
+            if( stream->blockingState->writeStreamBuffer )
+                PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer );
+            if( blockingWriteBuffersReadyEventInitialized )
+                CloseHandle( stream->blockingState->writeBuffersReadyEvent );
+
+            if( stream->blockingState->readRingBufferData )
+                PaUtil_FreeMemory( stream->blockingState->readRingBufferData );
+            if( stream->blockingState->readStreamBuffer )
+                PaUtil_FreeMemory( stream->blockingState->readStreamBuffer );
+            if( blockingReadFramesReadyEventInitialized )
+                CloseHandle( stream->blockingState->readFramesReadyEvent );
+
+            PaUtil_FreeMemory( stream->blockingState );
         }
 
-        if (callbackBufferProcessorInited)
-            PaUtil_TerminateBufferProcessor (&stream->bufferProcessor);
+        if( callbackBufferProcessorInited )
+            PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
 
-        if (completedBuffersPlayedEventInited)
-            CloseHandle (stream->completedBuffersPlayedEvent);
+        if( completedBuffersPlayedEventInited )
+            CloseHandle( stream->completedBuffersPlayedEvent );
 
-        if (stream->asioBufferInfos)
-            PaUtil_FreeMemory (stream->asioBufferInfos);
+        if( stream->asioBufferInfos )
+            PaUtil_FreeMemory( stream->asioBufferInfos );
 
-        if (stream->asioChannelInfos)
-            PaUtil_FreeMemory (stream->asioChannelInfos);
+        if( stream->asioChannelInfos )
+            PaUtil_FreeMemory( stream->asioChannelInfos );
 
-        if (stream->bufferPtrs)
-            PaUtil_FreeMemory (stream->bufferPtrs);
+        if( stream->bufferPtrs )
+            PaUtil_FreeMemory( stream->bufferPtrs );
 
-        PaUtil_FreeMemory (stream);
+        PaUtil_FreeMemory( stream );
     }
 
-    if (asioBuffersCreated)
+    if( asioBuffersCreated )
         ASIODisposeBuffers();
 
-    if (asioIsInitialized) {
-        UnloadAsioDriver();
-    }
-
+    if( asioIsInitialized )
+	{
+		UnloadAsioDriver();
+	}
     return result;
 }
 
@@ -2735,57 +2639,57 @@ error:
     When CloseStream() is called, the multi-api layer ensures that
     the stream has already been stopped or aborted.
 */
-static PaError CloseStream (PaStream* s)
+static PaError CloseStream( PaStream* s )
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
 
     /*
         IMPLEMENT ME:
             - additional stream closing + cleanup
     */
 
-    PaUtil_TerminateBufferProcessor (&stream->bufferProcessor);
-    PaUtil_TerminateStreamRepresentation (&stream->streamRepresentation);
+    PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+    PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
 
     stream->asioHostApi->openAsioDeviceIndex = paNoDevice;
 
-    CloseHandle (stream->completedBuffersPlayedEvent);
+    CloseHandle( stream->completedBuffersPlayedEvent );
 
     /* Using blocking i/o interface... */
+    if( stream->blockingState )
+    {
+        PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor );
 
-    if (stream->blockingState) {
-        PaUtil_TerminateBufferProcessor (&stream->blockingState->bufferProcessor);
-
-        if (stream->inputChannelCount) {
-            PaUtil_FreeMemory (stream->blockingState->readRingBufferData);
-            PaUtil_FreeMemory (stream->blockingState->readStreamBuffer);
-            CloseHandle (stream->blockingState->readFramesReadyEvent);
+        if( stream->inputChannelCount ) {
+            PaUtil_FreeMemory( stream->blockingState->readRingBufferData );
+            PaUtil_FreeMemory( stream->blockingState->readStreamBuffer  );
+            CloseHandle( stream->blockingState->readFramesReadyEvent );
         }
-
-        if (stream->outputChannelCount) {
-            PaUtil_FreeMemory (stream->blockingState->writeRingBufferData);
-            PaUtil_FreeMemory (stream->blockingState->writeStreamBuffer);
-            CloseHandle (stream->blockingState->writeBuffersReadyEvent);
+        if( stream->outputChannelCount ) {
+            PaUtil_FreeMemory( stream->blockingState->writeRingBufferData );
+            PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer );
+            CloseHandle( stream->blockingState->writeBuffersReadyEvent );
         }
 
-        PaUtil_FreeMemory (stream->blockingState);
+        PaUtil_FreeMemory( stream->blockingState );
     }
 
-    PaUtil_FreeMemory (stream->asioBufferInfos);
-
-    PaUtil_FreeMemory (stream->asioChannelInfos);
-    PaUtil_FreeMemory (stream->bufferPtrs);
-    PaUtil_FreeMemory (stream);
+    PaUtil_FreeMemory( stream->asioBufferInfos );
+    PaUtil_FreeMemory( stream->asioChannelInfos );
+    PaUtil_FreeMemory( stream->bufferPtrs );
+    PaUtil_FreeMemory( stream );
 
     ASIODisposeBuffers();
     UnloadAsioDriver();
 
+    theAsioStream = 0;
+
     return result;
 }
 
 
-static void bufferSwitch (long index, ASIOBool directProcess)
+static void bufferSwitch(long index, ASIOBool directProcess)
 {
 //TAKEN FROM THE ASIO SDK
 
@@ -2799,28 +2703,27 @@ static void bufferSwitch (long index, ASIOBool directProcess)
     // timeInfo.systemTime fields and the according flags
 
     ASIOTime  timeInfo;
-    memset (&timeInfo, 0, sizeof (timeInfo));
+    memset( &timeInfo, 0, sizeof (timeInfo) );
 
     // get the time stamp of the buffer, not necessary if no
     // synchronization to other media is required
-
-    if (ASIOGetSamplePosition (&timeInfo.timeInfo.samplePosition, &timeInfo.timeInfo.systemTime) == ASE_OK)
-        timeInfo.timeInfo.flags = kSystemTimeValid | kSamplePositionValid;
+    if( ASIOGetSamplePosition(&timeInfo.timeInfo.samplePosition, &timeInfo.timeInfo.systemTime) == ASE_OK)
+            timeInfo.timeInfo.flags = kSystemTimeValid | kSamplePositionValid;
 
     // Call the real callback
-    bufferSwitchTimeInfo (&timeInfo, index, directProcess);
+    bufferSwitchTimeInfo( &timeInfo, index, directProcess );
 }
 
 
 // conversion from 64 bit ASIOSample/ASIOTimeStamp to double float
 #if NATIVE_INT64
-#define ASIO64toDouble(a)  (a)
+    #define ASIO64toDouble(a)  (a)
 #else
-const double twoRaisedTo32 = 4294967296.;
-#define ASIO64toDouble(a)  ((a).lo + (a).hi * twoRaisedTo32)
+    const double twoRaisedTo32 = 4294967296.;
+    #define ASIO64toDouble(a)  ((a).lo + (a).hi * twoRaisedTo32)
 #endif
 
-static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool directProcess)
+static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool directProcess )
 {
     // the actual processing callback.
     // Beware that this is normally in a seperate thread, hence be sure that
@@ -2849,23 +2752,22 @@ static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool
     // synchronization to other media is required
 
     if (timeInfo->timeInfo.flags & kSystemTimeValid)
-        asioDriverInfo.nanoSeconds = ASIO64toDouble (timeInfo->timeInfo.systemTime);
+            asioDriverInfo.nanoSeconds = ASIO64toDouble(timeInfo->timeInfo.systemTime);
     else
-        asioDriverInfo.nanoSeconds = 0;
+            asioDriverInfo.nanoSeconds = 0;
 
     if (timeInfo->timeInfo.flags & kSamplePositionValid)
-        asioDriverInfo.samples = ASIO64toDouble (timeInfo->timeInfo.samplePosition);
+            asioDriverInfo.samples = ASIO64toDouble(timeInfo->timeInfo.samplePosition);
     else
-        asioDriverInfo.samples = 0;
+            asioDriverInfo.samples = 0;
 
     if (timeInfo->timeCode.flags & kTcValid)
-        asioDriverInfo.tcSamples = ASIO64toDouble (timeInfo->timeCode.timeCodeSamples);
+            asioDriverInfo.tcSamples = ASIO64toDouble(timeInfo->timeCode.timeCodeSamples);
     else
-        asioDriverInfo.tcSamples = 0;
+            asioDriverInfo.tcSamples = 0;
 
     // get the system reference time
     asioDriverInfo.sysRefTime = get_sys_reference_time();
-
 #endif
 
 #if 0
@@ -2873,19 +2775,14 @@ static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool
     // tells you the time when driver got its interrupt and the delay until the app receives
     // the event notification.
     static double last_samples = 0;
-
     char tmp[128];
-
-    sprintf (tmp, "diff: %d / %d ms / %d ms / %d samples                 \n", asioDriverInfo.sysRefTime - (long) (asioDriverInfo.nanoSeconds / 1000000.0), asioDriverInfo.sysRefTime, (long) (asioDriverInfo.nanoSeconds / 1000000.0), (long) (asioDriverInfo.samples - last_samples));
-
+    sprintf (tmp, "diff: %d / %d ms / %d ms / %d samples                 \n", asioDriverInfo.sysRefTime - (long)(asioDriverInfo.nanoSeconds / 1000000.0), asioDriverInfo.sysRefTime, (long)(asioDriverInfo.nanoSeconds / 1000000.0), (long)(asioDriverInfo.samples - last_samples));
     OutputDebugString (tmp);
-
     last_samples = asioDriverInfo.samples;
-
 #endif
 
 
-    if (!theAsioStream)
+    if( !theAsioStream )
         return 0L;
 
     // Keep sample position
@@ -2893,51 +2790,57 @@ static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool
 
 
     // protect against reentrancy
-    if (PaAsio_AtomicIncrement (&theAsioStream->reenterCount)) {
+    if( PaAsio_AtomicIncrement(&theAsioStream->reenterCount) )
+    {
         theAsioStream->reenterError++;
         //DBUG(("bufferSwitchTimeInfo : reentrancy detection = %d\n", asioDriverInfo.reenterError));
         return 0L;
     }
 
     int buffersDone = 0;
-
-    do {
-        if (buffersDone > 0) {
+    
+    do
+    {
+        if( buffersDone > 0 )
+        {
             // this is a reentered buffer, we missed processing it on time
             // set the input overflow and output underflow flags as appropriate
-
-            if (theAsioStream->inputChannelCount > 0)
+            
+            if( theAsioStream->inputChannelCount > 0 )
                 theAsioStream->callbackFlags |= paInputOverflow;
-
-            if (theAsioStream->outputChannelCount > 0)
+                
+            if( theAsioStream->outputChannelCount > 0 )
                 theAsioStream->callbackFlags |= paOutputUnderflow;
-        } else {
-            if (theAsioStream->zeroOutput) {
-                ZeroOutputBuffers (theAsioStream, index);
+        }
+        else
+        {
+            if( theAsioStream->zeroOutput )
+            {
+                ZeroOutputBuffers( theAsioStream, index );
 
                 // Finally if the driver supports the ASIOOutputReady() optimization,
                 // do it here, all data are in place
-
-                if (theAsioStream->postOutput)
+                if( theAsioStream->postOutput )
                     ASIOOutputReady();
 
-                if (theAsioStream->stopProcessing) {
-                    if (theAsioStream->stopPlayoutCount < 2) {
+                if( theAsioStream->stopProcessing )
+                {
+                    if( theAsioStream->stopPlayoutCount < 2 )
+                    {
                         ++theAsioStream->stopPlayoutCount;
-
-                        if (theAsioStream->stopPlayoutCount == 2) {
+                        if( theAsioStream->stopPlayoutCount == 2 )
+                        {
                             theAsioStream->isActive = 0;
-
-                            if (theAsioStream->streamRepresentation.streamFinishedCallback != 0)
-                                theAsioStream->streamRepresentation.streamFinishedCallback (theAsioStream->streamRepresentation.userData);
-
+                            if( theAsioStream->streamRepresentation.streamFinishedCallback != 0 )
+                                theAsioStream->streamRepresentation.streamFinishedCallback( theAsioStream->streamRepresentation.userData );
                             theAsioStream->streamFinishedCallbackCalled = true;
-
-                            SetEvent (theAsioStream->completedBuffersPlayedEvent);
+                            SetEvent( theAsioStream->completedBuffersPlayedEvent );
                         }
                     }
                 }
-            } else {
+            }
+            else
+            {
 
 #if 0
 // test code to try to detect slip conditions... these may work on some systems
@@ -2945,168 +2848,165 @@ static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool
 
 // check that sample delta matches buffer size (otherwise we must have skipped
 // a buffer.
-                static double last_samples = -512;
-                double samples;
+static double last_samples = -512;
+double samples;
 //if( timeInfo->timeCode.flags & kTcValid )
 //    samples = ASIO64toDouble(timeInfo->timeCode.timeCodeSamples);
 //else
-                samples = ASIO64toDouble (timeInfo->timeInfo.samplePosition);
-                int delta = samples - last_samples;
+    samples = ASIO64toDouble(timeInfo->timeInfo.samplePosition);
+int delta = samples - last_samples;
 //printf( "%d\n", delta);
-                last_samples = samples;
+last_samples = samples;
 
-                if (delta > theAsioStream->framesPerHostCallback) {
-                    if (theAsioStream->inputChannelCount > 0)
-                        theAsioStream->callbackFlags |= paInputOverflow;
+if( delta > theAsioStream->framesPerHostCallback )
+{
+    if( theAsioStream->inputChannelCount > 0 )
+        theAsioStream->callbackFlags |= paInputOverflow;
 
-                    if (theAsioStream->outputChannelCount > 0)
-                        theAsioStream->callbackFlags |= paOutputUnderflow;
-                }
+    if( theAsioStream->outputChannelCount > 0 )
+        theAsioStream->callbackFlags |= paOutputUnderflow;
+}
 
 // check that the buffer index is not the previous index (which would indicate
 // that a buffer was skipped.
-                static int previousIndex = 1;
-
-                if (index == previousIndex) {
-                    if (theAsioStream->inputChannelCount > 0)
-                        theAsioStream->callbackFlags |= paInputOverflow;
-
-                    if (theAsioStream->outputChannelCount > 0)
-                        theAsioStream->callbackFlags |= paOutputUnderflow;
-                }
-
-                previousIndex = index;
+static int previousIndex = 1;
+if( index == previousIndex )
+{
+    if( theAsioStream->inputChannelCount > 0 )
+        theAsioStream->callbackFlags |= paInputOverflow;
 
+    if( theAsioStream->outputChannelCount > 0 )
+        theAsioStream->callbackFlags |= paOutputUnderflow;
+}
+previousIndex = index;
 #endif
 
                 int i;
 
-                PaUtil_BeginCpuLoadMeasurement (&theAsioStream->cpuLoadMeasurer);
+                PaUtil_BeginCpuLoadMeasurement( &theAsioStream->cpuLoadMeasurer );
 
                 PaStreamCallbackTimeInfo paTimeInfo;
 
                 // asio systemTime is supposed to be measured according to the same
                 // clock as timeGetTime
-                paTimeInfo.currentTime = (ASIO64toDouble (timeInfo->timeInfo.systemTime) * .000000001);
+                paTimeInfo.currentTime = (ASIO64toDouble( timeInfo->timeInfo.systemTime ) * .000000001);
 
                 /* patch from Paul Boege */
                 paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime -
-                                                ( (double) theAsioStream->inputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
+                    ((double)theAsioStream->inputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
 
                 paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime +
-                                                 ( (double) theAsioStream->outputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
+                    ((double)theAsioStream->outputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
 
                 /* old version is buggy because the buffer processor also adds in its latency to the time parameters
                 paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime - theAsioStream->streamRepresentation.streamInfo.inputLatency;
                 paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime + theAsioStream->streamRepresentation.streamInfo.outputLatency;
                 */
 
-                /* Disabled! Stopping and re-starting the stream causes an input overflow / output undeflow. S.Fischer */
+/* Disabled! Stopping and re-starting the stream causes an input overflow / output undeflow. S.Fischer */
 #if 0
 // detect underflows by checking inter-callback time > 2 buffer period
-                static double previousTime = -1;
-
-                if (previousTime > 0) {
-
-                    double delta = paTimeInfo.currentTime - previousTime;
+static double previousTime = -1;
+if( previousTime > 0 ){
 
-                    if (delta >= 2. * (theAsioStream->framesPerHostCallback / theAsioStream->streamRepresentation.streamInfo.sampleRate)) {
-                        if (theAsioStream->inputChannelCount > 0)
-                            theAsioStream->callbackFlags |= paInputOverflow;
-
-                        if (theAsioStream->outputChannelCount > 0)
-                            theAsioStream->callbackFlags |= paOutputUnderflow;
-                    }
-                }
+    double delta = paTimeInfo.currentTime - previousTime;
 
-                previousTime = paTimeInfo.currentTime;
+    if( delta >= 2. * (theAsioStream->framesPerHostCallback / theAsioStream->streamRepresentation.streamInfo.sampleRate) ){
+        if( theAsioStream->inputChannelCount > 0 )
+            theAsioStream->callbackFlags |= paInputOverflow;
 
+        if( theAsioStream->outputChannelCount > 0 )
+            theAsioStream->callbackFlags |= paOutputUnderflow;
+    }
+}
+previousTime = paTimeInfo.currentTime;
 #endif
 
                 // note that the above input and output times do not need to be
                 // adjusted for the latency of the buffer processor -- the buffer
                 // processor handles that.
 
-                if (theAsioStream->inputBufferConverter) {
-                    for (i=0; i<theAsioStream->inputChannelCount; i++) {
-                        theAsioStream->inputBufferConverter (theAsioStream->inputBufferPtrs[index][i],
-                                                             theAsioStream->inputShift, theAsioStream->framesPerHostCallback);
+                if( theAsioStream->inputBufferConverter )
+                {
+                    for( i=0; i<theAsioStream->inputChannelCount; i++ )
+                    {
+                        theAsioStream->inputBufferConverter( theAsioStream->inputBufferPtrs[index][i],
+                                theAsioStream->inputShift, theAsioStream->framesPerHostCallback );
                     }
                 }
 
-                PaUtil_BeginBufferProcessing (&theAsioStream->bufferProcessor, &paTimeInfo, theAsioStream->callbackFlags);
+                PaUtil_BeginBufferProcessing( &theAsioStream->bufferProcessor, &paTimeInfo, theAsioStream->callbackFlags );
 
                 /* reset status flags once they've been passed to the callback */
                 theAsioStream->callbackFlags = 0;
 
-                PaUtil_SetInputFrameCount (&theAsioStream->bufferProcessor, 0 /* default to host buffer size */);
-
-                for (i=0; i<theAsioStream->inputChannelCount; ++i)
-                    PaUtil_SetNonInterleavedInputChannel (&theAsioStream->bufferProcessor, i, theAsioStream->inputBufferPtrs[index][i]);
+                PaUtil_SetInputFrameCount( &theAsioStream->bufferProcessor, 0 /* default to host buffer size */ );
+                for( i=0; i<theAsioStream->inputChannelCount; ++i )
+                    PaUtil_SetNonInterleavedInputChannel( &theAsioStream->bufferProcessor, i, theAsioStream->inputBufferPtrs[index][i] );
 
-                PaUtil_SetOutputFrameCount (&theAsioStream->bufferProcessor, 0 /* default to host buffer size */);
-
-                for (i=0; i<theAsioStream->outputChannelCount; ++i)
-                    PaUtil_SetNonInterleavedOutputChannel (&theAsioStream->bufferProcessor, i, theAsioStream->outputBufferPtrs[index][i]);
+                PaUtil_SetOutputFrameCount( &theAsioStream->bufferProcessor, 0 /* default to host buffer size */ );
+                for( i=0; i<theAsioStream->outputChannelCount; ++i )
+                    PaUtil_SetNonInterleavedOutputChannel( &theAsioStream->bufferProcessor, i, theAsioStream->outputBufferPtrs[index][i] );
 
                 int callbackResult;
-
-                if (theAsioStream->stopProcessing)
+                if( theAsioStream->stopProcessing )
                     callbackResult = paComplete;
                 else
                     callbackResult = paContinue;
-
-                unsigned long framesProcessed = PaUtil_EndBufferProcessing (&theAsioStream->bufferProcessor, &callbackResult);
-
-                if (theAsioStream->outputBufferConverter) {
-                    for (i=0; i<theAsioStream->outputChannelCount; i++) {
-                        theAsioStream->outputBufferConverter (theAsioStream->outputBufferPtrs[index][i],
-                                                              theAsioStream->outputShift, theAsioStream->framesPerHostCallback);
+                unsigned long framesProcessed = PaUtil_EndBufferProcessing( &theAsioStream->bufferProcessor, &callbackResult );
+
+                if( theAsioStream->outputBufferConverter )
+                {
+                    for( i=0; i<theAsioStream->outputChannelCount; i++ )
+                    {
+                        theAsioStream->outputBufferConverter( theAsioStream->outputBufferPtrs[index][i],
+                                theAsioStream->outputShift, theAsioStream->framesPerHostCallback );
                     }
                 }
 
-                PaUtil_EndCpuLoadMeasurement (&theAsioStream->cpuLoadMeasurer, framesProcessed);
+                PaUtil_EndCpuLoadMeasurement( &theAsioStream->cpuLoadMeasurer, framesProcessed );
 
                 // Finally if the driver supports the ASIOOutputReady() optimization,
                 // do it here, all data are in place
-
-                if (theAsioStream->postOutput)
+                if( theAsioStream->postOutput )
                     ASIOOutputReady();
 
-                if (callbackResult == paContinue) {
+                if( callbackResult == paContinue )
+                {
                     /* nothing special to do */
-                } else if (callbackResult == paAbort) {
+                }
+                else if( callbackResult == paAbort )
+                {
                     /* finish playback immediately  */
                     theAsioStream->isActive = 0;
-
-                    if (theAsioStream->streamRepresentation.streamFinishedCallback != 0)
-                        theAsioStream->streamRepresentation.streamFinishedCallback (theAsioStream->streamRepresentation.userData);
-
+                    if( theAsioStream->streamRepresentation.streamFinishedCallback != 0 )
+                        theAsioStream->streamRepresentation.streamFinishedCallback( theAsioStream->streamRepresentation.userData );
                     theAsioStream->streamFinishedCallbackCalled = true;
-
-                    SetEvent (theAsioStream->completedBuffersPlayedEvent);
-
+                    SetEvent( theAsioStream->completedBuffersPlayedEvent );
                     theAsioStream->zeroOutput = true;
-                } else { /* paComplete or other non-zero value indicating complete */
+                }
+                else /* paComplete or other non-zero value indicating complete */
+                {
                     /* Finish playback once currently queued audio has completed. */
                     theAsioStream->stopProcessing = true;
 
-                    if (PaUtil_IsBufferProcessorOutputEmpty (&theAsioStream->bufferProcessor)) {
+                    if( PaUtil_IsBufferProcessorOutputEmpty( &theAsioStream->bufferProcessor ) )
+                    {
                         theAsioStream->zeroOutput = true;
                         theAsioStream->stopPlayoutCount = 0;
                     }
                 }
             }
         }
-
+        
         ++buffersDone;
-    } while (PaAsio_AtomicDecrement (&theAsioStream->reenterCount) >= 0);
+    }while( PaAsio_AtomicDecrement(&theAsioStream->reenterCount) >= 0 );
 
     return 0L;
 }
 
 
-static void sampleRateChanged (ASIOSampleRate sRate)
+static void sampleRateChanged(ASIOSampleRate sRate)
 {
     // TAKEN FROM THE ASIO SDK
     // do whatever you need to do if the sample rate changed
@@ -3117,10 +3017,10 @@ static void sampleRateChanged (ASIOSampleRate sRate)
     // You might have to update time/sample related conversion routines, etc.
 
     (void) sRate; /* unused parameter */
-    PA_DEBUG ( ("sampleRateChanged : %d \n", sRate));
+    PA_DEBUG( ("sampleRateChanged : %d \n", sRate));
 }
 
-static long asioMessages (long selector, long value, void* message, double* opt)
+static long asioMessages(long selector, long value, void* message, double* opt)
 {
 // TAKEN FROM THE ASIO SDK
     // currently the parameters "value", "message" and "opt" are not used.
@@ -3129,22 +3029,20 @@ static long asioMessages (long selector, long value, void* message, double* opt)
     (void) message; /* unused parameters */
     (void) opt;
 
-    PA_DEBUG ( ("asioMessages : %d , %d \n", selector, value));
-
-    switch (selector) {
+    PA_DEBUG( ("asioMessages : %d , %d \n", selector, value));
 
+    switch(selector)
+    {
         case kAsioSelectorSupported:
-
-            if (value == kAsioResetRequest
-                    || value == kAsioEngineVersion
-                    || value == kAsioResyncRequest
-                    || value == kAsioLatenciesChanged
-                    // the following three were added for ASIO 2.0, you don't necessarily have to support them
-                    || value == kAsioSupportsTimeInfo
-                    || value == kAsioSupportsTimeCode
-                    || value == kAsioSupportsInputMonitor)
-                ret = 1L;
-
+            if(value == kAsioResetRequest
+            || value == kAsioEngineVersion
+            || value == kAsioResyncRequest
+            || value == kAsioLatenciesChanged
+            // the following three were added for ASIO 2.0, you don't necessarily have to support them
+            || value == kAsioSupportsTimeInfo
+            || value == kAsioSupportsTimeCode
+            || value == kAsioSupportsInputMonitor)
+                    ret = 1L;
             break;
 
         case kAsioBufferSizeChange:
@@ -3160,7 +3058,6 @@ static long asioMessages (long selector, long value, void* message, double* opt)
             /*FIXME: commented the next line out */
             //asioDriverInfo.stopped;  // In this sample the processing will just stop
             ret = 1L;
-
             break;
 
         case kAsioResyncRequest:
@@ -3171,7 +3068,6 @@ static long asioMessages (long selector, long value, void* message, double* opt)
             // by another thread.
             // However a driver can issue it in other situations, too.
             ret = 1L;
-
             break;
 
         case kAsioLatenciesChanged:
@@ -3179,7 +3075,6 @@ static long asioMessages (long selector, long value, void* message, double* opt)
             // Beware, it this does not mean that the buffer sizes have changed!
             // You might need to update internal delay data.
             ret = 1L;
-
             //printf("kAsioLatenciesChanged \n");
             break;
 
@@ -3188,7 +3083,6 @@ static long asioMessages (long selector, long value, void* message, double* opt)
             // If a host applications does not implement this selector, ASIO 1.0 is assumed
             // by the driver
             ret = 2L;
-
             break;
 
         case kAsioSupportsTimeInfo:
@@ -3197,7 +3091,6 @@ static long asioMessages (long selector, long value, void* message, double* opt)
             // For compatibility with ASIO 1.0 drivers the host application should always support
             // the "old" bufferSwitch method, too.
             ret = 1;
-
             break;
 
         case kAsioSupportsTimeCode:
@@ -3205,28 +3098,26 @@ static long asioMessages (long selector, long value, void* message, double* opt)
             // If an application does not need to know about time code, the driver has less work
             // to do.
             ret = 0;
-
             break;
     }
-
     return ret;
 }
 
 
-static PaError StartStream (PaStream *s)
+static PaError StartStream( PaStream *s )
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
     ASIOError asioError;
 
-    if (stream->outputChannelCount > 0) {
-        ZeroOutputBuffers (stream, 0);
-        ZeroOutputBuffers (stream, 1);
+    if( stream->outputChannelCount > 0 )
+    {
+        ZeroOutputBuffers( stream, 0 );
+        ZeroOutputBuffers( stream, 1 );
     }
 
-    PaUtil_ResetBufferProcessor (&stream->bufferProcessor);
-
+    PaUtil_ResetBufferProcessor( &stream->bufferProcessor );
     stream->stopProcessing = false;
     stream->zeroOutput = false;
 
@@ -3236,94 +3127,111 @@ static PaError StartStream (PaStream *s)
 
     stream->callbackFlags = 0;
 
-    if (ResetEvent (stream->completedBuffersPlayedEvent) == 0) {
+    if( ResetEvent( stream->completedBuffersPlayedEvent ) == 0 )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+        PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
     }
 
 
     /* Using blocking i/o interface... */
-    if (blockingState) {
+    if( blockingState )
+    {
         /* Reset blocking i/o buffer processor. */
-        PaUtil_ResetBufferProcessor (&blockingState->bufferProcessor);
+        PaUtil_ResetBufferProcessor( &blockingState->bufferProcessor );
 
         /* If we're about to process some input data. */
-
-        if (stream->inputChannelCount) {
+        if( stream->inputChannelCount )
+        {
             /* Reset callback-ReadStream sync event. */
-            if (ResetEvent (blockingState->readFramesReadyEvent) == 0) {
+            if( ResetEvent( blockingState->readFramesReadyEvent ) == 0 )
+            {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
             }
 
             /* Flush blocking i/o ring buffer. */
-            PaUtil_FlushRingBuffer (&blockingState->readRingBuffer);
-
-            (*blockingState->bufferProcessor.inputZeroer) (blockingState->readRingBuffer.buffer, 1, blockingState->bufferProcessor.inputChannelCount * blockingState->readRingBuffer.bufferSize);
+            PaUtil_FlushRingBuffer( &blockingState->readRingBuffer );
+            (*blockingState->bufferProcessor.inputZeroer)( blockingState->readRingBuffer.buffer, 1, blockingState->bufferProcessor.inputChannelCount * blockingState->readRingBuffer.bufferSize );
         }
 
         /* If we're about to process some output data. */
-        if (stream->outputChannelCount) {
+        if( stream->outputChannelCount )
+        {
             /* Reset callback-WriteStream sync event. */
-            if (ResetEvent (blockingState->writeBuffersReadyEvent) == 0) {
+            if( ResetEvent( blockingState->writeBuffersReadyEvent ) == 0 )
+            {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
             }
 
             /* Flush blocking i/o ring buffer. */
-            PaUtil_FlushRingBuffer (&blockingState->writeRingBuffer);
-
-            (*blockingState->bufferProcessor.outputZeroer) (blockingState->writeRingBuffer.buffer, 1, blockingState->bufferProcessor.outputChannelCount * blockingState->writeRingBuffer.bufferSize);
+            PaUtil_FlushRingBuffer( &blockingState->writeRingBuffer );
+            (*blockingState->bufferProcessor.outputZeroer)( blockingState->writeRingBuffer.buffer, 1, blockingState->bufferProcessor.outputChannelCount * blockingState->writeRingBuffer.bufferSize );
 
             /* Initialize the output ring buffer to "silence". */
-            PaUtil_AdvanceRingBufferWriteIndex (&blockingState->writeRingBuffer, blockingState->writeRingBufferInitialFrames);
+            PaUtil_AdvanceRingBufferWriteIndex( &blockingState->writeRingBuffer, blockingState->writeRingBufferInitialFrames );
         }
 
         /* Clear requested frames / buffers count. */
         blockingState->writeBuffersRequested     = 0;
-
         blockingState->readFramesRequested       = 0;
-
         blockingState->writeBuffersRequestedFlag = FALSE;
-
         blockingState->readFramesRequestedFlag   = FALSE;
-
         blockingState->outputUnderflowFlag       = FALSE;
-
         blockingState->inputOverflowFlag         = FALSE;
-
         blockingState->stopFlag                  = FALSE;
     }
 
 
-    if (result == paNoError) {
-        theAsioStream = stream;
+    if( result == paNoError )
+    {
+        assert( theAsioStream == stream ); /* theAsioStream should be set correctly in OpenStream */
+
+        /* initialize these variables before the callback has a chance to be invoked */
+        stream->isStopped = 0;
+        stream->isActive = 1;
+        stream->streamFinishedCallbackCalled = false;
+
         asioError = ASIOStart();
+        if( asioError != ASE_OK )
+        {
+            stream->isStopped = 1;
+            stream->isActive = 0;
 
-        if (asioError == ASE_OK) {
-            stream->isActive = 1;
-            stream->streamFinishedCallbackCalled = false;
-        } else {
-            theAsioStream = 0;
             result = paUnanticipatedHostError;
-            PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+            PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         }
     }
 
     return result;
 }
 
+static void EnsureCallbackHasCompleted( PaAsioStream *stream )
+{
+    // make sure that the callback is not still in-flight after ASIOStop()
+    // returns. This has been observed to happen on the Hoontech DSP24 for
+    // example.
+    int count = 2000;  // only wait for 2 seconds, rather than hanging.
+    while( stream->reenterCount != -1 && count > 0 )
+    {
+        Sleep(1);
+        --count;
+    }
+}
 
-static PaError StopStream (PaStream *s)
+static PaError StopStream( PaStream *s )
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
     ASIOError asioError;
 
-    if (stream->isActive) {
+    if( stream->isActive )
+    {
         /* If blocking i/o output is in use */
-        if (blockingState && stream->outputChannelCount) {
+        if( blockingState && stream->outputChannelCount )
+        {
             /* Request the whole output buffer to be available. */
             blockingState->writeBuffersRequested = blockingState->writeRingBuffer.bufferSize;
             /* Signalize that additional buffers are need. */
@@ -3334,18 +3242,20 @@ static PaError StopStream (PaStream *s)
             /* Wait until requested number of buffers has been freed. Time
                out after twice the blocking i/o ouput buffer could have
                been consumed. */
-            DWORD timeout = (DWORD) (2 * blockingState->writeRingBuffer.bufferSize * 1000
-                                     / stream->streamRepresentation.streamInfo.sampleRate);
-            DWORD waitResult = WaitForSingleObject (blockingState->writeBuffersReadyEvent, timeout);
+            DWORD timeout = (DWORD)( 2 * blockingState->writeRingBuffer.bufferSize * 1000
+                                       / stream->streamRepresentation.streamInfo.sampleRate );
+            DWORD waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout );
 
             /* If something seriously went wrong... */
-
-            if (waitResult == WAIT_FAILED) {
-                PA_DEBUG ( ("WaitForSingleObject() failed in StopStream()\n"));
+            if( waitResult == WAIT_FAILED )
+            {
+                PA_DEBUG(("WaitForSingleObject() failed in StopStream()\n"));
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
-            } else if (waitResult == WAIT_TIMEOUT) {
-                PA_DEBUG ( ("WaitForSingleObject() timed out in StopStream()\n"));
+                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+            }
+            else if( waitResult == WAIT_TIMEOUT )
+            {
+                PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n"));
                 result = paTimedOut;
             }
         }
@@ -3359,106 +3269,97 @@ static PaError StopStream (PaStream *s)
             length is longer than the asio buffer size then that should
             be taken into account.
         */
-
-        if (WaitForSingleObject (theAsioStream->completedBuffersPlayedEvent,
-                                 (DWORD) (stream->streamRepresentation.streamInfo.outputLatency * 1000. * 4.))
-                == WAIT_TIMEOUT) {
-            PA_DEBUG ( ("WaitForSingleObject() timed out in StopStream()\n"));
+        if( WaitForSingleObject( stream->completedBuffersPlayedEvent,
+                (DWORD)(stream->streamRepresentation.streamInfo.outputLatency * 1000. * 4.) )
+                    == WAIT_TIMEOUT )
+        {
+            PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n" ));
         }
     }
 
     asioError = ASIOStop();
-
-    if (asioError != ASE_OK) {
+    if( asioError == ASE_OK )
+    {
+        EnsureCallbackHasCompleted( stream );
+    }
+    else
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
     }
 
-    theAsioStream = 0;
-
+    stream->isStopped = 1;
     stream->isActive = 0;
 
-    if (!stream->streamFinishedCallbackCalled) {
-        if (stream->streamRepresentation.streamFinishedCallback != 0)
-            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
+    if( !stream->streamFinishedCallbackCalled )
+    {
+        if( stream->streamRepresentation.streamFinishedCallback != 0 )
+            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
     }
 
     return result;
 }
 
-
-static PaError AbortStream (PaStream *s)
+static PaError AbortStream( PaStream *s )
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
     ASIOError asioError;
 
     stream->zeroOutput = true;
 
     asioError = ASIOStop();
-
-    if (asioError != ASE_OK) {
+    if( asioError == ASE_OK )
+    {
+        EnsureCallbackHasCompleted( stream );
+    }
+    else
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
-    } else {
-        // make sure that the callback is not still in-flight when ASIOStop()
-        // returns. This has been observed to happen on the Hoontech DSP24 for
-        // example.
-        int count = 2000;  // only wait for 2 seconds, rather than hanging.
-
-        while (theAsioStream->reenterCount != -1 && count > 0) {
-            Sleep (1);
-            --count;
-        }
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
     }
 
-    /* it is questionable whether we should zero theAsioStream if ASIOStop()
-        returns an error, because the callback could still be active. We assume
-        not - this is based on the fact that ASIOStop is unlikely to fail
-        if the callback is running - it's more likely to fail because the
-        callback is not running. */
-
-    theAsioStream = 0;
-
+    stream->isStopped = 1;
     stream->isActive = 0;
 
-    if (!stream->streamFinishedCallbackCalled) {
-        if (stream->streamRepresentation.streamFinishedCallback != 0)
-            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
+    if( !stream->streamFinishedCallbackCalled )
+    {
+        if( stream->streamRepresentation.streamFinishedCallback != 0 )
+            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
     }
 
     return result;
 }
 
 
-static PaError IsStreamStopped (PaStream *s)
+static PaError IsStreamStopped( PaStream *s )
 {
-    //PaAsioStream *stream = (PaAsioStream*)s;
-    (void) s; /* unused parameter */
-    return theAsioStream == 0;
+    PaAsioStream *stream = (PaAsioStream*)s;
+    
+    return stream->isStopped;
 }
 
 
-static PaError IsStreamActive (PaStream *s)
+static PaError IsStreamActive( PaStream *s )
 {
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
 
     return stream->isActive;
 }
 
 
-static PaTime GetStreamTime (PaStream *s)
+static PaTime GetStreamTime( PaStream *s )
 {
     (void) s; /* unused parameter */
-    return (double) timeGetTime() * .001;
+    return (double)timeGetTime() * .001;
 }
 
 
-static double GetStreamCpuLoad (PaStream* s)
+static double GetStreamCpuLoad( PaStream* s )
 {
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
 
-    return PaUtil_GetCpuLoad (&stream->cpuLoadMeasurer);
+    return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer );
 }
 
 
@@ -3468,12 +3369,12 @@ static double GetStreamCpuLoad (PaStream* s)
     for blocking streams.
 */
 
-static PaError ReadStream (PaStream      *s     ,
+static PaError ReadStream( PaStream      *s     ,
                            void          *buffer,
-                           unsigned long  frames)
+                           unsigned long  frames )
 {
     PaError result = paNoError; /* Initial return value. */
-    PaAsioStream *stream = (PaAsioStream*) s; /* The PA ASIO stream. */
+    PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */
 
     /* Pointer to the blocking i/o data struct. */
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
@@ -3502,44 +3403,45 @@ static PaError ReadStream (PaStream      *s     ,
     unsigned int i; /* Just a counter. */
 
     /* About the time, needed to process 8 data blocks. */
-    DWORD timeout = (DWORD) (8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate);
+    DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate );
     DWORD waitResult = 0;
 
 
     /* Check if the stream is still available ready to gather new data. */
-
-    if (blockingState->stopFlag || !stream->isActive) {
-        PA_DEBUG ( ("Warning! Stream no longer available for reading in ReadStream()\n"));
+    if( blockingState->stopFlag || !stream->isActive )
+    {
+        PA_DEBUG(("Warning! Stream no longer available for reading in ReadStream()\n"));
         result = paStreamIsStopped;
         return result;
     }
 
     /* If the stream is a input stream. */
-    if (stream->inputChannelCount) {
+    if( stream->inputChannelCount )
+    {
         /* Prepare buffer access. */
-        if (!pBp->userOutputIsInterleaved) {
+        if( !pBp->userOutputIsInterleaved )
+        {
             userBuffer = blockingState->readStreamBuffer;
-
-            for (i = 0; i<pBp->inputChannelCount; ++i) {
-                ( (void**) userBuffer) [i] = ( (void**) buffer) [i];
+            for( i = 0; i<pBp->inputChannelCount; ++i )
+            {
+                ((void**)userBuffer)[i] = ((void**)buffer)[i];
             }
         } /* Use the unchanged buffer. */
-        else {
-            userBuffer = buffer;
-        }
+        else { userBuffer = buffer; }
 
-        do { /* Internal block processing for too large user data buffers. */
+        do /* Internal block processing for too large user data buffers. */
+        {
             /* Get the size of the current data block to be processed. */
-            lFramesPerBlock = (lFramesPerBlock < lFramesRemaining)
-                              ? lFramesPerBlock : lFramesRemaining;
+            lFramesPerBlock =(lFramesPerBlock < lFramesRemaining)
+                            ? lFramesPerBlock : lFramesRemaining;
             /* Use predefined block size for as long there are enough
                buffers available, thereafter reduce the processing block
                size to match the number of remaining buffers. So the final
                data block is processed although it may be incomplete. */
 
             /* If the available amount of data frames is insufficient. */
-
-            if (PaUtil_GetRingBufferReadAvailable (pRb) < (long) lFramesPerBlock) {
+            if( PaUtil_GetRingBufferReadAvailable(pRb) < (long) lFramesPerBlock )
+            {
                 /* Make sure, the event isn't already set! */
                 /* ResetEvent( blockingState->readFramesReadyEvent ); */
 
@@ -3550,33 +3452,27 @@ static PaError ReadStream (PaStream      *s     ,
                 blockingState->readFramesRequestedFlag = TRUE;
 
                 /* Wait until requested number of buffers has been freed. */
-                waitResult = WaitForSingleObject (blockingState->readFramesReadyEvent, timeout);
+                waitResult = WaitForSingleObject( blockingState->readFramesReadyEvent, timeout );
 
                 /* If something seriously went wrong... */
-
-                if (waitResult == WAIT_FAILED) {
-                    PA_DEBUG ( ("WaitForSingleObject() failed in ReadStream()\n"));
+                if( waitResult == WAIT_FAILED )
+                {
+                    PA_DEBUG(("WaitForSingleObject() failed in ReadStream()\n"));
                     result = paUnanticipatedHostError;
-                    PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+                    PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
                     return result;
-                } else if (waitResult == WAIT_TIMEOUT) {
-                    PA_DEBUG ( ("WaitForSingleObject() timed out in ReadStream()\n"));
+                }
+                else if( waitResult == WAIT_TIMEOUT )
+                {
+                    PA_DEBUG(("WaitForSingleObject() timed out in ReadStream()\n"));
 
                     /* If block processing has stopped, abort! */
+                    if( blockingState->stopFlag ) { return result = paStreamIsStopped; }
 
-                    if (blockingState->stopFlag) {
-                        return result = paStreamIsStopped;
-                    }
-
-                    /* if a timeout is encountered, continue, perhaps we should give up eventually */
-                    continue;
-
-                    /* To give up eventually, we may increase the time out
-                       period and return an error if it fails anyway. */
-                    /* retrun result = paTimedOut; */
+                    /* If a timeout is encountered, give up eventually. */
+                    return result = paTimedOut;
                 }
             }
-
             /* Now, the ring buffer contains the required amount of data
                frames.
                (Therefor we don't need to check the return argument of
@@ -3589,48 +3485,47 @@ static PaError ReadStream (PaStream      *s     ,
                segment is returned. Otherwise, i.e. if the first segment
                is large enough, the second segment's pointer will be NULL.
             */
-            PaUtil_GetRingBufferReadRegions (pRb                ,
-                                             lFramesPerBlock    ,
-                                             &pRingBufferData1st,
-                                             &lRingBufferSize1st,
-                                             &pRingBufferData2nd,
-                                             &lRingBufferSize2nd);
+            PaUtil_GetRingBufferReadRegions(pRb                ,
+                                            lFramesPerBlock    ,
+                                            &pRingBufferData1st,
+                                            &lRingBufferSize1st,
+                                            &pRingBufferData2nd,
+                                            &lRingBufferSize2nd);
 
             /* Set number of frames to be copied from the ring buffer. */
-            PaUtil_SetInputFrameCount (pBp, lRingBufferSize1st);
-
+            PaUtil_SetInputFrameCount( pBp, lRingBufferSize1st ); 
             /* Setup ring buffer access. */
-            PaUtil_SetInterleavedInputChannels (pBp               , /* Buffer processor. */
-                                                0                 ,  /* The first channel's index. */
-                                                pRingBufferData1st,  /* First ring buffer segment. */
-                                                0);                  /* Use all available channels. */
+            PaUtil_SetInterleavedInputChannels(pBp               ,  /* Buffer processor. */
+                                               0                 ,  /* The first channel's index. */
+                                               pRingBufferData1st,  /* First ring buffer segment. */
+                                               0                 ); /* Use all available channels. */
 
             /* If a second ring buffer segment is required. */
-            if (lRingBufferSize2nd) {
+            if( lRingBufferSize2nd ) {
                 /* Set number of frames to be copied from the ring buffer. */
-                PaUtil_Set2ndInputFrameCount (pBp, lRingBufferSize2nd);
+                PaUtil_Set2ndInputFrameCount( pBp, lRingBufferSize2nd );
                 /* Setup ring buffer access. */
-                PaUtil_Set2ndInterleavedInputChannels (pBp               , /* Buffer processor. */
-                                                       0                 ,  /* The first channel's index. */
-                                                       pRingBufferData2nd,  /* Second ring buffer segment. */
-                                                       0);                  /* Use all available channels. */
+                PaUtil_Set2ndInterleavedInputChannels(pBp               ,  /* Buffer processor. */
+                                                      0                 ,  /* The first channel's index. */
+                                                      pRingBufferData2nd,  /* Second ring buffer segment. */
+                                                      0                 ); /* Use all available channels. */
             }
 
             /* Let the buffer processor handle "copy and conversion" and
                update the ring buffer indices manually. */
-            lFramesCopied = PaUtil_CopyInput (pBp, &buffer, lFramesPerBlock);
-
-            PaUtil_AdvanceRingBufferReadIndex (pRb, lFramesCopied);
+            lFramesCopied = PaUtil_CopyInput( pBp, &buffer, lFramesPerBlock );
+            PaUtil_AdvanceRingBufferReadIndex( pRb, lFramesCopied );
 
             /* Decrease number of unprocessed frames. */
             lFramesRemaining -= lFramesCopied;
 
         } /* Continue with the next data chunk. */
-        while (lFramesRemaining);
+        while( lFramesRemaining );
 
 
         /* If there has been an input overflow within the callback */
-        if (blockingState->inputOverflowFlag) {
+        if( blockingState->inputOverflowFlag )
+        {
             blockingState->inputOverflowFlag = FALSE;
 
             /* Return the corresponding error code. */
@@ -3645,12 +3540,12 @@ static PaError ReadStream (PaStream      *s     ,
     return result;
 }
 
-static PaError WriteStream (PaStream      *s     ,
+static PaError WriteStream( PaStream      *s     ,
                             const void    *buffer,
-                            unsigned long  frames)
+                            unsigned long  frames )
 {
     PaError result = paNoError; /* Initial return value. */
-    PaAsioStream *stream = (PaAsioStream*) s; /* The PA ASIO stream. */
+    PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */
 
     /* Pointer to the blocking i/o data struct. */
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
@@ -3675,7 +3570,7 @@ static PaError WriteStream (PaStream      *s     ,
     unsigned long lFramesRemaining = frames;
 
     /* About the time, needed to process 8 data blocks. */
-    DWORD timeout = (DWORD) (8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate);
+    DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate );
     DWORD waitResult = 0;
 
     /* Copy the input argument to avoid pointer increment! */
@@ -3684,40 +3579,41 @@ static PaError WriteStream (PaStream      *s     ,
 
 
     /* Check if the stream ist still available ready to recieve new data. */
-
-    if (blockingState->stopFlag || !stream->isActive) {
-        PA_DEBUG ( ("Warning! Stream no longer available for writing in WriteStream()\n"));
+    if( blockingState->stopFlag || !stream->isActive )
+    {
+        PA_DEBUG(("Warning! Stream no longer available for writing in WriteStream()\n"));
         result = paStreamIsStopped;
         return result;
     }
 
     /* If the stream is a output stream. */
-    if (stream->outputChannelCount) {
+    if( stream->outputChannelCount )
+    {
         /* Prepare buffer access. */
-        if (!pBp->userOutputIsInterleaved) {
+        if( !pBp->userOutputIsInterleaved )
+        {
             userBuffer = blockingState->writeStreamBuffer;
-
-            for (i = 0; i<pBp->outputChannelCount; ++i) {
-                ( (const void**) userBuffer) [i] = ( (const void**) buffer) [i];
+            for( i = 0; i<pBp->outputChannelCount; ++i )
+            {
+                ((const void**)userBuffer)[i] = ((const void**)buffer)[i];
             }
         } /* Use the unchanged buffer. */
-        else {
-            userBuffer = buffer;
-        }
+        else { userBuffer = buffer; }
 
 
-        do { /* Internal block processing for too large user data buffers. */
+        do /* Internal block processing for too large user data buffers. */
+        {
             /* Get the size of the current data block to be processed. */
-            lFramesPerBlock = (lFramesPerBlock < lFramesRemaining)
-                              ? lFramesPerBlock : lFramesRemaining;
+            lFramesPerBlock =(lFramesPerBlock < lFramesRemaining)
+                            ? lFramesPerBlock : lFramesRemaining;
             /* Use predefined block size for as long there are enough
                frames available, thereafter reduce the processing block
                size to match the number of remaining frames. So the final
                data block is processed although it may be incomplete. */
 
             /* If the available amount of buffers is insufficient. */
-
-            if (PaUtil_GetRingBufferWriteAvailable (pRb) < (long) lFramesPerBlock) {
+            if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) lFramesPerBlock )
+            {
                 /* Make sure, the event isn't already set! */
                 /* ResetEvent( blockingState->writeBuffersReadyEvent ); */
 
@@ -3728,33 +3624,27 @@ static PaError WriteStream (PaStream      *s     ,
                 blockingState->writeBuffersRequestedFlag = TRUE;
 
                 /* Wait until requested number of buffers has been freed. */
-                waitResult = WaitForSingleObject (blockingState->writeBuffersReadyEvent, timeout);
+                waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout );
 
                 /* If something seriously went wrong... */
-
-                if (waitResult == WAIT_FAILED) {
-                    PA_DEBUG ( ("WaitForSingleObject() failed in WriteStream()\n"));
+                if( waitResult == WAIT_FAILED )
+                {
+                    PA_DEBUG(("WaitForSingleObject() failed in WriteStream()\n"));
                     result = paUnanticipatedHostError;
-                    PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+                    PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
                     return result;
-                } else if (waitResult == WAIT_TIMEOUT) {
-                    PA_DEBUG ( ("WaitForSingleObject() timed out in WriteStream()\n"));
+                }
+                else if( waitResult == WAIT_TIMEOUT )
+                {
+                    PA_DEBUG(("WaitForSingleObject() timed out in WriteStream()\n"));
 
                     /* If block processing has stopped, abort! */
-
-                    if (blockingState->stopFlag) {
-                        return result = paStreamIsStopped;
-                    }
-
-                    /* if a timeout is encountered, continue, perhaps we should give up eventually */
-                    continue;
-
-                    /* To give up eventually, we may increase the time out
-                       period and return an error if it fails anyway. */
-                    /* retrun result = paTimedOut; */
+                    if( blockingState->stopFlag ) { return result = paStreamIsStopped; }
+                    
+                    /* If a timeout is encountered, give up eventually. */
+                    return result = paTimedOut;
                 }
             }
-
             /* Now, the ring buffer contains the required amount of free
                space to store the provided number of data frames.
                (Therefor we don't need to check the return argument of
@@ -3767,48 +3657,47 @@ static PaError WriteStream (PaStream      *s     ,
                segment is returned. Otherwise, i.e. if the first segment
                is large enough, the second segment's pointer will be NULL.
             */
-            PaUtil_GetRingBufferWriteRegions (pRb                ,
-                                              lFramesPerBlock    ,
-                                              &pRingBufferData1st,
-                                              &lRingBufferSize1st,
-                                              &pRingBufferData2nd,
-                                              &lRingBufferSize2nd);
+            PaUtil_GetRingBufferWriteRegions(pRb                ,
+                                             lFramesPerBlock    ,
+                                             &pRingBufferData1st,
+                                             &lRingBufferSize1st,
+                                             &pRingBufferData2nd,
+                                             &lRingBufferSize2nd);
 
             /* Set number of frames to be copied to the ring buffer. */
-            PaUtil_SetOutputFrameCount (pBp, lRingBufferSize1st);
-
+            PaUtil_SetOutputFrameCount( pBp, lRingBufferSize1st ); 
             /* Setup ring buffer access. */
-            PaUtil_SetInterleavedOutputChannels (pBp               , /* Buffer processor. */
-                                                 0                 ,  /* The first channel's index. */
-                                                 pRingBufferData1st,  /* First ring buffer segment. */
-                                                 0);                  /* Use all available channels. */
+            PaUtil_SetInterleavedOutputChannels(pBp               ,  /* Buffer processor. */
+                                                0                 ,  /* The first channel's index. */
+                                                pRingBufferData1st,  /* First ring buffer segment. */
+                                                0                 ); /* Use all available channels. */
 
             /* If a second ring buffer segment is required. */
-            if (lRingBufferSize2nd) {
+            if( lRingBufferSize2nd ) {
                 /* Set number of frames to be copied to the ring buffer. */
-                PaUtil_Set2ndOutputFrameCount (pBp, lRingBufferSize2nd);
+                PaUtil_Set2ndOutputFrameCount( pBp, lRingBufferSize2nd );
                 /* Setup ring buffer access. */
-                PaUtil_Set2ndInterleavedOutputChannels (pBp               , /* Buffer processor. */
-                                                        0                 ,  /* The first channel's index. */
-                                                        pRingBufferData2nd,  /* Second ring buffer segment. */
-                                                        0);                  /* Use all available channels. */
+                PaUtil_Set2ndInterleavedOutputChannels(pBp               ,  /* Buffer processor. */
+                                                       0                 ,  /* The first channel's index. */
+                                                       pRingBufferData2nd,  /* Second ring buffer segment. */
+                                                       0                 ); /* Use all available channels. */
             }
 
             /* Let the buffer processor handle "copy and conversion" and
                update the ring buffer indices manually. */
-            lFramesCopied = PaUtil_CopyOutput (pBp, &userBuffer, lFramesPerBlock);
-
-            PaUtil_AdvanceRingBufferWriteIndex (pRb, lFramesCopied);
+            lFramesCopied = PaUtil_CopyOutput( pBp, &userBuffer, lFramesPerBlock );
+            PaUtil_AdvanceRingBufferWriteIndex( pRb, lFramesCopied );
 
             /* Decrease number of unprocessed frames. */
             lFramesRemaining -= lFramesCopied;
 
         } /* Continue with the next data chunk. */
-        while (lFramesRemaining);
+        while( lFramesRemaining );
 
 
         /* If there has been an output underflow within the callback */
-        if (blockingState->outputUnderflowFlag) {
+        if( blockingState->outputUnderflowFlag )
+        {
             blockingState->outputUnderflowFlag = FALSE;
 
             /* Return the corresponding error code. */
@@ -3816,7 +3705,8 @@ static PaError WriteStream (PaStream      *s     ,
         }
 
     } /* If this is not an output stream. */
-    else {
+    else
+    {
         result = paCanNotWriteToAnInputOnlyStream;
     }
 
@@ -3824,25 +3714,137 @@ static PaError WriteStream (PaStream      *s     ,
 }
 
 
-static signed long GetStreamReadAvailable (PaStream* s)
+static signed long GetStreamReadAvailable( PaStream* s )
 {
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
 
     /* Call buffer utility routine to get the number of available frames. */
-    return PaUtil_GetRingBufferReadAvailable (&stream->blockingState->readRingBuffer);
+    return PaUtil_GetRingBufferReadAvailable( &stream->blockingState->readRingBuffer );
 }
 
 
-static signed long GetStreamWriteAvailable (PaStream* s)
+static signed long GetStreamWriteAvailable( PaStream* s )
 {
-    PaAsioStream *stream = (PaAsioStream*) s;
+    PaAsioStream *stream = (PaAsioStream*)s;
 
     /* Call buffer utility routine to get the number of empty buffers. */
-    return PaUtil_GetRingBufferWriteAvailable (&stream->blockingState->writeRingBuffer);
+    return PaUtil_GetRingBufferWriteAvailable( &stream->blockingState->writeRingBuffer );
 }
 
 
-PaError PaAsio_ShowControlPanel (PaDeviceIndex device, void* systemSpecific)
+/* This routine will be called by the PortAudio engine when audio is needed.
+** It may called at interrupt level on some machines so don't do anything
+** that could mess up the system like calling malloc() or free().
+*/
+static int BlockingIoPaCallback(const void                     *inputBuffer    ,
+                                      void                     *outputBuffer   ,
+                                      unsigned long             framesPerBuffer,
+                                const PaStreamCallbackTimeInfo *timeInfo       ,
+                                      PaStreamCallbackFlags     statusFlags    ,
+                                      void                     *userData       )
+{
+    PaError result = paNoError; /* Initial return value. */
+    PaAsioStream *stream = *(PaAsioStream**)userData; /* The PA ASIO stream. */
+    PaAsioStreamBlockingState *blockingState = stream->blockingState; /* Persume blockingState is valid, otherwise the callback wouldn't be running. */
+
+    /* Get a pointer to the stream's blocking i/o buffer processor. */
+    PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor;
+    PaUtilRingBuffer      *pRb = NULL;
+
+    /* If output data has been requested. */
+    if( stream->outputChannelCount )
+    {
+        /* If the callback input argument signalizes a output underflow,
+           make sure the WriteStream() function knows about it, too! */
+        if( statusFlags & paOutputUnderflowed ) {
+            blockingState->outputUnderflowFlag = TRUE;
+        }
+
+        /* Access the corresponding ring buffer. */
+        pRb = &blockingState->writeRingBuffer;
+
+        /* If the blocking i/o buffer contains enough output data, */
+        if( PaUtil_GetRingBufferReadAvailable(pRb) >= (long) framesPerBuffer )
+        {
+            /* Extract the requested data from the ring buffer. */
+            PaUtil_ReadRingBuffer( pRb, outputBuffer, framesPerBuffer );
+        }
+        else /* If no output data is available :-( */
+        {
+            /* Signalize a write-buffer underflow. */
+            blockingState->outputUnderflowFlag = TRUE;
+
+            /* Fill the output buffer with silence. */
+            (*pBp->outputZeroer)( outputBuffer, 1, pBp->outputChannelCount * framesPerBuffer );
+
+            /* If playback is to be stopped */
+            if( blockingState->stopFlag && PaUtil_GetRingBufferReadAvailable(pRb) < (long) framesPerBuffer )
+            {
+                /* Extract all the remaining data from the ring buffer,
+                   whether it is a complete data block or not. */
+                PaUtil_ReadRingBuffer( pRb, outputBuffer, PaUtil_GetRingBufferReadAvailable(pRb) );
+            }
+        }
+
+        /* Set blocking i/o event? */
+        if( blockingState->writeBuffersRequestedFlag && PaUtil_GetRingBufferWriteAvailable(pRb) >= (long) blockingState->writeBuffersRequested )
+        {
+            /* Reset buffer request. */
+            blockingState->writeBuffersRequestedFlag = FALSE;
+            blockingState->writeBuffersRequested     = 0;
+            /* Signalize that requested buffers are ready. */
+            SetEvent( blockingState->writeBuffersReadyEvent );
+            /* What do we do if SetEvent() returns zero, i.e. the event
+               could not be set? How to return errors from within the
+               callback? - S.Fischer */
+        }
+    }
+
+    /* If input data has been supplied. */
+    if( stream->inputChannelCount )
+    {
+        /* If the callback input argument signalizes a input overflow,
+           make sure the ReadStream() function knows about it, too! */
+        if( statusFlags & paInputOverflowed ) {
+            blockingState->inputOverflowFlag = TRUE;
+        }
+
+        /* Access the corresponding ring buffer. */
+        pRb = &blockingState->readRingBuffer;
+
+        /* If the blocking i/o buffer contains not enough input buffers */
+        if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) framesPerBuffer )
+        {
+            /* Signalize a read-buffer overflow. */
+            blockingState->inputOverflowFlag = TRUE;
+
+            /* Remove some old data frames from the buffer. */
+            PaUtil_AdvanceRingBufferReadIndex( pRb, framesPerBuffer );
+        }
+
+        /* Insert the current input data into the ring buffer. */
+        PaUtil_WriteRingBuffer( pRb, inputBuffer, framesPerBuffer );
+
+        /* Set blocking i/o event? */
+        if( blockingState->readFramesRequestedFlag && PaUtil_GetRingBufferReadAvailable(pRb) >= (long) blockingState->readFramesRequested )
+        {
+            /* Reset buffer request. */
+            blockingState->readFramesRequestedFlag = FALSE;
+            blockingState->readFramesRequested     = 0;
+            /* Signalize that requested buffers are ready. */
+            SetEvent( blockingState->readFramesReadyEvent );
+            /* What do we do if SetEvent() returns zero, i.e. the event
+               could not be set? How to return errors from within the
+               callback? - S.Fischer */
+            /** @todo report an error with PA_DEBUG */
+        }
+    }
+
+    return paContinue;
+}
+
+
+PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific )
 {
     PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
@@ -3854,14 +3856,12 @@ PaError PaAsio_ShowControlPanel (PaDeviceIndex device, void* systemSpecific)
     PaAsioDeviceInfo *asioDeviceInfo;
 
 
-    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
-
-    if (result != paNoError)
+    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
+    if( result != paNoError )
         goto error;
 
-    result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
-
-    if (result != paNoError)
+    result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
+    if( result != paNoError )
         goto error;
 
     /*
@@ -3872,87 +3872,84 @@ PaError PaAsio_ShowControlPanel (PaDeviceIndex device, void* systemSpecific)
         done safely while a stream is open.
     */
 
-    asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
-
-    if (asioHostApi->openAsioDeviceIndex != paNoDevice) {
+    asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
+    if( asioHostApi->openAsioDeviceIndex != paNoDevice )
+    {
         result = paDeviceUnavailable;
         goto error;
     }
 
-    asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
+    asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
 
     /* See notes about CoInitialize(0) in LoadAsioDriver(). */
-    CoInitialize (0);
+	CoInitialize(0);
 
-    if (!asioHostApi->asioDrivers->loadDriver (const_cast<char*> (asioDeviceInfo->commonDeviceInfo.name))) {
+    if( !asioHostApi->asioDrivers->loadDriver( const_cast<char*>(asioDeviceInfo->commonDeviceInfo.name) ) )
+    {
         result = paUnanticipatedHostError;
         goto error;
     }
 
     /* CRUCIAL!!! */
-    memset (&asioDriverInfo, 0, sizeof (ASIODriverInfo));
-
+    memset( &asioDriverInfo, 0, sizeof(ASIODriverInfo) );
     asioDriverInfo.asioVersion = 2;
-
     asioDriverInfo.sysRef = systemSpecific;
-
-    asioError = ASIOInit (&asioDriverInfo);
-
-    if (asioError != ASE_OK) {
+    asioError = ASIOInit( &asioDriverInfo );
+    if( asioError != ASE_OK )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         goto error;
-    } else {
+    }
+    else
+    {
         asioIsInitialized = 1;
     }
 
-    PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOInit(): %s\n", PaAsio_GetAsioErrorText (asioError)));
-
-    PA_DEBUG ( ("asioVersion: ASIOInit(): %ld\n",   asioDriverInfo.asioVersion));
-    PA_DEBUG ( ("driverVersion: ASIOInit(): %ld\n", asioDriverInfo.driverVersion));
-    PA_DEBUG ( ("Name: ASIOInit(): %s\n",           asioDriverInfo.name));
-    PA_DEBUG ( ("ErrorMessage: ASIOInit(): %s\n",   asioDriverInfo.errorMessage));
+PA_DEBUG(("PaAsio_ShowControlPanel: ASIOInit(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
+PA_DEBUG(("asioVersion: ASIOInit(): %ld\n",   asioDriverInfo.asioVersion )); 
+PA_DEBUG(("driverVersion: ASIOInit(): %ld\n", asioDriverInfo.driverVersion )); 
+PA_DEBUG(("Name: ASIOInit(): %s\n",           asioDriverInfo.name )); 
+PA_DEBUG(("ErrorMessage: ASIOInit(): %s\n",   asioDriverInfo.errorMessage )); 
 
     asioError = ASIOControlPanel();
-
-    if (asioError != ASE_OK) {
-        PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText (asioError)));
+    if( asioError != ASE_OK )
+    {
+        PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         goto error;
     }
 
-    PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText (asioError)));
+PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
 
     asioError = ASIOExit();
-
-    if (asioError != ASE_OK) {
+    if( asioError != ASE_OK )
+    {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
         asioIsInitialized = 0;
         goto error;
     }
 
-    CoUninitialize();
-
-    PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOExit(): %s\n", PaAsio_GetAsioErrorText (asioError)));
+	CoUninitialize();
+PA_DEBUG(("PaAsio_ShowControlPanel: ASIOExit(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
 
     return result;
 
 error:
-
-    if (asioIsInitialized) {
-        ASIOExit();
-    }
-
-    CoUninitialize();
+    if( asioIsInitialized )
+	{
+		ASIOExit();
+	}
+	CoUninitialize();
 
     return result;
 }
 
 
-PaError PaAsio_GetInputChannelName (PaDeviceIndex device, int channelIndex,
-                                    const char** channelName)
+PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex,
+        const char** channelName )
 {
     PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
@@ -3960,19 +3957,17 @@ PaError PaAsio_GetInputChannelName (PaDeviceIndex device, int channelIndex,
     PaAsioDeviceInfo *asioDeviceInfo;
 
 
-    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
-
-    if (result != paNoError)
+    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
+    if( result != paNoError )
         goto error;
 
-    result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
-
-    if (result != paNoError)
+    result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
+    if( result != paNoError )
         goto error;
 
-    asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
+    asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
 
-    if (channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxInputChannels) {
+    if( channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxInputChannels ){
         result = paInvalidChannelCount;
         goto error;
     }
@@ -3980,14 +3975,14 @@ PaError PaAsio_GetInputChannelName (PaDeviceIndex device, int channelIndex,
     *channelName = asioDeviceInfo->asioChannelInfos[channelIndex].name;
 
     return paNoError;
-
+    
 error:
     return result;
 }
 
 
-PaError PaAsio_GetOutputChannelName (PaDeviceIndex device, int channelIndex,
-                                     const char** channelName)
+PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,
+        const char** channelName )
 {
     PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
@@ -3995,140 +3990,76 @@ PaError PaAsio_GetOutputChannelName (PaDeviceIndex device, int channelIndex,
     PaAsioDeviceInfo *asioDeviceInfo;
 
 
-    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
-
-    if (result != paNoError)
+    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
+    if( result != paNoError )
         goto error;
 
-    result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
-
-    if (result != paNoError)
+    result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
+    if( result != paNoError )
         goto error;
 
-    asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
+    asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
 
-    if (channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxOutputChannels) {
+    if( channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxOutputChannels ){
         result = paInvalidChannelCount;
         goto error;
     }
 
     *channelName = asioDeviceInfo->asioChannelInfos[
-
-                       asioDeviceInfo->commonDeviceInfo.maxInputChannels + channelIndex].name;
+            asioDeviceInfo->commonDeviceInfo.maxInputChannels + channelIndex].name;
 
     return paNoError;
-
+    
 error:
     return result;
 }
 
 
-
-
-
-
-
-
-/* This routine will be called by the PortAudio engine when audio is needed.
-** It may called at interrupt level on some machines so don't do anything
-** that could mess up the system like calling malloc() or free().
+/* NOTE: the following functions are ASIO-stream specific, and are called directly
+    by client code. We need to check for many more error conditions here because
+    we don't have the benefit of pa_front.c's parameter checking.
 */
-static int BlockingIoPaCallback (const void                     *inputBuffer    ,
-                                 void                     *outputBuffer   ,
-                                 unsigned long             framesPerBuffer,
-                                 const PaStreamCallbackTimeInfo *timeInfo       ,
-                                 PaStreamCallbackFlags     statusFlags    ,
-                                 void                     *userData)
-{
-    PaError result = paNoError; /* Initial return value. */
-    PaAsioStream *stream = * (PaAsioStream**) userData; /* The PA ASIO stream. */ /* This is a pointer to "theAsioStream", see OpenStream(). */
-    PaAsioStreamBlockingState *blockingState = stream->blockingState; /* Persume blockingState is valid, otherwise the callback wouldn't be running. */
-
-    /* Get a pointer to the stream's blocking i/o buffer processor. */
-    PaUtilBufferProcessor *pBp = &blockingState->bufferProcessor;
-    PaUtilRingBuffer      *pRb = NULL;
-
-    /* If output data has been requested. */
 
-    if (stream->outputChannelCount) {
-        /* If the callback input argument signalizes a output underflow,
-           make sure the WriteStream() function knows about it, too! */
-        if (statusFlags & paOutputUnderflowed) {
-            blockingState->outputUnderflowFlag = TRUE;
-        }
-
-        /* Access the corresponding ring buffer. */
-        pRb = &blockingState->writeRingBuffer;
-
-        /* If the blocking i/o buffer contains enough output data, */
-        if (PaUtil_GetRingBufferReadAvailable (pRb) >= (long) framesPerBuffer) {
-            /* Extract the requested data from the ring buffer. */
-            PaUtil_ReadRingBuffer (pRb, outputBuffer, framesPerBuffer);
-        } else { /* If no output data is available :-( */
-            /* Signalize a write-buffer underflow. */
-            blockingState->outputUnderflowFlag = TRUE;
-
-            /* Fill the output buffer with silence. */
-            (*pBp->outputZeroer) (outputBuffer, 1, pBp->outputChannelCount * framesPerBuffer);
-
-            /* If playback is to be stopped */
+static PaError GetAsioStreamPointer( PaAsioStream **stream, PaStream *s )
+{
+    PaError result;
+    PaUtilHostApiRepresentation *hostApi;
+    PaAsioHostApiRepresentation *asioHostApi;
+    
+    result = PaUtil_ValidateStreamPointer( s );
+    if( result != paNoError )
+        return result;
 
-            if (blockingState->stopFlag && PaUtil_GetRingBufferReadAvailable (pRb) < (long) framesPerBuffer) {
-                /* Extract all the remaining data from the ring buffer,
-                   whether it is a complete data block or not. */
-                PaUtil_ReadRingBuffer (pRb, outputBuffer, PaUtil_GetRingBufferReadAvailable (pRb));
-            }
-        }
+    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
+    if( result != paNoError )
+        return result;
 
-        /* Set blocking i/o event? */
-        if (blockingState->writeBuffersRequestedFlag && PaUtil_GetRingBufferWriteAvailable (pRb) >= (long) blockingState->writeBuffersRequested) {
-            /* Reset buffer request. */
-            blockingState->writeBuffersRequestedFlag = FALSE;
-            blockingState->writeBuffersRequested     = 0;
-            /* Signalize that requested buffers are ready. */
-            SetEvent (blockingState->writeBuffersReadyEvent);
-            /* What do we do if SetEvent() returns zero, i.e. the event
-               could not be set? How to return errors from within the
-               callback? - S.Fischer */
-        }
+    asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
+    
+    if( PA_STREAM_REP( s )->streamInterface == &asioHostApi->callbackStreamInterface
+            || PA_STREAM_REP( s )->streamInterface == &asioHostApi->blockingStreamInterface )
+    {
+        /* s is an ASIO  stream */
+        *stream = (PaAsioStream *)s;
+        return paNoError;
     }
+    else
+    {
+        return paIncompatibleStreamHostApi;
+    }
+}
 
-    /* If input data has been supplied. */
-    if (stream->inputChannelCount) {
-        /* If the callback input argument signalizes a input overflow,
-           make sure the ReadStream() function knows about it, too! */
-        if (statusFlags & paInputOverflowed) {
-            blockingState->inputOverflowFlag = TRUE;
-        }
-
-        /* Access the corresponding ring buffer. */
-        pRb = &blockingState->readRingBuffer;
-
-        /* If the blocking i/o buffer contains not enough input buffers */
-        if (PaUtil_GetRingBufferWriteAvailable (pRb) < (long) framesPerBuffer) {
-            /* Signalize a read-buffer overflow. */
-            blockingState->inputOverflowFlag = TRUE;
-
-            /* Remove some old data frames from the buffer. */
-            PaUtil_AdvanceRingBufferReadIndex (pRb, framesPerBuffer);
-        }
 
-        /* Insert the current input data into the ring buffer. */
-        PaUtil_WriteRingBuffer (pRb, inputBuffer, framesPerBuffer);
+PaError PaAsio_SetStreamSampleRate( PaStream* s, double sampleRate )
+{
+    PaAsioStream *stream;
+    PaError result = GetAsioStreamPointer( &stream, s );
+    if( result != paNoError )
+        return result;
 
-        /* Set blocking i/o event? */
-        if (blockingState->readFramesRequestedFlag && PaUtil_GetRingBufferReadAvailable (pRb) >= (long) blockingState->readFramesRequested) {
-            /* Reset buffer request. */
-            blockingState->readFramesRequestedFlag = FALSE;
-            blockingState->readFramesRequested     = 0;
-            /* Signalize that requested buffers are ready. */
-            SetEvent (blockingState->readFramesReadyEvent);
-            /* What do we do if SetEvent() returns zero, i.e. the event
-               could not be set? How to return errors from within the
-               callback? - S.Fischer */
-            /** @todo report an error with PA_DEBUG */
-        }
-    }
+    if( stream != theAsioStream )
+        return paBadStreamPtr;
 
-    return paContinue;
+    return ValidateAndSetSampleRate( sampleRate );
 }
+
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core.c
index 98cfbb518c..0da5dc5b7d 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core.c
@@ -1714,19 +1714,19 @@ static OSStatus ringBufferIOProc( AudioConverterRef inAudioConverter,
                              void*inUserData )
 {
    void *dummyData;
-   long dummySize;
+   ring_buffer_size_t dummySize;
    PaUtilRingBuffer *rb = (PaUtilRingBuffer *) inUserData;
 
    VVDBUG(("ringBufferIOProc()\n"));
 
-   assert( sizeof( UInt32 ) == sizeof( long ) );
    if( PaUtil_GetRingBufferReadAvailable( rb ) == 0 ) {
       *outData = NULL;
       *ioDataSize = 0;
       return RING_BUFFER_EMPTY;
    }
+   assert(sizeof(UInt32) == sizeof(ring_buffer_size_t));
    PaUtil_GetRingBufferReadRegions( rb, *ioDataSize,
-                                    outData, (long *)ioDataSize, 
+                                    outData, (ring_buffer_size_t *)ioDataSize, 
                                     &dummyData, &dummySize );
       
    assert( *ioDataSize );
@@ -1938,7 +1938,7 @@ static OSStatus AudioIOProc( void *inRefCon,
                because we have to do a little buffer processing that the
                AudioConverter would otherwise handle for us. */
             void *data1, *data2;
-            long size1, size2;
+            ring_buffer_size_t size1, size2;
             PaUtil_GetRingBufferReadRegions( &stream->inputRingBuffer,
                                              inChan*frames*flsz,
                                              &data1, &size1,
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c
index d858c6219b..6d31a713db 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c
@@ -577,7 +577,7 @@ signed long GetStreamReadAvailable( PaStream* stream )
     VVDBUG(("GetStreamReadAvailable()\n"));
 
     return PaUtil_GetRingBufferReadAvailable( &blio->inputRingBuffer )
-                         / ( blio->outputSampleSizeActual * blio->outChan );
+                         / ( blio->inputSampleSizeActual * blio->inChan );
 }
 
 
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h
index 291304c7e3..1797cbafd4 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h
@@ -61,10 +61,11 @@
 #ifndef PA_MAC_CORE_INTERNAL_H__
 #define PA_MAC_CORE_INTERNAL_H__
 
+#include <CoreAudio/CoreAudio.h>
+#include <CoreServices/CoreServices.h>
 #include <AudioUnit/AudioUnit.h>
 #include <AudioToolbox/AudioToolbox.h>
 
-
 #include "portaudio.h"
 #include "pa_util.h"
 #include "pa_hostapi.h"
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c
index 5bc592e86e..b58b822022 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c
@@ -61,6 +61,7 @@
 #include <libkern/OSAtomic.h>
 #include <strings.h>
 #include <pthread.h>
+#include <sys/time.h>
 
 PaError PaMacCore_SetUnixError( int err, int line )
 {
@@ -305,8 +306,13 @@ long computeRingBufferSize( const PaStreamParameters *inputParameters,
 /*
  * Durring testing of core audio, I found that serious crashes could occur
  * if properties such as sample rate were changed multiple times in rapid
- * succession. The function below has some fancy logic to make sure that changes
- * are acknowledged before another is requested. That seems to help a lot.
+ * succession. The function below could be used to with a condition variable.
+ * to prevent propertychanges from happening until the last property
+ * change is acknowledged. Instead, I implemented a busy-wait, which is simpler
+ * to implement b/c in second round of testing (nov '09) property changes occured
+ * quickly and so there was no real way to test the condition variable implementation.
+ * therefore, this function is not used, but it is aluded to in commented code below,
+ * since it represents a theoretically better implementation.
  */
 
 OSStatus propertyProc(
@@ -316,9 +322,7 @@ OSStatus propertyProc(
     AudioDevicePropertyID inPropertyID, 
     void* inClientData )
 {
-   MutexAndBool *mab = (MutexAndBool *) inClientData;
-   mab->once = TRUE;
-   pthread_mutex_unlock( &(mab->mutex) );
+   // this is where we would set the condition variable
    return noErr;
 }
 
@@ -326,7 +330,11 @@ OSStatus propertyProc(
    be acknowledged, and returns the final value, which is not guaranteed
    by this function to be the same as the desired value. Obviously, this
    function can only be used for data whose input and output are the
-   same size and format, and their size and format are known in advance.*/
+   same size and format, and their size and format are known in advance.
+   whether or not the call succeeds, if the data is successfully read,
+   it is returned in outPropertyData. If it is not read successfully,
+   outPropertyData is zeroed, which may or may not be useful in
+   determining if the property was read. */
 PaError AudioDeviceSetPropertyNowAndWaitForChange(
     AudioDeviceID inDevice,
     UInt32 inChannel, 
@@ -337,83 +345,72 @@ PaError AudioDeviceSetPropertyNowAndWaitForChange(
     void *outPropertyData )
 {
    OSStatus macErr;
-   int unixErr;
-   MutexAndBool mab;
    UInt32 outPropertyDataSize = inPropertyDataSize;
 
    /* First, see if it already has that value. If so, return. */
    macErr = AudioDeviceGetProperty( inDevice, inChannel,
                                  isInput, inPropertyID, 
                                  &outPropertyDataSize, outPropertyData );
-   if( macErr )
-      goto failMac2;
+   if( macErr ) {
+      memset( outPropertyData, 0, inPropertyDataSize );
+      goto failMac;
+   }
    if( inPropertyDataSize!=outPropertyDataSize )
       return paInternalError;
    if( 0==memcmp( outPropertyData, inPropertyData, outPropertyDataSize ) )
       return paNoError;
 
-   /* setup and lock mutex */
-   mab.once = FALSE;
-   unixErr = pthread_mutex_init( &mab.mutex, NULL );
-   if( unixErr )
-      goto failUnix2;
-   unixErr = pthread_mutex_lock( &mab.mutex );
-   if( unixErr )
-      goto failUnix;
+   /* Ideally, we'd use a condition variable to determine changes.
+      we could set that up here. */
 
-   /* add property listener */
+   /* If we were using a cond variable, we'd do something useful here,
+      but for now, this is just to make 10.6 happy. */
    macErr = AudioDeviceAddPropertyListener( inDevice, inChannel, isInput,
                                    inPropertyID, propertyProc,
-                                   &mab ); 
+                                   NULL ); 
    if( macErr )
+      /* we couldn't add a listener. */
       goto failMac;
+
    /* set property */
    macErr  = AudioDeviceSetProperty( inDevice, NULL, inChannel,
                                  isInput, inPropertyID,
                                  inPropertyDataSize, inPropertyData );
-   if( macErr ) {
-      /* we couldn't set the property, so we'll just unlock the mutex
-         and move on. */
-      pthread_mutex_unlock( &mab.mutex );
-   }
-
-   /* wait for property to change */                      
-   unixErr = pthread_mutex_lock( &mab.mutex );
-   if( unixErr )
-      goto failUnix;
-
-   /* now read the property back out */
-   macErr = AudioDeviceGetProperty( inDevice, inChannel,
-                                 isInput, inPropertyID, 
-                                 &outPropertyDataSize, outPropertyData );
    if( macErr )
       goto failMac;
-   /* cleanup */
-   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput,
-                                      inPropertyID, propertyProc );
-   unixErr = pthread_mutex_unlock( &mab.mutex );
-   if( unixErr )
-      goto failUnix2;
-   unixErr = pthread_mutex_destroy( &mab.mutex );
-   if( unixErr )
-      goto failUnix2;
 
+   /* busy-wait up to 30 seconds for the property to change */
+   /* busy-wait is justified here only because the correct alternative (condition variable)
+      was hard to test, since most of the waiting ended up being for setting rather than
+      getting in OS X 10.5. This was not the case in earlier OS versions. */
+   struct timeval tv1, tv2;
+   gettimeofday( &tv1, NULL );
+   memcpy( &tv2, &tv1, sizeof( struct timeval ) );
+   while( tv2.tv_sec - tv1.tv_sec < 30 ) {
+      /* now read the property back out */
+      macErr = AudioDeviceGetProperty( inDevice, inChannel,
+                                    isInput, inPropertyID, 
+                                    &outPropertyDataSize, outPropertyData );
+      if( macErr ) {
+         memset( outPropertyData, 0, inPropertyDataSize );
+         goto failMac;
+      }
+      /* and compare... */
+      if( 0==memcmp( outPropertyData, inPropertyData, outPropertyDataSize ) ) {
+         AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc );
+         return paNoError;
+      }
+      /* No match yet, so let's sleep and try again. */
+      Pa_Sleep( 100 );
+      gettimeofday( &tv2, NULL );
+   }
+   DBUG( ("Timeout waiting for device setting.\n" ) );
+   
+   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc );
    return paNoError;
 
- failUnix:
-   pthread_mutex_destroy( &mab.mutex );
-   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput,
-                                      inPropertyID, propertyProc );
-
- failUnix2:
-   DBUG( ("Error #%d while setting a device property: %s\n", unixErr, strerror( unixErr ) ) );
-   return paUnanticipatedHostError;
-
  failMac:
-   pthread_mutex_destroy( &mab.mutex );
-   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput,
-                                      inPropertyID, propertyProc );
- failMac2:
+   AudioDeviceRemovePropertyListener( inDevice, inChannel, isInput, inPropertyID, propertyProc );
    return ERR( macErr );
 }
 
@@ -431,10 +428,6 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
                                     const bool requireExact,
                                     const Float64 desiredSrate )
 {
-   /*FIXME: changing the sample rate is disruptive to other programs using the
-            device, so it might be good to offer a custom flag to not change the
-            sample rate and just do conversion. (in my casual tests, there is
-            no disruption unless the sample rate really does need to change) */
    const bool isInput = isOutput ? 0 : 1;
    Float64 srate;
    UInt32 propsize = sizeof( Float64 );
@@ -446,13 +439,15 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
    VDBUG(("Setting sample rate for device %ld to %g.\n",device,(float)desiredSrate));
 
    /* -- try setting the sample rate -- */
+   srate = 0;
    err = AudioDeviceSetPropertyNowAndWaitForChange(
                                  device, 0, isInput,
                                  kAudioDevicePropertyNominalSampleRate,
                                  propsize, &desiredSrate, &srate );
-   if( err )
-      return err;
 
+   /* -- if the rate agrees, and was changed, we are done -- */
+   if( srate != 0 && srate == desiredSrate )
+      return paNoError;
    /* -- if the rate agrees, and we got no errors, we are done -- */
    if( !err && srate == desiredSrate )
       return paNoError;
@@ -505,19 +500,19 @@ PaError setBestSampleRateForDevice( const AudioDeviceID device,
 
    /* -- set the sample rate -- */
    propsize = sizeof( best );
+   srate = 0;
    err = AudioDeviceSetPropertyNowAndWaitForChange(
                                  device, 0, isInput,
                                  kAudioDevicePropertyNominalSampleRate,
                                  propsize, &best, &srate );
-   if( err )
-      return err;
 
-   if( err )
-      return ERR( err );
    /* -- if the set rate matches, we are done -- */
-   if( srate == best )
+   if( srate != 0 && srate == best )
       return paNoError;
 
+   if( err )
+      return ERR( err );
+
    /* -- otherwise, something wierd happened: we didn't set the rate, and we got no errors. Just bail. */
    return paInternalError;
 }
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h
index 899826d596..7c4afe52ca 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h
@@ -143,18 +143,6 @@ long computeRingBufferSize( const PaStreamParameters *inputParameters,
                                    long outputFramesPerBuffer,
                                    double sampleRate );
 
-/*
- * Durring testing of core audio, I found that serious crashes could occur
- * if properties such as sample rate were changed multiple times in rapid
- * succession. The function below has some fancy logic to make sure that changes
- * are acknowledged before another is requested. That seems to help a lot.
- */
-
-typedef struct {
-   bool once; /* I didn't end up using this. bdr */
-   pthread_mutex_t mutex;
-} MutexAndBool ;
-
 OSStatus propertyProc(
     AudioDeviceID inDevice, 
     UInt32 inChannel, 
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/dsound/pa_win_ds.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/dsound/pa_win_ds.c
index dc71439f72..46c5caee41 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/dsound/pa_win_ds.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/dsound/pa_win_ds.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_win_ds.c 1339 2008-02-15 07:50:33Z rossb $
+ * $Id: pa_win_ds.c 1433 2009-12-09 01:42:59Z rossb $
  * Portable Audio I/O Library DirectSound implementation
  *
  * Authors: Phil Burk, Robert Marsanyi & Ross Bencina
@@ -107,7 +107,11 @@
  provided in newer platform sdks and x64
  */
 #ifndef DWORD_PTR
-#define DWORD_PTR DWORD
+    #if defined(_WIN64)
+        #define DWORD_PTR unsigned __int64
+    #else
+        #define DWORD_PTR unsigned long
+    #endif
 #endif
 
 #define PRINT(x) PA_DEBUG(x);
@@ -1401,12 +1405,14 @@ static HRESULT InitInputBuffer( PaWinDsStream *stream, PaSampleFormat sampleForm
 
     // first try WAVEFORMATEXTENSIBLE. if this fails, fall back to WAVEFORMATEX
     PaWin_InitializeWaveFormatExtensible( &waveFormat, nChannels, 
-                sampleFormat, nFrameRate, channelMask );
+                sampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ),
+                nFrameRate, channelMask );
 
     if( IDirectSoundCapture_CreateCaptureBuffer( stream->pDirectSoundCapture,
                   &captureDesc, &stream->pDirectSoundInputBuffer, NULL) != DS_OK )
     {
-        PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, nFrameRate );
+        PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, 
+                PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), nFrameRate );
 
         if ((result = IDirectSoundCapture_CreateCaptureBuffer( stream->pDirectSoundCapture,
                     &captureDesc, &stream->pDirectSoundInputBuffer, NULL)) != DS_OK) return result;
@@ -1477,11 +1483,13 @@ static HRESULT InitOutputBuffer( PaWinDsStream *stream, PaSampleFormat sampleFor
 
     // first try WAVEFORMATEXTENSIBLE. if this fails, fall back to WAVEFORMATEX
     PaWin_InitializeWaveFormatExtensible( &waveFormat, nChannels, 
-                sampleFormat, nFrameRate, channelMask );
+                sampleFormat, PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ),
+                nFrameRate, channelMask );
 
     if( IDirectSoundBuffer_SetFormat( pPrimaryBuffer, (WAVEFORMATEX*)&waveFormat) != DS_OK )
     {
-        PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, nFrameRate );
+        PaWin_InitializeWaveFormatEx( &waveFormat, nChannels, sampleFormat, 
+                PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat ), nFrameRate );
 
         if((result = IDirectSoundBuffer_SetFormat( pPrimaryBuffer, (WAVEFORMATEX*)&waveFormat)) != DS_OK) return result;
     }
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp
index 0653b138b0..498fc6c442 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp
@@ -26,13 +26,13 @@
  */
 
 /*
- * The text above constitutes the entire PortAudio license; however,
+ * The text above constitutes the entire PortAudio license; however, 
  * the PortAudio community also makes the following non-binding requests:
  *
  * Any person wishing to distribute modifications to the Software is
  * requested to send the modifications to the original developer so that
- * they can be incorporated into the canonical version. It is also
- * requested that these non-binding requests be included along with the
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
  * license above.
  */
 
@@ -56,6 +56,8 @@
 #include <functiondiscoverykeys.h>  // PKEY_Device_FriendlyName
 #endif
 
+#include <process.h>
+
 #include "pa_util.h"
 #include "pa_allocation.h"
 #include "pa_hostapi.h"
@@ -73,7 +75,12 @@
 #define PORTAUDIO_SHAREMODE     AUDCLNT_SHAREMODE_SHARED
 //#define PORTAUDIO_SHAREMODE   AUDCLNT_SHAREMODE_EXCLUSIVE
 
-
+/* use CreateThread for CYGWIN, _beginthreadex for all others */
+#ifndef __CYGWIN__
+#define CREATE_THREAD (HANDLE) _beginthreadex(NULL, 0, (unsigned (_stdcall *)(void *))ProcThread, (LPVOID) stream, 0, (unsigned *)&stream->dwThreadId)
+#else
+#define CREATE_THREAD CreateThread(NULL, 0, ProcThread, (LPVOID) stream, 0, &stream->dwThreadId)
+#endif
 
 /* prototypes for functions declared in this file */
 
@@ -82,22 +89,21 @@ extern "C"
 {
 #endif /* __cplusplus */
 
-    PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index);
+PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 
 #ifdef __cplusplus
 }
-
 #endif /* __cplusplus */
 
 
 
 
-static void Terminate (struct PaUtilHostApiRepresentation *hostApi);
-static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
-                                  double sampleRate);
-static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
+                                  double sampleRate );
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -105,19 +111,19 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData);
-static PaError CloseStream (PaStream* stream);
-static PaError StartStream (PaStream *stream);
-static PaError StopStream (PaStream *stream);
-static PaError AbortStream (PaStream *stream);
-static PaError IsStreamStopped (PaStream *s);
-static PaError IsStreamActive (PaStream *stream);
-static PaTime GetStreamTime (PaStream *stream);
-static double GetStreamCpuLoad (PaStream* stream);
-static PaError ReadStream (PaStream* stream, void *buffer, unsigned long frames);
-static PaError WriteStream (PaStream* stream, const void *buffer, unsigned long frames);
-static signed long GetStreamReadAvailable (PaStream* stream);
-static signed long GetStreamWriteAvailable (PaStream* stream);
+                           void *userData );
+static PaError CloseStream( PaStream* stream );
+static PaError StartStream( PaStream *stream );
+static PaError StopStream( PaStream *stream );
+static PaError AbortStream( PaStream *stream );
+static PaError IsStreamStopped( PaStream *s );
+static PaError IsStreamActive( PaStream *stream );
+static PaTime GetStreamTime( PaStream *stream );
+static double GetStreamCpuLoad( PaStream* stream );
+static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
+static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
+static signed long GetStreamReadAvailable( PaStream* stream );
+static signed long GetStreamWriteAvailable( PaStream* stream );
 
 
 /* IMPLEMENT ME: a macro like the following one should be used for reporting
@@ -133,8 +139,7 @@ static signed long GetStreamWriteAvailable (PaStream* stream);
 //currently built using RC1 SDK (5600)
 #if _MSC_VER < 1400
 
-PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
-{
+PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ){
     return paNoError;
 }
 
@@ -151,8 +156,8 @@ PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApi
  i assume that neither of these will cause the Driver to "load",
  but again, who knows how they implement their stuff
  */
-
-typedef struct PaWinWasapiDeviceInfo {
+typedef struct PaWinWasapiDeviceInfo
+{
     //hmm is it wise to keep a reference until Terminate?
     //TODO Check if that interface requires the driver to be loaded!
     IMMDevice * device;
@@ -176,7 +181,8 @@ typedef struct PaWinWasapiDeviceInfo {
 } PaWinWasapiDeviceInfo;
 
 
-typedef struct {
+typedef struct
+{
     PaUtilHostApiRepresentation inheritedHostApiRep;
     PaUtilStreamInterface callbackStreamInterface;
     PaUtilStreamInterface blockingStreamInterface;
@@ -200,7 +206,7 @@ typedef struct {
 
 /* PaWinWasapiStream - a stream data structure specifically for this implementation */
 
-typedef struct PaWinWasapiSubStream {
+typedef struct PaWinWasapiSubStream{
     IAudioClient        *client;
     WAVEFORMATEXTENSIBLE wavex;
     UINT32               bufferSize;
@@ -209,7 +215,8 @@ typedef struct PaWinWasapiSubStream {
     unsigned long framesPerHostCallback; /* just an example */
 }PaWinWasapiSubStream;
 
-typedef struct PaWinWasapiStream { /* IMPLEMENT ME: rename this */
+typedef struct PaWinWasapiStream
+{ /* IMPLEMENT ME: rename this */
     PaUtilStreamRepresentation streamRepresentation;
     PaUtilCpuLoadMeasurer cpuLoadMeasurer;
     PaUtilBufferProcessor bufferProcessor;
@@ -220,20 +227,20 @@ typedef struct PaWinWasapiStream { /* IMPLEMENT ME: rename this */
 
 
     //input
-    PaWinWasapiSubStream in;
+	PaWinWasapiSubStream in;
     IAudioCaptureClient *cclient;
     IAudioEndpointVolume *inVol;
-    //output
-    PaWinWasapiSubStream out;
+	//output
+	PaWinWasapiSubStream out;
     IAudioRenderClient  *rclient;
-    IAudioEndpointVolume *outVol;
+	IAudioEndpointVolume *outVol;
 
     bool running;
     bool closeRequest;
 
     DWORD dwThreadId;
     HANDLE hThread;
-    HANDLE hNotificationEvent;
+	HANDLE hNotificationEvent; 
 
     GUID  session;
 
@@ -242,145 +249,62 @@ typedef struct PaWinWasapiStream { /* IMPLEMENT ME: rename this */
 #define PRINT(x) PA_DEBUG(x);
 
 void
-logAUDCLNT_E (HRESULT res)
-{
+logAUDCLNT_E(HRESULT res){
 
     char *text = 0;
-
-    switch (res) {
-
-        case S_OK:
-            return;
-            break;
-
-        case E_POINTER                              :
-            text ="E_POINTER";
-            break;
-
-        case E_INVALIDARG                           :
-            text ="E_INVALIDARG";
-            break;
-
-        case AUDCLNT_E_NOT_INITIALIZED              :
-            text ="AUDCLNT_E_NOT_INITIALIZED";
-            break;
-
-        case AUDCLNT_E_ALREADY_INITIALIZED          :
-            text ="AUDCLNT_E_ALREADY_INITIALIZED";
-            break;
-
-        case AUDCLNT_E_WRONG_ENDPOINT_TYPE          :
-            text ="AUDCLNT_E_WRONG_ENDPOINT_TYPE";
-            break;
-
-        case AUDCLNT_E_DEVICE_INVALIDATED           :
-            text ="AUDCLNT_E_DEVICE_INVALIDATED";
-            break;
-
-        case AUDCLNT_E_NOT_STOPPED                  :
-            text ="AUDCLNT_E_NOT_STOPPED";
-            break;
-
-        case AUDCLNT_E_BUFFER_TOO_LARGE             :
-            text ="AUDCLNT_E_BUFFER_TOO_LARGE";
-            break;
-
-        case AUDCLNT_E_OUT_OF_ORDER                 :
-            text ="AUDCLNT_E_OUT_OF_ORDER";
-            break;
-
-        case AUDCLNT_E_UNSUPPORTED_FORMAT           :
-            text ="AUDCLNT_E_UNSUPPORTED_FORMAT";
-            break;
-
-        case AUDCLNT_E_INVALID_SIZE                 :
-            text ="AUDCLNT_E_INVALID_SIZE";
-            break;
-
-        case AUDCLNT_E_DEVICE_IN_USE                :
-            text ="AUDCLNT_E_DEVICE_IN_USE";
-            break;
-
-        case AUDCLNT_E_BUFFER_OPERATION_PENDING     :
-            text ="AUDCLNT_E_BUFFER_OPERATION_PENDING";
-            break;
-
-        case AUDCLNT_E_THREAD_NOT_REGISTERED        :
-            text ="AUDCLNT_E_THREAD_NOT_REGISTERED";
-            break;
-
-        case AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED   :
-            text ="AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED";
-            break;
-
-        case AUDCLNT_E_ENDPOINT_CREATE_FAILED       :
-            text ="AUDCLNT_E_ENDPOINT_CREATE_FAILED";
-            break;
-
-        case AUDCLNT_E_SERVICE_NOT_RUNNING          :
-            text ="AUDCLNT_E_SERVICE_NOT_RUNNING";
-            break;
-            //  case AUDCLNT_E_CPUUSAGE_EXCEEDED            :text ="AUDCLNT_E_CPUUSAGE_EXCEEDED"; break;
-            //Header error?
-
-        case AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     :
-            text ="AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED";
-            break;
-
-        case AUDCLNT_E_EXCLUSIVE_MODE_ONLY          :
-            text ="AUDCLNT_E_EXCLUSIVE_MODE_ONLY";
-            break;
-
-        case AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL :
-            text ="AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL";
-            break;
-
-        case AUDCLNT_E_EVENTHANDLE_NOT_SET          :
-            text ="AUDCLNT_E_EVENTHANDLE_NOT_SET";
-            break;
-
-        case AUDCLNT_E_INCORRECT_BUFFER_SIZE        :
-            text ="AUDCLNT_E_INCORRECT_BUFFER_SIZE";
-            break;
-
-        case AUDCLNT_E_BUFFER_SIZE_ERROR            :
-            text ="AUDCLNT_E_BUFFER_SIZE_ERROR";
-            break;
-
-        case AUDCLNT_S_BUFFER_EMPTY                 :
-            text ="AUDCLNT_S_BUFFER_EMPTY";
-            break;
-
-        case AUDCLNT_S_THREAD_ALREADY_REGISTERED    :
-            text ="AUDCLNT_S_THREAD_ALREADY_REGISTERED";
-            break;
-
+    switch(res){
+        case S_OK: return; break;
+        case E_POINTER                              :text ="E_POINTER"; break;
+        case E_INVALIDARG                           :text ="E_INVALIDARG"; break;
+
+        case AUDCLNT_E_NOT_INITIALIZED              :text ="AUDCLNT_E_NOT_INITIALIZED"; break;
+        case AUDCLNT_E_ALREADY_INITIALIZED          :text ="AUDCLNT_E_ALREADY_INITIALIZED"; break;
+        case AUDCLNT_E_WRONG_ENDPOINT_TYPE          :text ="AUDCLNT_E_WRONG_ENDPOINT_TYPE"; break;
+        case AUDCLNT_E_DEVICE_INVALIDATED           :text ="AUDCLNT_E_DEVICE_INVALIDATED"; break;
+        case AUDCLNT_E_NOT_STOPPED                  :text ="AUDCLNT_E_NOT_STOPPED"; break;
+        case AUDCLNT_E_BUFFER_TOO_LARGE             :text ="AUDCLNT_E_BUFFER_TOO_LARGE"; break;
+        case AUDCLNT_E_OUT_OF_ORDER                 :text ="AUDCLNT_E_OUT_OF_ORDER"; break;
+        case AUDCLNT_E_UNSUPPORTED_FORMAT           :text ="AUDCLNT_E_UNSUPPORTED_FORMAT"; break;
+        case AUDCLNT_E_INVALID_SIZE                 :text ="AUDCLNT_E_INVALID_SIZE"; break;
+        case AUDCLNT_E_DEVICE_IN_USE                :text ="AUDCLNT_E_DEVICE_IN_USE"; break;
+        case AUDCLNT_E_BUFFER_OPERATION_PENDING     :text ="AUDCLNT_E_BUFFER_OPERATION_PENDING"; break;
+        case AUDCLNT_E_THREAD_NOT_REGISTERED        :text ="AUDCLNT_E_THREAD_NOT_REGISTERED"; break;      
+		case AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED   :text ="AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED"; break;
+        case AUDCLNT_E_ENDPOINT_CREATE_FAILED       :text ="AUDCLNT_E_ENDPOINT_CREATE_FAILED"; break;
+        case AUDCLNT_E_SERVICE_NOT_RUNNING          :text ="AUDCLNT_E_SERVICE_NOT_RUNNING"; break;
+     //  case AUDCLNT_E_CPUUSAGE_EXCEEDED            :text ="AUDCLNT_E_CPUUSAGE_EXCEEDED"; break;
+     //Header error?
+        case AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     :text ="AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED"; break;
+        case AUDCLNT_E_EXCLUSIVE_MODE_ONLY          :text ="AUDCLNT_E_EXCLUSIVE_MODE_ONLY"; break;
+        case AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL :text ="AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL"; break;
+        case AUDCLNT_E_EVENTHANDLE_NOT_SET          :text ="AUDCLNT_E_EVENTHANDLE_NOT_SET"; break;
+        case AUDCLNT_E_INCORRECT_BUFFER_SIZE        :text ="AUDCLNT_E_INCORRECT_BUFFER_SIZE"; break;
+        case AUDCLNT_E_BUFFER_SIZE_ERROR            :text ="AUDCLNT_E_BUFFER_SIZE_ERROR"; break;
+        case AUDCLNT_S_BUFFER_EMPTY                 :text ="AUDCLNT_S_BUFFER_EMPTY"; break;
+        case AUDCLNT_S_THREAD_ALREADY_REGISTERED    :text ="AUDCLNT_S_THREAD_ALREADY_REGISTERED"; break;
         default:
             text =" dunno!";
             return ;
-            break;
+        break;
 
     }
-
-    PRINT ( ("WASAPI ERROR HRESULT: 0x%X : %s\n",res,text));
+    PRINT(("WASAPI ERROR HRESULT: 0x%X : %s\n",res,text));
 }
 
 inline double
-nano100ToMillis (const REFERENCE_TIME &ref)
-{
+nano100ToMillis(const REFERENCE_TIME &ref){
     //  1 nano = 0.000000001 seconds
     //100 nano = 0.0000001   seconds
     //100 nano = 0.0001   milliseconds
-    return ( (double) ref) *0.0001;
+    return ((double)ref)*0.0001;
 }
 
 inline double
-nano100ToSeconds (const REFERENCE_TIME &ref)
-{
+nano100ToSeconds(const REFERENCE_TIME &ref){
     //  1 nano = 0.000000001 seconds
     //100 nano = 0.0000001   seconds
     //100 nano = 0.0001   milliseconds
-    return ( (double) ref) *0.0000001;
+    return ((double)ref)*0.0000001;
 }
 
 #ifndef IF_FAILED_JUMP
@@ -391,11 +315,11 @@ nano100ToSeconds (const REFERENCE_TIME &ref)
 
 //AVRT is the new "multimedia schedulling stuff"
 
-typedef BOOL (WINAPI *FAvRtCreateThreadOrderingGroup) (PHANDLE,PLARGE_INTEGER,GUID*,PLARGE_INTEGER);
-typedef BOOL (WINAPI *FAvRtDeleteThreadOrderingGroup) (HANDLE);
-typedef BOOL (WINAPI *FAvRtWaitOnThreadOrderingGroup) (HANDLE);
-typedef HANDLE (WINAPI *FAvSetMmThreadCharacteristics) (LPCTSTR,LPDWORD);
-typedef BOOL (WINAPI *FAvSetMmThreadPriority) (HANDLE,AVRT_PRIORITY);
+typedef BOOL   (WINAPI *FAvRtCreateThreadOrderingGroup) (PHANDLE,PLARGE_INTEGER,GUID*,PLARGE_INTEGER);
+typedef BOOL   (WINAPI *FAvRtDeleteThreadOrderingGroup) (HANDLE);
+typedef BOOL   (WINAPI *FAvRtWaitOnThreadOrderingGroup) (HANDLE);
+typedef HANDLE (WINAPI *FAvSetMmThreadCharacteristics)  (LPCTSTR,LPDWORD);
+typedef BOOL   (WINAPI *FAvSetMmThreadPriority)         (HANDLE,AVRT_PRIORITY);
 
 HMODULE  hDInputDLL = 0;
 FAvRtCreateThreadOrderingGroup pAvRtCreateThreadOrderingGroup=0;
@@ -413,60 +337,51 @@ FAvSetMmThreadPriority         pAvSetMmThreadPriority=0;
                                             return false;                                   \
                                         }                                                   \
                                     }                                                       \
- 
-bool
-setupAVRT()
-{
 
-    hDInputDLL = LoadLibraryA ("avrt.dll");
+bool
+setupAVRT(){
 
-    if (hDInputDLL == NULL)
+    hDInputDLL = LoadLibraryA("avrt.dll");
+    if(hDInputDLL == NULL)
         return false;
 
-    setupPTR (pAvRtCreateThreadOrderingGroup, FAvRtCreateThreadOrderingGroup, "AvRtCreateThreadOrderingGroup");
-
-    setupPTR (pAvRtDeleteThreadOrderingGroup, FAvRtDeleteThreadOrderingGroup, "AvRtDeleteThreadOrderingGroup");
-
-    setupPTR (pAvRtWaitOnThreadOrderingGroup, FAvRtWaitOnThreadOrderingGroup, "AvRtWaitOnThreadOrderingGroup");
-
-    setupPTR (pAvSetMmThreadCharacteristics,  FAvSetMmThreadCharacteristics,  "AvSetMmThreadCharacteristicsA");
-
-    setupPTR (pAvSetMmThreadPriority,         FAvSetMmThreadPriority,         "AvSetMmThreadPriority");
+    setupPTR(pAvRtCreateThreadOrderingGroup, FAvRtCreateThreadOrderingGroup, "AvRtCreateThreadOrderingGroup");
+    setupPTR(pAvRtDeleteThreadOrderingGroup, FAvRtDeleteThreadOrderingGroup, "AvRtDeleteThreadOrderingGroup");
+    setupPTR(pAvRtWaitOnThreadOrderingGroup, FAvRtWaitOnThreadOrderingGroup, "AvRtWaitOnThreadOrderingGroup");
+    setupPTR(pAvSetMmThreadCharacteristics,  FAvSetMmThreadCharacteristics,  "AvSetMmThreadCharacteristicsA");
+    setupPTR(pAvSetMmThreadPriority,         FAvSetMmThreadPriority,         "AvSetMmThreadPriority");
 
     return true;
 }
 
 
 
-PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
+PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
 {
-    if (!setupAVRT()) {
-        PRINT ( ("Windows WASAPI : No AVRT! (not VISTA?)"));
+    if (!setupAVRT()){
+        PRINT(("Windows WASAPI : No AVRT! (not VISTA?)"));
         return paNoError;
     }
 
-    CoInitialize (NULL);
+    CoInitialize(NULL);
 
     PaError result = paNoError;
     PaWinWasapiHostApiRepresentation *paWasapi;
     PaDeviceInfo *deviceInfoArray;
 
-    paWasapi = (PaWinWasapiHostApiRepresentation*) PaUtil_AllocateMemory (sizeof (PaWinWasapiHostApiRepresentation));
-
-    if (!paWasapi) {
+    paWasapi = (PaWinWasapiHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinWasapiHostApiRepresentation) );
+    if( !paWasapi ){
         result = paInsufficientMemory;
         goto error;
     }
 
     paWasapi->allocations = PaUtil_CreateAllocationGroup();
-
-    if (!paWasapi->allocations) {
+    if( !paWasapi->allocations ){
         result = paInsufficientMemory;
         goto error;
     }
 
     *hostApi = &paWasapi->inheritedHostApiRep;
-
     (*hostApi)->info.structVersion = 1;
     (*hostApi)->info.type = paWASAPI;
     (*hostApi)->info.name = "Windows WASAPI";
@@ -479,181 +394,170 @@ PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApi
     IMMDeviceCollection* spEndpoints=0;
     paWasapi->enumerator = 0;
 
-    hResult = CoCreateInstance (
-                  __uuidof (MMDeviceEnumerator), NULL,CLSCTX_INPROC_SERVER,
-                  __uuidof (IMMDeviceEnumerator),
-                  (void**) &paWasapi->enumerator);
+    hResult = CoCreateInstance(
+             __uuidof(MMDeviceEnumerator), NULL,CLSCTX_INPROC_SERVER,
+             __uuidof(IMMDeviceEnumerator),
+             (void**)&paWasapi->enumerator);
 
-    IF_FAILED_JUMP (hResult, error);
+    IF_FAILED_JUMP(hResult, error);
 
     //getting default device ids in the eMultimedia "role"
     {
         {
             IMMDevice* defaultRenderer=0;
-            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint (eRender, eMultimedia, &defaultRenderer);
-            IF_FAILED_JUMP (hResult, error);
+            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &defaultRenderer);
+            IF_FAILED_JUMP(hResult, error);
             WCHAR* pszDeviceId = NULL;
-            hResult = defaultRenderer->GetId (&pszDeviceId);
-            IF_FAILED_JUMP (hResult, error);
-            StringCchCopyW (paWasapi->defaultRenderer, MAX_STR_LEN-1, pszDeviceId);
-            CoTaskMemFree (pszDeviceId);
+            hResult = defaultRenderer->GetId(&pszDeviceId);
+            IF_FAILED_JUMP(hResult, error);
+            StringCchCopyW(paWasapi->defaultRenderer, MAX_STR_LEN-1, pszDeviceId);
+            CoTaskMemFree(pszDeviceId);
             defaultRenderer->Release();
         }
 
         {
             IMMDevice* defaultCapturer=0;
-            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint (eCapture, eMultimedia, &defaultCapturer);
-            IF_FAILED_JUMP (hResult, error);
+            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint(eCapture, eMultimedia, &defaultCapturer);
+            IF_FAILED_JUMP(hResult, error);
             WCHAR* pszDeviceId = NULL;
-            hResult = defaultCapturer->GetId (&pszDeviceId);
-            IF_FAILED_JUMP (hResult, error);
-            StringCchCopyW (paWasapi->defaultCapturer, MAX_STR_LEN-1, pszDeviceId);
-            CoTaskMemFree (pszDeviceId);
+            hResult = defaultCapturer->GetId(&pszDeviceId);
+            IF_FAILED_JUMP(hResult, error);
+            StringCchCopyW(paWasapi->defaultCapturer, MAX_STR_LEN-1, pszDeviceId);
+            CoTaskMemFree(pszDeviceId);
             defaultCapturer->Release();
         }
     }
 
 
-    hResult = paWasapi->enumerator->EnumAudioEndpoints (eAll, DEVICE_STATE_ACTIVE, &spEndpoints);
-    IF_FAILED_JUMP (hResult, error);
+    hResult = paWasapi->enumerator->EnumAudioEndpoints(eAll, DEVICE_STATE_ACTIVE, &spEndpoints);
+    IF_FAILED_JUMP(hResult, error);
 
-    hResult = spEndpoints->GetCount (&paWasapi->deviceCount);
-    IF_FAILED_JUMP (hResult, error);
+    hResult = spEndpoints->GetCount(&paWasapi->deviceCount);
+    IF_FAILED_JUMP(hResult, error);
 
     paWasapi->devInfo = new PaWinWasapiDeviceInfo[paWasapi->deviceCount];
     {
         for (size_t step=0;step<paWasapi->deviceCount;++step)
-            memset (&paWasapi->devInfo[step],0,sizeof (PaWinWasapiDeviceInfo));
+            memset(&paWasapi->devInfo[step],0,sizeof(PaWinWasapiDeviceInfo));
     }
 
 
 
-    if (paWasapi->deviceCount > 0) {
-        (*hostApi)->deviceInfos = (PaDeviceInfo**) PaUtil_GroupAllocateMemory (
-                                      paWasapi->allocations, sizeof (PaDeviceInfo*) * paWasapi->deviceCount);
-
-        if (! (*hostApi)->deviceInfos) {
+    if( paWasapi->deviceCount > 0 )
+    {
+        (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory(
+                paWasapi->allocations, sizeof(PaDeviceInfo*) * paWasapi->deviceCount );
+        if( !(*hostApi)->deviceInfos ){
             result = paInsufficientMemory;
             goto error;
         }
 
         /* allocate all device info structs in a contiguous block */
-        deviceInfoArray = (PaDeviceInfo*) PaUtil_GroupAllocateMemory (
-                              paWasapi->allocations, sizeof (PaDeviceInfo) * paWasapi->deviceCount);
-
-        if (!deviceInfoArray) {
+        deviceInfoArray = (PaDeviceInfo*)PaUtil_GroupAllocateMemory(
+                paWasapi->allocations, sizeof(PaDeviceInfo) * paWasapi->deviceCount );
+        if( !deviceInfoArray ){
             result = paInsufficientMemory;
             goto error;
         }
 
-        for (UINT i=0; i < paWasapi->deviceCount; ++i) {
+        for( UINT i=0; i < paWasapi->deviceCount; ++i ){
 
-            PA_DEBUG ( ("i:%d\n",i));
+			PA_DEBUG(("i:%d\n",i));
             PaDeviceInfo *deviceInfo = &deviceInfoArray[i];
             deviceInfo->structVersion = 2;
             deviceInfo->hostApi = hostApiIndex;
 
-            hResult = spEndpoints->Item (i, &paWasapi->devInfo[i].device);
-            IF_FAILED_JUMP (hResult, error);
+            hResult = spEndpoints->Item(i, &paWasapi->devInfo[i].device);
+            IF_FAILED_JUMP(hResult, error);
 
             //getting ID
             {
                 WCHAR* pszDeviceId = NULL;
-                hResult = paWasapi->devInfo[i].device->GetId (&pszDeviceId);
-                IF_FAILED_JUMP (hResult, error);
-                StringCchCopyW (paWasapi->devInfo[i].szDeviceID, MAX_STR_LEN-1, pszDeviceId);
-                CoTaskMemFree (pszDeviceId);
+                hResult = paWasapi->devInfo[i].device->GetId(&pszDeviceId);
+                IF_FAILED_JUMP(hResult, error);
+                StringCchCopyW(paWasapi->devInfo[i].szDeviceID, MAX_STR_LEN-1, pszDeviceId);
+                CoTaskMemFree(pszDeviceId);
 
-                if (lstrcmpW (paWasapi->devInfo[i].szDeviceID, paWasapi->defaultCapturer) ==0) {
+                if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultCapturer)==0){
                     //we found the default input!
                     (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount;
                 }
-
-                if (lstrcmpW (paWasapi->devInfo[i].szDeviceID, paWasapi->defaultRenderer) ==0) {
+                if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultRenderer)==0){
                     //we found the default output!
                     (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount;
                 }
             }
 
             DWORD state=0;
-            hResult = paWasapi->devInfo[i].device->GetState (&paWasapi->devInfo[i].state);
-            IF_FAILED_JUMP (hResult, error);
+            hResult = paWasapi->devInfo[i].device->GetState(&paWasapi->devInfo[i].state);
+            IF_FAILED_JUMP(hResult, error);
 
-            if (paWasapi->devInfo[i].state != DEVICE_STATE_ACTIVE) {
-                PRINT ( ("WASAPI device:%d is not currently available (state:%d)\n",i,state));
+            if (paWasapi->devInfo[i].state != DEVICE_STATE_ACTIVE){
+                PRINT(("WASAPI device:%d is not currently available (state:%d)\n",i,state));
                 //spDevice->Release();
                 //continue;
             }
 
             {
                 IPropertyStore* spProperties;
-                hResult = paWasapi->devInfo[i].device->OpenPropertyStore (STGM_READ, &spProperties);
-                IF_FAILED_JUMP (hResult, error);
+                hResult = paWasapi->devInfo[i].device->OpenPropertyStore(STGM_READ, &spProperties);
+                IF_FAILED_JUMP(hResult, error);
 
                 //getting "Friendly" Name
                 {
                     PROPVARIANT value;
-                    PropVariantInit (&value);
-                    hResult = spProperties->GetValue (PKEY_Device_FriendlyName, &value);
-                    IF_FAILED_JUMP (hResult, error);
+                    PropVariantInit(&value);
+                    hResult = spProperties->GetValue(PKEY_Device_FriendlyName, &value);
+                    IF_FAILED_JUMP(hResult, error);
                     deviceInfo->name = 0;
-                    char* deviceName = (char*) PaUtil_GroupAllocateMemory (paWasapi->allocations, MAX_STR_LEN + 1);
-
-                    if (!deviceName) {
+                    char* deviceName = (char*)PaUtil_GroupAllocateMemory( paWasapi->allocations, MAX_STR_LEN + 1 );
+                    if( !deviceName ){
                         result = paInsufficientMemory;
                         goto error;
                     }
-
-                    if (value.pwszVal)
-                        wcstombs (deviceName,   value.pwszVal,MAX_STR_LEN-1); //todo proper size
-                    else {
-                        sprintf (deviceName,"baddev%d",i);
-                    }
+					if (value.pwszVal)
+						wcstombs(deviceName,   value.pwszVal,MAX_STR_LEN-1); //todo proper size	
+					else{
+						_snprintf_s(deviceName,MAX_STR_LEN-1,MAX_STR_LEN-1,"baddev%d",i);
+					}
 
                     deviceInfo->name = deviceName;
-
-                    PropVariantClear (&value);
+                    PropVariantClear(&value);
                 }
 
 #if 0
                 DWORD numProps = 0;
-                hResult = spProperties->GetCount (&numProps);
-                IF_FAILED_JUMP (hResult, error);
+                hResult = spProperties->GetCount(&numProps);
+                IF_FAILED_JUMP(hResult, error);
                 {
-                    for (DWORD i=0;i<numProps;++i) {
+                    for (DWORD i=0;i<numProps;++i){
                         PROPERTYKEY pkey;
-                        hResult = spProperties->GetAt (i,&pkey);
+                        hResult = spProperties->GetAt(i,&pkey);
 
                         PROPVARIANT value;
-                        PropVariantInit (&value);
-                        hResult = spProperties->GetValue (pkey, &value);
-
-                        switch (value.vt) {
+                        PropVariantInit(&value);
+                        hResult = spProperties->GetValue(pkey, &value);
 
+                        switch(value.vt){
                             case 11:
-                                PRINT ( ("property*%u*\n",value.ulVal));
-                                break;
-
+                                PRINT(("property*%u*\n",value.ulVal));
+                            break;
                             case 19:
-                                PRINT ( ("property*%d*\n",value.boolVal));
-                                break;
-
-                            case 31: {
+                                PRINT(("property*%d*\n",value.boolVal));
+                            break;
+                            case 31:
+                            {
                                 char temp[512];
-                                wcstombs (temp,    value.pwszVal,MAX_STR_LEN-1);
-                                PRINT ( ("property*%s*\n",temp));
+                                wcstombs(temp,    value.pwszVal,MAX_STR_LEN-1);
+                                PRINT(("property*%s*\n",temp));
                             }
-
                             break;
-
-                            default:
-                                break;
+                            default:break;
                         }
 
-                        PropVariantClear (&value);
+                        PropVariantClear(&value);
                     }
                 }
-
 #endif
 
                 /*  These look interresting... but they are undocumented
@@ -670,10 +574,9 @@ PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApi
             //getting the Endpoint data
             {
                 IMMEndpoint *endpoint=0;
-                hResult = paWasapi->devInfo[i].device->QueryInterface (__uuidof (IMMEndpoint), (void **) &endpoint);
-
-                if (SUCCEEDED (hResult)) {
-                    hResult = endpoint->GetDataFlow (&paWasapi->devInfo[i].flow);
+                hResult = paWasapi->devInfo[i].device->QueryInterface(__uuidof(IMMEndpoint),(void **)&endpoint);
+                if (SUCCEEDED(hResult)){
+                    hResult = endpoint->GetDataFlow(&paWasapi->devInfo[i].flow);
                     endpoint->Release();
                 }
             }
@@ -683,60 +586,56 @@ PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApi
             {
                 IAudioClient *myClient=0;
 
-                hResult = paWasapi->devInfo[i].device->Activate (__uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**) &myClient);
-                IF_FAILED_JUMP (hResult, error);
+                hResult = paWasapi->devInfo[i].device->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&myClient);
+                IF_FAILED_JUMP(hResult, error);
 
-                hResult = myClient->GetDevicePeriod (
-                              &paWasapi->devInfo[i].DefaultDevicePeriod,
-                              &paWasapi->devInfo[i].MinimumDevicePeriod);
-                IF_FAILED_JUMP (hResult, error);
+                hResult = myClient->GetDevicePeriod(
+                    &paWasapi->devInfo[i].DefaultDevicePeriod,
+                    &paWasapi->devInfo[i].MinimumDevicePeriod);
+                IF_FAILED_JUMP(hResult, error);
 
-                hResult = myClient->GetMixFormat (&paWasapi->devInfo[i].MixFormat);
+                hResult = myClient->GetMixFormat(&paWasapi->devInfo[i].MixFormat);
 
-                if (hResult != S_OK) {
-                    /*davidv: this happened with my hardware, previously for that same device in DirectSound:
-                      Digital Output (Realtek AC'97 Audio)'s GUID: {0x38f2cf50,0x7b4c,0x4740,0x86,0xeb,0xd4,0x38,0x66,0xd8,0xc8, 0x9f}
-                      so something must be _really_ wrong with this device, TODO handle this better. We kind of need GetMixFormat*/
-                    logAUDCLNT_E (hResult);
-                    goto error;
-                }
+				if (hResult != S_OK){
+					/*davidv: this happened with my hardware, previously for that same device in DirectSound:
+					  Digital Output (Realtek AC'97 Audio)'s GUID: {0x38f2cf50,0x7b4c,0x4740,0x86,0xeb,0xd4,0x38,0x66,0xd8,0xc8, 0x9f} 
+					  so something must be _really_ wrong with this device, TODO handle this better. We kind of need GetMixFormat*/
+					logAUDCLNT_E(hResult);
+					goto error;
+				}
 
                 myClient->Release();
             }
 
             //we can now fill in portaudio device data
             deviceInfo->maxInputChannels  = 0;  //for now
-
             deviceInfo->maxOutputChannels = 0;  //for now
 
-            switch (paWasapi->devInfo[i].flow) {
-
+            switch(paWasapi->devInfo[i].flow){
                 case eRender:
                     //hum not exaclty maximum, more like "default"
                     deviceInfo->maxOutputChannels = paWasapi->devInfo[i].MixFormat->nChannels;
 
-                    deviceInfo->defaultHighOutputLatency = nano100ToSeconds (paWasapi->devInfo[i].DefaultDevicePeriod);
-                    deviceInfo->defaultLowOutputLatency  = nano100ToSeconds (paWasapi->devInfo[i].MinimumDevicePeriod);
-                    break;
-
+                    deviceInfo->defaultHighOutputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod);
+                    deviceInfo->defaultLowOutputLatency  = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod);
+                break;
                 case eCapture:
                     //hum not exaclty maximum, more like "default"
                     deviceInfo->maxInputChannels  = paWasapi->devInfo[i].MixFormat->nChannels;
 
-                    deviceInfo->defaultHighInputLatency = nano100ToSeconds (paWasapi->devInfo[i].DefaultDevicePeriod);
-                    deviceInfo->defaultLowInputLatency  = nano100ToSeconds (paWasapi->devInfo[i].MinimumDevicePeriod);
-                    break;
-
+                    deviceInfo->defaultHighInputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod);
+                    deviceInfo->defaultLowInputLatency  = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod);
+                break;
                 default:
-                    PRINT ( ("WASAPI device:%d bad Data FLow! \n",i));
+                    PRINT(("WASAPI device:%d bad Data FLow! \n",i));
                     goto error;
-                    break;
+                break;
             }
 
-            deviceInfo->defaultSampleRate = (double) paWasapi->devInfo[i].MixFormat->nSamplesPerSec;
+            deviceInfo->defaultSampleRate = (double)paWasapi->devInfo[i].MixFormat->nSamplesPerSec;
 
             (*hostApi)->deviceInfos[i] = deviceInfo;
-            ++ (*hostApi)->info.deviceCount;
+            ++(*hostApi)->info.deviceCount;
         }
     }
 
@@ -746,16 +645,16 @@ PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApi
     (*hostApi)->OpenStream = OpenStream;
     (*hostApi)->IsFormatSupported = IsFormatSupported;
 
-    PaUtil_InitializeStreamInterface (&paWasapi->callbackStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface( &paWasapi->callbackStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, GetStreamCpuLoad,
                                       PaUtil_DummyRead, PaUtil_DummyWrite,
-                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable);
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
 
-    PaUtil_InitializeStreamInterface (&paWasapi->blockingStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface( &paWasapi->blockingStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, PaUtil_DummyGetCpuLoad,
-                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable);
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
 
     return result;
 
@@ -767,105 +666,92 @@ error:
     if (paWasapi->enumerator)
         paWasapi->enumerator->Release();
 
-    if (paWasapi) {
-        if (paWasapi->allocations) {
-            PaUtil_FreeAllAllocations (paWasapi->allocations);
-            PaUtil_DestroyAllocationGroup (paWasapi->allocations);
+    if( paWasapi )
+    {
+        if( paWasapi->allocations )
+        {
+            PaUtil_FreeAllAllocations( paWasapi->allocations );
+            PaUtil_DestroyAllocationGroup( paWasapi->allocations );
         }
 
-        PaUtil_FreeMemory (paWasapi);
+        PaUtil_FreeMemory( paWasapi );
     }
-
     return result;
 }
 
 
-static void Terminate (struct PaUtilHostApiRepresentation *hostApi)
+static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
 {
-    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
+    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
 
     paWasapi->enumerator->Release();
 
-    for (UINT i=0;i<paWasapi->deviceCount;++i) {
+    for (UINT i=0;i<paWasapi->deviceCount;++i){
         PaWinWasapiDeviceInfo *info = &paWasapi->devInfo[i];
 
         if (info->device)
             info->device->Release();
 
         if (info->MixFormat)
-            CoTaskMemFree (info->MixFormat);
+            CoTaskMemFree(info->MixFormat);
     }
-
     delete [] paWasapi->devInfo;
 
     CoUninitialize();
 
-    if (paWasapi->allocations) {
-        PaUtil_FreeAllAllocations (paWasapi->allocations);
-        PaUtil_DestroyAllocationGroup (paWasapi->allocations);
+    if( paWasapi->allocations ){
+        PaUtil_FreeAllAllocations( paWasapi->allocations );
+        PaUtil_DestroyAllocationGroup( paWasapi->allocations );
     }
 
-    PaUtil_FreeMemory (paWasapi);
+    PaUtil_FreeMemory( paWasapi );
 }
 
 static void
-LogWAVEFORMATEXTENSIBLE (const WAVEFORMATEXTENSIBLE *in)
-{
-
-    const WAVEFORMATEX *old = (WAVEFORMATEX *) in;
-
-    switch (old->wFormatTag) {
-
-        case WAVE_FORMAT_EXTENSIBLE: {
-
-            PRINT ( ("wFormatTag=WAVE_FORMAT_EXTENSIBLE\n"));
-
-            if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT) {
-                PRINT ( ("SubFormat=KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\n"));
-            } else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM) {
-                PRINT ( ("SubFormat=KSDATAFORMAT_SUBTYPE_PCM\n"));
-            } else {
-                PRINT ( ("SubFormat=CUSTOM GUID{%d:%d:%d:%d%d%d%d%d%d%d%d}\n",
-                         in->SubFormat.Data1,
-                         in->SubFormat.Data2,
-                         in->SubFormat.Data3,
-                         (int) in->SubFormat.Data4[0],
-                         (int) in->SubFormat.Data4[1],
-                         (int) in->SubFormat.Data4[2],
-                         (int) in->SubFormat.Data4[3],
-                         (int) in->SubFormat.Data4[4],
-                         (int) in->SubFormat.Data4[5],
-                         (int) in->SubFormat.Data4[6],
-                         (int) in->SubFormat.Data4[7]));
-            }
-
-            PRINT ( ("Samples.wValidBitsPerSample=%d\n",  in->Samples.wValidBitsPerSample));
-
-            PRINT ( ("dwChannelMask=0x%X\n",in->dwChannelMask));
-        }
-
-        break;
-
-        case WAVE_FORMAT_PCM:
-            PRINT ( ("wFormatTag=WAVE_FORMAT_PCM\n"));
-            break;
-
-        case WAVE_FORMAT_IEEE_FLOAT:
-            PRINT ( ("wFormatTag=WAVE_FORMAT_IEEE_FLOAT\n"));
-            break;
-
-        default :
-            PRINT ( ("wFormatTag=UNKNOWN(%d)\n",old->wFormatTag));
-            break;
-    }
-
-    PRINT ( ("nChannels      =%d\n",old->nChannels));
-
-    PRINT ( ("nSamplesPerSec =%d\n",old->nSamplesPerSec));
-    PRINT ( ("nAvgBytesPerSec=%d\n",old->nAvgBytesPerSec));
-    PRINT ( ("nBlockAlign    =%d\n",old->nBlockAlign));
-    PRINT ( ("wBitsPerSample =%d\n",old->wBitsPerSample));
-    PRINT ( ("cbSize         =%d\n",old->cbSize));
+LogWAVEFORMATEXTENSIBLE(const WAVEFORMATEXTENSIBLE *in){
+
+    const WAVEFORMATEX *old = (WAVEFORMATEX *)in;
+
+	switch (old->wFormatTag){
+		case WAVE_FORMAT_EXTENSIBLE:{
+
+			PRINT(("wFormatTag=WAVE_FORMAT_EXTENSIBLE\n"));
+
+			if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT){
+				PRINT(("SubFormat=KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\n"));
+			}
+			else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM){
+				PRINT(("SubFormat=KSDATAFORMAT_SUBTYPE_PCM\n"));
+			}
+			else{
+				PRINT(("SubFormat=CUSTOM GUID{%d:%d:%d:%d%d%d%d%d%d%d%d}\n",	
+											in->SubFormat.Data1,
+											in->SubFormat.Data2,
+											in->SubFormat.Data3,
+											(int)in->SubFormat.Data4[0],
+											(int)in->SubFormat.Data4[1],
+											(int)in->SubFormat.Data4[2],
+											(int)in->SubFormat.Data4[3],
+											(int)in->SubFormat.Data4[4],
+											(int)in->SubFormat.Data4[5],
+											(int)in->SubFormat.Data4[6],
+											(int)in->SubFormat.Data4[7]));
+			}
+			PRINT(("Samples.wValidBitsPerSample=%d\n",  in->Samples.wValidBitsPerSample));
+			PRINT(("dwChannelMask=0x%X\n",in->dwChannelMask));
+		}break;
+		
+		case WAVE_FORMAT_PCM:        PRINT(("wFormatTag=WAVE_FORMAT_PCM\n")); break;
+		case WAVE_FORMAT_IEEE_FLOAT: PRINT(("wFormatTag=WAVE_FORMAT_IEEE_FLOAT\n")); break;
+		default : PRINT(("wFormatTag=UNKNOWN(%d)\n",old->wFormatTag)); break;
+	}
+
+	PRINT(("nChannels      =%d\n",old->nChannels)); 
+	PRINT(("nSamplesPerSec =%d\n",old->nSamplesPerSec));  
+	PRINT(("nAvgBytesPerSec=%d\n",old->nAvgBytesPerSec));  
+	PRINT(("nBlockAlign    =%d\n",old->nBlockAlign));  
+	PRINT(("wBitsPerSample =%d\n",old->wBitsPerSample));  
+	PRINT(("cbSize         =%d\n",old->cbSize));  
 }
 
 
@@ -874,82 +760,53 @@ LogWAVEFORMATEXTENSIBLE (const WAVEFORMATEXTENSIBLE *in)
  WAVEFORMATXXX is always interleaved
  */
 static PaSampleFormat
-waveformatToPaFormat (const WAVEFORMATEXTENSIBLE *in)
-{
+waveformatToPaFormat(const WAVEFORMATEXTENSIBLE *in){
 
-    const WAVEFORMATEX *old = (WAVEFORMATEX*) in;
+    const WAVEFORMATEX *old = (WAVEFORMATEX*)in;
 
-    switch (old->wFormatTag) {
+    switch (old->wFormatTag){
 
-        case WAVE_FORMAT_EXTENSIBLE: {
-            if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT) {
+        case WAVE_FORMAT_EXTENSIBLE:
+        {
+            if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT){
                 if (in->Samples.wValidBitsPerSample == 32)
                     return paFloat32;
                 else
                     return paCustomFormat;
-            } else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM) {
-                switch (old->wBitsPerSample) {
-
-                    case 32:
-                        return paInt32;
-                        break;
-
-                    case 24:
-                        return paInt24;
-                        break;
-
-                    case  8:
-                        return paUInt8;
-                        break;
-
-                    case 16:
-                        return paInt16;
-                        break;
-
-                    default:
-                        return paCustomFormat;
-                        break;
+            }
+            else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM){
+                switch (old->wBitsPerSample){
+                    case 32: return paInt32; break;
+                    case 24: return paInt24;break;
+                    case  8: return paUInt8;break;
+                    case 16: return paInt16;break;
+                    default: return paCustomFormat;break;
                 }
-            } else
+            }
+            else
                 return paCustomFormat;
         }
-
         break;
 
         case WAVE_FORMAT_IEEE_FLOAT:
             return paFloat32;
-            break;
-
-        case WAVE_FORMAT_PCM: {
-            switch (old->wBitsPerSample) {
-
-                case 32:
-                    return paInt32;
-                    break;
-
-                case 24:
-                    return paInt24;
-                    break;
-
-                case  8:
-                    return paUInt8;
-                    break;
-
-                case 16:
-                    return paInt16;
-                    break;
+        break;
 
-                default:
-                    return paCustomFormat;
-                    break;
+        case WAVE_FORMAT_PCM:
+        {
+            switch (old->wBitsPerSample){
+                case 32: return paInt32; break;
+                case 24: return paInt24;break;
+                case  8: return paUInt8;break;
+                case 16: return paInt16;break;
+                default: return paCustomFormat;break;
             }
         }
-
         break;
 
         default:
             return paCustomFormat;
-            break;
+        break;
     }
 
     return paCustomFormat;
@@ -958,96 +815,56 @@ waveformatToPaFormat (const WAVEFORMATEXTENSIBLE *in)
 
 
 static PaError
-waveformatFromParams (WAVEFORMATEXTENSIBLE*wavex,
-                      const PaStreamParameters * params,
-                      double sampleRate)
-{
+waveformatFromParams(WAVEFORMATEXTENSIBLE*wavex,
+                          const PaStreamParameters * params,
+                          double sampleRate){
 
     size_t bytesPerSample = 0;
-
-    switch (params->sampleFormat & ~paNonInterleaved) {
-
+    switch( params->sampleFormat & ~paNonInterleaved ){
         case paFloat32:
-
-        case paInt32:
-            bytesPerSample=4;
-            break;
-
-        case paInt16:
-            bytesPerSample=2;
-            break;
-
-        case paInt24:
-            bytesPerSample=3;
-            break;
-
+        case paInt32: bytesPerSample=4;break;
+        case paInt16: bytesPerSample=2;break;
+        case paInt24: bytesPerSample=3;break;
         case paInt8:
-
-        case paUInt8:
-            bytesPerSample=1;
-            break;
-
+        case paUInt8: bytesPerSample=1;break;
         case paCustomFormat:
-
-        default:
-            return paSampleFormatNotSupported;
-            break;
+        default: return paSampleFormatNotSupported;break;
     }
 
-    memset (wavex,0,sizeof (WAVEFORMATEXTENSIBLE));
+    memset(wavex,0,sizeof(WAVEFORMATEXTENSIBLE));
 
-    WAVEFORMATEX *old    = (WAVEFORMATEX *) wavex;
-    old->nChannels       = (WORD) params->channelCount;
-    old->nSamplesPerSec  = (DWORD) sampleRate;
-    old->wBitsPerSample  = (WORD) (bytesPerSample*8);
-    old->nAvgBytesPerSec = (DWORD) (old->nSamplesPerSec * old->nChannels * bytesPerSample);
-    old->nBlockAlign     = (WORD) (old->nChannels * bytesPerSample);
+    WAVEFORMATEX *old    = (WAVEFORMATEX *)wavex;
+    old->nChannels       = (WORD)params->channelCount;
+    old->nSamplesPerSec  = (DWORD)sampleRate;
+    old->wBitsPerSample  = (WORD)(bytesPerSample*8);
+    old->nAvgBytesPerSec = (DWORD)(old->nSamplesPerSec * old->nChannels * bytesPerSample);
+    old->nBlockAlign     = (WORD)(old->nChannels * bytesPerSample);
 
     //WAVEFORMATEX
-
-    if (params->channelCount <=2 && (bytesPerSample == 2 || bytesPerSample == 1)) {
+    if (params->channelCount <=2 && (bytesPerSample == 2 || bytesPerSample == 1)){
         old->cbSize          = 0;
         old->wFormatTag      = WAVE_FORMAT_PCM;
     }
-
     //WAVEFORMATEXTENSIBLE
-    else {
+    else{
         old->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
 
         old->cbSize = sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX);
 
-        if ( (params->sampleFormat & ~paNonInterleaved) == paFloat32)
+        if ((params->sampleFormat & ~paNonInterleaved) == paFloat32)
             wavex->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
         else
             wavex->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
 
         wavex->Samples.wValidBitsPerSample = old->wBitsPerSample; //no extra padding!
 
-        switch (params->channelCount) {
-
-            case 1:
-                wavex->dwChannelMask = SPEAKER_FRONT_CENTER;
-                break;
-
-            case 2:
-                wavex->dwChannelMask = 0x1 | 0x2;
-                break;
-
-            case 4:
-                wavex->dwChannelMask = 0x1 | 0x2 | 0x10 | 0x20;
-                break;
-
-            case 6:
-                wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20;
-                break;
-
-            case 8:
-                wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80;
-                break;
-
-            default:
-                wavex->dwChannelMask = 0;
-                break;
+        switch(params->channelCount){
+            case 1:  wavex->dwChannelMask = SPEAKER_FRONT_CENTER; break;
+            case 2:  wavex->dwChannelMask = 0x1 | 0x2; break;
+            case 4:  wavex->dwChannelMask = 0x1 | 0x2 | 0x10 | 0x20; break;
+            case 6:  wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20; break;
+            case 8:  wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80; break;
+            default: wavex->dwChannelMask = 0; break;
         }
     }
 
@@ -1066,47 +883,51 @@ waveformatFromParams (WAVEFORMATEXTENSIBLE*wavex,
 #define paInt16          ((PaSampleFormat) 0x00000008) 
 */
 //lifted from pa_wdmks
-static void wasapiFillWFEXT (WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount)
+static void wasapiFillWFEXT( WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount)
 {
-    PA_DEBUG ( ("sampleFormat = %lx\n" , sampleFormat));
-    PA_DEBUG ( ("sampleRate = %f\n" , sampleRate));
-    PA_DEBUG ( ("chanelCount = %d\n", channelCount));
+    PA_DEBUG(( "sampleFormat = %lx\n" , sampleFormat ));
+    PA_DEBUG(( "sampleRate = %f\n" , sampleRate ));
+    PA_DEBUG(( "chanelCount = %d\n", channelCount ));
 
     pwfext->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
     pwfext->Format.nChannels = channelCount;
-    pwfext->Format.nSamplesPerSec = (int) sampleRate;
-
-    if (channelCount == 1)
+    pwfext->Format.nSamplesPerSec = (int)sampleRate;
+    if(channelCount == 1)
         pwfext->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT;
     else
         pwfext->dwChannelMask = KSAUDIO_SPEAKER_STEREO;
-
-    if (sampleFormat == paFloat32) {
+    if(sampleFormat == paFloat32)
+    {
         pwfext->Format.nBlockAlign = channelCount * 4;
         pwfext->Format.wBitsPerSample = 32;
-        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 32;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
-    } else if (sampleFormat == paInt32) {
+    }
+    else if(sampleFormat == paInt32)
+    {
         pwfext->Format.nBlockAlign = channelCount * 4;
         pwfext->Format.wBitsPerSample = 32;
-        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 32;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
-    } else if (sampleFormat == paInt24) {
+    }
+    else if(sampleFormat == paInt24)
+    {
         pwfext->Format.nBlockAlign = channelCount * 3;
         pwfext->Format.wBitsPerSample = 24;
-        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 24;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
-    } else if (sampleFormat == paInt16) {
+    }
+    else if(sampleFormat == paInt16)
+    {
         pwfext->Format.nBlockAlign = channelCount * 2;
         pwfext->Format.wBitsPerSample = 16;
-        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 16;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
     }
-
     pwfext->Format.nAvgBytesPerSec = pwfext->Format.nSamplesPerSec * pwfext->Format.nBlockAlign;
 }
 
@@ -1122,201 +943,198 @@ const int BestToWorst[FORMATTESTS]={paFloat32,paInt24,paInt16};
 
 
 static PaError
-GetClosestFormat (IAudioClient * myClient, double sampleRate,const  PaStreamParameters * params,
-                  AUDCLNT_SHAREMODE *shareMode, WAVEFORMATEXTENSIBLE *outWavex)
+GetClosestFormat(IAudioClient * myClient, double sampleRate,const  PaStreamParameters * params, 
+				 AUDCLNT_SHAREMODE *shareMode, WAVEFORMATEXTENSIBLE *outWavex)
 {
-    //TODO we should try exclusive first and shared after
-    *shareMode = PORTAUDIO_SHAREMODE;
-
-    PaError answer = paInvalidSampleRate;
-
-    waveformatFromParams (outWavex,params,sampleRate);
-    WAVEFORMATEX *sharedClosestMatch=0;
-    HRESULT hResult=!S_OK;
-
-    if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-        hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_EXCLUSIVE, (WAVEFORMATEX*) outWavex,NULL);
-    else
-        hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX*) &outWavex,&sharedClosestMatch);
-
-    if (hResult == S_OK)
-        answer = paFormatIsSupported;
-    else if (sharedClosestMatch) {
-        WAVEFORMATEXTENSIBLE* ext = (WAVEFORMATEXTENSIBLE*) sharedClosestMatch;
-
-        int closestMatchSR = (int) sharedClosestMatch->nSamplesPerSec;
-
-        if (sharedClosestMatch->wFormatTag == WAVE_FORMAT_EXTENSIBLE)
-            memcpy (outWavex,sharedClosestMatch,sizeof (WAVEFORMATEXTENSIBLE));
-        else
-            memcpy (outWavex,sharedClosestMatch,sizeof (WAVEFORMATEX));
-
-        CoTaskMemFree (sharedClosestMatch);
-
-        if ( (int) sampleRate == closestMatchSR)
-            answer = paFormatIsSupported;
-        else
-            answer = paInvalidSampleRate;
-
-    } else {
-
-        //it doesnt suggest anything?? ok lets show it the MENU!
-
-        //ok fun time as with pa_win_mme, we know only a refusal of the user-requested
-        //sampleRate+num Channel is disastrous, as the portaudio buffer processor converts between anything
-        //so lets only use the number
-        for (int i=0;i<FORMATTESTS;++i) {
-            WAVEFORMATEXTENSIBLE ext;
-            wasapiFillWFEXT (&ext,BestToWorst[i],sampleRate,params->channelCount);
-
-            if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_EXCLUSIVE, (WAVEFORMATEX*) &ext,NULL);
-            else
-                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX*) &ext,&sharedClosestMatch);
-
-            if (hResult == S_OK) {
-                memcpy (outWavex,&ext,sizeof (WAVEFORMATEXTENSIBLE));
-                answer = paFormatIsSupported;
-                break;
-            }
-        }
-
-        if (answer!=paFormatIsSupported) {
-            //try MIX format?
-            //why did it HAVE to come to this ....
-            WAVEFORMATEX pcm16WaveFormat;
-            memset (&pcm16WaveFormat,0,sizeof (WAVEFORMATEX));
-            pcm16WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
-            pcm16WaveFormat.nChannels = 2;
-            pcm16WaveFormat.nSamplesPerSec = (DWORD) sampleRate;
-            pcm16WaveFormat.nBlockAlign = 4;
-            pcm16WaveFormat.nAvgBytesPerSec = pcm16WaveFormat.nSamplesPerSec*pcm16WaveFormat.nBlockAlign;
-            pcm16WaveFormat.wBitsPerSample = 16;
-            pcm16WaveFormat.cbSize = 0;
-
-            if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_EXCLUSIVE, (WAVEFORMATEX*) &pcm16WaveFormat,NULL);
-            else
-                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX*) &pcm16WaveFormat,&sharedClosestMatch);
-
-            if (hResult == S_OK) {
-                memcpy (outWavex,&pcm16WaveFormat,sizeof (WAVEFORMATEX));
-                answer = paFormatIsSupported;
-            }
-        }
-
-        logAUDCLNT_E (hResult);
-    }
-
-    return answer;
+	//TODO we should try exclusive first and shared after
+	*shareMode = PORTAUDIO_SHAREMODE;
+
+	PaError answer = paInvalidSampleRate;
+
+    waveformatFromParams(outWavex,params,sampleRate);
+	WAVEFORMATEX *sharedClosestMatch=0;
+	HRESULT hResult=!S_OK;
+
+	if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+		hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE,&outWavex->Format,NULL);
+	else
+		hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED,   &outWavex->Format,&sharedClosestMatch);
+
+	if (hResult == S_OK)
+		answer = paFormatIsSupported;
+    else if (sharedClosestMatch){
+        WAVEFORMATEXTENSIBLE* ext = (WAVEFORMATEXTENSIBLE*)sharedClosestMatch;
+		
+		int closestMatchSR = (int)sharedClosestMatch->nSamplesPerSec;
+
+		if (sharedClosestMatch->wFormatTag == WAVE_FORMAT_EXTENSIBLE)
+			memcpy(outWavex,sharedClosestMatch,sizeof(WAVEFORMATEXTENSIBLE));
+		else
+			memcpy(outWavex,sharedClosestMatch,sizeof(WAVEFORMATEX));
+
+        CoTaskMemFree(sharedClosestMatch);
+
+		if ((int)sampleRate == closestMatchSR)
+		answer = paFormatIsSupported;
+		else
+			answer = paInvalidSampleRate;
+	
+	}else {
+
+		//it doesnt suggest anything?? ok lets show it the MENU!
+
+		//ok fun time as with pa_win_mme, we know only a refusal of the user-requested
+		//sampleRate+num Channel is disastrous, as the portaudio buffer processor converts between anything
+		//so lets only use the number 
+		for (int i=0;i<FORMATTESTS;++i){
+			WAVEFORMATEXTENSIBLE ext;
+			wasapiFillWFEXT(&ext,BestToWorst[i],sampleRate,params->channelCount);		
+			if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE,&ext.Format,NULL);
+			else
+				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED,   &ext.Format,&sharedClosestMatch);
+
+			if (hResult == S_OK){
+				memcpy(outWavex,&ext,sizeof(WAVEFORMATEXTENSIBLE));
+				answer = paFormatIsSupported;
+				break;
+			}
+		}
+
+		if (answer!=paFormatIsSupported) {
+			//try MIX format?
+			//why did it HAVE to come to this ....
+			WAVEFORMATEX pcm16WaveFormat;
+			memset(&pcm16WaveFormat,0,sizeof(WAVEFORMATEX));
+			pcm16WaveFormat.wFormatTag = WAVE_FORMAT_PCM; 
+			pcm16WaveFormat.nChannels = 2; 
+			pcm16WaveFormat.nSamplesPerSec = (DWORD)sampleRate; 
+			pcm16WaveFormat.nBlockAlign = 4; 
+			pcm16WaveFormat.nAvgBytesPerSec = pcm16WaveFormat.nSamplesPerSec*pcm16WaveFormat.nBlockAlign; 
+			pcm16WaveFormat.wBitsPerSample = 16; 
+			pcm16WaveFormat.cbSize = 0;
+
+			if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE,&pcm16WaveFormat,NULL);
+			else
+				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED,   &pcm16WaveFormat,&sharedClosestMatch);
+
+			if (hResult == S_OK){
+				memcpy(outWavex,&pcm16WaveFormat,sizeof(WAVEFORMATEX));
+				answer = paFormatIsSupported;
+			}
+		}
+
+		logAUDCLNT_E(hResult);
+	}
+
+	return answer;
 }
 
 
-static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
+static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
                                   const  PaStreamParameters *inputParameters,
                                   const  PaStreamParameters *outputParameters,
-                                  double sampleRate)
+                                  double sampleRate )
 {
 
     int inputChannelCount, outputChannelCount;
     PaSampleFormat inputSampleFormat, outputSampleFormat;
 
-    if (inputParameters) {
+    if( inputParameters )
+    {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-
-        if (inputSampleFormat & paCustomFormat)
+        if( inputSampleFormat & paCustomFormat )
             return paSampleFormatNotSupported;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         /* check that input device can support inputChannelCount */
-        if (inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels)
+        if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels )
             return paInvalidChannelCount;
 
         /* validate inputStreamInfo */
-        if (inputParameters->hostApiSpecificStreamInfo)
+        if( inputParameters->hostApiSpecificStreamInfo )
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
-        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
-
-
-        IAudioClient *myClient=0;
+        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
 
-        HRESULT hResult = paWasapi->devInfo[inputParameters->device].device->Activate (
-                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**) &myClient);
 
-        if (hResult != S_OK) {
-            logAUDCLNT_E (hResult);
-            return paInvalidDevice;
-        }
+		IAudioClient *myClient=0;
+		HRESULT hResult = paWasapi->devInfo[inputParameters->device].device->Activate(
+			__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&myClient);
+		if (hResult != S_OK){
+			logAUDCLNT_E(hResult);
+			return paInvalidDevice;
+		}
 
         WAVEFORMATEXTENSIBLE wavex;
+		AUDCLNT_SHAREMODE shareMode;
+		PaError answer = GetClosestFormat(myClient,sampleRate,inputParameters,&shareMode,&wavex);
+		myClient->Release();
 
-        AUDCLNT_SHAREMODE shareMode;
-        PaError answer = GetClosestFormat (myClient,sampleRate,inputParameters,&shareMode,&wavex);
-        myClient->Release();
-
-        if (answer !=paFormatIsSupported)
-            return answer;
-    } else {
+		if (answer !=paFormatIsSupported)
+			return answer;
+    }
+    else
+    {
         inputChannelCount = 0;
     }
 
-    if (outputParameters) {
+    if( outputParameters )
+    {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-
-        if (outputSampleFormat & paCustomFormat)
+        if( outputSampleFormat & paCustomFormat )
             return paSampleFormatNotSupported;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         /* check that output device can support outputChannelCount */
-        if (outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels)
+        if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels )
             return paInvalidChannelCount;
 
         /* validate outputStreamInfo */
-        if (outputParameters->hostApiSpecificStreamInfo)
+        if( outputParameters->hostApiSpecificStreamInfo )
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
-        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
-
-        IAudioClient *myClient=0;
-
-        HRESULT hResult = paWasapi->devInfo[outputParameters->device].device->Activate (
-                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**) &myClient);
+        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
 
-        if (hResult != S_OK) {
-            logAUDCLNT_E (hResult);
-            return paInvalidDevice;
-        }
+		IAudioClient *myClient=0;
+		HRESULT hResult = paWasapi->devInfo[outputParameters->device].device->Activate(
+			__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&myClient);
+		if (hResult != S_OK){
+			logAUDCLNT_E(hResult);
+			return paInvalidDevice;
+		}
 
         WAVEFORMATEXTENSIBLE wavex;
+		AUDCLNT_SHAREMODE shareMode;
+		PaError answer = GetClosestFormat(myClient,sampleRate,outputParameters,&shareMode,&wavex);
+		myClient->Release();
 
-        AUDCLNT_SHAREMODE shareMode;
-        PaError answer = GetClosestFormat (myClient,sampleRate,outputParameters,&shareMode,&wavex);
-        myClient->Release();
-
-        if (answer !=paFormatIsSupported)
-            return answer;
-    } else {
+		if (answer !=paFormatIsSupported)
+			return answer;		
+    }
+    else
+    {
         outputChannelCount = 0;
     }
 
@@ -1328,7 +1146,7 @@ static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
 
 /* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */
 
-static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
+static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -1336,204 +1154,200 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData)
+                           void *userData )
 {
     PaError result = paNoError;
-    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
+    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
     PaWinWasapiStream *stream = 0;
     int inputChannelCount, outputChannelCount;
     PaSampleFormat inputSampleFormat, outputSampleFormat;
     PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat;
 
 
-    stream = (PaWinWasapiStream*) PaUtil_AllocateMemory (sizeof (PaWinWasapiStream));
-
-    if (!stream) {
+    stream = (PaWinWasapiStream*)PaUtil_AllocateMemory( sizeof(PaWinWasapiStream) );
+    if( !stream ){
         result = paInsufficientMemory;
         goto error;
     }
 
-    if (inputParameters) {
+    if( inputParameters )
+    {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         /* check that input device can support inputChannelCount */
-        if (inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels)
+        if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels )
             return paInvalidChannelCount;
 
         /* validate inputStreamInfo */
-        if (inputParameters->hostApiSpecificStreamInfo)
+        if( inputParameters->hostApiSpecificStreamInfo )
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
         PaWinWasapiDeviceInfo &info = paWasapi->devInfo[inputParameters->device];
 
-        HRESULT hResult = info.device->Activate (
-                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL,
-                              (void**) &stream->in.client);
+        HRESULT hResult = info.device->Activate(
+            __uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL,
+            (void**)&stream->in.client);
 
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = info.device->Activate (
-                      __uuidof (IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
-                      (void**) &stream->inVol);
+        hResult = info.device->Activate(
+            __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
+            (void**)&stream->inVol);
 
         if (hResult != S_OK)
             return paInvalidDevice;
-
-        AUDCLNT_SHAREMODE shareMode;
-
-        PaError answer = GetClosestFormat (stream->in.client,sampleRate,inputParameters,&shareMode,&stream->in.wavex);
-
-        if (answer !=paFormatIsSupported)
-            return answer;
+	
+		AUDCLNT_SHAREMODE shareMode;
+		PaError answer = GetClosestFormat(stream->in.client,sampleRate,inputParameters,&shareMode,&stream->in.wavex);
+		
+		if (answer !=paFormatIsSupported)
+			return answer;
 
         //stream->out.period = info.DefaultDevicePeriod;
         stream->in.period = info.MinimumDevicePeriod;
 
-        hResult = stream->in.client->Initialize (
-                      shareMode,
-                      0,  //no flags
-                      stream->in.period,
-                      0,//stream->out.period,
-                      (WAVEFORMATEX*) &stream->in.wavex,
-                      &stream->session
-                  );
-
-        if (hResult != S_OK) {
-            logAUDCLNT_E (hResult);
+        hResult = stream->in.client->Initialize(
+            shareMode,
+            0,  //no flags
+            stream->in.period,
+            0,//stream->out.period,
+            (WAVEFORMATEX*)&stream->in.wavex,
+            &stream->session
+            );
+
+        if (hResult != S_OK){
+            logAUDCLNT_E(hResult);
             return paInvalidDevice;
         }
 
-        hResult = stream->in.client->GetBufferSize (&stream->in.bufferSize);
-
+        hResult = stream->in.client->GetBufferSize(&stream->in.bufferSize);
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = stream->in.client->GetStreamLatency (&stream->in.latency);
-
+        hResult = stream->in.client->GetStreamLatency(&stream->in.latency);
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        double periodsPerSecond = 1.0/nano100ToSeconds (stream->in.period);
-
-        double samplesPerPeriod = (double) (stream->in.wavex.Format.nSamplesPerSec) /periodsPerSecond;
+        double periodsPerSecond = 1.0/nano100ToSeconds(stream->in.period);
+        double samplesPerPeriod = (double)(stream->in.wavex.Format.nSamplesPerSec)/periodsPerSecond;
 
         //this is the number of samples that are required at each period
-        stream->in.framesPerHostCallback = (unsigned long) samplesPerPeriod;//unrelated to channels
+        stream->in.framesPerHostCallback = (unsigned long)samplesPerPeriod;//unrelated to channels
 
         /* IMPLEMENT ME - establish which  host formats are available */
         hostInputSampleFormat =
-            PaUtil_SelectClosestAvailableFormat (waveformatToPaFormat (&stream->in.wavex), inputSampleFormat);
-    } else {
+            PaUtil_SelectClosestAvailableFormat( waveformatToPaFormat(&stream->in.wavex), inputSampleFormat );
+	}
+    else
+    {
         inputChannelCount = 0;
         inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */
     }
 
-    if (outputParameters) {
+    if( outputParameters )
+    {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
+        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
             return paInvalidDevice;
 
         /* check that output device can support inputChannelCount */
-        if (outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels)
+        if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels )
             return paInvalidChannelCount;
 
         /* validate outputStreamInfo */
-        if (outputParameters->hostApiSpecificStreamInfo)
+        if( outputParameters->hostApiSpecificStreamInfo )
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
         PaWinWasapiDeviceInfo &info = paWasapi->devInfo[outputParameters->device];
 
-        HRESULT hResult = info.device->Activate (
-                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL,
-                              (void**) &stream->out.client);
+        HRESULT hResult = info.device->Activate(
+            __uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL,
+            (void**)&stream->out.client);
 
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        AUDCLNT_SHAREMODE shareMode;
-
-        PaError answer = GetClosestFormat (stream->out.client,sampleRate,outputParameters,&shareMode,&stream->out.wavex);
-
-        if (answer !=paFormatIsSupported)
-            return answer;
-
-        LogWAVEFORMATEXTENSIBLE (&stream->out.wavex);
+		AUDCLNT_SHAREMODE shareMode;
+		PaError answer = GetClosestFormat(stream->out.client,sampleRate,outputParameters,&shareMode,&stream->out.wavex);
+		
+		if (answer !=paFormatIsSupported)
+			return answer;
+		LogWAVEFORMATEXTENSIBLE(&stream->out.wavex);
 
-        // stream->out.period = info.DefaultDevicePeriod;
+       // stream->out.period = info.DefaultDevicePeriod;
         stream->out.period = info.MinimumDevicePeriod;
 
-        /*For an exclusive-mode stream that uses event-driven buffering,
-        the caller must specify nonzero values for hnsPeriodicity and hnsBufferDuration,
-        and the values of these two parameters must be equal */
-        if (shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) {
-            hResult = stream->out.client->Initialize (
-                          shareMode,
-                          AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
-                          stream->out.period,
-                          stream->out.period,
-                          (WAVEFORMATEX*) &stream->out.wavex,
-                          &stream->session
-                      );
-        } else {
-            hResult = stream->out.client->Initialize (
-                          shareMode,
-                          AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
-                          0,
-                          0,
-                          (WAVEFORMATEX*) &stream->out.wavex,
-                          &stream->session
-                      );
-        }
-
-
-        if (hResult != S_OK) {
-            logAUDCLNT_E (hResult);
+		/*For an exclusive-mode stream that uses event-driven buffering, 
+		the caller must specify nonzero values for hnsPeriodicity and hnsBufferDuration, 
+		and the values of these two parameters must be equal */
+		if (shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE){
+			hResult = stream->out.client->Initialize(
+				shareMode,
+				AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 
+				stream->out.period,
+				stream->out.period,
+				(WAVEFORMATEX*)&stream->out.wavex,
+				&stream->session
+				);
+		}
+		else{
+			hResult = stream->out.client->Initialize(
+				shareMode,
+				AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 
+				0,
+				0,
+				(WAVEFORMATEX*)&stream->out.wavex,
+				&stream->session
+				);
+		}
+	
+
+        if (hResult != S_OK){
+            logAUDCLNT_E(hResult);
             return paInvalidDevice;
         }
 
-        hResult = info.device->Activate (
-
-                      __uuidof (IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
-                      (void**) &stream->outVol);
+        hResult = info.device->Activate(
+            __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
+            (void**)&stream->outVol);
 
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = stream->out.client->GetBufferSize (&stream->out.bufferSize);
-
+        hResult = stream->out.client->GetBufferSize(&stream->out.bufferSize);
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = stream->out.client->GetStreamLatency (&stream->out.latency);
-
+        hResult = stream->out.client->GetStreamLatency(&stream->out.latency);
         if (hResult != S_OK)
             return paInvalidDevice;
-
-        double periodsPerSecond = 1.0/nano100ToSeconds (stream->out.period);
-
-        double samplesPerPeriod = (double) (stream->out.wavex.Format.nSamplesPerSec) /periodsPerSecond;
+		
+        double periodsPerSecond = 1.0/nano100ToSeconds(stream->out.period);
+        double samplesPerPeriod = (double)(stream->out.wavex.Format.nSamplesPerSec)/periodsPerSecond;
 
         //this is the number of samples that are required at each period
         stream->out.framesPerHostCallback = stream->out.bufferSize; //(unsigned long)samplesPerPeriod;//unrelated to channels
 
         /* IMPLEMENT ME - establish which  host formats are available */
-        hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat (waveformatToPaFormat (&stream->out.wavex), outputSampleFormat);
-    } else {
+        hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat( waveformatToPaFormat(&stream->out.wavex), outputSampleFormat );
+    }
+    else
+    {
         outputChannelCount = 0;
         outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */
     }
@@ -1567,55 +1381,56 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
 
 
     /* validate platform specific flags */
-    if ( (streamFlags & paPlatformSpecificFlags) != 0)
+    if( (streamFlags & paPlatformSpecificFlags) != 0 )
         return paInvalidFlag; /* unexpected platform specific flag */
 
 
 
-    if (streamCallback) {
-        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
-                                               &paWasapi->callbackStreamInterface, streamCallback, userData);
-    } else {
-        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
-                                               &paWasapi->blockingStreamInterface, streamCallback, userData);
+    if( streamCallback )
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &paWasapi->callbackStreamInterface, streamCallback, userData );
+    }
+    else
+    {
+        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
+                                               &paWasapi->blockingStreamInterface, streamCallback, userData );
     }
 
-    PaUtil_InitializeCpuLoadMeasurer (&stream->cpuLoadMeasurer, sampleRate);
+    PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate );
 
 
-    if (outputParameters && inputParameters) {
+	if (outputParameters && inputParameters){
 
-        //serious problem #1
-        if (stream->in.period != stream->out.period) {
-            PRINT ( ("OpenStream: period discrepancy\n"));
-            goto error;
-        }
+		//serious problem #1
+		if (stream->in.period != stream->out.period){
+			PRINT(("OpenStream: period discrepancy\n"));
+			goto error;
+		}
 
-        //serious problem #2
-        if (stream->out.framesPerHostCallback != stream->in.framesPerHostCallback) {
-            PRINT ( ("OpenStream: framesPerHostCallback discrepancy\n"));
-            goto error;
-        }
-    }
+		//serious problem #2
+		if (stream->out.framesPerHostCallback != stream->in.framesPerHostCallback){
+			PRINT(("OpenStream: framesPerHostCallback discrepancy\n"));
+			goto error;
+		}
+	}
 
-    unsigned long framesPerHostCallback = (outputParameters) ?
-
-                                          stream->out.framesPerHostCallback:
-                                          stream->in.framesPerHostCallback;
+	unsigned long framesPerHostCallback = (outputParameters)?
+		stream->out.framesPerHostCallback: 
+		stream->in.framesPerHostCallback;
 
     /* we assume a fixed host buffer size in this example, but the buffer processor
         can also support bounded and unknown host buffer sizes by passing
         paUtilBoundedHostBufferSize or paUtilUnknownHostBufferSize instead of
         paUtilFixedHostBufferSize below. */
 
-    result =  PaUtil_InitializeBufferProcessor (&stream->bufferProcessor,
+    result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
               inputChannelCount, inputSampleFormat, hostInputSampleFormat,
               outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
               sampleRate, streamFlags, framesPerBuffer,
               framesPerHostCallback, paUtilFixedHostBufferSize,
-              streamCallback, userData);
-
-    if (result != paNoError)
+              streamCallback, userData );
+    if( result != paNoError )
         goto error;
 
 
@@ -1624,24 +1439,24 @@ static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
         values.
     */
     stream->streamRepresentation.streamInfo.inputLatency =
-        PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor)
-        + ( (inputParameters) ?nano100ToSeconds (stream->in.latency) :0);
+            PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)
+			+ ((inputParameters)?nano100ToSeconds(stream->in.latency) :0);
 
     stream->streamRepresentation.streamInfo.outputLatency =
-        PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor)
-        + ( (outputParameters) ?nano100ToSeconds (stream->out.latency) :0);
+            PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)
+			+ ((outputParameters)?nano100ToSeconds(stream->out.latency) :0);
 
     stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
 
 
-    *s = (PaStream*) stream;
+    *s = (PaStream*)stream;
 
 
     return result;
 
 error:
-    if (stream)
-        PaUtil_FreeMemory (stream);
+    if( stream )
+        PaUtil_FreeMemory( stream );
 
     return result;
 }
@@ -1657,68 +1472,60 @@ error:
               if ((punk) != NULL)  \
                 { (punk)->Release(); (punk) = NULL; }
 
-static PaError CloseStream (PaStream* s)
+static PaError CloseStream( PaStream* s )
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /*
         IMPLEMENT ME:
             - additional stream closing + cleanup
     */
 
-    SAFE_RELEASE (stream->out.client);
-    SAFE_RELEASE (stream->in.client);
-    SAFE_RELEASE (stream->cclient);
-    SAFE_RELEASE (stream->rclient);
-    SAFE_RELEASE (stream->inVol);
-    SAFE_RELEASE (stream->outVol);
-    CloseHandle (stream->hThread);
-    CloseHandle (stream->hNotificationEvent);
+    SAFE_RELEASE(stream->out.client);
+    SAFE_RELEASE(stream->in.client);
+    SAFE_RELEASE(stream->cclient);
+    SAFE_RELEASE(stream->rclient);
+	SAFE_RELEASE(stream->inVol);
+	SAFE_RELEASE(stream->outVol);
+    CloseHandle(stream->hThread);
+	CloseHandle(stream->hNotificationEvent);
 
-    PaUtil_TerminateBufferProcessor (&stream->bufferProcessor);
-    PaUtil_TerminateStreamRepresentation (&stream->streamRepresentation);
-    PaUtil_FreeMemory (stream);
+    PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+    PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
+    PaUtil_FreeMemory( stream );
 
     return result;
 }
 
-DWORD WINAPI ProcThread (void *client);
+DWORD WINAPI ProcThread(void *client);
 
-static PaError StartStream (PaStream *s)
+static PaError StartStream( PaStream *s )
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
-
-    PaUtil_ResetBufferProcessor (&stream->bufferProcessor);
-
-    HRESULT hResult=S_OK;
-
-    if (stream->out.client) {
-        hResult = stream->out.client->GetService (__uuidof (IAudioRenderClient), (void**) &stream->rclient);
-        logAUDCLNT_E (hResult);
-
-        if (hResult!=S_OK)
-            return paUnanticipatedHostError;
-    }
-
-    if (stream->in.client) {
-        hResult = stream->in.client->GetService (__uuidof (IAudioCaptureClient), (void**) &stream->cclient);
-        logAUDCLNT_E (hResult);
-
-        if (hResult!=S_OK)
-            return paUnanticipatedHostError;
-    }
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+
+    PaUtil_ResetBufferProcessor( &stream->bufferProcessor );
+	
+	HRESULT hResult=S_OK;
+
+	if (stream->out.client){
+		hResult = stream->out.client->GetService(__uuidof(IAudioRenderClient),(void**)&stream->rclient);
+		logAUDCLNT_E(hResult);
+		if (hResult!=S_OK)
+			return paUnanticipatedHostError;
+	}
+	
+	if (stream->in.client){
+	 hResult = stream->in.client->GetService(__uuidof(IAudioCaptureClient),(void**)&stream->cclient);
+		logAUDCLNT_E(hResult);
+		if (hResult!=S_OK)
+			return paUnanticipatedHostError;
+	}
 
     // Create a thread for this client.
-    stream->hThread = CreateThread (
-                          NULL,              // no security attribute
-                          0,                 // default stack size
-                          ProcThread,
-                          (LPVOID) stream,    // thread parameter
-                          0,                 // not suspended
-                          &stream->dwThreadId);      // returns thread ID
-
+    stream->hThread = CREATE_THREAD;
+        
     if (stream->hThread == NULL)
         return paUnanticipatedHostError;
 
@@ -1726,17 +1533,16 @@ static PaError StartStream (PaStream *s)
 }
 
 
-static PaError StopStream (PaStream *s)
+static PaError StopStream( PaStream *s )
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     stream->closeRequest = true;
     //todo something MUCH better than this
-
-    while (stream->closeRequest)
-        Sleep (100);
+    while(stream->closeRequest)
+        Sleep(100);
 
     /* IMPLEMENT ME, see portaudio.h for required behavior */
 
@@ -1746,17 +1552,16 @@ static PaError StopStream (PaStream *s)
 }
 
 
-static PaError AbortStream (PaStream *s)
+static PaError AbortStream( PaStream *s )
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     stream->closeRequest = true;
     //todo something MUCH better than this
-
-    while (stream->closeRequest)
-        Sleep (100);
+    while(stream->closeRequest)
+        Sleep(100);
 
     /* IMPLEMENT ME, see portaudio.h for required behavior */
 
@@ -1764,42 +1569,42 @@ static PaError AbortStream (PaStream *s)
 }
 
 
-static PaError IsStreamStopped (PaStream *s)
+static PaError IsStreamStopped( PaStream *s )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     return !stream->running;
 }
 
 
-static PaError IsStreamActive (PaStream *s)
+static PaError IsStreamActive( PaStream *s )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
     return stream->running;
 }
 
 
-static PaTime GetStreamTime (PaStream *s)
+static PaTime GetStreamTime( PaStream *s )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     (void) stream;
 
     /* IMPLEMENT ME, see portaudio.h for required behavior*/
 
-    //this is lame ds and mme does the same thing, quite useless method imho
-    //why dont we fetch the time in the pa callbacks?
-    //at least its doing to be clocked to something
+	//this is lame ds and mme does the same thing, quite useless method imho
+	//why dont we fetch the time in the pa callbacks?
+	//at least its doing to be clocked to something
     return PaUtil_GetTime();
 }
 
 
-static double GetStreamCpuLoad (PaStream* s)
+static double GetStreamCpuLoad( PaStream* s )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
-    return PaUtil_GetCpuLoad (&stream->cpuLoadMeasurer);
+    return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer );
 }
 
 
@@ -1809,11 +1614,11 @@ static double GetStreamCpuLoad (PaStream* s)
     for blocking streams.
 */
 
-static PaError ReadStream (PaStream* s,
+static PaError ReadStream( PaStream* s,
                            void *buffer,
-                           unsigned long frames)
+                           unsigned long frames )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     (void) buffer;
@@ -1826,11 +1631,11 @@ static PaError ReadStream (PaStream* s,
 }
 
 
-static PaError WriteStream (PaStream* s,
+static PaError WriteStream( PaStream* s,
                             const void *buffer,
-                            unsigned long frames)
+                            unsigned long frames )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     (void) buffer;
@@ -1843,9 +1648,9 @@ static PaError WriteStream (PaStream* s,
 }
 
 
-static signed long GetStreamReadAvailable (PaStream* s)
+static signed long GetStreamReadAvailable( PaStream* s )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     (void) stream;
@@ -1856,9 +1661,9 @@ static signed long GetStreamReadAvailable (PaStream* s)
 }
 
 
-static signed long GetStreamWriteAvailable (PaStream* s)
+static signed long GetStreamWriteAvailable( PaStream* s )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
 
     /* suppress unused variable warnings */
     (void) stream;
@@ -1875,16 +1680,16 @@ static signed long GetStreamWriteAvailable (PaStream* s)
     occur in a host implementation.
 
 */
-static void WaspiHostProcessingLoop (void *inputBuffer,  long inputFrames,
+static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
                                      void *outputBuffer, long outputFrames,
-                                     void *userData)
+                                     void *userData )
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) userData;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)userData;
     PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /* IMPLEMENT ME */
     int callbackResult;
     unsigned long framesProcessed;
 
-    PaUtil_BeginCpuLoadMeasurement (&stream->cpuLoadMeasurer);
+    PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer );
 
 
     /*
@@ -1900,7 +1705,7 @@ static void WaspiHostProcessingLoop (void *inputBuffer,  long inputFrames,
 
 
 
-    PaUtil_BeginBufferProcessing (&stream->bufferProcessor, &timeInfo, 0 /* IMPLEMENT ME: pass underflow/overflow flags when necessary */);
+    PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, 0 /* IMPLEMENT ME: pass underflow/overflow flags when necessary */ );
 
     /*
         depending on whether the host buffers are interleaved, non-interleaved
@@ -1908,20 +1713,22 @@ static void WaspiHostProcessingLoop (void *inputBuffer,  long inputFrames,
         PaUtil_SetNonInterleaved*Channel() or PaUtil_Set*Channel() here.
     */
 
-    if (stream->bufferProcessor.inputChannelCount > 0) {
-        PaUtil_SetInputFrameCount (&stream->bufferProcessor, inputFrames);
-        PaUtil_SetInterleavedInputChannels (&stream->bufferProcessor,
-                                            0, /* first channel of inputBuffer is channel 0 */
-                                            inputBuffer,
-                                            0);  /* 0 - use inputChannelCount passed to init buffer processor */
+    if( stream->bufferProcessor.inputChannelCount > 0 )
+    {
+        PaUtil_SetInputFrameCount( &stream->bufferProcessor, inputFrames );
+        PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor,
+            0, /* first channel of inputBuffer is channel 0 */
+            inputBuffer,
+            0 ); /* 0 - use inputChannelCount passed to init buffer processor */
     }
 
-    if (stream->bufferProcessor.outputChannelCount > 0) {
-        PaUtil_SetOutputFrameCount (&stream->bufferProcessor, outputFrames);
-        PaUtil_SetInterleavedOutputChannels (&stream->bufferProcessor,
-                                             0, /* first channel of outputBuffer is channel 0 */
-                                             outputBuffer,
-                                             0);  /* 0 - use outputChannelCount passed to init buffer processor */
+    if( stream->bufferProcessor.outputChannelCount > 0 )
+    {
+        PaUtil_SetOutputFrameCount( &stream->bufferProcessor, outputFrames);
+        PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor,
+            0, /* first channel of outputBuffer is channel 0 */
+            outputBuffer,
+            0 ); /* 0 - use outputChannelCount passed to init buffer processor */
     }
 
     /* you must pass a valid value of callback result to PaUtil_EndBufferProcessing()
@@ -1931,8 +1738,7 @@ static void WaspiHostProcessingLoop (void *inputBuffer,  long inputFrames,
         using PaUtil_IsBufferProcessorOuputEmpty( bufferProcessor )
     */
     callbackResult = paContinue;
-
-    framesProcessed = PaUtil_EndBufferProcessing (&stream->bufferProcessor, &callbackResult);
+    framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult );
 
 
     /*
@@ -1940,147 +1746,134 @@ static void WaspiHostProcessingLoop (void *inputBuffer,  long inputFrames,
         host format, do it here.
     */
 
-    PaUtil_EndCpuLoadMeasurement (&stream->cpuLoadMeasurer, framesProcessed);
+    PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed );
 
 
-    if (callbackResult == paContinue) {
+    if( callbackResult == paContinue )
+    {
         /* nothing special to do */
-    } else if (callbackResult == paAbort) {
+    }
+    else if( callbackResult == paAbort )
+    {
         /* IMPLEMENT ME - finish playback immediately  */
 
         /* once finished, call the finished callback */
-        if (stream->streamRepresentation.streamFinishedCallback != 0)
-            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
-    } else {
+        if( stream->streamRepresentation.streamFinishedCallback != 0 )
+            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+    }
+    else
+    {
         /* User callback has asked us to stop with paComplete or other non-zero value */
 
         /* IMPLEMENT ME - finish playback once currently queued audio has completed  */
 
         /* once finished, call the finished callback */
-        if (stream->streamRepresentation.streamFinishedCallback != 0)
-            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
+        if( stream->streamRepresentation.streamFinishedCallback != 0 )
+            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
     }
 }
 
 
-void
-MMCSS_activate()
-{
+void 
+MMCSS_activate(){
 
     DWORD stuff=0;
-    HANDLE thCarac = pAvSetMmThreadCharacteristics ("Pro Audio",&stuff);
-
-    if (!thCarac) {
-        PRINT ( ("AvSetMmThreadCharacteristics failed!\n"));
+    HANDLE thCarac = pAvSetMmThreadCharacteristics("Pro Audio",&stuff);
+    if (!thCarac){
+        PRINT(("AvSetMmThreadCharacteristics failed!\n"));
     }
 
-    BOOL prio = pAvSetMmThreadPriority (thCarac,AVRT_PRIORITY_NORMAL);
-
-    if (!prio) {
-        PRINT ( ("AvSetMmThreadPriority failed!\n"));
+    BOOL prio = pAvSetMmThreadPriority(thCarac,AVRT_PRIORITY_NORMAL);
+    if (!prio){
+        PRINT(("AvSetMmThreadPriority failed!\n"));
     }
 
-    //debug
+	//debug
     {
         HANDLE hh       = GetCurrentThread();
-        int  currprio   = GetThreadPriority (hh);
-        DWORD currclass = GetPriorityClass (GetCurrentProcess());
-        PRINT ( ("currprio 0x%X currclass 0x%X\n",currprio,currclass));
+        int  currprio   = GetThreadPriority(hh);
+        DWORD currclass = GetPriorityClass(GetCurrentProcess());
+        PRINT(("currprio 0x%X currclass 0x%X\n",currprio,currclass));
     }
 }
 
 
 DWORD WINAPI
-ProcThread (void* param)
-{
-    HRESULT hResult;
-    MMCSS_activate();
-
-    PaWinWasapiStream *stream = (PaWinWasapiStream*) param;
-
-    stream->hNotificationEvent = CreateEvent (NULL,
-                                 FALSE,  //bManualReset are we sure??
-                                 FALSE,
-                                 "PAWASA");
-    hResult = stream->out.client->SetEventHandle (stream->hNotificationEvent);
-
-    if (hResult != S_OK)
-        logAUDCLNT_E (hResult);
-
-    if (stream->out.client) {
-        hResult = stream->out.client->Start();
-
-        if (hResult != S_OK)
-            logAUDCLNT_E (hResult);
-    }
-
-    stream->running = true;
-
-    bool bOne = false;
-
-    while (!stream->closeRequest) {
-        //lets wait but have a 1 second timeout
-        DWORD dwResult = WaitForSingleObject (stream->hNotificationEvent, 1000);
-
-        switch (dwResult) {
-
-            case WAIT_OBJECT_0: {
-
-                unsigned long usingBS = stream->out.framesPerHostCallback;
-
-                BYTE* indata  = 0;
-                BYTE* outdata = 0;
-
-                hResult = stream->rclient->GetBuffer (usingBS, &outdata);
-
-                if (hResult != S_OK || !outdata) {
-                    //logAUDCLNT_E(hResult);
-                    //most probably shared mode and hResult=AUDCLNT_E_BUFFER_TOO_LARGE
-                    UINT32 padding = 0;
-                    hResult = stream->out.client->GetCurrentPadding (&padding);
-
-                    if (padding == 0)
-                        break;
-
-                    usingBS = usingBS-padding;
-
-                    if (usingBS == 0)
-                        break;//huh?
-
-                    hResult = stream->rclient->GetBuffer (usingBS, &outdata);
-
-                    if (hResult != S_OK) //what can we do NOW??
-                        break;
-
-                    //logAUDCLNT_E(hResult);
-                }
-
-                WaspiHostProcessingLoop (indata, usingBS ,outdata, usingBS, stream);
-
-                hResult = stream->rclient->ReleaseBuffer (usingBS, 0);
-
-                if (hResult != S_OK)
-                    logAUDCLNT_E (hResult);
-
-                /*	This was suggested, but in my tests it doesnt seem to improve the
-                   locking behaviour some drivers have running in exclusive mode.
-                   if(!ResetEvent(stream->hNotificationEvent)){
-                   	logAUDCLNT_E(hResult);
-                   }
-                */
-
-            }
-
-            break;
+ProcThread(void* param){
+	HRESULT hResult;
+	MMCSS_activate();
+
+    PaWinWasapiStream *stream = (PaWinWasapiStream*)param;
+
+	stream->hNotificationEvent = CreateEvent(NULL, 
+	                                         FALSE,  //bManualReset are we sure??
+											 FALSE, 
+											 "PAWASA");
+	hResult = stream->out.client->SetEventHandle(stream->hNotificationEvent);
+	if (hResult != S_OK)
+		logAUDCLNT_E(hResult);
+
+	if (stream->out.client){
+		hResult = stream->out.client->Start();
+		if (hResult != S_OK)
+			logAUDCLNT_E(hResult);
+	}
+
+	stream->running = true;
+	bool bOne = false;
+
+	while( !stream->closeRequest ) 
+    { 
+	    //lets wait but have a 1 second timeout
+        DWORD dwResult = WaitForSingleObject(stream->hNotificationEvent, 1000);
+        switch( dwResult ) {
+		case WAIT_OBJECT_0: {
+
+			unsigned long usingBS = stream->out.framesPerHostCallback;
+
+			BYTE* indata  = 0;
+			BYTE* outdata = 0;
+
+			hResult = stream->rclient->GetBuffer(usingBS, &outdata);
+
+			if (hResult != S_OK || !outdata) {
+				//logAUDCLNT_E(hResult);
+				//most probably shared mode and hResult=AUDCLNT_E_BUFFER_TOO_LARGE
+				UINT32 padding = 0;
+				hResult = stream->out.client->GetCurrentPadding(&padding);
+				if (padding == 0)
+					break;	
+				usingBS = usingBS-padding;
+				if (usingBS == 0)
+					break;//huh?
+				hResult = stream->rclient->GetBuffer(usingBS, &outdata);
+				if (hResult != S_OK)//what can we do NOW??
+					break;
+				//logAUDCLNT_E(hResult);			
+			}
+	
+			WaspiHostProcessingLoop(indata, usingBS ,outdata, usingBS, stream);
+
+			hResult = stream->rclient->ReleaseBuffer(usingBS, 0);
+			if (hResult != S_OK)
+				logAUDCLNT_E(hResult);
+
+			 /*	This was suggested, but in my tests it doesnt seem to improve the 
+                locking behaviour some drivers have running in exclusive mode.
+                if(!ResetEvent(stream->hNotificationEvent)){
+					logAUDCLNT_E(hResult);
+				}
+             */
+
+		} 
+		break;
 
         }
     }
-
-    stream->out.client->Stop();
-
+	stream->out.client->Stop();
     stream->closeRequest = false;
-
-    return 0;
+    
+	return 0; 
 }
 
 
@@ -2092,42 +1885,28 @@ ProcThread (void* param)
 
 
 #if 0
-
-if (bFirst)
-{
-    float masteur;
-    hResult = stream->outVol->GetMasterVolumeLevelScalar (&masteur);
-
-    if (hResult != S_OK)
-        logAUDCLNT_E (hResult);
-
-    float chan1, chan2;
-
-    hResult = stream->outVol->GetChannelVolumeLevelScalar (0, &chan1);
-
-    if (hResult != S_OK)
-        logAUDCLNT_E (hResult);
-
-    hResult = stream->outVol->GetChannelVolumeLevelScalar (1, &chan2);
-
-    if (hResult != S_OK)
-        logAUDCLNT_E (hResult);
-
-    BOOL bMute;
-
-    hResult = stream->outVol->GetMute (&bMute);
-
-    if (hResult != S_OK)
-        logAUDCLNT_E (hResult);
-
-    stream->outVol->SetMasterVolumeLevelScalar (0.5, NULL);
-
-    stream->outVol->SetChannelVolumeLevelScalar (0, 0.5, NULL);
-
-    stream->outVol->SetChannelVolumeLevelScalar (1, 0.5, NULL);
-
-    stream->outVol->SetMute (FALSE, NULL);
-
-    bFirst = false;
-}
+			if(bFirst) {			
+				float masteur;
+				hResult = stream->outVol->GetMasterVolumeLevelScalar(&masteur);
+				if (hResult != S_OK)
+					logAUDCLNT_E(hResult);
+				float chan1, chan2;
+				hResult = stream->outVol->GetChannelVolumeLevelScalar(0, &chan1);
+				if (hResult != S_OK)
+					logAUDCLNT_E(hResult);
+				hResult = stream->outVol->GetChannelVolumeLevelScalar(1, &chan2);
+				if (hResult != S_OK)
+					logAUDCLNT_E(hResult);
+
+				BOOL bMute;
+				hResult = stream->outVol->GetMute(&bMute);
+				if (hResult != S_OK)
+					logAUDCLNT_E(hResult);
+
+				stream->outVol->SetMasterVolumeLevelScalar(0.5, NULL);
+				stream->outVol->SetChannelVolumeLevelScalar(0, 0.5, NULL);
+				stream->outVol->SetChannelVolumeLevelScalar(1, 0.5, NULL);
+				stream->outVol->SetMute(FALSE, NULL);
+				bFirst = false;
+			}
 #endif
\ No newline at end of file
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wdmks/pa_win_wdmks.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wdmks/pa_win_wdmks.c
index 5dff2865cb..caddfd52d6 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wdmks/pa_win_wdmks.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wdmks/pa_win_wdmks.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_win_wdmks.c 1339 2008-02-15 07:50:33Z rossb $
+ * $Id: pa_win_wdmks.c 1411 2009-05-14 14:37:37Z rossb $
  * PortAudio Windows WDM-KS interface
  *
  * Author: Andrew Baldwin
@@ -77,7 +77,7 @@
 
 #include <windows.h>
 #include <winioctl.h>
-
+#include <process.h>
 
 #ifdef __GNUC__
     #undef PA_LOGE_
@@ -106,25 +106,31 @@
     #define DYNAMIC_GUID(data) DYNAMIC_GUID_THUNK(data)
 #endif
 
+/* use CreateThread for CYGWIN, _beginthreadex for all others */
+#ifndef __CYGWIN__
+#define CREATE_THREAD (HANDLE)_beginthreadex( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#else
+#define CREATE_THREAD CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#endif
+
+/* use ExitThread for CYGWIN, _endthreadex for all others */
+#ifndef __CYGWIN__
+#define EXIT_THREAD _endthreadex(0)
+#else
+#define EXIT_THREAD ExitThread(0)
+#endif
+
 #ifdef _MSC_VER
+    #define NOMMIDS
     #define DYNAMIC_GUID(data) {data}
-    #define _INC_MMREG
     #define _NTRTL_ /* Turn off default definition of DEFINE_GUIDEX */
     #undef DEFINE_GUID
     #define DEFINE_GUID(n,data) EXTERN_C const GUID n = {data}
     #define DEFINE_GUID_THUNK(n,data) DEFINE_GUID(n,data)
     #define DEFINE_GUIDEX(n) DEFINE_GUID_THUNK(n, STATIC_##n)
-    #if !defined( DEFINE_WAVEFORMATEX_GUID )
-        #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
-    #endif
-    #define  WAVE_FORMAT_ADPCM      0x0002
-    #define  WAVE_FORMAT_IEEE_FLOAT 0x0003
-    #define  WAVE_FORMAT_ALAW       0x0006
-    #define  WAVE_FORMAT_MULAW      0x0007
-    #define  WAVE_FORMAT_MPEG       0x0050
-    #define  WAVE_FORMAT_DRM        0x0009
 #endif
 
+#include <mmreg.h>
 #include <ks.h>
 #include <ksmedia.h>
 #include <tchar.h>
@@ -2910,11 +2916,26 @@ static DWORD WINAPI ProcessingThread(LPVOID pParam)
                     PaUtil_SetInputChannel(&stream->bufferProcessor,i,((unsigned char*)(stream->packets[inbuf].Header.Data))+(i*stream->inputSampleSize),stream->deviceInputChannels);
                 }
             }
-            /* Only call the EndBufferProcessing function is the total input frames == total output frames */
-            if((stream->bufferProcessor.hostInputFrameCount[0] + stream->bufferProcessor.hostInputFrameCount[1]) ==
-                (stream->bufferProcessor.hostOutputFrameCount[0] + stream->bufferProcessor.hostOutputFrameCount[1]) )
+            
+            if (stream->recordingPin && stream->playbackPin) /* full duplex */
+            {
+                /* Only call the EndBufferProcessing function when the total input frames == total output frames */
+
+                if((stream->bufferProcessor.hostInputFrameCount[0] + stream->bufferProcessor.hostInputFrameCount[1]) ==
+                        (stream->bufferProcessor.hostOutputFrameCount[0] + stream->bufferProcessor.hostOutputFrameCount[1]) )
+                {
+                    framesProcessed = PaUtil_EndBufferProcessing(&stream->bufferProcessor,&cbResult);
+                }
+                else
+                {
+                    framesProcessed = 0;
+                }
+            }
+            else 
+            {
                 framesProcessed = PaUtil_EndBufferProcessing(&stream->bufferProcessor,&cbResult);
-            else framesProcessed = 0;
+            }
+
             if( doChannelCopy )
             {
                 /* Copy the first output channel to the other channels */
@@ -3010,7 +3031,7 @@ static DWORD WINAPI ProcessingThread(LPVOID pParam)
     }
 
     PA_LOGL_;
-    ExitThread(0);
+    EXIT_THREAD;
     return 0;
 }
 
@@ -3045,7 +3066,7 @@ static PaError StartStream( PaStream *s )
       PA_DEBUG(("Class ret = %d;",ret));*/
 
     stream->streamStarted = 1;
-    stream->streamThread = CreateThread(NULL, 0, ProcessingThread, stream, 0, &dwID);
+    stream->streamThread = (HANDLE)_beginthreadex(NULL, 0, ProcessingThread, stream, 0, &dwID);
     if(stream->streamThread == NULL)
     {
         stream->streamStarted = 0;
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wmme/pa_win_wmme.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wmme/pa_win_wmme.c
index bbb8f8b87d..2436d8de1f 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wmme/pa_win_wmme.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wmme/pa_win_wmme.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_win_wmme.c 1340 2008-02-15 08:31:42Z rossb $
+ * $Id: pa_win_wmme.c 1432 2009-12-09 01:31:44Z rossb $
  * pa_win_wmme.c
  * Implementation of PortAudio for Windows MultiMedia Extensions (WMME)       
  *                                                                                         
@@ -151,7 +151,17 @@ Non-critical stuff for the future:
 #endif
 #endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
 
-#if (defined(UNDER_CE))
+/* use CreateThread for CYGWIN, _beginthreadex for all others */
+#if !defined(__CYGWIN__) && !defined(_WIN32_WCE)
+#define CREATE_THREAD (HANDLE)_beginthreadex( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#define PA_THREAD_FUNC static unsigned WINAPI
+#define PA_THREAD_ID unsigned
+#else
+#define CREATE_THREAD CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId )
+#define PA_THREAD_FUNC static DWORD WINAPI
+#define PA_THREAD_ID DWORD
+#endif
+#if (defined(_WIN32_WCE))
 #pragma comment(lib, "Coredll.lib")
 #elif (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */
 #pragma comment(lib, "winmm.lib")
@@ -161,7 +171,11 @@ Non-critical stuff for the future:
  provided in newer platform sdks
  */
 #ifndef DWORD_PTR
-#define DWORD_PTR DWORD
+    #if defined(_WIN64)
+        #define DWORD_PTR unsigned __int64
+    #else
+        #define DWORD_PTR unsigned long
+    #endif
 #endif
 
 /************************************************* Constants ********/
@@ -198,6 +212,34 @@ Non-critical stuff for the future:
 static const char constInputMapperSuffix_[] = " - Input";
 static const char constOutputMapperSuffix_[] = " - Output";
 
+/*
+copies TCHAR string to explicit char string
+*/
+char *StrTCpyToC(char *to, const TCHAR *from)
+{
+#if !defined(_UNICODE) && !defined(UNICODE)
+	return strcpy(to, from);
+#else
+	int count = wcslen(from);
+	if (count != 0)
+		if (WideCharToMultiByte(CP_ACP, 0, from, count, to, count, NULL, NULL) == 0)
+			return NULL;
+	return to;
+#endif
+}
+
+/*
+returns length of TCHAR string
+*/
+size_t StrTLen(const TCHAR *str)
+{
+#if !defined(_UNICODE) && !defined(UNICODE)
+	return strlen(str);
+#else
+	return wcslen(str);	
+#endif
+}
+
 /********************************************************************/
 
 typedef struct PaWinMmeStream PaWinMmeStream;     /* forward declaration */
@@ -464,6 +506,21 @@ static UINT LocalDeviceIndexToWinMmeDeviceId( PaWinMmeHostApiRepresentation *hos
 }
 
 
+static int SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( PaSampleFormat sampleFormat, unsigned long winMmeSpecificFlags )
+{
+    int waveFormatTag = 0;
+
+    if( winMmeSpecificFlags & paWinMmeWaveFormatDolbyAc3Spdif )
+        waveFormatTag = PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF;
+    else if( winMmeSpecificFlags & paWinMmeWaveFormatWmaSpdif )
+        waveFormatTag = PAWIN_WAVE_FORMAT_WMA_SPDIF;
+    else
+        waveFormatTag = PaWin_SampleFormatToLinearWaveFormatTag( sampleFormat );
+
+    return waveFormatTag;
+}
+
+
 static PaError QueryInputWaveFormatEx( int deviceId, WAVEFORMATEX *waveFormatEx )
 {
     MMRESULT mmresult;
@@ -518,43 +575,55 @@ static PaError QueryOutputWaveFormatEx( int deviceId, WAVEFORMATEX *waveFormatEx
 
 static PaError QueryFormatSupported( PaDeviceInfo *deviceInfo,
         PaError (*waveFormatExQueryFunction)(int, WAVEFORMATEX*),
-        int winMmeDeviceId, int channels, double sampleRate )
+        int winMmeDeviceId, int channels, double sampleRate, unsigned long winMmeSpecificFlags )
 {
     PaWinMmeDeviceInfo *winMmeDeviceInfo = (PaWinMmeDeviceInfo*)deviceInfo;
     PaWinWaveFormat waveFormat;
+    PaSampleFormat sampleFormat;
+    int waveFormatTag;
+    
+    /* @todo at the moment we only query with 16 bit sample format and directout speaker config*/
+
+    sampleFormat = paInt16;
+    waveFormatTag = SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( sampleFormat, winMmeSpecificFlags );
+
+    if( waveFormatTag == PaWin_SampleFormatToLinearWaveFormatTag( paInt16 ) ){
     
-    if( sampleRate == 11025.0
-        && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1M16))
-            || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1S16)) ) ){
+        /* attempt bypass querying the device for linear formats */
 
-        return paNoError;
-    }
+        if( sampleRate == 11025.0
+            && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1M16))
+                || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_1S16)) ) ){
 
-    if( sampleRate == 22050.0
-        && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2M16))
-            || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2S16)) ) ){
+            return paNoError;
+        }
 
-        return paNoError;
-    }
+        if( sampleRate == 22050.0
+            && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2M16))
+                || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_2S16)) ) ){
 
-    if( sampleRate == 44100.0
-        && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4M16))
-            || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4S16)) ) ){
+            return paNoError;
+        }
 
-        return paNoError;
+        if( sampleRate == 44100.0
+            && ( (channels == 1 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4M16))
+                || (channels == 2 && (winMmeDeviceInfo->dwFormats & WAVE_FORMAT_4S16)) ) ){
+
+            return paNoError;
+        }
     }
 
+
     /* first, attempt to query the device using WAVEFORMATEXTENSIBLE, 
        if this fails we fall back to WAVEFORMATEX */
 
-    /* @todo at the moment we only query with 16 bit sample format and directout speaker config*/
-    PaWin_InitializeWaveFormatExtensible( &waveFormat, channels, 
-            paInt16, sampleRate, PAWIN_SPEAKER_DIRECTOUT );
+    PaWin_InitializeWaveFormatExtensible( &waveFormat, channels, sampleFormat, waveFormatTag,
+            sampleRate, PAWIN_SPEAKER_DIRECTOUT );
 
     if( waveFormatExQueryFunction( winMmeDeviceId, (WAVEFORMATEX*)&waveFormat ) == paNoError )
         return paNoError;
 
-    PaWin_InitializeWaveFormatEx( &waveFormat, channels, paInt16, sampleRate );
+    PaWin_InitializeWaveFormatEx( &waveFormat, channels, sampleFormat, waveFormatTag, sampleRate );
 
     return waveFormatExQueryFunction( winMmeDeviceId, (WAVEFORMATEX*)&waveFormat );
 }
@@ -576,7 +645,7 @@ static void DetectDefaultSampleRate( PaWinMmeDeviceInfo *winMmeDeviceInfo, int w
     for( i=0; i < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++i )
     {
         double sampleRate = defaultSampleRateSearchOrder_[ i ]; 
-        PaError paerror = QueryFormatSupported( deviceInfo, waveFormatExQueryFunction, winMmeDeviceId, maxChannels, sampleRate );
+        PaError paerror = QueryFormatSupported( deviceInfo, waveFormatExQueryFunction, winMmeDeviceId, maxChannels, sampleRate, 0 );
         if( paerror == paNoError )
         {
             deviceInfo->defaultSampleRate = sampleRate;
@@ -651,25 +720,25 @@ static PaError InitializeInputDeviceInfo( PaWinMmeHostApiRepresentation *winMmeH
     {
         /* Append I/O suffix to WAVE_MAPPER device. */
         deviceName = (char *)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_) );
+                    winMmeHostApi->allocations, StrTLen( wic.szPname ) + 1 + sizeof(constInputMapperSuffix_) );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, wic.szPname );
+        StrTCpyToC( deviceName, wic.szPname );
         strcat( deviceName, constInputMapperSuffix_ );
     }
     else
     {
         deviceName = (char*)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( wic.szPname ) + 1 );
+                    winMmeHostApi->allocations, StrTLen( wic.szPname ) + 1 );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, wic.szPname  );
+        StrTCpyToC( deviceName, wic.szPname  );
     }
     deviceInfo->name = deviceName;
 
@@ -751,6 +820,7 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme
     MMRESULT mmresult;
     WAVEOUTCAPS woc;
     PaDeviceInfo *deviceInfo = &winMmeDeviceInfo->inheritedDeviceInfo;
+    int wdmksDeviceOutputChannelCountIsKnown;
 
     *success = 0;
 
@@ -774,25 +844,25 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme
     {
         /* Append I/O suffix to WAVE_MAPPER device. */
         deviceName = (char *)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_) );
+                    winMmeHostApi->allocations, StrTLen( woc.szPname ) + 1 + sizeof(constOutputMapperSuffix_) );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, woc.szPname );
+        StrTCpyToC( deviceName, woc.szPname );
         strcat( deviceName, constOutputMapperSuffix_ );
     }
     else
     {
         deviceName = (char*)PaUtil_GroupAllocateMemory(
-                    winMmeHostApi->allocations, strlen( woc.szPname ) + 1 );
+                    winMmeHostApi->allocations, StrTLen( woc.szPname ) + 1 );
         if( !deviceName )
         {
             result = paInsufficientMemory;
             goto error;
         }
-        strcpy( deviceName, woc.szPname  );
+        StrTCpyToC( deviceName, woc.szPname  );
     }
     deviceInfo->name = deviceName;
 
@@ -816,8 +886,10 @@ static PaError InitializeOutputDeviceInfo( PaWinMmeHostApiRepresentation *winMme
     }
 
 #ifdef PAWIN_USE_WDMKS_DEVICE_INFO
-    winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 
-            QueryWaveOutKSFilterMaxChannels( winMmeOutputDeviceId, &deviceInfo->maxOutputChannels );
+    wdmksDeviceOutputChannelCountIsKnown = QueryWaveOutKSFilterMaxChannels( 
+			winMmeOutputDeviceId, &deviceInfo->maxOutputChannels );
+    if( wdmksDeviceOutputChannelCountIsKnown && !winMmeDeviceInfo->deviceOutputChannelCountIsKnown )
+        winMmeDeviceInfo->deviceOutputChannelCountIsKnown = 1;
 #endif /* PAWIN_USE_WDMKS_DEVICE_INFO */
 
     winMmeDeviceInfo->dwFormats = woc.dwFormats;
@@ -906,11 +978,11 @@ PaError PaWinMme_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
     /* the following calls assume that if wave*Message fails the preferred device parameter won't be modified */
     preferredDeviceStatusFlags = 0;
     waveInPreferredDevice = -1;
-    waveInMessage( (HWAVEIN)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD)&waveInPreferredDevice, (DWORD)&preferredDeviceStatusFlags );
+    waveInMessage( (HWAVEIN)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveInPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags );
 
     preferredDeviceStatusFlags = 0;
     waveOutPreferredDevice = -1;
-    waveOutMessage( (HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD)&waveOutPreferredDevice, (DWORD)&preferredDeviceStatusFlags );
+    waveOutMessage( (HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, (DWORD_PTR)&waveOutPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags );
 
     maximumPossibleDeviceCount = 0;
 
@@ -1170,7 +1242,9 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
 
                 /* test for valid sample rate, see comment above */
                 winMmeInputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, inputStreamInfo->devices[i].device );
-                paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, winMmeInputDeviceId, inputStreamInfo->devices[i].channelCount, sampleRate );
+                paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, 
+                        winMmeInputDeviceId, inputStreamInfo->devices[i].channelCount, sampleRate, 
+                        ((inputStreamInfo) ? inputStreamInfo->flags : 0) );
                 if( paerror != paNoError )
                     return paInvalidSampleRate;
             }
@@ -1192,7 +1266,9 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
 
             /* test for valid sample rate, see comment above */
             winMmeInputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, inputParameters->device );
-            paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, winMmeInputDeviceId, inputChannelCount, sampleRate );
+            paerror = QueryFormatSupported( inputDeviceInfo, QueryInputWaveFormatEx, 
+                    winMmeInputDeviceId, inputChannelCount, sampleRate,
+                    ((inputStreamInfo) ? inputStreamInfo->flags : 0) );
             if( paerror != paNoError )
                 return paInvalidSampleRate;
         }
@@ -1230,7 +1306,9 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
 
                 /* test for valid sample rate, see comment above */
                 winMmeOutputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, outputStreamInfo->devices[i].device );
-                paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, winMmeOutputDeviceId, outputStreamInfo->devices[i].channelCount, sampleRate );
+                paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, 
+                        winMmeOutputDeviceId, outputStreamInfo->devices[i].channelCount, sampleRate,
+                        ((outputStreamInfo) ? outputStreamInfo->flags : 0) );
                 if( paerror != paNoError )
                     return paInvalidSampleRate;
             }
@@ -1252,7 +1330,9 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
 
             /* test for valid sample rate, see comment above */
             winMmeOutputDeviceId = LocalDeviceIndexToWinMmeDeviceId( winMmeHostApi, outputParameters->device );
-            paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, winMmeOutputDeviceId, outputChannelCount, sampleRate );
+            paerror = QueryFormatSupported( outputDeviceInfo, QueryOutputWaveFormatEx, 
+                    winMmeOutputDeviceId, outputChannelCount, sampleRate,
+                    ((outputStreamInfo) ? outputStreamInfo->flags : 0) );
             if( paerror != paNoError )
                 return paInvalidSampleRate;
         }
@@ -1676,6 +1756,7 @@ typedef struct
 static void InitializeSingleDirectionHandlesAndBuffers( PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers );
 static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostApi,
         PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers,
+        unsigned long winMmeSpecificFlags,
         unsigned long bytesPerHostSample,
         double sampleRate, PaWinMmeDeviceAndChannelCount *devices,
         unsigned int deviceCount, PaWinWaveFormatChannelMask channelMask, int isInput );
@@ -1700,6 +1781,7 @@ static void InitializeSingleDirectionHandlesAndBuffers( PaWinMmeSingleDirectionH
 
 static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostApi,
         PaWinMmeSingleDirectionHandlesAndBuffers *handlesAndBuffers,
+        unsigned long winMmeSpecificFlags,
         unsigned long bytesPerHostSample,
         double sampleRate, PaWinMmeDeviceAndChannelCount *devices,
         unsigned int deviceCount, PaWinWaveFormatChannelMask channelMask, int isInput )
@@ -1707,6 +1789,8 @@ static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostA
     PaError result;
     MMRESULT mmresult;
     signed int i, j;
+    PaSampleFormat sampleFormat;
+    int waveFormatTag;
 
     /* for error cleanup we expect that InitializeSingleDirectionHandlesAndBuffers()
         has already been called to zero some fields */       
@@ -1734,6 +1818,10 @@ static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostA
             ((HWAVEOUT*)handlesAndBuffers->waveHandles)[i] = 0;
     }
 
+    /* @todo at the moment we only use 16 bit sample format */
+    sampleFormat = paInt16;
+    waveFormatTag = SampleFormatAndWinWmmeSpecificFlagsToLinearWaveFormatTag( sampleFormat, winMmeSpecificFlags );
+
     for( i = 0; i < (signed int)deviceCount; ++i )
     {
         PaWinWaveFormat waveFormat;
@@ -1749,16 +1837,16 @@ static PaError InitializeWaveHandles( PaWinMmeHostApiRepresentation *winMmeHostA
                 /* first, attempt to open the device using WAVEFORMATEXTENSIBLE, 
                     if this fails we fall back to WAVEFORMATEX */
 
-                /* @todo at the moment we only use 16 bit sample format */
                 PaWin_InitializeWaveFormatExtensible( &waveFormat, devices[i].channelCount, 
-                        paInt16, sampleRate, channelMask );
+                        sampleFormat, waveFormatTag, sampleRate, channelMask );
 
             }
             else
             {
                 /* retry with WAVEFORMATEX */
 
-                PaWin_InitializeWaveFormatEx( &waveFormat, devices[i].channelCount, paInt16, sampleRate );
+                PaWin_InitializeWaveFormatEx( &waveFormat, devices[i].channelCount, 
+                        sampleFormat, waveFormatTag, sampleRate );
             }
 
             /* REVIEW: consider not firing an event for input when a full duplex
@@ -2042,7 +2130,7 @@ struct PaWinMmeStream
     /* Processing thread management -------------- */
     HANDLE abortEvent;
     HANDLE processingThread;
-    DWORD processingThreadId;
+    PA_THREAD_ID processingThreadId;
 
     char throttleProcessingThreadOnOverload; /* 0 -> don't throtte, non-0 -> throttle */
     int processingThreadPriority;
@@ -2063,6 +2151,7 @@ struct PaWinMmeStream
 static PaError ValidateWinMmeSpecificStreamInfo(
         const PaStreamParameters *streamParameters,
         const PaWinMmeStreamInfo *streamInfo,
+        unsigned long *winMmeSpecificFlags,
         char *throttleProcessingThreadOnOverload,
         unsigned long *deviceCount )
 {
@@ -2074,6 +2163,8 @@ static PaError ValidateWinMmeSpecificStreamInfo(
 	        return paIncompatibleHostApiSpecificStreamInfo;
 	    }
 
+        *winMmeSpecificFlags = streamInfo->flags;
+
 	    if( streamInfo->flags & paWinMmeDontThrottleOverloadedProcessingThread )
 	        *throttleProcessingThreadOnOverload = 0;
             
@@ -2217,8 +2308,10 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     unsigned long hostOutputBufferCount;
     unsigned long framesPerBufferProcessorCall;
     PaWinMmeDeviceAndChannelCount *inputDevices = 0;  /* contains all devices and channel counts as local host api ids, even when PaWinMmeUseMultipleDevices is not used */
+    unsigned long winMmeSpecificInputFlags = 0;
     unsigned long inputDeviceCount = 0;            
     PaWinMmeDeviceAndChannelCount *outputDevices = 0;
+    unsigned long winMmeSpecificOutputFlags = 0;
     unsigned long outputDeviceCount = 0;                /* contains all devices and channel counts as local host api ids, even when PaWinMmeUseMultipleDevices is not used */
     char throttleProcessingThreadOnOverload = 1;
 
@@ -2234,6 +2327,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 		/* validate input hostApiSpecificStreamInfo */
         inputStreamInfo = (PaWinMmeStreamInfo*)inputParameters->hostApiSpecificStreamInfo;
 		result = ValidateWinMmeSpecificStreamInfo( inputParameters, inputStreamInfo,
+                &winMmeSpecificInputFlags,
 				&throttleProcessingThreadOnOverload,
 				&inputDeviceCount );
 		if( result != paNoError ) return result;
@@ -2283,6 +2377,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 		/* validate output hostApiSpecificStreamInfo */
         outputStreamInfo = (PaWinMmeStreamInfo*)outputParameters->hostApiSpecificStreamInfo;
 		result = ValidateWinMmeSpecificStreamInfo( outputParameters, outputStreamInfo,
+                &winMmeSpecificOutputFlags,
 				&throttleProcessingThreadOnOverload,
 				&outputDeviceCount );
 		if( result != paNoError ) return result;
@@ -2332,6 +2427,14 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         return paInvalidFlag; /* unexpected platform specific flag */
 
 
+    /* always disable clipping and dithering if we are outputting a raw spdif stream */
+    if( (winMmeSpecificOutputFlags & paWinMmeWaveFormatDolbyAc3Spdif)
+            || (winMmeSpecificOutputFlags & paWinMmeWaveFormatWmaSpdif) ){
+
+        streamFlags = streamFlags | paClipOff | paDitherOff;
+    }
+
+
     result = CalculateBufferSettings( &framesPerHostInputBuffer, &hostInputBufferCount,
                 &framesPerHostOutputBuffer, &hostOutputBufferCount,
                 inputChannelCount, hostInputSampleFormat, suggestedInputLatency, inputStreamInfo,
@@ -2430,6 +2533,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     if( inputParameters )
     {
         result = InitializeWaveHandles( winMmeHostApi, &stream->input,
+                winMmeSpecificInputFlags,
                 stream->bufferProcessor.bytesPerHostInputSample, sampleRate,
                 inputDevices, inputDeviceCount, inputChannelMask, 1 /* isInput */ );
         if( result != paNoError ) goto error;
@@ -2438,6 +2542,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     if( outputParameters )
     {
         result = InitializeWaveHandles( winMmeHostApi, &stream->output,
+                winMmeSpecificOutputFlags,
                 stream->bufferProcessor.bytesPerHostOutputSample, sampleRate,
                 outputDevices, outputDeviceCount, outputChannelMask, 0 /* isInput */ );
         if( result != paNoError ) goto error;
@@ -2691,7 +2796,7 @@ static PaError CatchUpOutputBuffers( PaWinMmeStream *stream )
 }
 
 
-static DWORD WINAPI ProcessingThreadProc( void *pArg )
+PA_THREAD_FUNC ProcessingThreadProc( void *pArg )
 {
     PaWinMmeStream *stream = (PaWinMmeStream *)pArg;
     HANDLE events[3];
@@ -3244,7 +3349,7 @@ static PaError StartStream( PaStream *s )
         if( result != paNoError ) goto error;
 
         /* Create thread that waits for audio buffers to be ready for processing. */
-        stream->processingThread = CreateThread( 0, 0, ProcessingThreadProc, stream, 0, &stream->processingThreadId );
+        stream->processingThread = CREATE_THREAD;
         if( !stream->processingThread )
         {
             result = paUnanticipatedHostError;
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_hostapis.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_hostapis.c
index 8407c3ecd9..339e1b148d 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_hostapis.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_hostapis.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_unix_hostapis.c 1381 2008-03-30 21:02:09Z aknudsen $
+ * $Id: pa_unix_hostapis.c 1413 2009-05-24 17:00:36Z aknudsen $
  * Portable Audio I/O Library UNIX initialization table
  *
  * Based on the Open Source API proposed by Ross Bencina
@@ -52,8 +52,7 @@ PaError PaAsiHpi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
 PaError PaMacCore_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 PaError PaSkeleton_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
 
-/** Note that ALSA is placed before OSS so that the latter is preferred over the
- * latter on Linux.
+/** Note that on Linux, ALSA is placed before OSS so that the former is preferred over the latter.
  */
 
 PaUtilHostApiInitializer *paHostApiInitializers[] =
@@ -68,7 +67,7 @@ PaUtilHostApiInitializer *paHostApiInitializers[] =
         PaOSS_Initialize,
 #endif
 
-#else
+#else   /* __linux__ */
 
 #ifdef PA_USE_OSS
         PaOSS_Initialize,
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_util.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_util.c
index 1cb838752c..de54e51ddb 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_util.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/unix/pa_unix_util.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_unix_util.c 1232 2007-06-16 14:49:43Z rossb $
+ * $Id: pa_unix_util.c 1419 2009-10-22 17:28:35Z bjornroche $
  * Portable Audio I/O Library
  * UNIX platform-specific support functions
  *
@@ -51,6 +51,13 @@
 #include <math.h>
 #include <errno.h>
 
+#if defined(__APPLE__) && !defined(HAVE_MACH_ABSOLUTE_TIME)
+#define HAVE_MACH_ABSOLUTE_TIME
+#endif
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+#include <mach/mach_time.h>
+#endif
+
 #include "pa_util.h"
 #include "pa_unix_util.h"
 #include "pa_debugprint.h"
@@ -118,27 +125,47 @@ void Pa_Sleep( long msec )
 #endif
 }
 
-/*            *** NOT USED YET: ***
-static int usePerformanceCounter_;
-static double microsecondsPerTick_;
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+/*
+    Discussion on the CoreAudio mailing list suggests that calling
+    gettimeofday (or anything else in the BSD layer) is not real-time
+    safe, so we use mach_absolute_time on OSX. This implementation is 
+    based on these two links:
+
+    Technical Q&A QA1398 - Mach Absolute Time Units
+    http://developer.apple.com/mac/library/qa/qa2004/qa1398.html
+
+    Tutorial: Performance and Time.
+    http://www.macresearch.org/tutorial_performance_and_time
 */
 
+/* Scaler to convert the result of mach_absolute_time to seconds */
+static double machSecondsConversionScaler_ = 0.0; 
+#endif
+
 void PaUtil_InitializeClock( void )
 {
-    /* TODO */
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+    mach_timebase_info_data_t info;
+    kern_return_t err = mach_timebase_info( &info );
+    if( err == 0  )
+        machSecondsConversionScaler_ = 1e-9 * (double) info.numer / (double) info.denom;
+#endif
 }
 
 
 PaTime PaUtil_GetTime( void )
 {
-#ifdef HAVE_CLOCK_GETTIME
+#ifdef HAVE_MACH_ABSOLUTE_TIME
+    return mach_absolute_time() * machSecondsConversionScaler_;
+#elif defined(HAVE_CLOCK_GETTIME)
     struct timespec tp;
     clock_gettime(CLOCK_REALTIME, &tp);
-    return (PaTime)(tp.tv_sec + tp.tv_nsec / 1.e9);
+    return (PaTime)(tp.tv_sec + tp.tv_nsec * 1e-9);
 #else
     struct timeval tv;
     gettimeofday( &tv, NULL );
-    return (PaTime) tv.tv_usec / 1000000. + tv.tv_sec;
+    return (PaTime) tv.tv_usec * 1e-6 + tv.tv_sec;
 #endif
 }
 
@@ -190,7 +217,7 @@ PaError PaUtil_CancelThreading( PaUtilThreading *threading, int wait, PaError *e
 /* paUnixMainThread 
  * We have to be a bit careful with defining this global variable,
  * as explained below. */
-#ifdef __apple__
+#ifdef __APPLE__
 /* apple/gcc has a "problem" with global vars and dynamic libs.
    Initializing it seems to fix the problem.
    Described a bit in this thread:
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_util.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_util.c
index e882886c9f..1354b9ab23 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_util.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_util.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pa_win_util.c 1339 2008-02-15 07:50:33Z rossb $
+ * $Id: pa_win_util.c 1410 2009-04-07 10:08:48Z rossb $
  * Portable Audio I/O Library
  * Win32 platform-specific support functions
  *
@@ -51,6 +51,10 @@
 
 #include "pa_util.h"
 
+#if (defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER >= 1200))) /* MSC version 6 and above */
+#pragma comment( lib, "winmm.lib" )
+#endif
+
 
 /*
    Track memory allocations to avoid leaks.
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_waveformat.c b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_waveformat.c
index 6b91ebd984..bbf616c344 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_waveformat.c
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/os/win/pa_win_waveformat.c
@@ -47,30 +47,27 @@
 #define  WAVE_FORMAT_EXTENSIBLE         0xFFFE
 #endif
 
-#if !defined(WAVE_FORMAT_IEEE_FLOAT)
-#define  WAVE_FORMAT_IEEE_FLOAT         0x0003
-#endif
-
-static GUID pawin_ksDataFormatSubtypePcm = 
+static GUID pawin_ksDataFormatSubtypeGuidBase = 
 	{ (USHORT)(WAVE_FORMAT_PCM), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 };
 
-static GUID pawin_ksDataFormatSubtypeIeeeFloat = 
-	{ (USHORT)(WAVE_FORMAT_IEEE_FLOAT), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 };
 
+int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat )
+{
+    if( sampleFormat == paFloat32 )
+        return PAWIN_WAVE_FORMAT_IEEE_FLOAT;
+    
+    return PAWIN_WAVE_FORMAT_PCM;
+}
 
 
 void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, 
-		int numChannels, PaSampleFormat sampleFormat, double sampleRate )
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate )
 {
 	WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat;
     int bytesPerSample = Pa_GetSampleSize(sampleFormat);
 	unsigned long bytesPerFrame = numChannels * bytesPerSample;
-
-    if( sampleFormat == paFloat32 )
-        waveFormatEx->wFormatTag = WAVE_FORMAT_IEEE_FLOAT;
-    else
-        waveFormatEx->wFormatTag = WAVE_FORMAT_PCM;
 	
+    waveFormatEx->wFormatTag = waveFormatTag;
 	waveFormatEx->nChannels = (WORD)numChannels;
 	waveFormatEx->nSamplesPerSec = (DWORD)sampleRate;
 	waveFormatEx->nAvgBytesPerSec = waveFormatEx->nSamplesPerSec * bytesPerFrame;
@@ -81,12 +78,13 @@ void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat,
 
 
 void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, 
-		int numChannels, PaSampleFormat sampleFormat, double sampleRate,
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate,
 		PaWinWaveFormatChannelMask channelMask )
 {
 	WAVEFORMATEX *waveFormatEx = (WAVEFORMATEX*)waveFormat;
     int bytesPerSample = Pa_GetSampleSize(sampleFormat);
 	unsigned long bytesPerFrame = numChannels * bytesPerSample;
+    GUID guid;
 
 	waveFormatEx->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
 	waveFormatEx->nChannels = (WORD)numChannels;
@@ -100,13 +98,10 @@ void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat,
 			waveFormatEx->wBitsPerSample;
 
 	*((DWORD*)&waveFormat->fields[PAWIN_INDEXOF_DWCHANNELMASK]) = channelMask;
-			
-    if( sampleFormat == paFloat32 )
-        *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) =
-            pawin_ksDataFormatSubtypeIeeeFloat;
-    else
-        *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) =
-            pawin_ksDataFormatSubtypePcm;
+		
+    guid = pawin_ksDataFormatSubtypeGuidBase;
+    guid.Data1 = (USHORT)waveFormatTag;
+    *((GUID*)&waveFormat->fields[PAWIN_INDEXOF_SUBFORMAT]) = guid;
 }
 
 
-- 
GitLab


From aa60db7289006d4bf382c0cce6692c60d525832d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 27 Jan 2010 16:18:49 -0500
Subject: [PATCH 017/160] [#2522] Write a new test for keyparameters sdes value

This test fails since Lifetime, MKI Value, and MKI Length are optional for most
application supporting sdes/srtp
---
 sflphone-common/test/sdesnegotiatorTest.cpp | 84 +++++++++++++++------
 sflphone-common/test/sdesnegotiatorTest.h   | 14 ++--
 2 files changed, 71 insertions(+), 27 deletions(-)

diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp
index 2db3fdff7b..b963fccc57 100644
--- a/sflphone-common/test/sdesnegotiatorTest.cpp
+++ b/sflphone-common/test/sdesnegotiatorTest.cpp
@@ -40,33 +40,13 @@ using std::endl;
 
 void SdesNegotiatorTest::setUp()
 {
-    // Add a new SDES crypto line to be processed. 
-    remoteOffer = new std::vector<std::string>();
-    remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"));
-    remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32"));
-	
-    // Register the local capabilities.
-    localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>();
-    for(int i = 0; i < 3; i++) {
-        localCapabilities->push_back(sfl::CryptoSuites[i]);
-    }
-
-    sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer);
+    
 }
 
 
 void SdesNegotiatorTest::tearDown()
 {
 
-    delete remoteOffer;
-    remoteOffer = NULL;
-
-    delete localCapabilities;
-    localCapabilities = NULL;
-
-    delete sdesnego;
-    sdesnego = NULL;
-
 }
 
 void SdesNegotiatorTest::testTagPattern()
@@ -128,7 +108,30 @@ void SdesNegotiatorTest::testKeyParamsPattern()
  */
 void SdesNegotiatorTest::testNegotiation()
 {
+     // Add a new SDES crypto line to be processed. 
+    remoteOffer = new std::vector<std::string>();
+    remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"));
+    remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32"));
+	
+    // Register the local capabilities.
+    localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>();
+    for(int i = 0; i < 3; i++) {
+        localCapabilities->push_back(sfl::CryptoSuites[i]);
+    }
+
+    sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer);
+
     CPPUNIT_ASSERT(sdesnego->negotiate());
+    // CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32")==0);
+
+    delete remoteOffer;
+    remoteOffer = NULL;
+
+    delete localCapabilities;
+    localCapabilities = NULL;
+
+    delete sdesnego;
+    sdesnego = NULL;
 }
 
 /**
@@ -155,3 +158,42 @@ void SdesNegotiatorTest::testComponent()
 }
 
 
+
+/**
+ * Make sure that most simple case does not fail.
+ */
+void SdesNegotiatorTest::testMostSimpleCase()
+{
+    // Register the local capabilities.
+    std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
+
+    //Support all the CryptoSuites
+    for(int i = 0; i < 3; i++) {
+        capabilities->push_back(sfl::CryptoSuites[i]);
+    }
+
+    // Make sure taht this case works (since it's default for most application)
+    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd");
+    std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
+    cryptoOffer->push_back(cryptoLine);	
+
+    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
+
+    printf("negotiator->getCryptoSuite() %s\n", negotiator->getCryptoSuite().c_str());
+    printf("negotiator->getKeyMethod() %s\n", negotiator->getKeyMethod().c_str());
+    printf("negotiator->getKeyInfo() %s\n", negotiator->getKeyInfo().c_str());
+
+    CPPUNIT_ASSERT(negotiator->negotiate() == true);
+    
+    CPPUNIT_ASSERT(negotiator->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0);
+    CPPUNIT_ASSERT(negotiator->getKeyMethod().compare("inline") == 0);
+    CPPUNIT_ASSERT(negotiator->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0);
+
+    delete capabilities; capabilities = NULL;
+    delete cryptoOffer; cryptoOffer = NULL;
+    delete negotiator; negotiator = NULL;
+
+    
+}
+
+
diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h
index 2a7b552222..eb35c509e2 100644
--- a/sflphone-common/test/sdesnegotiatorTest.h
+++ b/sflphone-common/test/sdesnegotiatorTest.h
@@ -62,11 +62,11 @@ class SdesNegotiatorTest : public CppUnit::TestCase {
      * Use cppunit library macros to add unit test the factory
      */
     CPPUNIT_TEST_SUITE( SdesNegotiatorTest );
-    CPPUNIT_TEST( testTagPattern );
-    CPPUNIT_TEST( testCryptoSuitePattern );
-    CPPUNIT_TEST( testKeyParamsPattern );
-    CPPUNIT_TEST( testNegotiation );
-	// CPPUNIT_TEST( testComponent );
+    // CPPUNIT_TEST( testTagPattern );
+    // CPPUNIT_TEST( testCryptoSuitePattern );
+    // CPPUNIT_TEST( testKeyParamsPattern );
+    // CPPUNIT_TEST( testNegotiation );
+    CPPUNIT_TEST( testMostSimpleCase );
     CPPUNIT_TEST_SUITE_END();
 
     public:
@@ -91,10 +91,12 @@ class SdesNegotiatorTest : public CppUnit::TestCase {
 
 		void testKeyParamsPattern();
 
-       	void testNegotiation();
+		void testNegotiation();
 		
 		void testComponent();
 
+		void testMostSimpleCase();
+
     private:
 
 		sfl::Pattern *pattern;
-- 
GitLab


From f20bb5f19b21eada6bd123d4a6f588cf2b8ef244 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 27 Jan 2010 16:33:23 -0500
Subject: [PATCH 018/160] [#2522] Add test in sdes negotiator

---
 .../src/audio/audiortp/AudioSrtpSession.cpp   | 61 ++++++++++---------
 sflphone-common/src/sip/SdesNegotiator.cpp    | 24 +++++++-
 sflphone-common/src/sip/sipvoiplink.cpp       |  2 +-
 3 files changed, 55 insertions(+), 32 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
index 7099b807bd..26b4290394 100644
--- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
@@ -75,10 +75,11 @@ std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo() {
     std::string crypto_suite = sfl::CryptoSuites[_localCryptoSuite].name;
 
     // srtp keys formated as the following  as the following
+    // inline:keyParameters|keylifetime|MasterKeyIdentifier
     // inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32
     std::string srtp_keys = "inline:";
     srtp_keys += getBase64ConcatenatedKeys();
-    srtp_keys.append("|2^20|1:32");
+    // srtp_keys.append("|2^20|1:32");
 
     // generate crypto attribute
     std::string crypto_attr = tag.append(" ");
@@ -95,7 +96,7 @@ std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo() {
 
 void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) {
 
-    _debug("Set remote Cryptographic info for Srtp session");
+    _debug("Set remote Cryptographic info for Srtp");
 
     // decode keys
     unBase64ConcatenatedKeys(nego.getKeyInfo());
@@ -122,12 +123,13 @@ void AudioSrtpSession::initializeLocalMasterKey(void)
 
     memcpy(_localMasterKey, random_key, _localMasterKeyLength);
 
+    /*
     printf("Local Master: ");
     for(int i = 0; i < _localMasterKeyLength; i++){
         printf("%d", _localMasterKey[i]);
     }
     printf("\n");
-
+    */
     return;
 }
 
@@ -180,7 +182,6 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys()
 void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys)
 {
 
-    
     _remoteMasterKeyLength = sfl::CryptoSuites[1].masterKeyLength / 8;
     _remoteMasterSaltLength = sfl::CryptoSuites[1].masterSaltLength / 8;
 
@@ -203,41 +204,41 @@ void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys)
 
 void AudioSrtpSession::initializeRemoteCryptoContext(void)
 {
+    CryptoSuiteDefinition crypto = sfl::CryptoSuites[_localCryptoSuite];
 
     _remoteCryptoCtx = new ost::CryptoContext(0x0,
-					     0,                           // roc,
-					     0L,                          // keydr,
-					     SrtpEncryptionAESCM,         // encryption algo
-					     SrtpAuthenticationSha1Hmac,  // authtication algo
-					     _remoteMasterKey,            // Master Key
-					     _remoteMasterKeyLength,      // Master Key length
-					     _remoteMasterSalt,           // Master Salt
-					     _remoteMasterSaltLength,     // Master Salt length
-					     128 / 8,                     // encryption keyl
-					     160 / 8,                     // authentication key len
-					     112 / 8,                     // session salt len
-					     80 / 8);                     // authentication tag len
-
+					     0,                               // roc,
+					     0L,                              // keydr,
+					     SrtpEncryptionAESCM,             // encryption algo
+					     SrtpAuthenticationSha1Hmac,      // authtication algo
+					     _remoteMasterKey,            
+					     _remoteMasterKeyLength,      
+					     _remoteMasterSalt,           
+					     _remoteMasterSaltLength,       
+					     crypto.encryptionKeyLength / 8, 
+					     crypto.srtpAuthKeyLength / 8,
+					     112 / 8,                         // session salt len
+					     crypto.srtpAuthTagLength / 8);
     
 }
 
 void AudioSrtpSession::initializeLocalCryptoContext(void)
 {
+    CryptoSuiteDefinition crypto = sfl::CryptoSuites[_localCryptoSuite];
 
     _localCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(),
-					      0,                           // roc,
-					      0L,                          // keydr,
-					      SrtpEncryptionAESCM,         // encryption algo
-					      SrtpAuthenticationSha1Hmac,  // authtication algo
-					      _localMasterKey,             // Master Key
-					      _localMasterKeyLength,       // Master Key length
-					      _localMasterSalt,            // Master Salt
-					      _localMasterSaltLength,      // Master Salt length
-					      128 / 8,                     // encryption keyl
-					      160 / 8,                     // authentication key len
-					      112 / 8,                     // session salt len
-					      80 / 8);                     // authentication tag len
-
+					      0,                               // roc,
+					      0L,                              // keydr,
+					      SrtpEncryptionAESCM,             // encryption algo
+					      SrtpAuthenticationSha1Hmac,      // authtication algo
+					      _localMasterKey,             
+					      _localMasterKeyLength,       
+					      _localMasterSalt,            
+					      _localMasterSaltLength,      
+					      crypto.encryptionKeyLength / 8,
+					      crypto.srtpAuthKeyLength / 8,
+					      112 / 8,                         // session salt len
+					      crypto.srtpAuthTagLength / 8);
 
 }
 
diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp
index b2d1aafd3e..45ca512f63 100644
--- a/sflphone-common/src/sip/SdesNegotiator.cpp
+++ b/sflphone-common/src/sip/SdesNegotiator.cpp
@@ -66,11 +66,22 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
             "[A-Za-z0-9_]+)"); // srtp-crypto-suite-ext
 
         keyParamsPattern = new Pattern (
+            "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+            "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
+            "(?:2\\^(?P<lifetime>[0-9]+)\\|" \
+            "(?P<mkiValue>[0-9]+)\\:" \
+            "(?P<mkiLength>[0-9]{1,3})\\;?)?","g");
+
+	// "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|(?:2\\^(?P<lifetime>[0-9]+)\\|(?P<mkiValue>[0-9]+)\\:(?P<mkiLength>[0-9]{1,3})\\;?)?"
+
+	/*
+	keyParamsPattern = new Pattern (
             "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
             "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
             "2\\^(?P<lifetime>[0-9]+)\\|" \
             "(?P<mkiValue>[0-9]+)\\:" \
             "(?P<mkiLength>[0-9]{1,3})\\;?", "g");
+	*/
 
         sessionParamPattern = new Pattern (
             "(?P<sessionParam>(kdr\\=[0-9]{1,2}|" \
@@ -120,7 +131,9 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 	std::string tag; 
 	if (tagPattern->matches()) {
 	try {
+	    // std::cout << "Parsing the tag field";
 	    tag = tagPattern->group ("tag");
+	    // std::cout << ": " << tag << std::endl;
 	} catch (match_error& exception) {
 	    throw parse_error ("Error while parsing the tag field");
 	}
@@ -136,7 +149,9 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 		
 	if (cryptoSuitePattern->matches()) {
 	    try {
+	        // std::cout << "Parsing the crypto suite field";
 	        cryptoSuite  = cryptoSuitePattern->group ("cryptoSuite");
+		// std::cout << ": " << cryptoSuite << std::endl;
 	    } catch (match_error& exception) {
 	        throw parse_error ("Error while parsing the crypto-suite field");
 	    }
@@ -155,11 +170,17 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 	
         try {
             while (keyParamsPattern->matches()) {
+	        // std::cout << "Parsing the key parameters: " << std::endl;  
                 srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod");
+		// std::cout << " method: "<< srtpKeyMethod << std::endl;  
                 srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo");
+		// std::cout << " info: "<< srtpKeyInfo << std::endl;  
                 lifetime = keyParamsPattern->group ("lifetime");
+		// std::cout << " lifetime: "<< lifetime << std::endl;  
                 mkiValue = keyParamsPattern->group ("mkiValue");
+		// std::cout << " mkiValue: "<< mkiValue << std::endl;
                 mkiLength = keyParamsPattern->group ("mkiLength");
+		// std::cout << " mkiLength: "<< mkiLength << std::endl;
             }
         } catch (match_error& exception) {
             throw parse_error ("Error while parsing the key-params field");
@@ -184,7 +205,7 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
         } */
 		
 	// Add the new CryptoAttribute to the vector
-	std::cout << (*iter) << std::endl;
+	
 	CryptoAttribute * cryptoAttribute = new CryptoAttribute(tag, cryptoSuite, srtpKeyMethod, srtpKeyInfo, lifetime, mkiValue, mkiLength);
 	cryptoAttributeVector.push_back(cryptoAttribute);
     }
@@ -194,6 +215,7 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 
 bool SdesNegotiator::negotiate (void)
 {
+
     std::vector<CryptoAttribute *> cryptoAttributeVector = parse();
     std::vector<CryptoAttribute *>::iterator iter_offer = cryptoAttributeVector.begin();
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index a41d688263..13cfa5ba41 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2185,7 +2185,7 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
     if (account->isTlsEnabled()) {
 
-        // Nothing to do, TLS listener already created at pjsip's startup and TLS connection
+        // Nothing to do, TLS listener already created at pjsip's startup and TLS connection\
         // is automatically handled in pjsip when sending registration messages.
 	// status = createTlsTransport(id, );
         return true;
-- 
GitLab


From 0e9fb9c149de2a72907ee59432fe23a322076639 Mon Sep 17 00:00:00 2001
From: pierre-luc <pierre-luc.bacon@savoirfairelinux.com>
Date: Wed, 27 Jan 2010 18:53:17 -0500
Subject: [PATCH 019/160] Added new test for a different regex supporting the
 Cisco style that omits some parameters prescribed in RFC4568.

---
 sflphone-common/test/sdesnegotiatorTest.cpp | 20 ++++++++++++++++++++
 sflphone-common/test/sdesnegotiatorTest.h   |  3 +++
 2 files changed, 23 insertions(+)

diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp
index 2db3fdff7b..34ef4b7783 100644
--- a/sflphone-common/test/sdesnegotiatorTest.cpp
+++ b/sflphone-common/test/sdesnegotiatorTest.cpp
@@ -122,6 +122,26 @@ void SdesNegotiatorTest::testKeyParamsPattern()
     pattern = NULL;
 }
 
+void SdesNegotiatorTest::testKeyParamsPatternCiscoStyle()
+{
+
+    std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj";
+
+    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+			       "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)" \
+			       "(\\|2\\^(?P<lifetime>[0-9]+)\\|"		\
+			       "(?P<mkiValue>[0-9]+)\\:"		\
+			       "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+
+    *pattern << subject;
+    pattern->matches();
+    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));  
+    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj") == 0);          
+    
+    delete pattern;
+    pattern = NULL;
+}
+
 /**
  * Make sure that all the fields can be extracted
  * properly from the syntax. 
diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h
index 2a7b552222..e2fa00a54e 100644
--- a/sflphone-common/test/sdesnegotiatorTest.h
+++ b/sflphone-common/test/sdesnegotiatorTest.h
@@ -65,6 +65,7 @@ class SdesNegotiatorTest : public CppUnit::TestCase {
     CPPUNIT_TEST( testTagPattern );
     CPPUNIT_TEST( testCryptoSuitePattern );
     CPPUNIT_TEST( testKeyParamsPattern );
+    CPPUNIT_TEST( testKeyParamsPatternCiscoStyle );    
     CPPUNIT_TEST( testNegotiation );
 	// CPPUNIT_TEST( testComponent );
     CPPUNIT_TEST_SUITE_END();
@@ -90,6 +91,8 @@ class SdesNegotiatorTest : public CppUnit::TestCase {
 		void testCryptoSuitePattern();
 
 		void testKeyParamsPattern();
+		
+        void testKeyParamsPatternCiscoStyle();
 
        	void testNegotiation();
 		
-- 
GitLab


From d33e351f2081d96959e15389a6424d5c3ddbb734 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 28 Jan 2010 14:38:54 -0500
Subject: [PATCH 020/160] [#2522] Fix SDES negotiation to be compatible with
 incomplete key parameter field

---
 sflphone-common/src/sip/Pattern.cpp         | 33 +++++++++++------
 sflphone-common/src/sip/Pattern.h           |  6 ++--
 sflphone-common/src/sip/SdesNegotiator.cpp  | 31 ++++------------
 sflphone-common/test/sdesnegotiatorTest.cpp | 40 +++++++++++++++++----
 sflphone-common/test/sdesnegotiatorTest.h   | 11 +++---
 5 files changed, 71 insertions(+), 50 deletions(-)

diff --git a/sflphone-common/src/sip/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp
index 290c9f7a79..f925c8db90 100644
--- a/sflphone-common/src/sip/Pattern.cpp
+++ b/sflphone-common/src/sip/Pattern.cpp
@@ -25,9 +25,9 @@ namespace sfl
 
 Pattern::Pattern (const std::string& pattern, const std::string& options) :
         _pattern (pattern),
+	_re (NULL),
         _ovector (NULL),
         _ovectorSize (0),
-        _re (NULL),
         _count (0),
         _options (0)
 {
@@ -139,8 +139,6 @@ std::string Pattern::group (int groupNumber)
 {
     const char * stringPtr;
 
-    // printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str());
-
     int rc = pcre_get_substring (
                  _subject.substr (_offset[0]).c_str(),
                  _ovector,
@@ -180,12 +178,13 @@ std::string Pattern::group (const std::string& groupName)
                  _count,
                  groupName.c_str(),
                  &stringPtr);
-    
+
     if (rc < 0) {
         switch (rc) {
 
             case PCRE_ERROR_NOSUBSTRING:
-                throw std::out_of_range ("Invalid group reference.");
+	        
+		break;
 
             case PCRE_ERROR_NOMEMORY:
                 throw match_error ("Memory exhausted.");
@@ -195,14 +194,23 @@ std::string Pattern::group (const std::string& groupName)
         }
     }
 
-    std::string matchedStr (stringPtr);
+    std::string matchedStr;
 
-    pcre_free_substring (stringPtr);
+    if(stringPtr) {
+
+	matchedStr = stringPtr;
+	pcre_free_substring (stringPtr);
+    }
+    else {
+
+         matchedStr = "";
+    }
 
     return matchedStr;
+
 }
 
-size_t Pattern::start (const std::string& groupName) const
+void Pattern::start (const std::string& groupName) const
 {
     int index = pcre_get_stringnumber (_re, groupName.c_str());
     start (index);
@@ -210,7 +218,7 @@ size_t Pattern::start (const std::string& groupName) const
 
 size_t Pattern::start (unsigned int groupNumber) const
 {
-    if (groupNumber <= _count) {
+  if (groupNumber <= (unsigned int)_count) {
         return _ovector[ (groupNumber + 1) * 2];
     } else {
         throw std::out_of_range ("Invalid group reference.");
@@ -222,7 +230,7 @@ size_t Pattern::start (void) const
     return _ovector[0] + _offset[0];
 }
 
-size_t Pattern::end (const std::string& groupName) const
+void Pattern::end (const std::string& groupName) const
 {
     int index = pcre_get_stringnumber (_re, groupName.c_str());
     end (index);
@@ -230,7 +238,7 @@ size_t Pattern::end (const std::string& groupName) const
 
 size_t Pattern::end (unsigned int groupNumber) const
 {
-    if (groupNumber <= _count) {
+  if (groupNumber <= (unsigned int)_count) {
         return _ovector[ ( (groupNumber + 1) * 2) + 1 ] - 1;
     } else {
         throw std::out_of_range ("Invalid group reference.");
@@ -249,6 +257,7 @@ bool Pattern::matches (void) throw (match_error)
 
 bool Pattern::matches (const std::string& subject) throw (match_error)
 {
+
     // Try to find a match for this pattern
     int rc = pcre_exec (
                  _re,
@@ -260,6 +269,8 @@ bool Pattern::matches (const std::string& subject) throw (match_error)
                  _ovector,
                  _ovectorSize);
 
+  
+
     // Matching failed.
     if (rc < 0) {
         _offset[0] = _offset[1] = 0;
diff --git a/sflphone-common/src/sip/Pattern.h b/sflphone-common/src/sip/Pattern.h
index b07c92acdd..870ca1b5e8 100644
--- a/sflphone-common/src/sip/Pattern.h
+++ b/sflphone-common/src/sip/Pattern.h
@@ -143,10 +143,8 @@ namespace sfl  {
 	  * Get the start position of the specified match.
 	  * 
 	  * @param groupName The capturing group name.
-	  * 
-	  * @return the start position of the specified match.  
 	  */
-	 size_t start(const std::string& groupName) const;
+	 void start(const std::string& groupName) const;
 			
 	 /**
 	  * Get the end position of the overall match.
@@ -171,7 +169,7 @@ namespace sfl  {
 	  * 
 	  * @return the end position of the specified match.  
 	  */			
-	 size_t end(const std::string& groupName) const;
+	 void end(const std::string& groupName) const;
 			
 	 /**
 	  * Get the number of capturing groups in the 
diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp
index 45ca512f63..ef2849bb75 100644
--- a/sflphone-common/src/sip/SdesNegotiator.cpp
+++ b/sflphone-common/src/sip/SdesNegotiator.cpp
@@ -65,23 +65,12 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
             "F8_128_HMAC_SHA1_80|" \
             "[A-Za-z0-9_]+)"); // srtp-crypto-suite-ext
 
-        keyParamsPattern = new Pattern (
-            "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-            "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
-            "(?:2\\^(?P<lifetime>[0-9]+)\\|" \
-            "(?P<mkiValue>[0-9]+)\\:" \
-            "(?P<mkiLength>[0-9]{1,3})\\;?)?","g");
-
-	// "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|(?:2\\^(?P<lifetime>[0-9]+)\\|(?P<mkiValue>[0-9]+)\\:(?P<mkiLength>[0-9]{1,3})\\;?)?"
-
-	/*
 	keyParamsPattern = new Pattern (
-            "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-            "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
-            "2\\^(?P<lifetime>[0-9]+)\\|" \
-            "(?P<mkiValue>[0-9]+)\\:" \
-            "(?P<mkiLength>[0-9]{1,3})\\;?", "g");
-	*/
+	    "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+	    "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)"	 \
+	    "(\\|2\\^(?P<lifetime>[0-9]+)\\|"		 \
+	    "(?P<mkiValue>[0-9]+)\\:"			 \
+	    "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
 
         sessionParamPattern = new Pattern (
             "(?P<sessionParam>(kdr\\=[0-9]{1,2}|" \
@@ -150,7 +139,7 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 	if (cryptoSuitePattern->matches()) {
 	    try {
 	        // std::cout << "Parsing the crypto suite field";
-	        cryptoSuite  = cryptoSuitePattern->group ("cryptoSuite");
+	        cryptoSuite = cryptoSuitePattern->group ("cryptoSuite");
 		// std::cout << ": " << cryptoSuite << std::endl;
 	    } catch (match_error& exception) {
 	        throw parse_error ("Error while parsing the crypto-suite field");
@@ -169,18 +158,12 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 	std::string mkiValue;
 	
         try {
-            while (keyParamsPattern->matches()) {
-	        // std::cout << "Parsing the key parameters: " << std::endl;  
+            while(keyParamsPattern->matches()) {
                 srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod");
-		// std::cout << " method: "<< srtpKeyMethod << std::endl;  
                 srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo");
-		// std::cout << " info: "<< srtpKeyInfo << std::endl;  
                 lifetime = keyParamsPattern->group ("lifetime");
-		// std::cout << " lifetime: "<< lifetime << std::endl;  
                 mkiValue = keyParamsPattern->group ("mkiValue");
-		// std::cout << " mkiValue: "<< mkiValue << std::endl;
                 mkiLength = keyParamsPattern->group ("mkiLength");
-		// std::cout << " mkiLength: "<< mkiLength << std::endl;
             }
         } catch (match_error& exception) {
             throw parse_error ("Error while parsing the key-params field");
diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp
index b963fccc57..c7c709f4ef 100644
--- a/sflphone-common/test/sdesnegotiatorTest.cpp
+++ b/sflphone-common/test/sdesnegotiatorTest.cpp
@@ -89,19 +89,46 @@ void SdesNegotiatorTest::testKeyParamsPattern()
 
     pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
 			       "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
-			       "2\\^(?P<lifetime>[0-9]+)\\|"		\
+			       "(2\\^(?P<lifetime>[0-9]+)\\|"		\
 			       "(?P<mkiValue>[0-9]+)\\:"		\
-			       "(?P<mkiLength>[0-9]{1,3})\\;?", "g");
+			       "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
 
     *pattern << subject;
 
     pattern->matches();
     CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
+    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
+== 0);
+    CPPUNIT_ASSERT(pattern->group("lifetime").compare("20")== 0);
+    CPPUNIT_ASSERT(pattern->group("mkiValue").compare("1")== 0);
+    CPPUNIT_ASSERT(pattern->group("mkiLength").compare("32")== 0);
 
     delete pattern;
     pattern = NULL;
 }
 
+void SdesNegotiatorTest::testKeyParamsPatternWithoutMKI()
+{
+
+    std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj";
+
+    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+                               "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)" \
+                               "(\\|2\\^(?P<lifetime>[0-9]+)\\|"                \
+                               "(?P<mkiValue>[0-9]+)\\:"                \
+                               "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+
+    *pattern << subject;
+    pattern->matches();
+    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
+    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
+== 0);
+
+    delete pattern;
+    pattern = NULL;
+}
+
+
 /**
  * Make sure that all the fields can be extracted
  * properly from the syntax. 
@@ -179,15 +206,14 @@ void SdesNegotiatorTest::testMostSimpleCase()
 
     sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
 
-    printf("negotiator->getCryptoSuite() %s\n", negotiator->getCryptoSuite().c_str());
-    printf("negotiator->getKeyMethod() %s\n", negotiator->getKeyMethod().c_str());
-    printf("negotiator->getKeyInfo() %s\n", negotiator->getKeyInfo().c_str());
-
     CPPUNIT_ASSERT(negotiator->negotiate() == true);
-    
+
     CPPUNIT_ASSERT(negotiator->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0);
     CPPUNIT_ASSERT(negotiator->getKeyMethod().compare("inline") == 0);
     CPPUNIT_ASSERT(negotiator->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0);
+    CPPUNIT_ASSERT(negotiator->getLifeTime().compare("")== 0);
+    CPPUNIT_ASSERT(negotiator->getMkiValue().compare("")== 0);
+    CPPUNIT_ASSERT(negotiator->getMkiLength().compare("")== 0);
 
     delete capabilities; capabilities = NULL;
     delete cryptoOffer; cryptoOffer = NULL;
diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h
index eb35c509e2..88c8148a85 100644
--- a/sflphone-common/test/sdesnegotiatorTest.h
+++ b/sflphone-common/test/sdesnegotiatorTest.h
@@ -62,10 +62,11 @@ class SdesNegotiatorTest : public CppUnit::TestCase {
      * Use cppunit library macros to add unit test the factory
      */
     CPPUNIT_TEST_SUITE( SdesNegotiatorTest );
-    // CPPUNIT_TEST( testTagPattern );
-    // CPPUNIT_TEST( testCryptoSuitePattern );
-    // CPPUNIT_TEST( testKeyParamsPattern );
-    // CPPUNIT_TEST( testNegotiation );
+    CPPUNIT_TEST( testTagPattern );
+    CPPUNIT_TEST( testCryptoSuitePattern );
+    CPPUNIT_TEST( testKeyParamsPattern );
+    CPPUNIT_TEST( testKeyParamsPatternWithoutMKI );
+    CPPUNIT_TEST( testNegotiation );
     CPPUNIT_TEST( testMostSimpleCase );
     CPPUNIT_TEST_SUITE_END();
 
@@ -91,6 +92,8 @@ class SdesNegotiatorTest : public CppUnit::TestCase {
 
 		void testKeyParamsPattern();
 
+		void testKeyParamsPatternWithoutMKI();
+
 		void testNegotiation();
 		
 		void testComponent();
-- 
GitLab


From c58d625a0acb6e115f43c2235d75bce878b13d50 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 29 Jan 2010 10:16:39 -0500
Subject: [PATCH 021/160] [#2522] Clean up SIP debug messages

---
 sflphone-common/src/managerimpl.cpp     | 10 +++----
 sflphone-common/src/sip/sipaccount.cpp  |  2 +-
 sflphone-common/src/sip/sipvoiplink.cpp | 39 +++++++++++--------------
 3 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index ca8ed41903..83b06802e1 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -3237,9 +3237,7 @@ void ManagerImpl::setMicVolume (unsigned short mic_vol)
  
 int ManagerImpl::getLocalIp2IpPort (void)
 {
-    // The SIP port used for default account (IP to IP) calls
-    _debug ("Default account port %i", getConfigInt (IP2IP_PROFILE, LOCAL_PORT));
-
+    // The SIP port used for default account (IP to IP) calls=
     return getConfigInt (IP2IP_PROFILE, LOCAL_PORT);
 
 }
@@ -4130,7 +4128,7 @@ short
 ManagerImpl::loadAccountMap()
 {
 
-    _debug ("Loading account map\n");
+    _debug ("Loading account map");
 
     short nbAccount = 0;
     TokenList sections = _config.getSections();
@@ -4148,12 +4146,12 @@ ManagerImpl::loadAccountMap()
     // 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 direct ip calls \"account\"\n");
+        _debug ("Failed to create default \"account\"");
     } else {
 
-        _debug ("Succeed to create direct ip calls \"account\"\n");
         _accountMap[IP2IP_PROFILE] = _directIpAccount;
 
 	// Force IP2IP settings to be loaded to be loaded 
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index 29e1ace799..2470208867 100644
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -171,7 +171,7 @@ int SIPAccount::initCredential (void)
 
 int SIPAccount::registerVoIPLink()
 {
-    _debug ("Register account %s\n", getAccountID().c_str());
+    _debug ("Register account %s", getAccountID().c_str());
 
     // Init general settings
     loadConfig();
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 13cfa5ba41..87be3afa89 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2084,7 +2084,7 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
     if(account && (errPjsip == PJ_SUCCESS)) {
 
-        _debug("UserAgent: Initialized sip listener on port %d", account->getLocalPort ());
+        // Store transport in transport map
         addTransportToMap(account->getTransportMapKey(), account->getAccountTransport());
 
 	// if account is not NULL, use IP2IP trasport as default one
@@ -2129,7 +2129,7 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
 
     if (account == NULL) {
-        _debug ("Account is null while creating TLS default listener. Returning");
+        _debug ("UserAgent: Account is null while creating TLS default listener. Returning");
         // return !PJ_SUCCESS;
     }
 
@@ -2156,8 +2156,8 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     pjsip_tls_setting * tls_setting = account->getTlsSetting();
 
     
-    _debug ("TLS transport to be initialized with published address %.*s,"
-            " published port %d, local address %.*s, local port %d",
+    _debug ("UserAgent: TLS transport to be initialized with published address %.*s,"
+            " published port %d,\n                  local address %.*s, local port %d",
             (int) a_name.host.slen, a_name.host.ptr,
             (int) a_name.port, pjAddress.slen, pjAddress.ptr, (int) localTlsPort);
     
@@ -2165,7 +2165,7 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     status = pjsip_tls_transport_start (_endpt, tls_setting, &local_addr, &a_name, 1, &tls);
 
     if (status != PJ_SUCCESS) {
-        _debug ("Error creating SIP TLS listener (%d)", status);
+        _debug ("UserAgent: Error creating SIP TLS listener (%d)", status);
     }
 
     // return PJ_SUCCESS;
@@ -2195,17 +2195,15 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
         // Launch a new UDP listener/transport, using the published address
         if (account->isStunEnabled ()) {
 
-            _debug ("Create Alternate UDP transport");
             status = createAlternateUdpTransport (id);
 
             if (status != PJ_SUCCESS) {
-                _debug ("Failed to initialize UDP transport with an extern published address for account %s", id.c_str());
+                _debug ("Failed to init UDP transport with STUN published address for account %s", id.c_str());
 		return false;
             }
 
         } else {
 
-	    _debug ("Create UDP transport");
             status = createUdpTransport (id);
 
 	    if (status != PJ_SUCCESS) {
@@ -2238,7 +2236,7 @@ bool SIPVoIPLink::addTransportToMap(std::string key, pjsip_transport* transport)
         _transportMap.erase(iter_transport);
     }
 
-    _debug("Storing the newly created transport in transport map using key %s", key.c_str());
+    _debug("UserAgent: Storing newly created transport in map using key %s", key.c_str());
     _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport));
 
     return true;
@@ -2261,7 +2259,7 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
     if (!loadSIPLocalIP (&listeningAddress))
         return !PJ_SUCCESS;
 
-    _debug ("Create UDP transport for account \"%s\"", id.c_str());
+    _debug ("UserAgent: Create UDP transport for account \"%s\"", id.c_str());
 
     /*
      * Retrieve the account information
@@ -2277,12 +2275,12 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
     // Set information to the local address and port
     if (account == NULL) {
 
-        _debug ("Account with id \"%s\" is null in createUdpTransport.", id.c_str());
+        _debug ("UserAgent: Account with id \"%s\" is null in createUdpTransport.", id.c_str());
 
     } else {
 
         // We are trying to initialize a UDP transport available for all local accounts and direct IP calls
-        _debug("Found account %s in map", account->getAccountID().c_str());
+        _debug("UserAgent: found account %s in map", account->getAccountID().c_str());
 
         if (account->getLocalInterface () != "default") {
             listeningAddress = getInterfaceAddrFromName(account->getLocalInterface());
@@ -2319,7 +2317,7 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
         listeningAddress = account->getPublishedAddress ();
         // Set the listening port to the published port
         listeningPort = account->getPublishedPort ();
-        _debug ("Creating UDP transport published %s:%i", listeningAddress.c_str (), listeningPort);
+        _debug ("UserAgent: Creating UDP transport published %s:%i", listeningAddress.c_str (), listeningPort);
 
     }
 
@@ -2346,25 +2344,20 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
 
     } else {
 
-        _debug ("UserAgent: UDP server listening on port %d", listeningPort);
+        _debug ("UserAgent: UDP transport initialized successfully on %s:%d", listeningAddress.c_str (), listeningPort);
 
         if (account == NULL) {
 
-	    _debug("Use transport as local UDP server");
+	    _debug("UserAgent: Use transport as local UDP server");
             _localUDPTransport = transport;
 	}
         else {
 
-	    _debug("Bind transport to account %s", account->getAccountID().c_str());
+	    _debug("UserAgent: bind transport to account %s", account->getAccountID().c_str());
 	    account->setAccountTransport (transport);
 	}
     }
 
-    if (status == PJ_SUCCESS) {
-        _debug ("Transport initialized successfully on %s:%i", listeningAddress.c_str (), listeningPort);
-
-    }
-
     return PJ_SUCCESS;
 }
 
@@ -2592,6 +2585,8 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     std::string listeningAddress = "";
     int listeningPort;
 
+    _debug ("UserAgent: Create Alternate UDP transport");
+
     /*
      * Retrieve the account information
      */
@@ -2757,7 +2752,7 @@ bool SIPVoIPLink::loadSIPLocalIP (std::string *addr)
         returnValue = false;
     } else {
         localAddress = std::string (pj_inet_ntoa (ip_addr.ipv4.sin_addr));
-        _debug ("UserAgent: Checking network, setting local IP address to: %s", localAddress.data());
+        _debug ("UserAgent: Checking network, local IP address: %s", localAddress.data());
     }
 
     *addr = localAddress;
-- 
GitLab


From ead41826cfebf2ecd9e9c2821a3a0a87010c77e8 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 29 Jan 2010 13:15:26 -0500
Subject: [PATCH 022/160] [#2522] Some other cleanup

---
 sflphone-client-gnome/src/contacts/calltree.c | 1050 ++++++++---------
 .../pjsip/include/pjsip/sip_transport_tls.h   |    7 +
 .../pjsip/src/pjsip/sip_transport_tls_ossl.c  |    2 +
 sflphone-common/src/sip/sipvoiplink.cpp       |   42 +-
 4 files changed, 547 insertions(+), 554 deletions(-)

diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c
index 0838bacd8e..536d97a039 100644
--- a/sflphone-client-gnome/src/contacts/calltree.c
+++ b/sflphone-client-gnome/src/contacts/calltree.c
@@ -80,78 +80,77 @@ popup_menu (GtkWidget *widget,
 call_selected_cb(GtkTreeSelection *sel, void* data UNUSED )
 {
 
-	DEBUG("Selection Callback");
-
-	GtkTreeIter iter;
-	GValue val;
-	GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
-
-	GtkTreePath* path;
-	gchar* string_path;
+    DEBUG("Selection Callback");
 
+    GtkTreeIter iter;
+    GValue val;
+    GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
+    
+    GtkTreePath* path;
+    gchar* string_path;
 
-	if (! gtk_tree_selection_get_selected (sel, &model, &iter))
-		return;
 
+    if (! gtk_tree_selection_get_selected (sel, &model, &iter))
+        return;
 
-	// store info for dragndrop
-	path = gtk_tree_model_get_path(model, &iter);
-	string_path = gtk_tree_path_to_string(path);
-	selected_path_depth = gtk_tree_path_get_depth(path);
 
-	if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(model), &iter))
-	{
-		DEBUG("SELECTED A CONFERENCE");
-		selected_type = A_CONFERENCE;
+    // store info for dragndrop
+    path = gtk_tree_model_get_path(model, &iter);
+    string_path = gtk_tree_path_to_string(path);
+    selected_path_depth = gtk_tree_path_get_depth(path);
 
-		val.g_type = 0;
-		gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
+    if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(model), &iter)) {
 
-		calltab_select_conf((conference_obj_t*) g_value_get_pointer(&val));
+        DEBUG("SELECTED A CONFERENCE");
+	selected_type = A_CONFERENCE;
 
-		selected_conf = (conference_obj_t*)g_value_get_pointer(&val);
+	val.g_type = 0;
+	gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
 
-		if(selected_conf) 
-		{
+	calltab_select_conf((conference_obj_t*) g_value_get_pointer(&val));
 
-			selected_call_id = selected_conf->_confID;
-			selected_path = string_path;
-			selected_call = NULL;
+	selected_conf = (conference_obj_t*)g_value_get_pointer(&val);
 
-		}
+	if(selected_conf) {
 
-		DEBUG("  selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth);
+	    selected_call_id = selected_conf->_confID;
+	    selected_path = string_path;
+	    selected_call = NULL;
 
 	}
-	else
-	{
-		DEBUG("SELECTED A CALL");
-		selected_type = A_CALL;
-		// gtk_tree_model_iter_parent(GTK_TREE_MODEL(model), parent_conference, &iter);
-
-		val.g_type = 0;
-		gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
 
-		calltab_select_call(active_calltree, (callable_obj_t*) g_value_get_pointer(&val));
+	DEBUG("  selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth);
 
-		selected_call = (callable_obj_t*)g_value_get_pointer(&val);
+    }
+    else {
+      
+        DEBUG("SELECTED A CALL");
+	selected_type = A_CALL;
+	// gtk_tree_model_iter_parent(GTK_TREE_MODEL(model), parent_conference, &iter);
 
-		if(selected_call) {
+	val.g_type = 0;
+	gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
+	
+	calltab_select_call(active_calltree, (callable_obj_t*) g_value_get_pointer(&val));
+	
+	selected_call = (callable_obj_t*)g_value_get_pointer(&val);
 
-		    selected_call_id = selected_call->_callID;
-		    selected_path = string_path;
-		    selected_conf = NULL;
-		}
+	if(selected_call) {
 
-		DEBUG("  selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth);
+	    selected_call_id = selected_call->_callID;
+	    selected_path = string_path;
+	    selected_conf = NULL;
 	}
 
+	DEBUG("  selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth);
+    }
 
-	// conferencelist_reset ();
-	// sflphone_fill_conference_list();
 
-	g_value_unset(&val);
-	update_actions();
+    // conferencelist_reset ();
+    // sflphone_fill_conference_list();
+
+    g_value_unset(&val);
+    update_actions();
 
 }
 
@@ -160,97 +159,90 @@ call_selected_cb(GtkTreeSelection *sel, void* data UNUSED )
 row_activated(GtkTreeView       *tree_view UNUSED,
 		GtkTreePath       *path UNUSED,
 		GtkTreeViewColumn *column UNUSED,
-		void * data UNUSED)
-{
-	callable_obj_t* selectedCall = NULL;
-	callable_obj_t* new_call;
-	conference_obj_t* selectedConf = NULL;
-	gchar *account_id;
-
-	DEBUG("double click action");
-
-	if(calltab_get_selected_type(active_calltree) == A_CALL) {
-
-	    DEBUG("Selected a call\n");
-	    selectedCall = calltab_get_selected_call(active_calltree);
+		void * data UNUSED) {
+    callable_obj_t* selectedCall = NULL;
+    callable_obj_t* new_call;
+    conference_obj_t* selectedConf = NULL;
+    gchar *account_id;
+	
+    DEBUG("double click action");
+    
+    if(calltab_get_selected_type(active_calltree) == A_CALL) {
+      
+        DEBUG("Selected a call\n");
+	selectedCall = calltab_get_selected_call(active_calltree);
 
-	    if (selectedCall)
-	    {
-	        DEBUG("there is a selected call\n");
+	if (selectedCall) {
+	    DEBUG("there is a selected call\n");
 
-		// Get the right event from the right calltree
-		if( active_calltree == current_calls )
-		{
+	    // Get the right event from the right calltree
+	    if( active_calltree == current_calls ) {
 
-		    DEBUG("active tree is current calls");
-
-		    switch(selectedCall->_state) {
-		        case CALL_STATE_INCOMING:
-			    dbus_accept(selectedCall);
-			    stop_notification();
-			    break;
-		        case CALL_STATE_HOLD:
-			    dbus_unhold(selectedCall);
-			    break;
-		        case CALL_STATE_RINGING:
-		        case CALL_STATE_CURRENT:
-		        case CALL_STATE_BUSY:
-		        case CALL_STATE_FAILURE:
-			    break;
-		        case CALL_STATE_DIALING:
-			    sflphone_place_call (selectedCall);
-			    break;
-		        default:
-			    WARN("Row activated - Should not happen!");
-			    break;
-		    }
-		}
+	      DEBUG("active tree is current calls");
+	      
+	      switch(selectedCall->_state) {
+	      case CALL_STATE_INCOMING:
+		  dbus_accept(selectedCall);
+		  stop_notification();
+		  break;
+	      case CALL_STATE_HOLD:
+		  dbus_unhold(selectedCall);
+		  break;
+	      case CALL_STATE_RINGING:
+	      case CALL_STATE_CURRENT:
+	      case CALL_STATE_BUSY:
+	      case CALL_STATE_FAILURE:
+		  break;
+	      case CALL_STATE_DIALING:
+		  sflphone_place_call (selectedCall);
+		  break;
+	      default:
+		  WARN("Row activated - Should not happen!");
+		  break;
+	      }
+	    }
 		
-		// If history or contact: double click action places a new call
-		else
-		{
-		      DEBUG("active tree is history or contact");
+	    // If history or contact: double click action places a new call
+	    else {
+
+	        DEBUG("active tree is history or contact");
 
-		      account_id = g_strdup (selectedCall->_accountID);
+		account_id = g_strdup (selectedCall->_accountID);
 		      
-		      // Create a new call
-		      create_new_call (CALL, CALL_STATE_DIALING, "", account_id, selectedCall->_peer_name, selectedCall->_peer_number, &new_call);
+		// Create a new call
+		create_new_call (CALL, CALL_STATE_DIALING, "", account_id, selectedCall->_peer_name, selectedCall->_peer_number, &new_call);
 
-		      calllist_add(current_calls, new_call);
-		      calltree_add_call(current_calls, new_call, NULL);
-		      sflphone_place_call(new_call);
-		      calltree_display(current_calls);
-		}
+		calllist_add(current_calls, new_call);
+		calltree_add_call(current_calls, new_call, NULL);
+		sflphone_place_call(new_call);
+		calltree_display(current_calls);
 	    }
 	}
-	else if(calltab_get_selected_type(current_calls) == A_CONFERENCE)
-	{
-		DEBUG("Selected a conference\n");
+    }
+    else if(calltab_get_selected_type(current_calls) == A_CONFERENCE) {
 
-		if( active_calltree == current_calls )
-		{
+        DEBUG("Selected a conference\n");
+	    
+	if( active_calltree == current_calls ) {
 
-			selectedConf = calltab_get_selected_conf(current_calls);
+	    selectedConf = calltab_get_selected_conf(current_calls);
 
-			if(selectedConf)
-			{
-				switch(selectedConf->_state)
-				{
-					case CONFERENCE_STATE_ACTIVE_ATACHED:
-					        // sflphone_add_main_participant(selectedConf);
-						break;
-					case CONFERENCE_STATE_ACTIVE_DETACHED:
-						sflphone_add_main_participant(selectedConf);
-						break;
-					case CONFERENCE_STATE_HOLD:
-						sflphone_conference_off_hold(selectedConf);
-						break;
-				}
-			}
+	    if(selectedConf) {
+
+	        switch(selectedConf->_state) {
+		case CONFERENCE_STATE_ACTIVE_ATACHED:
+		    // sflphone_add_main_participant(selectedConf);
+		    break;
+		case CONFERENCE_STATE_ACTIVE_DETACHED:
+		    sflphone_add_main_participant(selectedConf);
+		    break;
+		case CONFERENCE_STATE_HOLD:
+		    sflphone_conference_off_hold(selectedConf);
+		    break;
 		}
+	    }
 	}
-
-
+    }
 }
 
 
@@ -258,83 +250,80 @@ row_activated(GtkTreeView       *tree_view UNUSED,
 	void  
 row_single_click(GtkTreeView *tree_view UNUSED, void * data UNUSED)
 {
-	DEBUG("single click action");
-	callable_obj_t * selectedCall=NULL;
-	account_t * account_details=NULL;
-	gchar * displaySasOnce="";
+    DEBUG("single click action");
+    callable_obj_t * selectedCall=NULL;
+    account_t * account_details=NULL;
+    gchar * displaySasOnce="";
 
-	selectedCall = calltab_get_selected_call( active_calltree );
+    selectedCall = calltab_get_selected_call( active_calltree );
 
-	if (selectedCall != NULL)
-	{
-		account_details = account_list_get_by_id(selectedCall->_accountID);
-		DEBUG("AccountID %s", selectedCall->_accountID);
+    if (selectedCall != NULL) {
 
-		if(account_details != NULL) {
-			displaySasOnce = g_hash_table_lookup(account_details->properties, ACCOUNT_DISPLAY_SAS_ONCE);
-			DEBUG("Display SAS once %s", displaySasOnce);
-		} else {
-			GHashTable * properties = NULL;
-			sflphone_get_ip2ip_properties (&properties);
-			if(properties != NULL)
-			{ displaySasOnce = g_hash_table_lookup(properties, ACCOUNT_DISPLAY_SAS_ONCE); DEBUG("IP2IP displaysasonce %s", displaySasOnce); }
-		}
+        account_details = account_list_get_by_id(selectedCall->_accountID);
+	DEBUG("AccountID %s", selectedCall->_accountID);
 
-		/*  Make sure that we are not in the history tab since 
-		 *  nothing is defined for it yet 
-		 */
-		if( active_calltree == current_calls )
-		{
+	if(account_details != NULL) {
+	    displaySasOnce = g_hash_table_lookup(account_details->properties, ACCOUNT_DISPLAY_SAS_ONCE);
+	    DEBUG("Display SAS once %s", displaySasOnce);
+	}
+	else {
+	    GHashTable * properties = NULL;
+	    sflphone_get_ip2ip_properties (&properties);
+	    if(properties != NULL)
+	      { displaySasOnce = g_hash_table_lookup(properties, ACCOUNT_DISPLAY_SAS_ONCE); DEBUG("IP2IP displaysasonce %s", displaySasOnce); }
+	}
 
-			// sflphone_selected_call_codec(selectedCall);
+	/*  Make sure that we are not in the history tab since 
+	 *  nothing is defined for it yet 
+	 */
+	if( active_calltree == current_calls ) {
 
-			// DEBUG("single click action: %s", dbus_get_current_codec_name(selectedCall));
-			// sflphone_display_selected_codec(dbus_get_current_codec_name(selectedCall));
+	    // sflphone_selected_call_codec(selectedCall);
 
-			switch(selectedCall->_srtp_state)
-			{
-				case SRTP_STATE_SAS_UNCONFIRMED:
-					selectedCall->_srtp_state = SRTP_STATE_SAS_CONFIRMED;
-					if(g_strcasecmp(displaySasOnce,"true") == 0) {
-						selectedCall->_zrtp_confirmed = TRUE;
-					}
-					dbus_confirm_sas(selectedCall);
-					calltree_update_call(current_calls, selectedCall, NULL);
-					break;
-				case SRTP_STATE_SAS_CONFIRMED:
-					selectedCall->_srtp_state = SRTP_STATE_SAS_UNCONFIRMED;
-					dbus_reset_sas(selectedCall);
-					calltree_update_call(current_calls, selectedCall, NULL);
-					break;
-				default:
-					DEBUG("Single click but no action");
-					break;
-			}
-		}
+	    // DEBUG("single click action: %s", dbus_get_current_codec_name(selectedCall));
+	    // sflphone_display_selected_codec(dbus_get_current_codec_name(selectedCall));
+
+	  switch(selectedCall->_srtp_state) {
+
+	  case SRTP_STATE_SAS_UNCONFIRMED:
+	      selectedCall->_srtp_state = SRTP_STATE_SAS_CONFIRMED;
+	      if(g_strcasecmp(displaySasOnce,"true") == 0) {
+		  selectedCall->_zrtp_confirmed = TRUE;
+	      }
+	      dbus_confirm_sas(selectedCall);
+	      calltree_update_call(current_calls, selectedCall, NULL);
+	      break;
+	  case SRTP_STATE_SAS_CONFIRMED:
+	      selectedCall->_srtp_state = SRTP_STATE_SAS_UNCONFIRMED;
+	      dbus_reset_sas(selectedCall);
+	      calltree_update_call(current_calls, selectedCall, NULL);
+	      break;
+	  default:
+	      DEBUG("Single click but no action");
+	      break;
+	  }
 	}
+    }
 }
 
 	static gboolean
 button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUSED)
 {
-	if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
-	{
-		if( active_calltree == current_calls )
-		{
-			show_popup_menu(widget,  event);
-			return TRUE;
-		}
-		else if (active_calltree == history)
-		{
-			show_popup_menu_history (widget,  event);
-			return TRUE;
-		}
-		else{
-			show_popup_menu_contacts (widget, event);
-			return TRUE;
-		}
+    if (event->button == 3 && event->type == GDK_BUTTON_PRESS){
+        if( active_calltree == current_calls ) {
+	    show_popup_menu(widget,  event);
+	    return TRUE;
 	}
-	return FALSE;
+	else if (active_calltree == history) {
+	    show_popup_menu_history (widget,  event);
+	    return TRUE;
+	}
+	else {
+	    show_popup_menu_contacts (widget, event);
+	    return TRUE;
+	}
+    }
+    return FALSE;
 }
 
 
@@ -1304,136 +1293,130 @@ void calltree_update_conference (calltab_t* tab, const gchar* confID)
 void calltree_remove_conference (calltab_t* tab, const conference_obj_t* conf, GtkTreeIter *parent)
 {
 
-	DEBUG("calltree_remove_conference %s\n", conf->_confID);
-
-	GtkTreeIter iter_parent;
-	GtkTreeIter iter_child;
-	GValue confval;
-	GValue callval;
-	conference_obj_t * tempconf;
-	callable_obj_t * call;
-	GtkTreeStore* store = tab->store;
-
-	int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent);
-
-	int nbParticipant;
-
-	int i, j;
-	for( i = 0; i < nbChild; i++)
-	{
+    DEBUG("calltree_remove_conference %s\n", conf->_confID);
+    
+    GtkTreeIter iter_parent;
+    GtkTreeIter iter_child;
+    GValue confval;
+    GValue callval;
+    conference_obj_t * tempconf;
+    callable_obj_t * call;
+    GtkTreeStore* store = tab->store;
 
-		if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_parent, parent, i))
-		{
+    int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent);
 
-			if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter_parent))
-			{
+    int nbParticipant;
 
-				calltree_remove_conference (tab, conf, &iter_parent);
+    int i, j;
+    for( i = 0; i < nbChild; i++) {
 
-				confval.g_type = 0;
-				gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter_parent, COLUMN_ACCOUNT_PTR, &confval);
+        if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_parent, parent, i)) {
 
-				tempconf = (conference_obj_t*) g_value_get_pointer(&confval);
-				g_value_unset(&confval);
+	    if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter_parent)) {
 
-				if(tempconf == conf)
-				{
-					nbParticipant = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), &iter_parent);
-					DEBUG("nbParticipant: %i\n", nbParticipant);
-					for( j = 0; j < nbParticipant; j++)
-					{
-						call = NULL;
-						if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_child, &iter_parent, j))
-						{
+	        calltree_remove_conference (tab, conf, &iter_parent);
 
-							callval.g_type = 0;
-							gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter_child, COLUMN_ACCOUNT_PTR, &callval);
+		confval.g_type = 0;
+		gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter_parent, COLUMN_ACCOUNT_PTR, &confval);
 
-							call = (callable_obj_t*)g_value_get_pointer(&callval);
-							g_value_unset(&callval);
+		tempconf = (conference_obj_t*) g_value_get_pointer(&confval);
+		g_value_unset(&confval);
 
-							if(call)
-							{
-								calltree_add_call (tab, call, NULL);
-							}
-						}
+		if(tempconf == conf) {
+		    
+		    nbParticipant = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), &iter_parent);
+		    DEBUG("nbParticipant: %i\n", nbParticipant);
+		    for( j = 0; j < nbParticipant; j++) {
+		        call = NULL;
+			if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_child, &iter_parent, j)){
 
-					}
+			    callval.g_type = 0;
+			    gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter_child, COLUMN_ACCOUNT_PTR, &callval);
 
-					gtk_tree_store_remove(store, &iter_parent);
-				}
+			    call = (callable_obj_t*)g_value_get_pointer(&callval);
+			    g_value_unset(&callval);
+			    
+			    if(call) {
+			        calltree_add_call (tab, call, NULL);
+			    }
 			}
+			
+		    }
+
+		    gtk_tree_store_remove(store, &iter_parent);
 		}
+	    }
 	}
+    }
 
-	// callable_obj_t * selectedCall = calltab_get_selected_call(tab);
-	// if(selectedCall == c)
-	// calltab_select_call(tab, NULL);
-
-	update_actions();
+    // callable_obj_t * selectedCall = calltab_get_selected_call(tab);
+    // if(selectedCall == c)
+    // calltab_select_call(tab, NULL);
 
+    update_actions();
+	
 }
 
 
 void calltree_display (calltab_t *tab) {
 
+  
+    GtkTreeSelection *sel;
 
-	GtkTreeSelection *sel;
-
-	/* If we already are displaying the specified calltree */
-	if (active_calltree == tab)
-		return;
-
-	/* case 1: we want to display the main calltree */
-	if (tab==current_calls) {
+    /* If we already are displaying the specified calltree */
+    if (active_calltree == tab)
+        return;
 
-		DEBUG ("display main tab");
+    /* case 1: we want to display the main calltree */
+    if (tab==current_calls) {
 
+        DEBUG ("display main tab");
 
-		if (active_calltree==contacts) {
-			gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
-		} else {
-			gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
-		}
-		// gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)currentCallsButton, TRUE);
 
+	if (active_calltree==contacts) {
+	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
+	} else {
+	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
 	}
+	// gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)currentCallsButton, TRUE);
 
-	/* case 2: we want to display the history */
-	else if (tab==history) {
+    }
 
-		DEBUG ("display history tab");
+    /* case 2: we want to display the history */
+    else if (tab==history) {
 
-		if (active_calltree==contacts) {
-			gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
-		}
+        DEBUG ("display history tab");
 
-		gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, TRUE);
+	if (active_calltree==contacts) {
+	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
 	}
 
-	else if (tab==contacts) {
+	gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, TRUE);
+    }
 
-		DEBUG ("display contact tab");
+    else if (tab==contacts) {
 
-		if (active_calltree==history) {
-			gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
-		}
+        DEBUG ("display contact tab");
 
-		gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, TRUE);
+	if (active_calltree==history) {
+	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
 	}
 
-	else
-		ERROR ("calltree.c line %d . This is probably a bug in the application", __LINE__);
-
+	gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, TRUE);
+    }
 
-	gtk_widget_hide (active_calltree->tree);
-	active_calltree = tab;
-	gtk_widget_show (active_calltree->tree);
+    else
+        ERROR ("calltree.c line %d . This is probably a bug in the application", __LINE__);
+    
 
-	sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (active_calltree->view));
-	DEBUG("Emit signal changed from calltree_display");
-	g_signal_emit_by_name(sel, "changed");
-	update_actions();
+    gtk_widget_hide (active_calltree->tree);
+    active_calltree = tab;
+    gtk_widget_show (active_calltree->tree);
+    
+    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (active_calltree->view));
+    DEBUG("Emit signal changed from calltree_display");
+    g_signal_emit_by_name(sel, "changed");
+    update_actions();
 }
 
 
@@ -1442,266 +1425,266 @@ void calltree_display (calltab_t *tab) {
 static void drag_begin_cb(GtkWidget *widget, GdkDragContext *dc, gpointer data)
 {
 
-	GtkTargetList* target_list;
+    GtkTargetList* target_list;
 
-	// DEBUG("drag_begin_cb %s\n", dragged_path);
-	if((target_list = gtk_drag_source_get_target_list(widget)) != NULL);
+    // DEBUG("drag_begin_cb %s\n", dragged_path);
+    if((target_list = gtk_drag_source_get_target_list(widget)) != NULL);
 
 
 }
 
 static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer data)
 {
-	DEBUG("drag_end_cb\n");
-	DEBUG("    selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth);
-	DEBUG("    dragged path %s, dragged_call_id %s, dragged_path_depth %i\n", selected_path, selected_call_id, dragged_path_depth);
-
-	GtkTreeModel *model = (GtkTreeModel*)current_calls->store;
-	GtkTreePath *path = gtk_tree_path_new_from_string(dragged_path);
-	GtkTreePath *dpath = gtk_tree_path_new_from_string(dragged_path);
-	GtkTreePath *spath = gtk_tree_path_new_from_string(selected_path);
-
-	GtkTreeIter iter;
-	GtkTreeIter iter_parent;
-	GtkTreeIter iter_children;
-	GtkTreeIter parent_conference; // conference for which this call is attached
-
-	GValue val;
+    DEBUG("drag_end_cb\n");
+    DEBUG("    selected_path %s, selected_call_id %s, selected_path_depth %i\n", selected_path, selected_call_id, selected_path_depth);
+    DEBUG("    dragged path %s, dragged_call_id %s, dragged_path_depth %i\n", selected_path, selected_call_id, dragged_path_depth);
+
+    GtkTreeModel *model = (GtkTreeModel*)current_calls->store;
+    GtkTreePath *path = gtk_tree_path_new_from_string(dragged_path);
+    GtkTreePath *dpath = gtk_tree_path_new_from_string(dragged_path);
+    GtkTreePath *spath = gtk_tree_path_new_from_string(selected_path);
+    
+    GtkTreeIter iter;
+    GtkTreeIter iter_parent;
+    GtkTreeIter iter_children;
+    GtkTreeIter parent_conference; // conference for which this call is attached
 
-	callable_obj_t* call;
-	conference_obj_t* conf;
+    GValue val;
+    
+    callable_obj_t* call;
+    conference_obj_t* conf;
 
 
-	// Make sure that drag n drop does not imply a dialing call
-	if(selected_type == A_CALL && selected_call->_state == CALL_STATE_DIALING) {
+    // Make sure that drag n drop does not imply a dialing call
+    if(selected_type == A_CALL && selected_call->_state == CALL_STATE_DIALING) {
  
-	    DEBUG("Dragged a call on a dialing call");
+        DEBUG("Dragged a call on a dialing call");
 
-	    calltree_remove_call(current_calls, selected_call, NULL);
-	    calltree_add_call(current_calls, selected_call, NULL);
-	    return;
-	}
+	calltree_remove_call(current_calls, selected_call, NULL);
+	calltree_add_call(current_calls, selected_call, NULL);
+	return;
+    }
 	
-	else if(selected_type == A_CALL) {
-
-	    // user may have dragged it outside the conference
-	    if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) {
+    else if(selected_type == A_CALL) {
 
-	        calltree_remove_call(current_calls, dragged_call, NULL);
+        // user may have dragged it outside the conference
+      if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) {
 
-		DEBUG("Dragged a call on a dialing call");
+	  calltree_remove_call(current_calls, dragged_call, NULL);
 
-		// test if call participate to a conference
-		if(selected_call->_confID) {
+	  DEBUG("Dragged a call on a dialing call");
+	  
+	  // test if call participate to a conference
+	  if(selected_call->_confID) {
 
-	            gtk_tree_path_up(spath);
-		    gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path);
+	      gtk_tree_path_up(spath);
+	      gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path);
 		
-		    calltree_add_call(current_calls, selected_call, &parent_conference);
-		}
-		else {
-	            calltree_add_call(current_calls, selected_call, NULL);
-		}
+	      calltree_add_call(current_calls, selected_call, &parent_conference);
+	  }
+	  else {
+	      calltree_add_call(current_calls, selected_call, NULL);
+	  }
 
-		calltree_add_call(current_calls, dragged_call, NULL);
-		return;
+	  calltree_add_call(current_calls, dragged_call, NULL);
+	  return;
+	  
+      }
 
-	    }
-
-	}
-	else if(selected_type == A_CONFERENCE) {
+    }
+    else if(selected_type == A_CONFERENCE) {
 
-	    DEBUG("Dragged a conference on a dialing call");
+        DEBUG("Dragged a conference on a dialing call");
 
-	    if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) {
+	if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) {
 
-		conf = selected_conf;
+	    conf = selected_conf;
 
-		calltree_remove_conference(current_calls, conf, NULL);
-		calltree_add_conference(current_calls, conf);
-		return;
-	    } 
-	}
+	    calltree_remove_conference(current_calls, conf, NULL);
+	    calltree_add_conference(current_calls, conf);
+	    return;
+	} 
+    }
 
 
-	if(selected_path_depth == 1) {
+    if(selected_path_depth == 1) {
 
-	    if(dragged_path_depth == 1) {
+        if(dragged_path_depth == 1) {
 
-	        if (selected_type == A_CALL && dragged_type == A_CALL) {
+	  if (selected_type == A_CALL && dragged_type == A_CALL) {
 
-		    if(gtk_tree_path_compare (dpath, spath) == 0) {
-		        // draged a call on itself
-		    }
-		    else {
-		        // dragged a single call on a single call
-		        if(selected_call != NULL && dragged_call != NULL)
-			  sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
-		    }
-		}
-		else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
+	    if(gtk_tree_path_compare (dpath, spath) == 0) {
+	        // draged a call on itself
+	    }
+	    else {
+	      // dragged a single call on a single call
+	      if(selected_call != NULL && dragged_call != NULL)
+		sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
+	    }
+	  }
+	  else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
 
-		    // dragged a single call on a conference
-		    if(!selected_call) {
-		        DEBUG("Error: call dragged on a conference is null");
-		        return;
-		    }
+	      // dragged a single call on a conference
+	      if(!selected_call) {
+	          DEBUG("Error: call dragged on a conference is null");
+		  return;
+	      }
 
-		    selected_call->_confID = g_strdup(dragged_call_id);
-		    sflphone_add_participant(selected_call_id, dragged_call_id);
-		}
-		else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
+	      selected_call->_confID = g_strdup(dragged_call_id);
+	      sflphone_add_participant(selected_call_id, dragged_call_id);
+	  }
+	  else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
 
-		    // dragged a conference on a single call
-		    conf = selected_conf;
+	      // dragged a conference on a single call
+	      conf = selected_conf;
 			        
-		    calltree_remove_conference(current_calls, conf, NULL);
-		    calltree_add_conference(current_calls, conf);
+	      calltree_remove_conference(current_calls, conf, NULL);
+	      calltree_add_conference(current_calls, conf);
 
 
-		}
-		else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE){
-
-		    // dragged a conference on a conference
-		    if(gtk_tree_path_compare (dpath, spath) == 0) {
-
-		        if(!current_calls) {
-			    DEBUG("Error while joining the same conference\n");
-			    return;
-		        }
-
-		        DEBUG("Joined the same conference!\n");
-			gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE);
-		    }
-		    else {
-
-		        if(!selected_conf) {
-			    DEBUG("Error: selected conference is null while joining 2 conference");
-			}
+	  }
+	  else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE){
 
-			if(!dragged_conf) {
-			    DEBUG("Error: dragged conference is null while joining 2 conference");
-			}
+	      // dragged a conference on a conference
+	      if(gtk_tree_path_compare (dpath, spath) == 0) {
 
-		        DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path);
-			sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID);
-		    }
-		}
+		  if(!current_calls) {
+		      DEBUG("Error while joining the same conference\n");
+		      return;
+		  }
 
-			// TODO: dragged a single call on a NULL element (should do nothing)
-			// TODO: dragged a conference on a NULL element (should do nothing)
+		  DEBUG("Joined the same conference!\n");
+		  gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE);
+	      }
+	      else {
 
-	    }
-	    else {
- 
-	        // dragged_path_depth == 2
-	        if (selected_type == A_CALL && dragged_type == A_CALL) {
+		  if(!selected_conf) {
+		      DEBUG("Error: selected conference is null while joining 2 conference");
+		  }
 
-		    // TODO: dragged a call on a conference call
-		    calltree_remove_call(current_calls, selected_call, NULL);
-		    calltree_add_call(current_calls, selected_call, NULL);
-		}
+		  if(!dragged_conf) {
+		      DEBUG("Error: dragged conference is null while joining 2 conference");
+		  }
 
-		else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
+		  DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path);
+		  sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID);
+	      }
+	  }
 
-		  // TODO: dragged a conference on a conference call
-		  calltree_remove_conference(current_calls, selected_conf, NULL);
-		  calltree_add_conference(current_calls, selected_conf);
-		}
+	  // TODO: dragged a single call on a NULL element (should do nothing)
+	  // TODO: dragged a conference on a NULL element (should do nothing)
 
-		// TODO: dragged a single call on a NULL element 
-		// TODO: dragged a conference on a NULL element
-	    }
 	}
 	else {
+ 
+	    // dragged_path_depth == 2
+	  if (selected_type == A_CALL && dragged_type == A_CALL) {
 
-	    // selected_path_depth == 2
+	      // TODO: dragged a call on a conference call
+	      calltree_remove_call(current_calls, selected_call, NULL);
+	      calltree_add_call(current_calls, selected_call, NULL);
+	  }
 
-	    if(dragged_path_depth == 1) {
+	  else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
 
-	        if(selected_type == A_CALL && dragged_type == A_CALL) {
+	      // TODO: dragged a conference on a conference call
+	      calltree_remove_conference(current_calls, selected_conf, NULL);
+	      calltree_add_conference(current_calls, selected_conf);
+	  }
 
-		    // dragged a conference call on a call
-		    sflphone_detach_participant(selected_call_id);
+	  // TODO: dragged a single call on a NULL element 
+	  // TODO: dragged a conference on a NULL element
+	}
+    }
+    else {
 
-		    if(selected_call != NULL && dragged_call != NULL)
-		        sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
+        // selected_path_depth == 2
+      
+        if(dragged_path_depth == 1) {
 
-		}
-		else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
+	    if(selected_type == A_CALL && dragged_type == A_CALL) {
 
-		    // dragged a conference call on a conference
-		    sflphone_detach_participant(selected_call_id);
+	      // dragged a conference call on a call
+	      sflphone_detach_participant(selected_call_id);
+		    
+	      if(selected_call != NULL && dragged_call != NULL)
+		  sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
 
-		    if(selected_call != NULL && dragged_conf != NULL) {
+	    }
+	    else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
 
- 		        DEBUG("Adding a participant, since dragged call on a conference");
+	        // dragged a conference call on a conference
+	        sflphone_detach_participant(selected_call_id);
+	      
+		if(selected_call != NULL && dragged_conf != NULL) {
 
-			sflphone_add_participant(selected_call_id, dragged_call_id);
-		    }
-		}
-		else {
+		    DEBUG("Adding a participant, since dragged call on a conference");
 
-		    // dragged a conference call on a NULL element
-		    sflphone_detach_participant(selected_call_id);
+		    sflphone_add_participant(selected_call_id, dragged_call_id);
 		}
-		
 	    }
 	    else {
 
-	        // dragged_path_depth == 2
-	        // dragged a conference call on another conference call (same conference)
-	        // TODO: dragged a conference call on another conference call (different conference)
-	      
-	        gtk_tree_path_up(path);
-
-		gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path);
+	        // dragged a conference call on a NULL element
+	        sflphone_detach_participant(selected_call_id);
+	    }
+		
+	}
+	else {
 
-		gtk_tree_path_up(dpath);
-		gtk_tree_path_up(spath);
+	    // dragged_path_depth == 2
+	    // dragged a conference call on another conference call (same conference)
+	    // TODO: dragged a conference call on another conference call (different conference)
+	      
+	    gtk_tree_path_up(path);
 
-		if(gtk_tree_path_compare (dpath, spath) == 0) {
+	    gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path);
 
-		    DEBUG("Dragged a call in the same conference");
-		    calltree_remove_call (current_calls, selected_call, NULL);
-		    calltree_add_call (current_calls, selected_call, &parent_conference);
-		}
-		else {
+	    gtk_tree_path_up(dpath);
+	    gtk_tree_path_up(spath);
+		
+	    if(gtk_tree_path_compare (dpath, spath) == 0) {
 
+	        DEBUG("Dragged a call in the same conference");
+		calltree_remove_call (current_calls, selected_call, NULL);
+		calltree_add_call (current_calls, selected_call, &parent_conference);
+	    }
+	    else {
 
-		    DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath));
 
-		    conf = NULL;
+	        DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath));
 
-		    val.g_type = 0;
-		    if(gtk_tree_model_get_iter (model, &iter, dpath)) {
-		      
-		        DEBUG("we got an iter!");
-			gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
-			
-			conf = (conference_obj_t*)g_value_get_pointer(&val);
-		    }
-		    g_value_unset(&val);
-
-		    sflphone_detach_participant(selected_call_id);
+		conf = NULL;
+		
+		val.g_type = 0;
+		if(gtk_tree_model_get_iter (model, &iter, dpath)) {
+		  
+		    DEBUG("we got an iter!");
+		    gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
+		  
+		    conf = (conference_obj_t*)g_value_get_pointer(&val);
+		}
+		g_value_unset(&val);
 
-		    if(conf) {
+		sflphone_detach_participant(selected_call_id);
 
-		        DEBUG("we got a conf!");
-			sflphone_add_participant(selected_call_id, conf->_confID);
-		    }
-		    else {
+		if(conf) {
 
-		        DEBUG("didn't find a conf!");
-		    }
+		    DEBUG("we got a conf!");
+		    sflphone_add_participant(selected_call_id, conf->_confID);
 		}
+		else {
 
-		// TODO: dragged a conference call on another conference call (different conference)
-		// TODO: dragged a conference call on a NULL element (same conference)
-		// TODO: dragged a conference call on a NULL element (different conference)
+		    DEBUG("didn't find a conf!");
+		}
 	    }
-	    
-	}	
+
+	    // TODO: dragged a conference call on another conference call (different conference)
+	    // TODO: dragged a conference call on a NULL element (same conference)
+	    // TODO: dragged a conference call on a NULL element (different conference)
+	}
+	
+    }	
 
 }
 
@@ -1709,88 +1692,87 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
 void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, gpointer data)
 {
 
-	// DEBUG("drag_data_received_cb\n");
-	GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
-	GtkTreePath *drop_path;
-	GtkTreeViewDropPosition position;
-	GValue val;
+    // DEBUG("drag_data_received_cb\n");
+    GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
+    GtkTreePath *drop_path;
+    GtkTreeViewDropPosition position;
+    GValue val;
 
-	GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
-	GtkTreeModel* tree_model = gtk_tree_view_get_model(tree_view);
+    GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
+    GtkTreeModel* tree_model = gtk_tree_view_get_model(tree_view);
 
-	GtkTreeIter iter;
-	gchar value;
+    GtkTreeIter iter;
+    gchar value;
 
 
-	val.g_type = 0;
-	gtk_tree_view_get_drag_dest_row(tree_view, &drop_path, &position);
+    val.g_type = 0;
+    gtk_tree_view_get_drag_dest_row(tree_view, &drop_path, &position);
 
-	if(drop_path)
-	{
+    if(drop_path) {
 
-	    gtk_tree_model_get_iter(tree_model, &iter, drop_path);
-	    gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val);
+        gtk_tree_model_get_iter(tree_model, &iter, drop_path);
+	gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val);
 
 	    
-	    if(gtk_tree_model_iter_has_child(tree_model, &iter)) {
+	if(gtk_tree_model_iter_has_child(tree_model, &iter)) {
 
-	        DEBUG("DRAGGING ON A CONFERENCE");
-		dragged_type = A_CONFERENCE;
-	    }
-	    else {
-
-	        DEBUG("DRAGGING ON A CALL");
-		dragged_type = A_CALL;
-	    }
-
-	    switch (position)  {
-
-	    case GTK_TREE_VIEW_DROP_AFTER:
-	        dragged_path = gtk_tree_path_to_string(drop_path);
-		dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-		dragged_call_id = "NULL";
-		dragged_call = NULL;
-		dragged_conf = NULL;
-		break;
+	    DEBUG("DRAGGING ON A CONFERENCE");
+	    dragged_type = A_CONFERENCE;
+	}
+	else {
 
-	    case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
-	        dragged_path = gtk_tree_path_to_string(drop_path);
-		dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-		if (dragged_type == A_CALL) {
-		  
-		    dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
-		    dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
-		}
-		else {
+	    DEBUG("DRAGGING ON A CALL");
+	    dragged_type = A_CALL;
+	}
 
-		    dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
-		    dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
-		}
-		break;
+	switch (position)  {
 
-	    case GTK_TREE_VIEW_DROP_BEFORE:
-	        dragged_path = gtk_tree_path_to_string(drop_path);
-		dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-		dragged_call_id = "NULL";
-		dragged_call = NULL;
-		dragged_conf = NULL;
-		break;
+	case GTK_TREE_VIEW_DROP_AFTER:
+	    dragged_path = gtk_tree_path_to_string(drop_path);
+	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
+	    dragged_call_id = "NULL";
+	    dragged_call = NULL;
+	    dragged_conf = NULL;
+	    break;
 
-	    case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
-	        dragged_path = gtk_tree_path_to_string(drop_path);
-		dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-		if (dragged_type == A_CALL) {
-		    dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
-		    dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
-		}
-		else {
-		    dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
-		    dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
-		}
-		break;
+	case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
+	    dragged_path = gtk_tree_path_to_string(drop_path);
+	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
+	    if (dragged_type == A_CALL) {
+	      
+	        dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
+		dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
+	    }
+	    else {
 
-	    default:
-	        return;
+	        dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
+		dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
+	    }
+	    break;
+
+	case GTK_TREE_VIEW_DROP_BEFORE:
+	    dragged_path = gtk_tree_path_to_string(drop_path);
+	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
+	    dragged_call_id = "NULL";
+	    dragged_call = NULL;
+	    dragged_conf = NULL;
+	    break;
+
+	case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
+	    dragged_path = gtk_tree_path_to_string(drop_path);
+	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
+	    if (dragged_type == A_CALL) {
+	        dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
+		dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
 	    }
+	    else {
+	      dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
+	      dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
+	    }
+	    break;
+	    
+	default:
+	  return;
 	}
+    }
 }
diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
index e093fd6b08..2c22cac7c6 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
@@ -187,6 +187,13 @@ typedef struct pjsip_tls_setting
      */
     pj_bool_t qos_ignore_error;
 
+
+    /**
+     * An optional callback for TLS verify which can be left to NULL;
+     * 
+     */ 
+    int(* on_tls_verify)()
+
 } pjsip_tls_setting;
 
 
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c
index 4d04b130ee..cb815fc169 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls_ossl.c
@@ -225,6 +225,8 @@ static pj_status_t tls_create(struct tls_listener *listener,
 			      struct tls_transport **p_tls);
 
 
+
+
 /****************************************************************************
  * SSL FUNCTIONS
  */
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 87be3afa89..6a0e0f9c02 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -224,6 +224,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event);
 void xfer_svr_cb (pjsip_evsub *sub, pjsip_event *event);
 void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata);
 
+
 /*************************************************************************************************/
 
 SIPVoIPLink* SIPVoIPLink::_instance = NULL;
@@ -1535,10 +1536,9 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         call->setCallConfiguration (Call::IPtoIP);
         call->initRecFileName();
 
-        AccountID accountId = Manager::instance().getAccountFromCall (id);
+        // AccountID accountId = Manager::instance().getAccountFromCall (id);
         SIPAccount * account = NULL;
-
-        account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+	account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
 
         if (account == NULL) {
 
@@ -1551,13 +1551,14 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         // Set SDP parameters - Set to local
 	addrSdp = localAddress;
 
-        _debug ("new_ip_to_ip_call localAddress: %s", localAddress.c_str());
+        _debug ("UserAgent: New IP to IP localAddress: %s", localAddress.c_str());
 
+	// If local address bound to ANY, reslove it using PJSIP
         if (localAddress == "0.0.0.0") {
-            _debug ("Local address: %s", localAddress.c_str ());
             loadSIPLocalIP (&localAddress);
         }
 
+	// Local address to appear in SDP
 	if (addrSdp == "0.0.0.0") {
 	    addrSdp = localAddress;
 	}
@@ -1575,7 +1576,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 	    call->getAudioRtp()->initAudioRtpConfig (call);
             call->getAudioRtp()->initAudioRtpSession (call);
         } catch (...) {
-            _debug ("! SIP Failure: Unable to create RTP Session  in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__);
+            _debug ("! SIP Failure: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__);
         }
 
         // Building the local SDP offer
@@ -1585,13 +1586,13 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 	// Init TLS transport if enabled
 	if(account->isTlsEnabled()) {
 
-	    _debug("TLS enabled for ip-to-ip calls, acquire TLS transport from pjsip's manager");
+	    _debug("UserAgent: TLS enabled for IP to IP calls, acquire TLS transport");
 
 	    int at = toUri.find("@");
 	    int trns = toUri.find(";transport");
-	    std::string remoteaddr = toUri.substr(at+1, trns-at-1);
+	    std::string remoteAddr = toUri.substr(at+1, trns-at-1);
 
-	    createTlsTransport(account->getAccountID(), remoteaddr);
+	    createTlsTransport(account->getAccountID(), remoteAddr);
 	}
 
         // If no transport already set, use the default one created at pjsip initialization
@@ -2479,7 +2480,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     genericUri = pjsip_parse_uri (_pool, tmp.ptr, tmp.slen, 0);
 
     if (genericUri == NULL) {
-        _debug ("genericUri is NULL in findLocalPortFromUri");
+        _debug ("UserAgent: genericUri is NULL in findLocalPortFromUri");
         return atoi (DEFAULT_SIP_PORT);
     }
 
@@ -2488,7 +2489,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri (genericUri);
 
     if (sip_uri == NULL) {
-        _debug ("Invalid uri in findLocalAddressFromTransport");
+        _debug ("UserAgent: Invalid uri in findLocalAddressFromTransport");
         return atoi (DEFAULT_SIP_PORT);
     }
 
@@ -2497,7 +2498,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
         port = atoi (DEFAULT_SIP_TLS_PORT);
     } else {
         if (transport == NULL) {
-            _debug ("transport is NULL in findLocalPortFromUri - Try the local UDP transport");
+            _debug ("UserAgent: transport is NULL in findLocalPortFromUri - Try the local UDP transport");
             transport = _localUDPTransport;
         }
 
@@ -2513,7 +2514,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     tpmgr = pjsip_endpt_get_tpmgr (_endpt);
 
     if (tpmgr == NULL) {
-        _debug ("Unexpected: Cannot get tpmgr from endpoint.");
+        _debug ("UserAgent: unexpected, cannot get tpmgr from endpoint.");
         return port;
     }
 
@@ -2524,7 +2525,7 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
     pj_status_t status;
 
     if (transportType == PJSIP_TRANSPORT_UDP) {
-        _debug ("Transport ID: %s", transport->obj_name);
+        _debug ("UserAgent: transport ID: %s", transport->obj_name);
 
         status = init_transport_selector (transport, &tp_sel);
 
@@ -2537,10 +2538,10 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
 
 
     if (status != PJ_SUCCESS) {
-        _debug ("Failed to find local address from transport");
+        _debug ("UserAgent: failed to find local address from transport");
     }
 
-    _debug ("Local port discovered from attached transport: %i", port);
+    _debug ("UserAgent: local port discovered from attached transport: %i", port);
     return port;
 }
 
@@ -2553,7 +2554,7 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 
     if(!account) {
 
-        _debug("Account is NULL, returning");
+        _debug("UserAgent: Account is NULL when creating TLS connection, returning");
 	return !PJ_SUCCESS;
     }
 
@@ -2564,11 +2565,12 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 
     pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5061);
 
-    pjsip_transport *tcp;
+    // Create a new TLS connection from TLS listener
+    pjsip_transport *tls;
     pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
-	    				  NULL, &tcp);
+	    				  NULL, &tls);
 
-    account->setAccountTransport(tcp);
+    account->setAccountTransport(tls);
 
     return PJ_SUCCESS;
 }
-- 
GitLab


From 15c6d2079c5326d92101df8f8e210514baa2186f Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 2 Feb 2010 16:12:41 -0500
Subject: [PATCH 023/160] [#2722] Update TLS setting before acquiring new
 transport on registration

---
 .../pjsip/include/pjsip/sip_transport_tls.h   | 11 ++++----
 .../pjsip/src/pjsip/sip_transport_tls.c       | 24 ++++++++++++++++
 sflphone-common/src/sip/sipaccount.h          |  4 +--
 sflphone-common/src/sip/sipvoiplink.cpp       | 28 ++++++++++++++-----
 sflphone-common/src/sip/sipvoiplink.h         |  2 +-
 5 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
index 2c22cac7c6..a9210b43c3 100644
--- a/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
+++ b/sflphone-common/libs/pjproject/pjsip/include/pjsip/sip_transport_tls.h
@@ -188,12 +188,6 @@ typedef struct pjsip_tls_setting
     pj_bool_t qos_ignore_error;
 
 
-    /**
-     * An optional callback for TLS verify which can be left to NULL;
-     * 
-     */ 
-    int(* on_tls_verify)()
-
 } pjsip_tls_setting;
 
 
@@ -229,6 +223,11 @@ PJ_INLINE(void) pjsip_tls_setting_copy(pj_pool_t *pool,
     pj_strdup_with_null(pool, &dst->ciphers, &src->ciphers);
 }
 
+PJ_DEF(pj_status_t) pjsip_tls_listener_update_settings(pjsip_endpoint *endpt,
+						       pj_pool_t *pool,
+						       pjsip_tpmgr *mgr,
+						       pjsip_tpfactory *factory,
+						       const pjsip_tls_setting *opt);
 
 /**
  * Register support for SIP TLS transport by creating TLS listener on
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c
index db65fa0200..0c16f88c3c 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_tls.c
@@ -30,6 +30,8 @@
 #include <pj/pool.h>
 #include <pj/string.h>
 
+#include <stdio.h>
+
 #if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0
 
 #define THIS_FILE	"sip_transport_tls.c"
@@ -174,6 +176,28 @@ static void sockaddr_to_host_port( pj_pool_t *pool,
  * The TLS listener/transport factory.
  */
 
+PJ_DEF(pj_status_t) pjsip_tls_listener_update_settings(pjsip_endpoint *endpt,
+						       pj_pool_t *pool,
+						       pjsip_tpmgr *mgr,
+						       pjsip_tpfactory *factory,
+						       const pjsip_tls_setting *opt) {
+
+    struct tls_listener *listener;
+    pjsip_transport_type_e type = PJSIP_TRANSPORT_TLS;
+
+    /*
+     * Find the tls factory.
+     */
+    listener = (struct tls_listener*)factory;
+    listener->tls_setting;
+
+    pjsip_tls_setting_copy(pool, &(listener->tls_setting), opt);
+
+    return PJ_SUCCESS;
+}
+
+
+
 /*
  * This is the public API to create, initialize, register, and start the
  * TLS listener.
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index ae454a5333..0f13e4f7eb 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -135,7 +135,7 @@ class SIPAccount : public Account
          * an alternate UDP transport.
          */
         inline pj_str_t getStunServerName(void) { return _stunServerName; }
-		inline void setStunServerName (pj_str_t srv) { _stunServerName = srv; }
+	inline void setStunServerName (pj_str_t srv) { _stunServerName = srv; }
 
 		/**
          * @return pj_uint8_t structure, filled from the configuration
@@ -143,7 +143,7 @@ class SIPAccount : public Account
          * an alternate UDP transport.
          */
         inline pj_uint16_t getStunPort (void) { return _stunPort; }
-		inline void setStunPort (pj_uint16_t port) { _stunPort = port; }
+	inline void setStunPort (pj_uint16_t port) { _stunPort = port; }
         
         /**
          * @return bool Tells if current transport for that 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 6a0e0f9c02..319aea8328 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -80,6 +80,7 @@ struct result {
 };
 
 pjsip_transport *_localUDPTransport;
+pjsip_tpfactory *_localTlsListener;
 
 const pj_str_t STR_USER_AGENT = { (char*) "User-Agent", 10 };
 
@@ -492,6 +493,7 @@ int SIPVoIPLink::sendRegister (AccountID id)
         }
     }
 
+
     // Create SIP transport or get existent SIP transport from internal map 
     // according to account settings, if the transport could not be created but
     // one is already set in account, use this one (most likely this is the 
@@ -1713,7 +1715,6 @@ bool get_dns_server_addresses (std::vector<std::string> *servers)
 
     struct  sockaddr_in current_server;
     in_addr address;
-
     // Read configuration files
 
     if (res_init () != 0) {
@@ -2004,6 +2005,7 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) {
     if(!account)
         return false;
 
+
     // If an account is already bound to this account, decrease its reference 
     // as it is going to change. If the same transport is selected, reference 
     // counter will be increased
@@ -2018,7 +2020,6 @@ bool SIPVoIPLink::acquireTransport(const AccountID& accountID) {
     // If TLS is enabled, TLS connection is automatically handled when sending account registration
     // However, for any other sip transaction, we must create TLS connection 
     if(createSipTransport(accountID)) {
-
         return true;
     }
     // A transport is already created on this port, use it
@@ -2168,7 +2169,10 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     if (status != PJ_SUCCESS) {
         _debug ("UserAgent: Error creating SIP TLS listener (%d)", status);
     }
-
+    else {
+        _localTlsListener = tls;
+    }
+    
     // return PJ_SUCCESS;
     
 }
@@ -2186,9 +2190,15 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
     if (account->isTlsEnabled()) {
 
+        // Parse remote address to establish connection 
+        std::string remoteSipUri = account->getServerUri();
+        int sips = remoteSipUri.find("<sips:") + 6;
+	int trns = remoteSipUri.find(";transport");
+	std::string remoteAddr = remoteSipUri.substr(sips, trns-sips);
+
         // Nothing to do, TLS listener already created at pjsip's startup and TLS connection\
         // is automatically handled in pjsip when sending registration messages.
-	// status = createTlsTransport(id, );
+        status = createTlsTransport(id, remoteAddr);
         return true;
     }
     else {
@@ -2546,9 +2556,8 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
 }
 
 
-pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::string& remoteAddr)
+pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::string remoteAddr)
 {
-    
     // Retrieve the account information
     SIPAccount * account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
@@ -2565,10 +2574,15 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 
     pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5061);
 
+    // Update TLS settings for account registration using the default listeners
+    // Pjsip does not allow to create multiple listener
+    pjsip_tpmgr *mgr = pjsip_endpt_get_tpmgr(_endpt);
+    pjsip_tls_listener_update_settings(_endpt, _pool, mgr, _localTlsListener, account->getTlsSetting());
+
     // Create a new TLS connection from TLS listener
     pjsip_transport *tls;
     pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
-	    				  NULL, &tls);
+              			  NULL, &tls);
 
     account->setAccountTransport(tls);
 
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 686e3abbba..8835c3f11d 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -438,7 +438,7 @@ class SIPVoIPLink : public VoIPLink
          * be created.
          * @return pj_status_t PJ_SUCCESS on success 
          */
-        pj_status_t createTlsTransport(const AccountID& id,  std::string& remoteAddr);
+        pj_status_t createTlsTransport(const AccountID& id,  std::string remoteAddr);
 
 	/**
          * Create a UDP transport using stun server to resove public address
-- 
GitLab


From be84b7f020b5cd4505ed3c9ca8da99c470a591c0 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 2 Feb 2010 17:19:54 -0500
Subject: [PATCH 024/160] [#2722] Get local Tls port from IP to IP config

---
 sflphone-common/src/sip/sipaccount.cpp  |  1 +
 sflphone-common/src/sip/sipaccount.h    | 13 +++++++++++++
 sflphone-common/src/sip/sipvoiplink.cpp |  5 ++---
 3 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index 2470208867..2364f87e07 100644
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -33,6 +33,7 @@ SIPAccount::SIPAccount (const AccountID& accountID)
         , _publishedIpAddress ("")
         , _localPort (atoi (DEFAULT_SIP_PORT))
         , _publishedPort (atoi (DEFAULT_SIP_PORT))
+	, _localTlsPort (atoi (DEFAULT_SIP_TLS_PORT))
         , _transportType (PJSIP_TRANSPORT_UNSPECIFIED)
         , _transport (NULL)
         , _resolveOnce (false)
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index 0f13e4f7eb..7e1300041a 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -248,6 +248,18 @@ class SIPAccount : public Account
          * @pram port The port used by this account.
          */
         inline void setPublishedPort(pj_uint16_t port) { _publishedPort = port; }
+
+	/**
+         * Get the local port for TLS listener.
+         * @return pj_uint16 The port used for that account
+         */   
+        inline pj_uint16_t getLocalTlsPort(void) { return (pj_uint16_t) _localTlsPort; }
+        
+        /** 
+         * Set the local port for TLS listener.
+         * @pram port The port used for TLS listener.
+         */
+        inline void setLocalTlsPort(pj_uint16_t port) { _localTlsPort = port; }
                 
         /**
          * Get the public IP address set by the user for this account.
@@ -337,6 +349,7 @@ class SIPAccount : public Account
         
         pj_uint16_t _localPort;
         pj_uint16_t _publishedPort;
+	pj_uint16_t _localTlsPort;
         
         pjsip_transport_type_e _transportType;
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 319aea8328..5043852803 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2138,7 +2138,7 @@ void SIPVoIPLink::createDefaultSipTlsListener()
 
     // Init local address for this listener to be bound (ADDR_ANY on port 5061).
     pj_sockaddr_in_init (&local_addr, 0, 0);
-    pj_uint16_t localTlsPort = 5061;
+    pj_uint16_t localTlsPort = account->getLocalTlsPort();
     local_addr.sin_port = pj_htons (localTlsPort);
      
     pj_str_t pjAddress;
@@ -2152,7 +2152,7 @@ void SIPVoIPLink::createDefaultSipTlsListener()
 
     pj_bzero (&a_name, sizeof (pjsip_host_port));
     pj_cstr (&a_name.host, publishedAddress.c_str());
-    a_name.port = 5061;
+    a_name.port = account->getLocalTlsPort();
 
     /* Get TLS settings. Expected to be filled */
     pjsip_tls_setting * tls_setting = account->getTlsSetting();
@@ -2562,7 +2562,6 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
     SIPAccount * account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
     if(!account) {
-
         _debug("UserAgent: Account is NULL when creating TLS connection, returning");
 	return !PJ_SUCCESS;
     }
-- 
GitLab


From a4c20ff98f79a6a4df59a09b5fd61caa5e5b8767 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 3 Feb 2010 14:18:34 -0500
Subject: [PATCH 025/160] [#2722] Added spin box for TLS listener port in TLS
 advanced options

Since there can be only one TLS listener, the port can
only be modified globally through the IP2IP_PROFILE
---
 sflphone-client-gnome/src/config/audioconf.c  |   4 -
 .../src/config/preferencesdialog.c            |   9 +
 .../src/config/tlsadvanceddialog.c            | 220 ++++++++++--------
 sflphone-client-gnome/src/sflphone_const.h    |   4 +
 sflphone-common/src/account.h                 |   4 +
 .../src/dbus/configurationmanager.cpp         |  10 +
 sflphone-common/src/managerimpl.cpp           |  16 +-
 sflphone-common/src/sip/sipaccount.cpp        |   6 +-
 sflphone-common/src/sip/sipaccount.h          |  10 +-
 sflphone-common/src/sip/sipvoiplink.cpp       |  21 +-
 sflphone-common/src/sip/sipvoiplink.h         |   4 -
 11 files changed, 175 insertions(+), 133 deletions(-)

diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index 308131207f..499475df10 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -818,14 +818,10 @@ GtkWidget* create_audio_configuration()
     // Box for the ALSA configuration
     gnome_main_section_new (_("ALSA settings"), &alsa_conf);
     gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
-    // gtk_widget_hide( GTK_CONTAINER(alsa_conf) );
     gtk_widget_show( alsa_conf );
     if( SHOW_ALSA_CONF )
     {
         // Box for the ALSA configuration
-        // alsa_conf = gtk_frame_new(_("ALSA configuration"));
-        // gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
-        printf("ALSA Created \n");
         alsabox = alsa_box();
         gtk_container_add( GTK_CONTAINER(alsa_conf) , alsabox );
         gtk_widget_hide( alsa_conf );
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index 4b7d9af6f2..d2b78aa56b 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -167,6 +167,15 @@ static void ip2ip_local_port_changed_cb(GtkWidget *widget, gpointer data)
 			g_strdup(LOCAL_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(widget)))));
 }
 
+/*
+static void tls_listener_port_changed_cb(GtkWidget *widget, gpointer data) {
+
+    gint new_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
+    g_hash_table_replace(directIpCallsProperties, 
+			 g_strdup(TLS_LISTENER_PORT), g_strdup((char *)gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(widget)))));
+}
+*/
+
 
 GtkWidget* create_direct_ip_calls_tab()
 {
diff --git a/sflphone-client-gnome/src/config/tlsadvanceddialog.c b/sflphone-client-gnome/src/config/tlsadvanceddialog.c
index 493053f0ee..2b1c03e004 100644
--- a/sflphone-client-gnome/src/config/tlsadvanceddialog.c
+++ b/sflphone-client-gnome/src/config/tlsadvanceddialog.c
@@ -69,6 +69,8 @@ void show_advanced_tls_options(GHashTable * properties)
     gtk_label_set_markup(GTK_LABEL(label), description);
     gtk_table_attach(GTK_TABLE(table), label, 0, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
             
+    gchar * account_id;
+    gchar * tls_listener_port;
     gchar * tls_ca_list_file;
     gchar * tls_certificate_file;
     gchar * tls_private_key_file;
@@ -81,42 +83,56 @@ void show_advanced_tls_options(GHashTable * properties)
     gchar * require_client_certificate;    	    
     gchar * negotiation_timeout_sec;
     gchar * negotiation_timeout_msec;	  
-    
+
     if (properties != NULL) {
-	    tls_ca_list_file = g_hash_table_lookup(properties, TLS_CA_LIST_FILE);
-	    tls_certificate_file = g_hash_table_lookup(properties, TLS_CERTIFICATE_FILE);
-	    tls_private_key_file = g_hash_table_lookup(properties, TLS_PRIVATE_KEY_FILE);
-	    tls_password = g_hash_table_lookup(properties, TLS_PASSWORD);	    
-	    tls_method = g_hash_table_lookup(properties, TLS_METHOD);
-	    tls_ciphers = g_hash_table_lookup(properties, TLS_CIPHERS);	  
-	    tls_server_name = g_hash_table_lookup(properties, TLS_SERVER_NAME);	  	    
-	    verify_server = g_hash_table_lookup(properties, TLS_VERIFY_SERVER);	    	    
-	    verify_client = g_hash_table_lookup(properties, TLS_VERIFY_CLIENT);	 	      
-	    require_client_certificate = g_hash_table_lookup(properties, TLS_REQUIRE_CLIENT_CERTIFICATE);	    	    
-	    negotiation_timeout_sec = g_hash_table_lookup(properties, TLS_NEGOTIATION_TIMEOUT_SEC);
-	    negotiation_timeout_msec = g_hash_table_lookup(properties, TLS_NEGOTIATION_TIMEOUT_MSEC);	    
-	    
-	    DEBUG("ca_list_file %s", tls_ca_list_file);
-	    DEBUG("certificate_file %s", tls_certificate_file);
+
+        account_id = g_hash_table_lookup(properties, ACCOUNT_ID);
+        tls_listener_port = g_hash_table_lookup(properties, TLS_LISTENER_PORT);
+        tls_ca_list_file = g_hash_table_lookup(properties, TLS_CA_LIST_FILE);
+	tls_certificate_file = g_hash_table_lookup(properties, TLS_CERTIFICATE_FILE);
+	tls_private_key_file = g_hash_table_lookup(properties, TLS_PRIVATE_KEY_FILE);
+	tls_password = g_hash_table_lookup(properties, TLS_PASSWORD);	    
+	tls_method = g_hash_table_lookup(properties, TLS_METHOD);
+	tls_ciphers = g_hash_table_lookup(properties, TLS_CIPHERS);	  
+	tls_server_name = g_hash_table_lookup(properties, TLS_SERVER_NAME);	  	    
+	verify_server = g_hash_table_lookup(properties, TLS_VERIFY_SERVER);	    	    
+	verify_client = g_hash_table_lookup(properties, TLS_VERIFY_CLIENT);	 	      
+	require_client_certificate = g_hash_table_lookup(properties, TLS_REQUIRE_CLIENT_CERTIFICATE);	    	    
+	negotiation_timeout_sec = g_hash_table_lookup(properties, TLS_NEGOTIATION_TIMEOUT_SEC);
+	negotiation_timeout_msec = g_hash_table_lookup(properties, TLS_NEGOTIATION_TIMEOUT_MSEC);   
+
+    }
+
+    
+    label = gtk_label_new(_("Global TLS listener (all accounts)"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    GtkWidget * tlsListenerPort;    
+    GtkWidget * hbox = gtk_hbox_new(FALSE, 10);
+    gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    tlsListenerPort = gtk_spin_button_new_with_range(0, 65535, 1);
+    gtk_label_set_mnemonic_widget(GTK_LABEL (label), tlsListenerPort);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(tlsListenerPort), g_ascii_strtod(tls_listener_port, NULL));
+    gtk_box_pack_start_defaults(GTK_BOX(hbox), tlsListenerPort);
+
+    if(g_strcmp0(account_id, IP2IP_PROFILE) != 0) {
+      gtk_widget_set_sensitive(tlsListenerPort, FALSE);    
     }
        
     label = gtk_label_new( _("Certificate of Authority list"));
- 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     GtkWidget * caListFileChooser;
     caListFileChooser = gtk_file_chooser_button_new(_("Choose a CA list file (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
-    gtk_table_attach (GTK_TABLE(table), caListFileChooser, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_table_attach (GTK_TABLE(table), caListFileChooser, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
 
     if (tls_ca_list_file == NULL) {
-        // gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(caListFileChooser), g_get_home_dir());
-	gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
+        gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
 
     } 
     else {
-	DEBUG("**********************************************************%s\n", tls_ca_list_file);
-
-	if(g_strcmp0(tls_ca_list_file, "") == 0) {
+        if(g_strcmp0(tls_ca_list_file, "") == 0) {
 
 	    gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
 	}
@@ -129,17 +145,16 @@ void show_advanced_tls_options(GHashTable * properties)
     }
 
     label = gtk_label_new( _("Public endpoint certificate file"));
- 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     GtkWidget * certificateFileChooser;
     certificateFileChooser = gtk_file_chooser_button_new(_("Choose a public endpoint certificate (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
-    gtk_table_attach (GTK_TABLE(table), certificateFileChooser, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_table_attach (GTK_TABLE(table), certificateFileChooser, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     if (tls_certificate_file == NULL) {
         // gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(caListFileChooser), g_get_home_dir());
 	gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
     } else {
-	DEBUG("**********************************************************%s\n", tls_certificate_file);
 	if(g_strcmp0(tls_certificate_file, "") == 0){
 
 	    gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(certificateFileChooser));
@@ -154,16 +169,15 @@ void show_advanced_tls_options(GHashTable * properties)
          
     label = gtk_label_new(("Private key file"));
  	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     GtkWidget * privateKeyFileChooser;
     privateKeyFileChooser = gtk_file_chooser_button_new(_("Choose a private key file (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
-    gtk_table_attach (GTK_TABLE(table), privateKeyFileChooser, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_table_attach (GTK_TABLE(table), privateKeyFileChooser, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     if (tls_private_key_file == NULL) {
 	gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
-        // gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(privateKeyFileChooser), g_get_home_dir());
     } else {
-	DEBUG("**********************************************************%s\n", tls_private_key_file);
+
 	if(g_strcmp0(tls_private_key_file, "") == 0) {
 
 	    gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(privateKeyFileChooser));
@@ -180,7 +194,7 @@ void show_advanced_tls_options(GHashTable * properties)
   
  	label = gtk_label_new_with_mnemonic (_("Password for the private key"));
  	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);  
+	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);  
  	GtkWidget * privateKeyPasswordEntry;
 #if GTK_CHECK_VERSION(2,16,0)
 	privateKeyPasswordEntry = gtk_entry_new();
@@ -193,7 +207,7 @@ void show_advanced_tls_options(GHashTable * properties)
 	gtk_entry_set_visibility(GTK_ENTRY(privateKeyPasswordEntry), FALSE);
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label), privateKeyPasswordEntry);
 	gtk_entry_set_text(GTK_ENTRY(privateKeyPasswordEntry), tls_password);
-	gtk_table_attach (GTK_TABLE(table), privateKeyPasswordEntry, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);  
+	gtk_table_attach (GTK_TABLE(table), privateKeyPasswordEntry, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);  
    
     /* TLS protocol methods */    
     GtkListStore * tlsProtocolMethodListStore; 
@@ -202,7 +216,7 @@ void show_advanced_tls_options(GHashTable * properties)
     
     tlsProtocolMethodListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
 	label = gtk_label_new_with_mnemonic (_("TLS protocol method"));
-	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
 			
 	gchar** supported_tls_method = NULL;
@@ -223,8 +237,8 @@ void show_advanced_tls_options(GHashTable * properties)
     }
     
     tlsProtocolMethodCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(tlsProtocolMethodListStore));
-	gtk_label_set_mnemonic_widget(GTK_LABEL(label), tlsProtocolMethodCombo);
-	gtk_table_attach(GTK_TABLE(table), tlsProtocolMethodCombo, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label), tlsProtocolMethodCombo);
+    gtk_table_attach(GTK_TABLE(table), tlsProtocolMethodCombo, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     g_object_unref(G_OBJECT(tlsProtocolMethodListStore));	
     
     GtkCellRenderer *tlsProtocolMethodCellRenderer;
@@ -233,31 +247,31 @@ void show_advanced_tls_options(GHashTable * properties)
     gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(tlsProtocolMethodCombo), tlsProtocolMethodCellRenderer, "text", 0, NULL);
     gtk_combo_box_set_active_iter(GTK_COMBO_BOX(tlsProtocolMethodCombo), &supported_tls_method_iter);
 	
-	/* Cipher list */
+    /* Cipher list */
     GtkWidget * cipherListEntry;
-	label = gtk_label_new_with_mnemonic (_("TLS cipher list"));
-	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	cipherListEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget(GTK_LABEL(label), cipherListEntry);
-	gtk_entry_set_text(GTK_ENTRY(cipherListEntry), tls_ciphers);
-	gtk_table_attach (GTK_TABLE(table), cipherListEntry, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new_with_mnemonic (_("TLS cipher list"));
+    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    cipherListEntry = gtk_entry_new();
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label), cipherListEntry);
+    gtk_entry_set_text(GTK_ENTRY(cipherListEntry), tls_ciphers);
+    gtk_table_attach (GTK_TABLE(table), cipherListEntry, 1, 2, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 	
     GtkWidget * serverNameInstance;
-	label = gtk_label_new_with_mnemonic (_("Server name instance for outgoing TLS connection"));
-	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	serverNameInstance = gtk_entry_new();
-	gtk_label_set_mnemonic_widget(GTK_LABEL(label), serverNameInstance);
-	gtk_entry_set_text(GTK_ENTRY(serverNameInstance), tls_server_name);
-	gtk_table_attach (GTK_TABLE(table), serverNameInstance, 1, 2, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new_with_mnemonic (_("Server name instance for outgoing TLS connection"));
+    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    serverNameInstance = gtk_entry_new();
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label), serverNameInstance);
+    gtk_entry_set_text(GTK_ENTRY(serverNameInstance), tls_server_name);
+    gtk_table_attach (GTK_TABLE(table), serverNameInstance, 1, 2, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     label = gtk_label_new(_("Negotiation timeout (sec:msec)"));
- 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    GtkWidget * tlsTimeOutSec;    
-    GtkWidget * hbox = gtk_hbox_new(FALSE, 10);
-    gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    GtkWidget * tlsTimeOutSec; 
+    hbox = gtk_hbox_new(FALSE, 10);
+    gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     tlsTimeOutSec = gtk_spin_button_new_with_range(0, pow(2,sizeof(long)), 1);
     gtk_label_set_mnemonic_widget(GTK_LABEL (label), tlsTimeOutSec);
     gtk_spin_button_set_value(GTK_SPIN_BUTTON(tlsTimeOutSec), g_ascii_strtod(negotiation_timeout_sec, NULL));
@@ -269,70 +283,74 @@ void show_advanced_tls_options(GHashTable * properties)
     gtk_box_pack_start_defaults(GTK_BOX(hbox), tlsTimeOutMSec);   
     
     GtkWidget * verifyCertificateServer;
-	verifyCertificateServer = gtk_check_button_new_with_mnemonic(_("Verify incoming certificates, as a server"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(verifyCertificateServer),
-			g_strcasecmp(verify_server,"true") == 0 ? TRUE: FALSE);
-	gtk_table_attach (GTK_TABLE(table), verifyCertificateServer, 0, 1, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    verifyCertificateServer = gtk_check_button_new_with_mnemonic(_("Verify incoming certificates, as a server"));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(verifyCertificateServer),
+				 g_strcasecmp(verify_server,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE(table), verifyCertificateServer, 0, 1, 11, 12, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     GtkWidget * verifyCertificateClient;
-	verifyCertificateClient = gtk_check_button_new_with_mnemonic(_("Verify certificates from answer, as a client"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(verifyCertificateClient),
-			g_strcasecmp(verify_client,"true") == 0 ? TRUE: FALSE);
-	gtk_table_attach (GTK_TABLE(table), verifyCertificateClient, 0, 1, 11, 12, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    verifyCertificateClient = gtk_check_button_new_with_mnemonic(_("Verify certificates from answer, as a client"));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(verifyCertificateClient),
+				 g_strcasecmp(verify_client,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE(table), verifyCertificateClient, 0, 1, 12, 13, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     GtkWidget * requireCertificate;
-	requireCertificate = gtk_check_button_new_with_mnemonic(_("Require certificate for incoming tls connections"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(requireCertificate),
-		g_strcasecmp(require_client_certificate,"true") == 0 ? TRUE: FALSE);
-	gtk_table_attach (GTK_TABLE(table), requireCertificate, 0, 1, 12, 13, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    requireCertificate = gtk_check_button_new_with_mnemonic(_("Require certificate for incoming tls connections"));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(requireCertificate),
+				 g_strcasecmp(require_client_certificate,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE(table), requireCertificate, 0, 1, 13, 14, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
   
     gtk_widget_show_all(ret);
           
-    if(gtk_dialog_run(GTK_DIALOG(tlsDialog)) == GTK_RESPONSE_ACCEPT) {				    
+    if(gtk_dialog_run(GTK_DIALOG(tlsDialog)) == GTK_RESPONSE_ACCEPT) {
+				
         g_hash_table_replace(properties,
-				g_strdup(TLS_CA_LIST_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(caListFileChooser))));
+			     g_strdup(TLS_LISTENER_PORT),
+			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsListenerPort))));		
+        g_hash_table_replace(properties,
+			     g_strdup(TLS_CA_LIST_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(caListFileChooser))));
        
         g_hash_table_replace(properties,
-				g_strdup(TLS_CERTIFICATE_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(certificateFileChooser))));
-		
+			     g_strdup(TLS_CERTIFICATE_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(certificateFileChooser))));
+	
         g_hash_table_replace(properties,
-				g_strdup(TLS_PRIVATE_KEY_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(privateKeyFileChooser))));
+			     g_strdup(TLS_PRIVATE_KEY_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(privateKeyFileChooser))));
 				
-		g_hash_table_replace(properties,
-				g_strdup(TLS_PASSWORD),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(privateKeyPasswordEntry))));  				
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_PASSWORD),
+			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(privateKeyPasswordEntry))));  				
 												
-		g_hash_table_replace(properties,
-				g_strdup(TLS_METHOD),
-                g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(tlsProtocolMethodCombo))));
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_METHOD),
+			     g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(tlsProtocolMethodCombo))));
 				
-		g_hash_table_replace(properties,
-				g_strdup(TLS_CIPHERS),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(cipherListEntry))));  
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_CIPHERS),
+			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(cipherListEntry))));  
 				
-		g_hash_table_replace(properties,
-				g_strdup(TLS_SERVER_NAME),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(serverNameInstance))));					  				   
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_SERVER_NAME),
+			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(serverNameInstance))));					  				   
 
-		g_hash_table_replace(properties,
-				g_strdup(TLS_VERIFY_SERVER),
-				g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(verifyCertificateServer)) ? "true": "false"));
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_VERIFY_SERVER),
+			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(verifyCertificateServer)) ? "true": "false"));
 
-		g_hash_table_replace(properties,
-				g_strdup(TLS_VERIFY_CLIENT),
-				g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(verifyCertificateClient)) ? "true": "false"));	
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_VERIFY_CLIENT),
+			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(verifyCertificateClient)) ? "true": "false"));	
 				
-		g_hash_table_replace(properties,
-				g_strdup(TLS_REQUIRE_CLIENT_CERTIFICATE),
-				g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(requireCertificate)) ? "true": "false"));	
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_REQUIRE_CLIENT_CERTIFICATE),
+			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(requireCertificate)) ? "true": "false"));	
 				
-		g_hash_table_replace(properties,
-				g_strdup(TLS_NEGOTIATION_TIMEOUT_SEC),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsTimeOutSec))));		
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_NEGOTIATION_TIMEOUT_SEC),
+			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsTimeOutSec))));		
 
-		g_hash_table_replace(properties,
-				g_strdup(TLS_NEGOTIATION_TIMEOUT_MSEC),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsTimeOutMSec))));																				
+	g_hash_table_replace(properties,
+			     g_strdup(TLS_NEGOTIATION_TIMEOUT_MSEC),
+			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsTimeOutMSec))));																				
     }    
     
     gtk_widget_destroy (GTK_WIDGET(tlsDialog));
diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h
index 52e786ade3..2627179489 100644
--- a/sflphone-client-gnome/src/sflphone_const.h
+++ b/sflphone-client-gnome/src/sflphone_const.h
@@ -50,6 +50,9 @@
 
 #define UNUSED  __attribute__((__unused__))
 
+#define IP2IP_PROFILE                      "IP2IP"
+
+#define ACCOUNT_ID                         "Account.id"
 #define ACCOUNT_TYPE                       "Account.type"
 #define ACCOUNT_ALIAS		           "Account.alias"
 #define ACCOUNT_ENABLED		           "Account.enable"
@@ -73,6 +76,7 @@
 #define ZRTP                               "1"
 #define SDES                               "2"
 
+#define TLS_LISTENER_PORT                   "TLS.listenerPort"
 #define TLS_ENABLE                          "TLS.enable"
 #define TLS_PORT                            "TLS.port"
 #define TLS_CA_LIST_FILE                    "TLS.certificateListFile"
diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index 2edddfe9bf..e1a9705b2f 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -54,6 +54,9 @@ typedef enum RegistrationState {
 
 #define AccountNULL ""
 
+// Account identifier                       
+#define ACCOUNT_ID                          "Account.id"
+
 // Common account parameters
 #define CONFIG_ACCOUNT_TYPE                 "Account.type"  
 #define CONFIG_ACCOUNT_ALIAS                "Account.alias"
@@ -93,6 +96,7 @@ typedef enum RegistrationState {
 #define ZRTP_NOT_SUPP_WARNING               "ZRTP.notSuppWarning"
 #define ZRTP_DISPLAY_SAS_ONCE               "ZRTP.displaySasOnce"
 
+#define TLS_LISTENER_PORT                   "TLS.listenerPort"
 #define TLS_ENABLE                          "TLS.enable"
 #define TLS_CA_LIST_FILE                    "TLS.certificateListFile"
 #define TLS_CERTIFICATE_FILE                "TLS.certificateFile"
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 82f7b6dda2..ee8948ac8c 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -48,6 +48,7 @@ ConfigurationManager::getTlsSettingsDefault (void)
     _debug ("ConfigurationManager::getTlsDefaultSettings");
 
     std::map<std::string, std::string> tlsSettingsDefault;
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (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> (TLS_CERTIFICATE_FILE, ""));
     tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_PRIVATE_KEY_FILE, ""));
@@ -70,6 +71,7 @@ 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> (ZRTP_DISPLAY_SAS, Manager::instance().getConfigString (IP2IP_PROFILE, ZRTP_DISPLAY_SAS)));
@@ -155,6 +157,9 @@ std::map< std::string, std::string >
 ConfigurationManager::getTlsSettings (const std::string& section)
 {
     std::map<std::string, std::string> tlsSettings;
+
+    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>
@@ -190,6 +195,11 @@ ConfigurationManager::setTlsSettings (const std::string& section, const std::map
     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);
+    }
+
     it = map_cpy.find (TLS_ENABLE);
 
     if (it != details.end()) {
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 83b06802e1..321d9124d8 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2253,6 +2253,7 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
     _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);
@@ -3482,6 +3483,7 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
         _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));
     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)));
@@ -3529,6 +3531,9 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
     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)));
@@ -3743,6 +3748,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
     std::string zrtpHelloHash;
     std::string srtpKeyExchange;
 
+    std::string tlsListenerPort;
     std::string tlsEnable;
     std::string tlsCaListFile;
     std::string tlsCertificateFile;
@@ -3841,6 +3847,11 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
         registrationExpire = iter->second;
     }
 
+    // The TLS listener is unique and globally defined through IP2IP_PROFILE
+    if((accountID == IP2IP_PROFILE) && (iter = map_cpy.find (TLS_LISTENER_PORT)) != map_cpy.end()) {
+        tlsListenerPort = iter->second;
+    }
+
     if ( (iter = map_cpy.find (TLS_ENABLE)) != map_cpy.end()) {
         tlsEnable = iter->second;
     }
@@ -3911,6 +3922,10 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
     setConfig (accountID, STUN_ENABLE, stunEnable);
     setConfig (accountID, STUN_SERVER, stunServer);
 
+    // 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);
@@ -3941,7 +3956,6 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
         acc->loadConfig();
 
         if (acc->isEnabled()) {
-            // acc->unregisterVoIPLink(); // do not need to send an unregister
             acc->registerVoIPLink();
         } else {
             acc->unregisterVoIPLink();
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index 2364f87e07..4541d675c9 100644
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -33,7 +33,7 @@ SIPAccount::SIPAccount (const AccountID& accountID)
         , _publishedIpAddress ("")
         , _localPort (atoi (DEFAULT_SIP_PORT))
         , _publishedPort (atoi (DEFAULT_SIP_PORT))
-	, _localTlsPort (atoi (DEFAULT_SIP_TLS_PORT))
+	, _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT))
         , _transportType (PJSIP_TRANSPORT_UNSPECIFIED)
         , _transport (NULL)
         , _resolveOnce (false)
@@ -262,6 +262,10 @@ void SIPAccount::initTlsConfiguration (void)
         _tlsSetting = NULL;
     }
 
+    // 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()));
+    
     _tlsSetting = (pjsip_tls_setting *) malloc (sizeof (pjsip_tls_setting));
 
     assert (_tlsSetting);
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index 7e1300041a..7e2e3386d8 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -253,13 +253,13 @@ class SIPAccount : public Account
          * Get the local port for TLS listener.
          * @return pj_uint16 The port used for that account
          */   
-        inline pj_uint16_t getLocalTlsPort(void) { return (pj_uint16_t) _localTlsPort; }
+        inline pj_uint16_t getTlsListenerPort(void) { return (pj_uint16_t) _tlsListenerPort; }
         
         /** 
          * Set the local port for TLS listener.
          * @pram port The port used for TLS listener.
          */
-        inline void setLocalTlsPort(pj_uint16_t port) { _localTlsPort = port; }
+        inline void setTlsListenerPort(pj_uint16_t port) { _tlsListenerPort = port; }
                 
         /**
          * Get the public IP address set by the user for this account.
@@ -349,7 +349,11 @@ class SIPAccount : public Account
         
         pj_uint16_t _localPort;
         pj_uint16_t _publishedPort;
-	pj_uint16_t _localTlsPort;
+
+	/**
+	 * The global TLS listener port which can be configured through the IP2IP_PROFILE 
+	 */ 
+	pj_uint16_t _tlsListenerPort;
         
         pjsip_transport_type_e _transportType;
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 5043852803..92f91a7362 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2138,7 +2138,7 @@ void SIPVoIPLink::createDefaultSipTlsListener()
 
     // Init local address for this listener to be bound (ADDR_ANY on port 5061).
     pj_sockaddr_in_init (&local_addr, 0, 0);
-    pj_uint16_t localTlsPort = account->getLocalTlsPort();
+    pj_uint16_t localTlsPort = account->getTlsListenerPort();
     local_addr.sin_port = pj_htons (localTlsPort);
      
     pj_str_t pjAddress;
@@ -2152,7 +2152,7 @@ void SIPVoIPLink::createDefaultSipTlsListener()
 
     pj_bzero (&a_name, sizeof (pjsip_host_port));
     pj_cstr (&a_name.host, publishedAddress.c_str());
-    a_name.port = account->getLocalTlsPort();
+    a_name.port = account->getTlsListenerPort();
 
     /* Get TLS settings. Expected to be filled */
     pjsip_tls_setting * tls_setting = account->getTlsSetting();
@@ -2654,7 +2654,6 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     }
 
     _debug ("Firewall address : %s:%d",
-
             pj_inet_ntoa (pub_addr.sin_addr),
             pj_ntohs (pub_addr.sin_port));
 
@@ -2738,22 +2737,6 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
 }
 
 
-void SIPVoIPLink::updateAccountInfo (const AccountID& accountID)
-{
-
-    // createSipTransport (accountID);
-    acquireTransport(accountID);
-
-    if(accountID == IP2IP_PROFILE) {
-
-        SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
-	// Store new IP2IP UDP transport as default 
-        _localUDPTransport = account->getAccountTransport();
-    }
-
-}
-
-
 bool SIPVoIPLink::loadSIPLocalIP (std::string *addr)
 {
 
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 8835c3f11d..f7a561adce 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -332,10 +332,6 @@ class SIPVoIPLink : public VoIPLink
 	 */
         bool loadSIPLocalIP (std::string *addr);
 
-	/**
-	 * This method is used to create a new transport and attach it to the appropriate account
-	 */
-	void updateAccountInfo(const AccountID& accountID);
 
 	/**
 	 * This function unset the transport for a given account. It tests wether the 
-- 
GitLab


From 06c1e7899b78bfba201a3c5b876b31e52ece01c6 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emilou@invictus.(none)>
Date: Wed, 3 Feb 2010 15:23:13 -0500
Subject: [PATCH 026/160] [#2518] Handle properly the IP profile in the account
 list

---
 .../src/config/accountconfigdialog.c          | 1514 +++++++++--------
 .../src/config/accountconfigdialog.h          |    8 +-
 .../src/config/accountlistconfigdialog.c      |  837 ++++-----
 .../src/config/accountlistconfigdialog.h      |    8 +
 .../src/config/preferencesdialog.c            |  599 +++----
 sflphone-client-gnome/src/sflphone_const.h    |    2 +-
 sflphone-common/src/managerimpl.cpp           |   11 +-
 7 files changed, 1510 insertions(+), 1469 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index badb1556a6..29b37a0446 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -61,7 +61,7 @@ GtkWidget * expireSpinBox;
 GtkListStore * credentialStore;
 GtkWidget * deleteCredButton;
 GtkWidget * treeViewCredential;
-GtkWidget * scrolledWindowCredential;
+// GtkWidget * scrolledWindowCredential;
 GtkWidget * advancedZrtpButton;
 GtkWidget * keyExchangeCombo;
 GtkWidget * useSipTlsCheckBox;
@@ -86,14 +86,16 @@ GtkWidget * displayNameEntry;
 
 GtkWidget * security_tab;
 GtkWidget * advanced_tab;
-            	
+
+GHashTable * directIpCallsProperties = NULL;
+
 // Credentials
 enum {
-    COLUMN_CREDENTIAL_REALM,
-    COLUMN_CREDENTIAL_USERNAME,
-    COLUMN_CREDENTIAL_PASSWORD,
-    COLUMN_CREDENTIAL_DATA,
-    COLUMN_CREDENTIAL_COUNT
+	COLUMN_CREDENTIAL_REALM,
+	COLUMN_CREDENTIAL_USERNAME,
+	COLUMN_CREDENTIAL_PASSWORD,
+	COLUMN_CREDENTIAL_DATA,
+	COLUMN_CREDENTIAL_COUNT
 };
 
 /*
@@ -109,13 +111,13 @@ static void show_password_cb (GtkWidget *widget, gpointer data)
 change_protocol_cb (account_t * currentAccount UNUSED)
 {
 	gchar * protocol = gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
-	
+
 	if (g_strcasecmp(protocol, "IAX") == 0) {
-	    gtk_widget_hide(security_tab);
-	    gtk_widget_hide(advanced_tab);
+		gtk_widget_hide(security_tab);
+		gtk_widget_hide(advanced_tab);
 	} else {
-	    gtk_widget_show(security_tab);
-	    gtk_widget_show(advanced_tab);
+		gtk_widget_show(security_tab);
+		gtk_widget_show(advanced_tab);
 	}
 }
 
@@ -129,13 +131,68 @@ is_iax_enabled(void)
 		return FALSE;
 }
 
+
+static GPtrArray* getNewCredential (GHashTable * properties) {
+
+	GtkTreeIter iter;
+	gboolean valid;
+	gint row_count = 0;
+
+	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(credentialStore), &iter);
+
+	GPtrArray *credential_array = g_ptr_array_new ();
+
+	gchar *username;
+	gchar *realm;
+	gchar *password;
+	GHashTable * new_table;   
+
+	gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter,
+			COLUMN_CREDENTIAL_REALM, &realm,
+			COLUMN_CREDENTIAL_USERNAME, &username,
+			COLUMN_CREDENTIAL_PASSWORD, &password,
+			-1);
+
+	g_hash_table_insert(properties, g_strdup(ACCOUNT_REALM), realm);
+	g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), 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) {        
+		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);
+
+		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);
+
+		g_ptr_array_add (credential_array, new_table);
+
+		row_count ++;
+
+		valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter);
+	}
+
+	return credential_array;
+}
+
 static void update_credential_cb(GtkWidget *widget, gpointer data UNUSED)
 {
-    GtkTreeIter iter;
-    gtk_tree_model_get_iter_from_string ((GtkTreeModel *) credentialStore, &iter, "0");
-    gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "column"));
-    // g_print ("set password to %s\n", (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)));
-    gtk_list_store_set (GTK_LIST_STORE (credentialStore), &iter, column, (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)), -1);
+	GtkTreeIter iter;
+	gtk_tree_model_get_iter_from_string ((GtkTreeModel *) credentialStore, &iter, "0");
+	gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "column"));
+	// g_print ("set password to %s\n", (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)));
+	gtk_list_store_set (GTK_LIST_STORE (credentialStore), &iter, column, (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)), -1);
 }
 
 static GtkWidget * create_basic_tab(account_t **a) 
@@ -175,7 +232,7 @@ static GtkWidget * create_basic_tab(account_t **a)
 		curUsername = g_hash_table_lookup(currentAccount->properties, ACCOUNT_USERNAME);
 		curMailbox = g_hash_table_lookup(currentAccount->properties, ACCOUNT_MAILBOX);
 	}
-	
+
 
 	gnome_main_section_new (_("Account Parameters"), &frame);
 	gtk_widget_show(frame);
@@ -244,16 +301,16 @@ static GtkWidget * create_basic_tab(account_t **a)
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUsername);
 	gtk_entry_set_text(GTK_ENTRY(entryUsername), curUsername);
 	gtk_table_attach ( GTK_TABLE( table ), entryUsername, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    g_signal_connect(G_OBJECT (entryUsername), "changed", G_CALLBACK (update_credential_cb), NULL);
-    g_object_set_data (G_OBJECT (entryUsername), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
+	g_signal_connect(G_OBJECT (entryUsername), "changed", G_CALLBACK (update_credential_cb), NULL);
+	g_object_set_data (G_OBJECT (entryUsername), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
 
 	label = gtk_label_new_with_mnemonic (_("_Password"));
 	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
 	entryPassword = gtk_entry_new();
-    GtkSettings *settings = gtk_settings_get_default ();
-    //g_object_set (G_OBJECT (settings), "gtk-entry-password-hint-timeout", 600, NULL);
+	GtkSettings *settings = gtk_settings_get_default ();
+	//g_object_set (G_OBJECT (settings), "gtk-entry-password-hint-timeout", 600, NULL);
 	gtk_entry_set_icon_from_stock (GTK_ENTRY (entryPassword), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
 #else
 	entryPassword = sexy_icon_entry_new();
@@ -264,12 +321,12 @@ static GtkWidget * create_basic_tab(account_t **a)
 	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPassword);
 	gtk_entry_set_text(GTK_ENTRY(entryPassword), curPassword);
 	gtk_table_attach ( GTK_TABLE( table ), entryPassword, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    g_signal_connect (G_OBJECT (entryPassword), "changed", G_CALLBACK (update_credential_cb), NULL);
-    g_object_set_data (G_OBJECT (entryPassword), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
-	
+	g_signal_connect (G_OBJECT (entryPassword), "changed", G_CALLBACK (update_credential_cb), NULL);
+	g_object_set_data (G_OBJECT (entryPassword), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
+
 	clearTextCheckbox = gtk_check_button_new_with_mnemonic (_("Show password"));
-    g_signal_connect (clearTextCheckbox, "toggled", G_CALLBACK (show_password_cb), entryPassword);
-    gtk_table_attach (GTK_TABLE (table), clearTextCheckbox, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+	g_signal_connect (clearTextCheckbox, "toggled", G_CALLBACK (show_password_cb), entryPassword);
+	gtk_table_attach (GTK_TABLE (table), clearTextCheckbox, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
 	label = gtk_label_new_with_mnemonic (_("_Voicemail number"));
 	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
@@ -288,129 +345,128 @@ static GtkWidget * create_basic_tab(account_t **a)
 
 static void fill_treeview_with_credential (GtkListStore * credentialStore, account_t * account) 
 {
-        GtkTreeIter iter;
-        gtk_list_store_clear(credentialStore);
-        gtk_list_store_append (credentialStore, &iter);
-
-        /* This is the default, undeletable credential */
-        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)) {
-            realm = g_strdup("*");
-        }
-        
-        if((authentication_name == NULL) || (g_strcmp0(authentication_name, "") == 0)) {
-            gtk_list_store_set(credentialStore, &iter,
-                    COLUMN_CREDENTIAL_REALM, realm, 
-                    COLUMN_CREDENTIAL_USERNAME, gtk_entry_get_text(GTK_ENTRY(entryUsername)),
-                    COLUMN_CREDENTIAL_PASSWORD, gtk_entry_get_text(GTK_ENTRY(entryPassword)),    
-                    COLUMN_CREDENTIAL_DATA, account, 
-                    -1);
-        } else {
-            gtk_list_store_set(credentialStore, &iter,
-                    COLUMN_CREDENTIAL_REALM, g_hash_table_lookup(account->properties, ACCOUNT_REALM), 
-                    COLUMN_CREDENTIAL_USERNAME, g_hash_table_lookup(account->properties, ACCOUNT_AUTHENTICATION_USERNAME),
-                    // COLUMN_CREDENTIAL_PASSWORD, gtk_entry_get_text(GTK_ENTRY(entryPassword)),    
-                    COLUMN_CREDENTIAL_PASSWORD, PW_HIDDEN,    
-                    COLUMN_CREDENTIAL_DATA, account, 
-                    -1);
-            g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL);
-        }
-        
-        if(account->credential_information == NULL) {
-            DEBUG("No credential defined");
-            return;
-        }
-        
-        unsigned int i;
-        for(i = 0; i < account->credential_information->len; i++)
-        {	                    
-            GHashTable * element = g_ptr_array_index(account->credential_information, i);               
-            gtk_list_store_append (credentialStore, &iter);
-            gtk_list_store_set(credentialStore, &iter,
-                    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);
-        }
+	GtkTreeIter iter;
+	gtk_list_store_clear(credentialStore);
+	gtk_list_store_append (credentialStore, &iter);
+
+	/* This is the default, undeletable credential */
+	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)) {
+		realm = g_strdup("*");
+	}
+
+	if((authentication_name == NULL) || (g_strcmp0(authentication_name, "") == 0)) {
+		gtk_list_store_set(credentialStore, &iter,
+				COLUMN_CREDENTIAL_REALM, realm, 
+				COLUMN_CREDENTIAL_USERNAME, gtk_entry_get_text(GTK_ENTRY(entryUsername)),
+				COLUMN_CREDENTIAL_PASSWORD, gtk_entry_get_text(GTK_ENTRY(entryPassword)),    
+				COLUMN_CREDENTIAL_DATA, account, 
+				-1);
+	} else {
+		gtk_list_store_set(credentialStore, &iter,
+				COLUMN_CREDENTIAL_REALM, g_hash_table_lookup(account->properties, ACCOUNT_REALM), 
+				COLUMN_CREDENTIAL_USERNAME, g_hash_table_lookup(account->properties, ACCOUNT_AUTHENTICATION_USERNAME),
+				// COLUMN_CREDENTIAL_PASSWORD, gtk_entry_get_text(GTK_ENTRY(entryPassword)),    
+				COLUMN_CREDENTIAL_PASSWORD, PW_HIDDEN,    
+				COLUMN_CREDENTIAL_DATA, account, 
+				-1);
+		g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL);
+	}
+
+	if(account->credential_information == NULL) {
+		DEBUG("No credential defined");
+		return;
+	}
+
+	unsigned int i;
+	for(i = 0; i < account->credential_information->len; i++)
+	{	                    
+		GHashTable * element = g_ptr_array_index(account->credential_information, i);               
+		gtk_list_store_append (credentialStore, &iter);
+		gtk_list_store_set(credentialStore, &iter,
+				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);
+	}
 }
 
 static select_credential_cb(GtkTreeSelection *selection, GtkTreeModel *model)
 {
-    GtkTreeIter iter;
-    GtkTreePath *path;
-    if(gtk_tree_selection_get_selected (selection, NULL, &iter)) {
-        path = gtk_tree_model_get_path (model, &iter);
-        if(gtk_tree_path_get_indices (path)[0] == 0) {
-            gtk_widget_set_sensitive(GTK_WIDGET(deleteCredButton), FALSE);
-        } else {
-            gtk_widget_set_sensitive(GTK_WIDGET(deleteCredButton), TRUE);
-        }
-    }
+	GtkTreeIter iter;
+	GtkTreePath *path;
+	if(gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+		path = gtk_tree_model_get_path (model, &iter);
+		if(gtk_tree_path_get_indices (path)[0] == 0) {
+			gtk_widget_set_sensitive(GTK_WIDGET(deleteCredButton), FALSE);
+		} else {
+			gtk_widget_set_sensitive(GTK_WIDGET(deleteCredButton), TRUE);
+		}
+	}
 }
 
 static void add_credential_cb (GtkWidget *button, gpointer data)
 {
-    GtkTreeIter iter;
-    GtkTreeModel *model = (GtkTreeModel *)data;
-           
-    gtk_list_store_append (GTK_LIST_STORE (model), &iter);
-    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-                        COLUMN_CREDENTIAL_REALM, "*",
-                        COLUMN_CREDENTIAL_USERNAME, _("Authentication"),
-                        COLUMN_CREDENTIAL_PASSWORD, _("Secret"),
-                        -1);
+	GtkTreeIter iter;
+	GtkTreeModel *model = (GtkTreeModel *)data;
+
+	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+			COLUMN_CREDENTIAL_REALM, "*",
+			COLUMN_CREDENTIAL_USERNAME, _("Authentication"),
+			COLUMN_CREDENTIAL_PASSWORD, _("Secret"),
+			-1);
 }
 
 static void delete_credential_cb(GtkWidget *button, gpointer data)
 {
-    GtkTreeIter iter;
-    GtkTreeView *treeview = (GtkTreeView *)data;
-    GtkTreeModel *model = gtk_tree_view_get_model (treeview);
-    GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview);
-          
-    if (gtk_tree_selection_get_selected (selection, NULL, &iter))
-    {
-        GtkTreePath *path;
-        path = gtk_tree_model_get_path (model, &iter);
-        gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-        
-        gtk_tree_path_free (path);
-    }
+	GtkTreeIter iter;
+	GtkTreeView *treeview = (GtkTreeView *)data;
+	GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+	GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview);
+
+	if (gtk_tree_selection_get_selected (selection, NULL, &iter))
+	{
+		GtkTreePath *path;
+		path = gtk_tree_model_get_path (model, &iter);
+		gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+
+		gtk_tree_path_free (path);
+	}
 
 }
 
 static void cell_edited_cb(GtkCellRendererText *renderer, gchar *path_desc, gchar *text, gpointer data)
 {
-    GtkTreeModel *model = (GtkTreeModel *)data;
-    GtkTreePath *path = gtk_tree_path_new_from_string (path_desc);
-    GtkTreeIter iter;
-     
+	GtkTreeModel *model = (GtkTreeModel *)data;
+	GtkTreePath *path = gtk_tree_path_new_from_string (path_desc);
+	GtkTreeIter iter;
 
-    gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (renderer), "column"));
+	gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (renderer), "column"));
 	DEBUG("path desc in cell_edited_cb: %s\n", text);
-    
-    if(g_strcasecmp(path_desc, "0") == 0) {
-        if(g_strcasecmp(text, gtk_entry_get_text (GTK_ENTRY(entryUsername))) != 0) {
-            g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL);
-        }
 
-		if (column == COLUMN_CREDENTIAL_PASSWORD) { // && g_strcasecmp (text, gtk_entry_get_text (GTK_ENTRY (entryPassword))) == 0) {
+	if(g_strcasecmp(path_desc, "0") == 0) {
+		if(g_strcasecmp(text, gtk_entry_get_text (GTK_ENTRY(entryUsername))) != 0) {
+			g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL);
+		}
+
+		if (column == COLUMN_CREDENTIAL_PASSWORD) { 
 			gtk_entry_set_text (GTK_ENTRY (entryPassword), text);
 			text = PW_HIDDEN;	
 		}
-    }  
-    
-    gtk_tree_model_get_iter (model, &iter, path);
-    gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, text, -1);
-    gtk_tree_path_free (path);
+	}  
+
+	gtk_tree_model_get_iter (model, &iter, path);
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, text, -1);
+	gtk_tree_path_free (path);
 
 }
 
-static void editing_started_cb (GtkCellRenderer *cell, GtkCellEditable * editable, const gchar * path, gpointer data)
-{
-    DEBUG("Editing started");
+static void editing_started_cb (GtkCellRenderer *cell, GtkCellEditable * editable, const gchar * path, gpointer data) {
+
+	DEBUG("Editing started");
 	DEBUG("path desc in editing_started_cb: %s\n", path);
 
 	// If we are dealing the first row
@@ -422,420 +478,381 @@ static void editing_started_cb (GtkCellRenderer *cell, GtkCellEditable * editabl
 
 static void show_advanced_zrtp_options_cb(GtkWidget *widget UNUSED, gpointer data)
 {
-    DEBUG("Advanced options for ZRTP");
-    show_advanced_zrtp_options((GHashTable *) data);
+	DEBUG("Advanced options for ZRTP");
+	show_advanced_zrtp_options((GHashTable *) data);
 }
 
 static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data)
 {
-    DEBUG("Advanced options for TLS");
-    show_advanced_tls_options((GHashTable *) data);
+	DEBUG("Advanced options for TLS");
+	show_advanced_tls_options((GHashTable *) data);
 }
 
 static void key_exchange_changed_cb(GtkWidget *widget, gpointer data)
 {
-    DEBUG("Key exchange changed");
-    if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP") == 0) {
-        gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), TRUE);
-    } else {
-        gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-        
-    }
+	DEBUG("Key exchange changed");
+	if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP") == 0) {
+		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), TRUE);
+	} else {
+		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
+
+	}
 }
 
+
 static void use_sip_tls_cb(GtkWidget *widget, gpointer data)
 {
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-        DEBUG("Using sips");
-    	gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
-	// Uncheck stun
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useStunCheckBox), FALSE);
-	gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), FALSE);
-	gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
-	gtk_widget_hide(stunServerLabel);
-	gtk_widget_hide(stunServerEntry);
-
-	
-
-	if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
-	    gtk_widget_show(publishedAddressEntry);
-            gtk_widget_show(publishedPortSpinBox);
-	    gtk_widget_show(publishedAddressLabel);
-            gtk_widget_show(publishedPortLabel);
-	}
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+		DEBUG("Using sips");
+		gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
+		// Uncheck stun
+		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useStunCheckBox), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
+		gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
+		gtk_widget_hide(stunServerLabel);
+		gtk_widget_hide(stunServerEntry);
+
+
+
+		if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
+			gtk_widget_show(publishedAddressEntry);
+			gtk_widget_show(publishedPortSpinBox);
+			gtk_widget_show(publishedAddressLabel);
+			gtk_widget_show(publishedPortLabel);
+		}
 
-    } else {
-        gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-	gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), TRUE);
-
-	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox))) {
-	    gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), FALSE);
-	    gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), FALSE);
-	    gtk_widget_show(stunServerLabel);
-	    gtk_widget_show(stunServerEntry);
-	    gtk_widget_hide(publishedAddressEntry);
-            gtk_widget_hide(publishedPortSpinBox);
-	    gtk_widget_hide(publishedAddressLabel);
-            gtk_widget_hide(publishedPortLabel);
-	}
-	else {
-            gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
-	    gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
-	    gtk_widget_hide(stunServerLabel);
-            gtk_widget_hide(stunServerEntry);
-	}
-	
-    }   
+	} else {
+		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), TRUE);
+
+		if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox))) {
+			gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), FALSE);
+			gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), FALSE);
+			gtk_widget_show(stunServerLabel);
+			gtk_widget_show(stunServerEntry);
+			gtk_widget_hide(publishedAddressEntry);
+			gtk_widget_hide(publishedPortSpinBox);
+			gtk_widget_hide(publishedAddressLabel);
+			gtk_widget_hide(publishedPortLabel);
+		}
+		else {
+			gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
+			gtk_widget_hide(stunServerLabel);
+			gtk_widget_hide(stunServerEntry);
+		}
+
+	}   
 }
 
-static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED)
-{
+static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED) {
 
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
 
-        gchar * local_interface;
-	gchar * local_address;
+		gchar *local_interface;
+		gchar *local_address;
 
-	local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
-	local_address = dbus_get_address_from_interface_name(local_interface);
+		local_interface = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
+		local_address = dbus_get_address_from_interface_name (local_interface);
 
-	gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
-	    
-        // gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
-        // gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
-    }
+		gtk_entry_set_text (GTK_ENTRY(publishedAddressEntry), local_address);
+
+		// gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
+		// gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
+	}
 
 }
 
 static set_published_addr_manually_cb(GtkWidget * widget, gpointer data UNUSED)
 {
-    DEBUG("set_published_addr_manually_cb");
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-        DEBUG("Showing manual options");    
-    	gtk_widget_show(publishedPortLabel);            
-    	gtk_widget_show(publishedPortSpinBox);
-    	gtk_widget_show(publishedAddressLabel);                	
-    	gtk_widget_show(publishedAddressEntry);
-    } else {
-        DEBUG("Hiding manual options");   
-    	gtk_widget_hide(publishedPortLabel);            
-    	gtk_widget_hide(publishedPortSpinBox);
-    	gtk_widget_hide(publishedAddressLabel);                	
-    	gtk_widget_hide(publishedAddressEntry);
-    }
+	DEBUG("set_published_addr_manually_cb");
+
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+		DEBUG("Showing manual options");    
+		gtk_widget_show(publishedPortLabel);            
+		gtk_widget_show(publishedPortSpinBox);
+		gtk_widget_show(publishedAddressLabel);                	
+		gtk_widget_show(publishedAddressEntry);
+	} else {
+		DEBUG("Hiding manual options");   
+		gtk_widget_hide(publishedPortLabel);            
+		gtk_widget_hide(publishedPortSpinBox);
+		gtk_widget_hide(publishedAddressLabel);                	
+		gtk_widget_hide(publishedAddressEntry);
+	}
 }
 
 static use_stun_cb(GtkWidget * widget, gpointer data UNUSED)
 {
-    gchar * local_interface;
-    gchar * local_address;
-
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-        DEBUG("Showing stun options, hiding Local/Published info");
-        gtk_widget_show(stunServerLabel);
-        gtk_widget_show(stunServerEntry);
-	gtk_widget_set_sensitive(sameAsLocalRadioButton, FALSE);
-	gtk_widget_set_sensitive(publishedAddrRadioButton, FALSE);
-	DEBUG("Problem occurs here");
-	gtk_widget_hide(publishedAddressLabel);
-        gtk_widget_hide(publishedPortLabel);
-	gtk_widget_hide(publishedAddressEntry);
-        gtk_widget_hide(publishedPortSpinBox);
-    } else {
-        gtk_widget_hide(stunServerLabel);
-        gtk_widget_hide(stunServerEntry);
-	gtk_widget_set_sensitive(sameAsLocalRadioButton, TRUE);
-	gtk_widget_set_sensitive(publishedAddrRadioButton, TRUE);
-	if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
-	    gtk_widget_show(publishedAddressLabel);
-	    gtk_widget_show(publishedPortLabel);
-	    gtk_widget_show(publishedAddressEntry);
-	    gtk_widget_show(publishedPortSpinBox);
-
-	    // Since stun callback is called at initialization, we cannot reinit published address
-	    // TODO: find a way so that if stun is unchecked, reinit published address entry 
-	    //       in case local address changedd
-
-	    // local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
-	    // local_address = dbus_get_address_from_interface_name(local_interface);
-	    // gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
+	gchar * local_interface;
+	gchar * local_address;
+
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+		DEBUG("Showing stun options, hiding Local/Published info");
+		gtk_widget_show(stunServerLabel);
+		gtk_widget_show(stunServerEntry);
+		gtk_widget_set_sensitive(sameAsLocalRadioButton, FALSE);
+		gtk_widget_set_sensitive(publishedAddrRadioButton, FALSE);
+		DEBUG("Problem occurs here");
+		gtk_widget_hide(publishedAddressLabel);
+		gtk_widget_hide(publishedPortLabel);
+		gtk_widget_hide(publishedAddressEntry);
+		gtk_widget_hide(publishedPortSpinBox);
+	} else {
+		gtk_widget_hide(stunServerLabel);
+		gtk_widget_hide(stunServerEntry);
+		gtk_widget_set_sensitive(sameAsLocalRadioButton, TRUE);
+		gtk_widget_set_sensitive(publishedAddrRadioButton, TRUE);
+		if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
+			gtk_widget_show(publishedAddressLabel);
+			gtk_widget_show(publishedPortLabel);
+			gtk_widget_show(publishedAddressEntry);
+			gtk_widget_show(publishedPortSpinBox);
+
+			// Since stun callback is called at initialization, we cannot reinit published address
+			// TODO: find a way so that if stun is unchecked, reinit published address entry 
+			//       in case local address changedd
+
+			// local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
+			// local_address = dbus_get_address_from_interface_name(local_interface);
+			// gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
+		}
 	}
-    }
- 
+
 }
 
 
 static same_as_local_cb(GtkWidget * widget, gpointer data UNUSED)
 {
-    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-        DEBUG("Same as local");
-	gchar * local_interface;
-	gchar * local_address;
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+		DEBUG("Same as local");
+		gchar * local_interface;
+		gchar * local_address;
+
+		local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
+		local_address = dbus_get_address_from_interface_name(local_interface);
 
-	local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
-	local_address = dbus_get_address_from_interface_name(local_interface);
+		gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
 
-	gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
-	    
-        gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
-        gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
-    } 
+		gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
+		gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
+	} 
 }
 
 
-GtkWidget * create_security_tab(account_t **a)
-{
-    GtkWidget * frame;
-    GtkWidget * table;
-    GtkWidget * label;
-    GtkWidget * ret;
-    GtkWidget * hbox;
-    GtkWidget * editButton;
-    GtkWidget * addButton;
-	GtkWidget * clearTextCheckbox;
-    GtkCellRenderer * renderer;
-    GtkTreeViewColumn * treeViewColumn;
-    GtkTreeSelection * treeSelection;
-	
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-    
-    account_t * currentAccount;
-    currentAccount = *a;
-	
-    gchar * curSRTPEnabled = NULL;
-    gchar * curKeyExchange = NULL;
-    gchar * curTLSEnabled = NULL;
-
-    gchar* published_address;
-    gchar* published_port;
-    
-    // Load from SIP/IAX/Unknown ?
-    if(currentAccount) {	
-        curKeyExchange = g_hash_table_lookup(currentAccount->properties, ACCOUNT_KEY_EXCHANGE);
-	if (curKeyExchange == NULL) {
-	    curKeyExchange = "none";
-	}		
-		      		  
-        curSRTPEnabled = g_hash_table_lookup(currentAccount->properties, ACCOUNT_SRTP_ENABLED);
-        if (curSRTPEnabled == NULL) {
-	    curSRTPEnabled = "false";
-        }
-        
-        curTLSEnabled = g_hash_table_lookup(currentAccount->properties, TLS_ENABLE);
-        if (curTLSEnabled == NULL) {
-            curTLSEnabled = "false";
-        }
-
-	published_address = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_ADDRESS);
-
-	published_port = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_PORT);
-        
-        DEBUG("TLS is enabled to %s", curTLSEnabled);       
-    } 
-    
-    /* Credentials tree view */
-    gnome_main_section_new_with_table (_("Credential"), &frame, &table, 1, 1);
-    gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-    gtk_table_set_row_spacings(GTK_TABLE(table), 10);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-	
-    scrolledWindowCredential = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindowCredential), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindowCredential), GTK_SHADOW_IN);
-    gtk_table_attach_defaults (GTK_TABLE(table), scrolledWindowCredential, 0, 1, 0, 1);
-    
-    credentialStore = gtk_list_store_new(COLUMN_CREDENTIAL_COUNT,
-            G_TYPE_STRING,  // Realm
-            G_TYPE_STRING,  // Username
-            G_TYPE_STRING,  // Password
-            G_TYPE_POINTER  // Pointer to the Objectc
-            );
-            
-    treeViewCredential = gtk_tree_view_new_with_model(GTK_TREE_MODEL(credentialStore));
-    treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW (treeViewCredential));
-    g_signal_connect(G_OBJECT (treeSelection), "changed", G_CALLBACK (select_credential_cb), credentialStore);
-    
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
-    g_signal_connect(G_OBJECT (renderer), "edited", G_CALLBACK(cell_edited_cb), credentialStore);
-    g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_REALM));
-    treeViewColumn = gtk_tree_view_column_new_with_attributes ("Realm",
-            renderer,
-            "markup", COLUMN_CREDENTIAL_REALM,
-            NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
-
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
-    g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
-    g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
-    treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Authentication name"),
-            renderer,
-            "markup", COLUMN_CREDENTIAL_USERNAME,
-            NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
-
-    renderer = gtk_cell_renderer_text_new();
-    g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
-    g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
-    g_signal_connect (renderer, "editing-started", G_CALLBACK (editing_started_cb), NULL);
-    g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
-    treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Password"),
-            renderer,
-            "markup", COLUMN_CREDENTIAL_PASSWORD,
-            NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
-    
-    gtk_container_add(GTK_CONTAINER(scrolledWindowCredential), treeViewCredential);
-    
-    fill_treeview_with_credential(credentialStore, *a);
-            
-    /* Credential Buttons */    
-    hbox = gtk_hbox_new(FALSE, 10);
-    gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 3, 1, 2);
-    
-    addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
-    g_signal_connect (addButton, "clicked", G_CALLBACK (add_credential_cb), credentialStore);
-    gtk_box_pack_start(GTK_BOX(hbox), addButton, FALSE, FALSE, 0);
-        
-    deleteCredButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
-    g_signal_connect (deleteCredButton, "clicked", G_CALLBACK (delete_credential_cb), treeViewCredential);
-    gtk_box_pack_start(GTK_BOX(hbox), deleteCredButton, FALSE, FALSE, 0);
-
-    /* Security Section */
-    gnome_main_section_new_with_table (_("Security"), &frame, &table, 2, 3);
-    gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-    gtk_table_set_row_spacings (GTK_TABLE(table), 10);
-    gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-    /* TLS subsection */
-    GtkWidget * sipTlsAdvancedButton;
-    sipTlsAdvancedButton = gtk_button_new_from_stock(GTK_STOCK_EDIT);
-    gtk_table_attach_defaults(GTK_TABLE(table), sipTlsAdvancedButton, 2, 3, 0, 1);
-    gtk_widget_set_sensitive(GTK_WIDGET(sipTlsAdvancedButton), FALSE);    
-    g_signal_connect(G_OBJECT(sipTlsAdvancedButton), "clicked", G_CALLBACK(show_advanced_tls_options_cb), currentAccount->properties);
-    
-    useSipTlsCheckBox = gtk_check_button_new_with_mnemonic(_("Use TLS transport (sips)"));
-    g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK(use_sip_tls_cb), sipTlsAdvancedButton);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox), (g_strcmp0(curTLSEnabled, "true") == 0) ? TRUE:FALSE);
-    gtk_table_attach_defaults(GTK_TABLE(table), useSipTlsCheckBox, 0, 2, 0, 1);
-       	    
-    /* ZRTP subsection */
-    label = gtk_label_new_with_mnemonic (_("SRTP key exchange"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    keyExchangeCombo = gtk_combo_box_new_text();
-    gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
-    gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP");
-    gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES");
-    gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled"));      
-    
-    advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
-    g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), currentAccount->properties);
-        
-    if (g_strcmp0(curSRTPEnabled, "false") == 0)
-    {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
-        gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-    } else {
-        if (strcmp(curKeyExchange, ZRTP) == 0) {
-            gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0);
-        } 
-	else if (strcmp(curKeyExchange, SDES) == 0) {
-	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1);
+
+GtkWidget* create_credential_widget (account_t **a) {
+
+	GtkWidget *frame, *table, *scrolledWindowCredential, *addButton;
+	GtkCellRenderer * renderer;
+	GtkTreeViewColumn * treeViewColumn;
+	GtkTreeSelection * treeSelection;
+
+	/* Credentials tree view */
+	gnome_main_section_new_with_table (_("Credential"), &frame, &table, 1, 1);
+	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+	gtk_table_set_row_spacings(GTK_TABLE(table), 10);
+
+	scrolledWindowCredential = gtk_scrolled_window_new (NULL, NULL);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindowCredential), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledWindowCredential), GTK_SHADOW_IN);
+	gtk_table_attach_defaults (GTK_TABLE (table), scrolledWindowCredential, 0, 1, 0, 1);
+
+	credentialStore = gtk_list_store_new(COLUMN_CREDENTIAL_COUNT,
+			G_TYPE_STRING,  // Realm
+			G_TYPE_STRING,  // Username
+			G_TYPE_STRING,  // Password
+			G_TYPE_POINTER  // Pointer to the Objectc
+			);
+
+	treeViewCredential = gtk_tree_view_new_with_model(GTK_TREE_MODEL(credentialStore));
+	treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW (treeViewCredential));
+	g_signal_connect(G_OBJECT (treeSelection), "changed", G_CALLBACK (select_credential_cb), credentialStore);
+
+	renderer = gtk_cell_renderer_text_new();
+	g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
+	g_signal_connect(G_OBJECT (renderer), "edited", G_CALLBACK(cell_edited_cb), credentialStore);
+	g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_REALM));
+	treeViewColumn = gtk_tree_view_column_new_with_attributes ("Realm",
+			renderer,
+			"markup", COLUMN_CREDENTIAL_REALM,
+			NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
+
+	renderer = gtk_cell_renderer_text_new();
+	g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
+	g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
+	g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
+	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Authentication name"),
+			renderer,
+			"markup", COLUMN_CREDENTIAL_USERNAME,
+			NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
+
+	renderer = gtk_cell_renderer_text_new();
+	g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
+	g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
+	g_signal_connect (renderer, "editing-started", G_CALLBACK (editing_started_cb), NULL);
+	g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
+	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Password"),
+			renderer,
+			"markup", COLUMN_CREDENTIAL_PASSWORD,
+			NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
+
+	gtk_container_add(GTK_CONTAINER(scrolledWindowCredential), treeViewCredential);
+
+	fill_treeview_with_credential(credentialStore, *a);
+
+	/* Credential Buttons */    
+	hbox = gtk_hbox_new(FALSE, 10);
+	gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 3, 1, 2);
+
+	addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
+	g_signal_connect (addButton, "clicked", G_CALLBACK (add_credential_cb), credentialStore);
+	gtk_box_pack_start(GTK_BOX(hbox), addButton, FALSE, FALSE, 0);
+
+	deleteCredButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+	g_signal_connect (deleteCredButton, "clicked", G_CALLBACK (delete_credential_cb), treeViewCredential);
+	gtk_box_pack_start(GTK_BOX(hbox), deleteCredButton, FALSE, FALSE, 0);
+
+	/* Dynamically resize the window to fit the scrolled window */
+	GtkRequisition requisitionTable;
+	GtkRequisition requisitionTreeView;
+	gtk_widget_size_request (GTK_WIDGET(treeViewCredential), &requisitionTreeView);
+	gtk_widget_size_request (GTK_WIDGET(table), &requisitionTable);
+	gtk_widget_set_size_request (GTK_WIDGET(scrolledWindowCredential), 400, /*requisitionTable.width,*/ 120);
+	// same_as_local_cb (sameAsLocalRadioButton, NULL);
+	// set_published_addr_manually_cb (publishedAddrRadioButton, NULL);
+
+
+	return frame;
+}
+
+
+GtkWidget* create_security_widget (account_t **a) {
+
+	GtkWidget *frame, *table, *sipTlsAdvancedButton, *label;
+	gchar *curSRTPEnabled = NULL, *curKeyExchange = NULL, *curTLSEnabled = NULL;
+
+	// Load from SIP/IAX/Unknown ?
+	if((*a)) {	
+		curKeyExchange = g_hash_table_lookup ((*a)->properties, ACCOUNT_KEY_EXCHANGE);
+		if (curKeyExchange == NULL) {
+			curKeyExchange = "none";
+		}		
+
+		curSRTPEnabled = g_hash_table_lookup ((*a)->properties, ACCOUNT_SRTP_ENABLED);
+		if (curSRTPEnabled == NULL) {
+			curSRTPEnabled = "false";
+		}
+
+		curTLSEnabled = g_hash_table_lookup ((*a)->properties, TLS_ENABLE);
+		if (curTLSEnabled == NULL) {
+			curTLSEnabled = "false";
+		}
 	}
-	else {
-            gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
-            gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-        }
-    }
-    
-	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), currentAccount);
-    
-    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-    gtk_table_attach_defaults(GTK_TABLE(table), keyExchangeCombo, 1, 2, 1, 2);    
-    gtk_table_attach_defaults(GTK_TABLE(table), advancedZrtpButton, 2, 3, 1, 2);
-
-    gtk_widget_show_all(table);
-    
-    /* Dynamically resize the window to fit the scrolled window */
-    GtkRequisition requisitionTable;
-    GtkRequisition requisitionTreeView;
-    gtk_widget_size_request(GTK_WIDGET(treeViewCredential), &requisitionTreeView);
-    gtk_widget_size_request(GTK_WIDGET(table), &requisitionTable);
-    gtk_widget_set_size_request(GTK_WIDGET(scrolledWindowCredential), requisitionTable.width, 120);
- 
-    same_as_local_cb(sameAsLocalRadioButton, NULL);
-    set_published_addr_manually_cb(publishedAddrRadioButton, NULL);
-
-    gtk_widget_show_all(ret);
-    
-    return ret;
+
+	gnome_main_section_new_with_table (_("Security"), &frame, &table, 2, 3);
+	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
+	gtk_table_set_col_spacings (GTK_TABLE(table), 10);
+
+	/* TLS subsection */
+	sipTlsAdvancedButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+	gtk_table_attach_defaults (GTK_TABLE (table), sipTlsAdvancedButton, 2, 3, 0, 1);
+	gtk_widget_set_sensitive (GTK_WIDGET (sipTlsAdvancedButton), FALSE);    
+	g_signal_connect (G_OBJECT (sipTlsAdvancedButton), "clicked", G_CALLBACK (show_advanced_tls_options_cb), (*a)->properties);
+
+	useSipTlsCheckBox = gtk_check_button_new_with_mnemonic(_("Use TLS transport (sips)"));
+	g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK(use_sip_tls_cb), sipTlsAdvancedButton);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox), (g_strcmp0(curTLSEnabled, "true") == 0) ? TRUE:FALSE);
+	gtk_table_attach_defaults(GTK_TABLE(table), useSipTlsCheckBox, 0, 2, 0, 1);
+
+	/* ZRTP subsection */
+	label = gtk_label_new_with_mnemonic (_("SRTP key exchange"));
+	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+	keyExchangeCombo = gtk_combo_box_new_text();
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
+	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP");
+	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES");
+	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled"));      
+
+	advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
+	g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), (*a)->properties);
+
+	if (g_strcmp0(curSRTPEnabled, "false") == 0)
+	{
+		gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
+		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
+	} else {
+		if (strcmp(curKeyExchange, ZRTP) == 0) {
+			gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0);
+		} 
+		else if (strcmp(curKeyExchange, SDES) == 0) {
+			gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1);
+		}
+		else {
+			gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
+			gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
+		}
+	}
+
+	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), *a);
+
+	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+	gtk_table_attach_defaults(GTK_TABLE(table), keyExchangeCombo, 1, 2, 1, 2);    
+	gtk_table_attach_defaults(GTK_TABLE(table), advancedZrtpButton, 2, 3, 1, 2);
+
+	gtk_widget_show_all(table);
+
+	return frame;
 }
 
 
-GtkWidget * create_advanced_tab(account_t **a)
+GtkWidget * create_security_tab (account_t **a)
 {
 	GtkWidget * frame;
-	GtkWidget * table;
-	GtkWidget * label;
 	GtkWidget * ret;
 	GtkWidget * hbox;
-	
+
 	ret = gtk_vbox_new(FALSE, 10);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-    
-	account_t * currentAccount;
-	currentAccount = *a;
 
-	gchar * resolve_once = NULL;
-	gchar * account_expire = NULL;
-	gchar * use_tls;
-	gchar * published_address;
-	gchar * published_port;
-	gchar * local_interface;
-	gchar * local_address;
-	gchar * local_port;
-	gchar * stun_enable;    
-	gchar * stun_server;
-	gchar * published_sameas_local;
-        
-	// Load from SIP/IAX/Unknown ?
-	if(currentAccount) {
+	/*
+	   published_address = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_ADDRESS);
 
-		resolve_once = g_hash_table_lookup(currentAccount->properties, ACCOUNT_RESOLVE_ONCE);
-		account_expire = g_hash_table_lookup(currentAccount->properties, ACCOUNT_REGISTRATION_EXPIRE);
-		use_tls = g_hash_table_lookup(currentAccount->properties,  TLS_ENABLE);
+	   published_port = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_PORT);
 
-		published_sameas_local = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_SAMEAS_LOCAL);
+	   DEBUG("TLS is enabled to %s", curTLSEnabled);       
+	   } */
 
-		local_interface = g_hash_table_lookup(currentAccount->properties, LOCAL_INTERFACE);
+	// Credentials frame
+	frame = create_credential_widget (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-		local_port = g_hash_table_lookup(currentAccount->properties, LOCAL_PORT);
+	// Security frame
+	frame = create_security_widget (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-		if (g_strcasecmp(published_sameas_local,"true") == 0) {
+	gtk_widget_show_all(ret);
 
-		    published_address = dbus_get_address_from_interface_name(local_interface);
-		    published_port = g_hash_table_lookup(currentAccount->properties,  LOCAL_PORT);
+	return ret;
+}
 
-		}
-		else {
+GtkWidget* create_registration_expire (account_t **a) {
 
-		    published_address = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_ADDRESS);
-		    published_port = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_PORT);
-		}
+	GtkWidget *table, *frame, *label;
 
-		stun_enable = g_hash_table_lookup(currentAccount->properties,  ACCOUNT_SIP_STUN_ENABLED);
-		stun_server = g_hash_table_lookup(currentAccount->properties,  ACCOUNT_SIP_STUN_SERVER);
-		published_sameas_local = g_hash_table_lookup(currentAccount->properties,  PUBLISHED_SAMEAS_LOCAL);
+	gchar *resolve_once=NULL, *account_expire=NULL;
 
-	} 
+	if (*a) {
+		resolve_once = g_hash_table_lookup ((*a)->properties, ACCOUNT_RESOLVE_ONCE);
+		account_expire = g_hash_table_lookup ((*a)->properties, ACCOUNT_REGISTRATION_EXPIRE);
+	}
 
 	gnome_main_section_new_with_table (_("Registration"), &frame, &table, 2, 3);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
 	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
 	gtk_table_set_row_spacings( GTK_TABLE(table), 5);	
 
@@ -853,91 +870,121 @@ GtkWidget * create_advanced_tab(account_t **a)
 			g_strcasecmp(resolve_once,"false") == 0 ? TRUE: FALSE);
 	gtk_table_attach_defaults( GTK_TABLE( table ), entryResolveNameOnlyOnce, 0, 2, 1, 2);
 	gtk_widget_set_sensitive( GTK_WIDGET( entryResolveNameOnlyOnce ) , TRUE );
-	
-	
+
+	return frame;
+}
+
+GtkWidget* create_network (account_t **a) {
+
+	GtkWidget *table, *frame, *label;
+	gchar *local_interface, *local_port;
+
+	if (*a) {
+		local_interface = g_hash_table_lookup ((*a)->properties, LOCAL_INTERFACE);
+		local_port = g_hash_table_lookup ((*a)->properties, LOCAL_PORT);
+	}
+
 	gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 2);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
 	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
 	gtk_table_set_row_spacings( GTK_TABLE(table), 5);
-		
+
 	/**
 	 * Retreive the list of IP interface from the 
 	 * the daemon and build the combo box.
 	 */
-   
+
 	GtkListStore * ipInterfaceListStore; 
 	GtkTreeIter iter;
-    
+
 	ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
-	localAddressLabel = gtk_label_new_with_mnemonic (_("Local address"));    
-	gtk_table_attach ( GTK_TABLE( table ), localAddressLabel, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (localAddressLabel), 0, 0.5);
-			
+	label = gtk_label_new_with_mnemonic (_("Local address"));    
+	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+
 	GtkTreeIter current_local_address_iter = iter;   
 	gchar ** iface_list = NULL;
 	// iface_list = (gchar**) dbus_get_all_ip_interface();
 	iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
 	gchar ** iface = NULL;
-    
+
 	// flag to determine if local_address is found 
 	gboolean iface_found = FALSE;
 
 	if (iface_list != NULL) {
 
-	  // fill the iterface combo box
-	  for (iface = iface_list; *iface; iface++) {         
-            DEBUG("Interface %s", *iface);            
-            gtk_list_store_append(ipInterfaceListStore, &iter );
-            gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
-
-	    // set the current local address
-	    if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
-                DEBUG("Setting active local address combo box");
-                current_local_address_iter = iter;
-		iface_found = TRUE;
-            }
-	  }
-	  
-	  if(!iface_found) {
-	      DEBUG("Did not find local ip address, take fisrt in the list");
-	      gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_address_iter);
-	  }
+		// fill the iterface combo box
+		for (iface = iface_list; *iface; iface++) {         
+			DEBUG("Interface %s", *iface);            
+			gtk_list_store_append(ipInterfaceListStore, &iter );
+			gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
+
+			// set the current local address
+			if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
+				DEBUG("Setting active local address combo box");
+				current_local_address_iter = iter;
+				iface_found = TRUE;
+			}
+		}
+
+		if(!iface_found) {
+			DEBUG("Did not find local ip address, take fisrt in the list");
+			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_address_iter);
+		}
 
 	}
-    
+
 	localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
-	gtk_label_set_mnemonic_widget(GTK_LABEL(localAddressLabel), localAddressCombo);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), localAddressCombo);
 	gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 	g_object_unref(G_OBJECT(ipInterfaceListStore));	
-    
+
 	GtkCellRenderer * ipInterfaceCellRenderer;
 	ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
 	gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_address_iter);
 
-
-	/**
-	 * Local port
-	 */	    
-	localPortLabel = gtk_label_new_with_mnemonic (_("Local port"));
-	gtk_table_attach_defaults(GTK_TABLE(table), localPortLabel, 0, 1, 1, 2);
-	gtk_misc_set_alignment(GTK_MISC (localPortLabel), 0, 0.5);
+	// Local port widget
+	label = gtk_label_new_with_mnemonic (_("Local port"));
+	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
 	localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget (GTK_LABEL (localPortLabel), localPortSpinBox);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), localPortSpinBox);
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
 
 	gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
 
+	return frame;
+}
+
+GtkWidget* create_published_address (account_t **a) {
+
+	GtkWidget *table, *frame, *label;
+	gchar *use_tls, *published_address, *published_port, *local_address, *stun_enable, *stun_server, *published_sameas_local;
+
+	// Get the user configuration
+	if (*a) {
+
+		use_tls = g_hash_table_lookup ((*a)->properties,  TLS_ENABLE);
+		published_sameas_local = g_hash_table_lookup ((*a)->properties,  PUBLISHED_SAMEAS_LOCAL);
+
+		if (g_strcasecmp (published_sameas_local, "true") == 0) {
+			published_address = dbus_get_address_from_interface_name (g_hash_table_lookup ((*a)->properties, LOCAL_INTERFACE));
+			published_port = g_hash_table_lookup ((*a)->properties,  LOCAL_PORT);
+		}
+		else {
+			published_address = g_hash_table_lookup ((*a)->properties,  PUBLISHED_ADDRESS);
+			published_port = g_hash_table_lookup ((*a)->properties,  PUBLISHED_PORT);
+		}
+
+		stun_enable = g_hash_table_lookup ((*a)->properties,  ACCOUNT_SIP_STUN_ENABLED);
+		stun_server = g_hash_table_lookup ((*a)->properties,  ACCOUNT_SIP_STUN_SERVER);
+		published_sameas_local = g_hash_table_lookup ((*a)->properties,  PUBLISHED_SAMEAS_LOCAL);
+	}
 
-	/**
-	 *  Published address field
-	 */ 
 	gnome_main_section_new_with_table (_("Published address"), &frame, &table, 2, 3);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
 	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 5);
-
+	gtk_table_set_row_spacings (GTK_TABLE (table), 5);
 
 	useStunCheckBox = gtk_check_button_new_with_mnemonic(_("Using STUN"));
 	gtk_table_attach_defaults(GTK_TABLE(table), useStunCheckBox, 0, 1, 0, 1);
@@ -946,11 +993,11 @@ GtkWidget * create_advanced_tab(account_t **a)
 	gtk_widget_set_sensitive (GTK_WIDGET(useStunCheckBox),
 			g_strcasecmp(use_tls,"true") == 0 ? FALSE: TRUE);
 
-	stunServerLabel = gtk_label_new_with_mnemonic (_("STUN server URL"));
-	gtk_table_attach_defaults(GTK_TABLE(table), stunServerLabel, 0, 1, 1, 2);
-	gtk_misc_set_alignment(GTK_MISC(stunServerLabel), 0, 0.5);
+	label = gtk_label_new_with_mnemonic (_("STUN server URL"));
+	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 	stunServerEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget(GTK_LABEL(stunServerLabel), stunServerEntry);
+	gtk_label_set_mnemonic_widget(GTK_LABEL(label), stunServerEntry);
 	gtk_entry_set_text(GTK_ENTRY(stunServerEntry), stun_server);
 	gtk_table_attach_defaults(GTK_TABLE(table), stunServerEntry, 1, 2, 1, 2);
 
@@ -960,32 +1007,30 @@ GtkWidget * create_advanced_tab(account_t **a)
 	publishedAddrRadioButton = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(sameAsLocalRadioButton), _("Set published address and port:"));
 	gtk_table_attach_defaults(GTK_TABLE(table), publishedAddrRadioButton, 0, 2, 4, 5);
 
-	if(g_strcasecmp(published_sameas_local, "true") == 0) {
-	    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(sameAsLocalRadioButton), TRUE);
+	if (g_strcasecmp (published_sameas_local, "true") == 0) {
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton), TRUE);
 	} else {
-	    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(publishedAddrRadioButton), TRUE);
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton), TRUE);
 	}
 
-	gtk_widget_show_all(ret);
-    		
-	publishedAddressLabel = gtk_label_new_with_mnemonic (_("Published address"));
-	gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressLabel, 0, 1, 5, 6);
-	gtk_misc_set_alignment(GTK_MISC (publishedAddressLabel), 0, 0.5);
+	label = gtk_label_new_with_mnemonic (_("Published address"));
+	gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 5, 6);
+	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
 	publishedAddressEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (publishedAddressLabel), publishedAddressEntry);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), publishedAddressEntry);
 
 	gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), published_address);
 	gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressEntry, 1, 2, 5, 6);
-		
-	publishedPortLabel = gtk_label_new_with_mnemonic(_("Published port"));
-	gtk_table_attach_defaults(GTK_TABLE(table), publishedPortLabel, 0, 1, 6, 7);
-	gtk_misc_set_alignment(GTK_MISC(publishedPortLabel), 0, 0.5);
+
+	label = gtk_label_new_with_mnemonic(_("Published port"));
+	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 6, 7);
+	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 	publishedPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget(GTK_LABEL (publishedPortLabel), publishedPortSpinBox);
+	gtk_label_set_mnemonic_widget(GTK_LABEL (label), publishedPortSpinBox);
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(published_port, NULL));
 
 	gtk_table_attach_defaults(GTK_TABLE(table), publishedPortSpinBox, 1, 2, 6, 7);
-	 
+
 	use_stun_cb (GTK_WIDGET (useStunCheckBox), NULL);
 
 	// This will trigger a signal, and the above two
@@ -997,68 +1042,35 @@ GtkWidget * create_advanced_tab(account_t **a)
 	g_signal_connect(sameAsLocalRadioButton, "toggled", G_CALLBACK(same_as_local_cb), sameAsLocalRadioButton);   
 	g_signal_connect(publishedAddrRadioButton, "toggled", G_CALLBACK(set_published_addr_manually_cb), publishedAddrRadioButton);
 
-	return ret;
+	return frame;
 }
 
-static GPtrArray * getNewCredential(GHashTable * properties)
-{
-    GtkTreeIter iter;
-    gboolean valid;
-    gint row_count = 0;
-
-    valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(credentialStore), &iter);
-
-    GPtrArray * credential_array = g_ptr_array_new ();
-        
-    gchar *username;
-    gchar *realm;
-    gchar *password;
-    GHashTable * new_table;   
-     
-    gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter,
-                        COLUMN_CREDENTIAL_REALM, &realm,
-                        COLUMN_CREDENTIAL_USERNAME, &username,
-                        COLUMN_CREDENTIAL_PASSWORD, &password,
-                        -1);
-
-    g_hash_table_insert(properties, g_strdup(ACCOUNT_REALM), realm);
-    g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), username);
-	// Do not change the password is 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) {        
-        gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter,
-                            COLUMN_CREDENTIAL_REALM, &realm,
-                            COLUMN_CREDENTIAL_USERNAME, &username,
-                            COLUMN_CREDENTIAL_PASSWORD, &password,
-                            -1);
+GtkWidget * create_advanced_tab(account_t **a) {
 
-        DEBUG ("Row %d: %s %s %s", row_count, username, password, realm);
+	// Build the advanced tab, to appear on the account configuration panel
 
-        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);
+	GtkWidget *ret, *frame;
+
+	ret = gtk_vbox_new(FALSE, 10);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
 
-        g_ptr_array_add (credential_array, new_table);
+	frame = create_registration_expire (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-        row_count ++;
+	frame = create_network (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-        valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter);
-    }
+	frame = create_published_address (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-    return credential_array;
+	gtk_widget_show_all (ret);
+	return ret;
 }
 
-	void
-show_account_window (account_t * a)
-{
+void show_account_window (account_t * a) {
 
 	GtkWidget * notebook;
-	GtkWidget *tab, *codecs_tab; 
+	GtkWidget *tab, *codecs_tab, *ip_tab; 
 	gint response;
 	account_t *currentAccount;
 
@@ -1068,7 +1080,7 @@ show_account_window (account_t * a)
 	gchar * published_address;
 
 	currentAccount = a;   
-	
+
 	if (currentAccount == NULL) {
 		currentAccount = g_new0(account_t, 1);
 		currentAccount->properties = dbus_account_details(NULL);
@@ -1076,7 +1088,7 @@ show_account_window (account_t * a)
 		sflphone_fill_codec_list_per_account (&currentAccount);
 		DEBUG("Account is NULL. Will fetch default values\n");      
 	}
-    
+
 	dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Account settings"),
 				GTK_WINDOW(get_main_window()),
 				GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -1094,160 +1106,216 @@ show_account_window (account_t * a)
 	gtk_container_set_border_width(GTK_CONTAINER(notebook), 10);
 	gtk_widget_show(notebook);
 
-	/* General Settings */
-	tab = create_basic_tab(&currentAccount);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Basic")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
+	// We do not need the global settings for the IP2IP account
+	if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
+
+		/* General Settings */
+		tab = create_basic_tab(&currentAccount);
+		gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Basic")));
+		gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
+		g_signal_emit_by_name (protocolComboBox, "changed", NULL);
+
+	}
 
 	/* Codecs */
 	codecs_tab = create_codecs_configuration (&currentAccount);
 	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), codecs_tab, gtk_label_new(_("Codecs")));
 	gtk_notebook_page_num (GTK_NOTEBOOK (notebook), codecs_tab);
 
-	/* Advanced */
-	advanced_tab = create_advanced_tab(&currentAccount);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advanced_tab, gtk_label_new(_("Advanced")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), advanced_tab);
-		
-	/* Security */
-	security_tab = create_security_tab(&currentAccount);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), security_tab, gtk_label_new(_("Security")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook),security_tab);
-		    	
-	gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook) ,  0);
-
-	g_signal_emit_by_name(protocolComboBox, "changed", NULL);
-    
+	// We do not need these one either for the IP2IP account
+	if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
+
+		/* Advanced */
+		advanced_tab = create_advanced_tab(&currentAccount);
+		gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advanced_tab, gtk_label_new(_("Advanced")));
+		gtk_notebook_page_num(GTK_NOTEBOOK(notebook), advanced_tab);
+
+		/* Security */
+		security_tab = create_security_tab (&currentAccount);
+		gtk_notebook_append_page(GTK_NOTEBOOK(notebook), security_tab, gtk_label_new(_("Security")));
+		gtk_notebook_page_num(GTK_NOTEBOOK(notebook),security_tab);
+	}
+
+	else {
+
+		/* Custom tab for the IP to IP profile */
+		ip_tab = create_direct_ip_calls_tab (&currentAccount);
+		gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), ip_tab, gtk_label_new(_("Network")));
+		gtk_notebook_page_num (GTK_NOTEBOOK (notebook), ip_tab);
+	}
+
+	gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook) ,  0);
+
 	response = gtk_dialog_run (GTK_DIALOG (dialog));
 
 	if(response == GTK_RESPONSE_ACCEPT)
 	{
-		gchar* proto = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
-
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_RESOLVE_ONCE),
-				g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(entryResolveNameOnlyOnce)) ? "false": "true"));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_ALIAS),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryAlias))));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_TYPE),
-				g_strdup(proto));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_HOSTNAME),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryHostname))));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_USERNAME),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryUsername))));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_PASSWORD),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryPassword))));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_MAILBOX),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryMailbox))));
-		g_hash_table_replace(currentAccount->properties,
-				g_strdup(ACCOUNT_REGISTRATION_EXPIRE),
-				g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(expireSpinBox))));   
-
-
-		if (strcmp(proto, "SIP") == 0) {
-			
-			g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_ENABLED), 
-					            g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox)) ? "true":"false"));
-
-			g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_SERVER), 
-					            g_strdup(gtk_entry_get_text(GTK_ENTRY(stunServerEntry))));
-
-			gchar* keyExchange = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo));
-			if (g_strcasecmp(keyExchange, "ZRTP") == 0) {
-			  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-			  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
-			}
-			else if(g_strcasecmp(keyExchange, "SDES") == 0) {
-			    g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-			    g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
-			}
-			else {
-			  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
-			}
-    		
-			g_hash_table_replace(currentAccount->properties, g_strdup(TLS_ENABLE), 
-					     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox)) ? "true":"false"));
 
-			g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_SAMEAS_LOCAL), g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)) ? "true":"false"));	
+		if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
 
-			g_hash_table_replace(currentAccount->properties,
-    				g_strdup(LOCAL_INTERFACE),
-			        g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
+			gchar* proto = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
 
 			g_hash_table_replace(currentAccount->properties,
-    				g_strdup(LOCAL_PORT),
-			        g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
-			
-			if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)))
-			{
-
-			    g_hash_table_replace(currentAccount->properties,
-						 g_strdup(PUBLISHED_PORT),
-						 g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedPortSpinBox))));
-
-			    g_hash_table_replace(currentAccount->properties,
-						 g_strdup(PUBLISHED_ADDRESS),
-						 g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedAddressEntry))));
-			}
-			else {
+					g_strdup(ACCOUNT_RESOLVE_ONCE),
+					g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(entryResolveNameOnlyOnce)) ? "false": "true"));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_ALIAS),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryAlias))));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_TYPE),
+					g_strdup(proto));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_HOSTNAME),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryHostname))));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_USERNAME),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryUsername))));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_PASSWORD),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryPassword))));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_MAILBOX),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryMailbox))));
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(ACCOUNT_REGISTRATION_EXPIRE),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(expireSpinBox))));   
+
+
+			if (strcmp(proto, "SIP") == 0) {
+
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_ENABLED), 
+						g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox)) ? "true":"false"));
+
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_SERVER), 
+						g_strdup(gtk_entry_get_text(GTK_ENTRY(stunServerEntry))));
+
+
+				gchar* keyExchange = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo));
+
+				if (g_strcasecmp(keyExchange, "ZRTP") == 0) {
+					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
+					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
+				}
+
+				else if(g_strcasecmp(keyExchange, "SDES") == 0) {
+					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
+					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
+				}
+
+				else {
+					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
+				}
+
+				g_hash_table_replace(currentAccount->properties, g_strdup(TLS_ENABLE), 
+						g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox)) ? "true":"false"));
+
+				g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_SAMEAS_LOCAL), g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)) ? "true":"false"));	
+
+				g_hash_table_replace(currentAccount->properties,
+						g_strdup(LOCAL_INTERFACE),
+						g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
 
-			   g_hash_table_replace(currentAccount->properties,
-						 g_strdup(PUBLISHED_PORT),
-						 g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
-			   local_interface = g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)));
+				g_hash_table_replace(currentAccount->properties,
+						g_strdup(LOCAL_PORT),
+						g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
 
-			   published_address = dbus_get_address_from_interface_name(local_interface);
+				if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)))
+				{
+
+					g_hash_table_replace(currentAccount->properties,
+							g_strdup(PUBLISHED_PORT),
+							g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedPortSpinBox))));
+
+					g_hash_table_replace(currentAccount->properties,
+							g_strdup(PUBLISHED_ADDRESS),
+							g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedAddressEntry))));
+				}
+				else {
+
+					g_hash_table_replace(currentAccount->properties,
+							g_strdup(PUBLISHED_PORT),
+							g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
+					local_interface = g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)));
+
+					published_address = dbus_get_address_from_interface_name(local_interface);
+
+					g_hash_table_replace(currentAccount->properties,
+							g_strdup(PUBLISHED_ADDRESS),
+							published_address);
+				}
 
-			   g_hash_table_replace(currentAccount->properties,
-						 g_strdup(PUBLISHED_ADDRESS),
-						 published_address);
 			}
-			
-		}
 
-		
+			/* Set new credentials if any */
+
+			DEBUG("Setting credentials"); 
+
+			/* This hack is necessary because of the way the 
+			 * configuration file is made (.ini at that time).
+			 * and deleting account per account is too much 
+			 * of a trouble. 
+			 */
+			dbus_delete_all_credential(currentAccount);
+
+			GPtrArray * credential = getNewCredential(currentAccount->properties);         
+			currentAccount->credential_information = credential;
+			if(currentAccount->credential_information != NULL) {
+				int i;
+				for(i = 0; i < currentAccount->credential_information->len; i++) {
+					dbus_set_credential(currentAccount, i);
+				}
+				dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len);
+			}
 
-		/* Set new credentials if any */
-	    
-		DEBUG("Setting credentials"); 
-
-		/* This hack is necessary because of the way the 
-		 * configuration file is made (.ini at that time).
-		 * and deleting account per account is too much 
-		 * of a trouble. 
-		 */
-		dbus_delete_all_credential(currentAccount);
-        
-		GPtrArray * credential = getNewCredential(currentAccount->properties);         
-		currentAccount->credential_information = credential;
-		if(currentAccount->credential_information != NULL) {
-		  int i;
-		  for(i = 0; i < currentAccount->credential_information->len; i++) {
-		    dbus_set_credential(currentAccount, i);
-		  }
-		  dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len);
-		}
-        
-		/** @todo Verify if it's the best condition to check */
-		if (g_strcasecmp(currentAccount->accountID, "new") == 0) {
-			dbus_add_account(currentAccount);
-		}
-		else {
-			dbus_set_account_details(currentAccount);
-		}
+			/** @todo Verify if it's the best condition to check */
+			if (g_strcasecmp(currentAccount->accountID, "new") == 0) {
+				dbus_add_account(currentAccount);
+			}
+			else {
+				dbus_set_account_details(currentAccount);
+			}
+		}	
 		
-
 		// Perpetuate changes to the deamon
 		codec_list_update_to_daemon (currentAccount);
+	}
+	else {
+		g_print ("IP to IP call\n");
+		// Direct IP calls config
+		// dbus_set_ip2ip_details (directIpCallsProperties);
+	}
 
-	} 
-	
 	gtk_widget_destroy (GTK_WIDGET(dialog));
 
+} 
+
+GtkWidget* create_direct_ip_calls_tab (account_t **a) {
+
+	GtkWidget *ret, *frame, *label;
+	gchar *description;
+
+	ret = gtk_vbox_new(FALSE, 10);
+	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+	description = g_markup_printf_escaped(_("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."));
+  	label = gtk_label_new (NULL);
+  	gtk_label_set_markup (GTK_LABEL (label), description);
+  	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);    
+  	gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0);
+
+	GtkRequisition requisition;
+	gtk_widget_size_request (GTK_WIDGET (ret), &requisition);
+	gtk_widget_set_size_request (GTK_WIDGET (label), 350, -1);        
+	gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+
+	frame = create_network (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+	frame = create_security_widget (a);
+	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+	gtk_widget_show_all (ret);
+	return ret;
+
 }
+
diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.h b/sflphone-client-gnome/src/config/accountconfigdialog.h
index 5e6d9132c5..7ac27c3f6b 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.h
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.h
@@ -26,11 +26,17 @@
 
 #include "utils.h"
 #include "preferencesdialog.h"
+#include "accountlist.h"
 
 /** 
  * Display the main account widget 
  * @param a The account you want to edit or null for a new account
  */  
-void show_account_window ( account_t * a );
+void show_account_window (account_t *a);
+
+GtkWidget* create_registration_expire (account_t **a);
+
+GtkWidget* create_direct_ip_calls_tab (account_t **a);
+
 
 #endif 
diff --git a/sflphone-client-gnome/src/config/accountlistconfigdialog.c b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
index 13ccf28619..e22c16019e 100644
--- a/sflphone-client-gnome/src/config/accountlistconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
@@ -21,6 +21,7 @@
 
 #include <accountlistconfigdialog.h>
 #include <dbus/dbus.h>
+#include <accountconfigdialog.h>
 #include <actions.h>
 #include <utils.h>
 #include <string.h>
@@ -38,482 +39,494 @@ GtkListStore * accountStore;
 
 GtkDialog * accountListDialog = NULL;
 
-      
+
 account_t * selectedAccount = NULL;      
 // Account properties
 enum {
-    COLUMN_ACCOUNT_ALIAS,
-    COLUMN_ACCOUNT_TYPE,
-    COLUMN_ACCOUNT_STATUS,
-    COLUMN_ACCOUNT_ACTIVE,
-    COLUMN_ACCOUNT_DATA,
-    COLUMN_ACCOUNT_COUNT
+	COLUMN_ACCOUNT_ALIAS,
+	COLUMN_ACCOUNT_TYPE,
+	COLUMN_ACCOUNT_STATUS,
+	COLUMN_ACCOUNT_ACTIVE,
+	COLUMN_ACCOUNT_DATA,
+	COLUMN_ACCOUNT_COUNT
 };
 
 /**
  * Fills the treelist with accounts
  */
-    void
+	void
 account_list_config_dialog_fill()
 {
-    
-    if (accountListDialog == NULL) {
-        DEBUG("Dialog is not opened");
-        return;
-    }
-    
-    GtkTreeIter iter;
-
-    gtk_list_store_clear(accountStore);
-    
-    unsigned int i;
-    for(i = 0; i < account_list_get_size(); i++) {
-        account_t * a = account_list_get_nth (i);
-    
-        if (a) {
-            gtk_list_store_append (accountStore, &iter);
-
-            DEBUG("Filling accounts: Account is enabled :%s", g_hash_table_lookup(a->properties, ACCOUNT_ENABLED));
-            
-            gtk_list_store_set(accountStore, &iter,
-                    COLUMN_ACCOUNT_ALIAS, g_hash_table_lookup(a->properties, ACCOUNT_ALIAS),  // Name
-                    COLUMN_ACCOUNT_TYPE, g_hash_table_lookup(a->properties, ACCOUNT_TYPE),   // Protocol
-                    COLUMN_ACCOUNT_STATUS, account_state_name(a->state),      // Status
-                    COLUMN_ACCOUNT_ACTIVE, (g_strcasecmp(g_hash_table_lookup(a->properties, ACCOUNT_ENABLED),"true") == 0)? TRUE:FALSE,  // Enable/Disable
-                    COLUMN_ACCOUNT_DATA, a,   // Pointer
-                    -1);
-        }
-    }
-    
-}
 
-/**
- * Delete an account
- */
-    static void
-delete_account_cb(GtkWidget *widget UNUSED, gpointer data UNUSED)
-{
-    if(selectedAccount != NULL) {
-        dbus_remove_account(selectedAccount->accountID);
-    }
-}
+	if (accountListDialog == NULL) {
+		DEBUG("Dialog is not opened");
+		return;
+	}
 
+	GtkTreeIter iter;
 
-/**
- * Edit an account
- */
-    static void
-edit_account_cb(GtkWidget *widget UNUSED, gpointer data UNUSED)
-{
-    if(selectedAccount != NULL)
-    {
-        show_account_window(selectedAccount);
-    } 
-}
+	gtk_list_store_clear(accountStore);
+
+	unsigned int i;
+	for(i = 0; i < account_list_get_size(); i++) {
+		account_t * a = account_list_get_nth (i);
+
+		if (a) {
+			gtk_list_store_append (accountStore, &iter);
+
+			DEBUG("Filling accounts: Account is enabled :%s", g_hash_table_lookup(a->properties, ACCOUNT_ENABLED));
+
+			gtk_list_store_set(accountStore, &iter,
+					COLUMN_ACCOUNT_ALIAS, g_hash_table_lookup(a->properties, ACCOUNT_ALIAS),  // Name
+					COLUMN_ACCOUNT_TYPE, g_hash_table_lookup(a->properties, ACCOUNT_TYPE),   // Protocol
+					COLUMN_ACCOUNT_STATUS, account_state_name(a->state),      // Status
+					COLUMN_ACCOUNT_ACTIVE, (g_strcasecmp(g_hash_table_lookup(a->properties, ACCOUNT_ENABLED),"true") == 0)? TRUE:FALSE,  // Enable/Disable
+					COLUMN_ACCOUNT_DATA, a,   // Pointer
+					-1);
+		}
+	}
 
-/**
- * Add an account
- */
-static void
-add_account_cb(GtkWidget *widget UNUSED, gpointer data UNUSED)
-{
-    show_account_window(NULL);
 }
 
+
+
 /**
  * Call back when the user click on an account in the list
  */
-    static void
+	static void
 select_account_cb(GtkTreeSelection *selection, GtkTreeModel *model)
 {
-    GtkTreeIter iter;
-    GValue val;
+	GtkTreeIter iter;
+	GValue val;
 	gchar *state;
 
-    memset (&val, 0, sizeof(val));
-    if (!gtk_tree_selection_get_selected(selection, &model, &iter))
-    {
-        selectedAccount = NULL;
-        gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(editButton), FALSE);
-        gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);                
-        return;
-    }
-
-    // The Gvalue will be initialized in the following function
-    gtk_tree_model_get_value(model, &iter, COLUMN_ACCOUNT_DATA, &val);
-
-    selectedAccount = (account_t*)g_value_get_pointer(&val);
-    g_value_unset(&val);
-
-    if(selectedAccount != NULL)
-    {
-        gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(editButton), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), TRUE);      
-
-        /* Update status bar about current registration state */
-        gtk_statusbar_pop (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION);
-        
-        if (selectedAccount->protocol_state_description != NULL  
-            && selectedAccount->protocol_state_code != 0) {
-            
-           gchar * response = g_strdup_printf(
-                                _("Server returned \"%s\" (%d)"),
-                                selectedAccount->protocol_state_description, 
-                                selectedAccount->protocol_state_code);
-           gchar * message = g_strconcat(
-                                account_state_name(selectedAccount->state), 
-                                ". ", 
-                                response,
-                                NULL);
-                        
-           gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
-           
-           g_free(response);
-           g_free(message);
-            
-        } else {
-            state = (gchar*) account_state_name (selectedAccount->state);        
-            gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, state);        
-        }
-                  
-    }
-    
-    DEBUG("Selecting account in account window");
+	memset (&val, 0, sizeof(val));
+	if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+	{
+		selectedAccount = NULL;
+		gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(editButton), FALSE);
+		gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);                
+		return;
+	}
+
+	// The Gvalue will be initialized in the following function
+	gtk_tree_model_get_value(model, &iter, COLUMN_ACCOUNT_DATA, &val);
+
+	selectedAccount = (account_t*)g_value_get_pointer(&val);
+	g_value_unset(&val);
+
+	if(selectedAccount != NULL) {
+		gtk_widget_set_sensitive(GTK_WIDGET(editButton), TRUE);
+		if (g_strcasecmp (selectedAccount->accountID, IP2IP) != 0) {
+			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), TRUE);
+			gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), TRUE);      
+
+			/* Update status bar about current registration state */
+			gtk_statusbar_pop (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION);
+
+			if (selectedAccount->protocol_state_description != NULL  
+				&& selectedAccount->protocol_state_code != 0) {
+
+				gchar * response = g_strdup_printf(
+					_("Server returned \"%s\" (%d)"),
+					selectedAccount->protocol_state_description, 
+					selectedAccount->protocol_state_code);
+				gchar * message = g_strconcat(
+					account_state_name(selectedAccount->state), 
+					". ", 
+					response,
+					NULL);
+
+				gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
+
+				g_free(response);
+				g_free(message);
+
+			} else {
+				state = (gchar*) account_state_name (selectedAccount->state);        
+				gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, state);        
+			}
+		}
+		else {
+			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
+			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
+			gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);      
+		}
+	}
+
+	DEBUG("Selecting account in account window");
 }
 
-    static void
-enable_account_cb(GtkCellRendererToggle *rend UNUSED, gchar* path,  gpointer data )
-{
-    GtkTreeIter iter;
-    GtkTreePath *treePath;    
-    GtkTreeModel *model;
-    gboolean enable;
-    account_t* acc ;
-
-    // Get pointer on object
-    treePath = gtk_tree_path_new_from_string(path);
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(data));
-    gtk_tree_model_get_iter(model, &iter, treePath);
-    gtk_tree_model_get(model, &iter,
-            COLUMN_ACCOUNT_ACTIVE, &enable,
-            COLUMN_ACCOUNT_DATA, &acc,
-            -1);
-    enable = !enable;
-
-    DEBUG("Account is %d enabled", enable);
-    // Store value
-    gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-            COLUMN_ACCOUNT_ACTIVE, enable,
-            -1);
-
-    // Modify account state
-    gchar * registrationState;
-    if (enable == TRUE) {
-        registrationState = g_strdup("true");
-    } else {
-        registrationState = g_strdup("false");
-    }
-    DEBUG("Replacing with %s", registrationState);
-    g_hash_table_replace( acc->properties , g_strdup(ACCOUNT_ENABLED), registrationState);
-
-    dbus_send_register(acc->accountID, enable);
+static void enable_account_cb (GtkCellRendererToggle *rend UNUSED, gchar* path,  gpointer data ) {
+
+	GtkTreeIter iter;
+	GtkTreePath *treePath;    
+	GtkTreeModel *model;
+	gboolean enable;
+	account_t* acc ;
+
+	// The IP2IP profile can't be disabled
+	if (g_strcasecmp (path, "0") == 0)
+		return;
+
+	// Get pointer on object
+	treePath = gtk_tree_path_new_from_string(path);
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(data));
+	gtk_tree_model_get_iter(model, &iter, treePath);
+	gtk_tree_model_get(model, &iter,
+			COLUMN_ACCOUNT_ACTIVE, &enable,
+			COLUMN_ACCOUNT_DATA, &acc,
+			-1);
+	
+	enable = !enable;
+
+	DEBUG("Account is %d enabled", enable);
+	// Store value
+	gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+			COLUMN_ACCOUNT_ACTIVE, enable,
+			-1);
+
+	// Modify account state
+	gchar * registrationState;
+	if (enable == TRUE) {
+		registrationState = g_strdup("true");
+	} else {
+		registrationState = g_strdup("false");
+	}
+	DEBUG("Replacing with %s", registrationState);
+	g_hash_table_replace( acc->properties , g_strdup(ACCOUNT_ENABLED), registrationState);
+
+	dbus_send_register(acc->accountID, enable);
 
 }
 
 /**
  * Move account in list depending on direction and selected account
  */
-    static void
-account_move(gboolean moveUp, gpointer data)
-{
-    GtkTreeIter iter;
-    GtkTreeIter *iter2;
-    GtkTreeView *treeView;
-    GtkTreeModel *model;
-    GtkTreeSelection *selection;
-    GtkTreePath *treePath;
-    gchar *path;
-
-    // Get view, model and selection of codec store
-    treeView = GTK_TREE_VIEW(data);
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView));
-    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeView));
-
-    // Find selected iteration and create a copy
-    gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter);
-    iter2 = gtk_tree_iter_copy(&iter);
-
-    // Find path of iteration
-    path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter);
-    treePath = gtk_tree_path_new_from_string(path);
-    gint *indices = gtk_tree_path_get_indices(treePath);
-    gint indice = indices[0];
-
-    // Depending on button direction get new path
-    if(moveUp)
-        gtk_tree_path_prev(treePath);
-    else
-        gtk_tree_path_next(treePath);
-    gtk_tree_model_get_iter(model, &iter, treePath);
-
-    // Swap iterations if valid
-    if(gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
-        gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
-
-    // Scroll to new position
-    gtk_tree_view_scroll_to_cell(treeView, treePath, NULL, FALSE, 0, 0);
-
-    // Free resources
-    gtk_tree_path_free(treePath);
-    gtk_tree_iter_free(iter2);
-    g_free(path);
-
-    // Perpetuate changes in account queue
-    if(moveUp)
-        account_list_move_up(indice);
-    else
-        account_list_move_down(indice);
-
-
-    // Set the order in the configuration file
-    dbus_set_accounts_order (account_list_get_ordered_list ());
+static void account_move (gboolean moveUp, gpointer data) {
+
+	GtkTreeIter iter;
+	GtkTreeIter *iter2;
+	GtkTreeView *treeView;
+	GtkTreeModel *model;
+	GtkTreeSelection *selection;
+	GtkTreePath *treePath;
+	gchar *path;
+
+	// Get view, model and selection of codec store
+	treeView = GTK_TREE_VIEW (data);
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW(treeView));
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeView));
+
+	// Find selected iteration and create a copy
+	gtk_tree_selection_get_selected (GTK_TREE_SELECTION(selection), &model, &iter);
+	iter2 = gtk_tree_iter_copy (&iter);
+
+	// Find path of iteration
+	path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter);
+
+	// The first real account in the list can't move up because of the IP2IP account
+	// It can still move down though
+	if (g_strcasecmp (path, "1") == 0 && moveUp)
+		return;
+
+	treePath = gtk_tree_path_new_from_string(path);
+	gint *indices = gtk_tree_path_get_indices(treePath);
+	gint indice = indices[0];
+
+	// Depending on button direction get new path
+	if(moveUp)
+		gtk_tree_path_prev(treePath);
+	else
+		gtk_tree_path_next(treePath);
+	gtk_tree_model_get_iter(model, &iter, treePath);
+
+	// Swap iterations if valid
+	if(gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
+		gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
+
+	// Scroll to new position
+	gtk_tree_view_scroll_to_cell (treeView, treePath, NULL, FALSE, 0, 0);
+
+	// Free resources
+	gtk_tree_path_free(treePath);
+	gtk_tree_iter_free(iter2);
+	g_free(path);
+
+	// Perpetuate changes in account queue
+	if(moveUp)
+		account_list_move_up(indice);
+	else
+		account_list_move_down(indice);
+
+
+	// Set the order in the configuration file
+	dbus_set_accounts_order (account_list_get_ordered_list ());
 }
 
 /**
  * Called from move up account button signal
  */
-    static void
+	static void
 account_move_up_cb(GtkButton *button UNUSED, gpointer data)
 {
-    // Change tree view ordering and get indice changed
-    account_move(TRUE, data);
+	// Change tree view ordering and get indice changed
+	account_move(TRUE, data);
 }
 
 /**
  * Called from move down account button signal
  */
-    static void
+	static void
 account_move_down_cb(GtkButton *button UNUSED, gpointer data)
 {
-    // Change tree view ordering and get indice changed
-    account_move(FALSE, data);
+	// Change tree view ordering and get indice changed
+	account_move(FALSE, data);
 }
 
-static void 
+	static void 
 help_contents_cb (GtkWidget * widget,
-                  gpointer data UNUSED)
+		gpointer data UNUSED)
 {
-    GError *error = NULL;
-    
-    //gboolean success = gtk_show_uri (NULL, "ghelp: sflphone.xml", GDK_CURRENT_TIME, &error);
+	GError *error = NULL;
+
+	//gboolean success = gtk_show_uri (NULL, "ghelp: sflphone.xml", GDK_CURRENT_TIME, &error);
 	gnome_help_display ("sflphone.xml", "accounts", &error);
 
-    if (error != NULL)
-    {    
-            g_warning ("%s", error->message);
+	if (error != NULL)
+	{    
+		g_warning ("%s", error->message);
 
-            g_error_free (error);
-    }    
+		g_error_free (error);
+	}    
 }
 
-static void
+	static void
 close_dialog_cb (GtkWidget * widget,
-                  gpointer data UNUSED)
+		gpointer data UNUSED)
 {
-    gtk_dialog_response(GTK_DIALOG(accountListDialog), GTK_RESPONSE_ACCEPT);
+	gtk_dialog_response(GTK_DIALOG(accountListDialog), GTK_RESPONSE_ACCEPT);
 
 }
 
 /**
  * Account settings tab
  */
-    GtkWidget *
-create_account_list(GtkDialog * dialog)
-{
-    GtkWidget *table;
-    GtkWidget *scrolledWindow;
-    GtkWidget *buttonBox;
-    GtkCellRenderer *renderer;
-    GtkTreeView * treeView;
-    GtkTreeViewColumn *treeViewColumn;
-    GtkTreeSelection *treeSelection;
-    GtkRequisition requisition;
-
-    selectedAccount = NULL;
-
-    table = gtk_table_new (1, 2, FALSE/* homogeneous */);
-    gtk_table_set_col_spacings(GTK_TABLE(table), 10); 
-    gtk_container_set_border_width (GTK_CONTAINER (table), 10);    
-    
-    scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN);
-    gtk_table_attach (GTK_TABLE(table), scrolledWindow, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    accountStore = gtk_list_store_new(COLUMN_ACCOUNT_COUNT,
-            G_TYPE_STRING,  // Name
-            G_TYPE_STRING,  // Protocol
-            G_TYPE_STRING,  // Status
-            G_TYPE_BOOLEAN, // Enabled / Disabled
-            G_TYPE_POINTER  // Pointer to the Object
-            );
-
-    account_list_config_dialog_fill();
-
-    treeView = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL(accountStore)));
-    treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW (treeView));
-    g_signal_connect(G_OBJECT (treeSelection), "changed",
-            G_CALLBACK (select_account_cb),
-            accountStore);
-
-    renderer = gtk_cell_renderer_toggle_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes("Enabled", renderer, "active", COLUMN_ACCOUNT_ACTIVE , NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(treeView), treeViewColumn);
-    g_signal_connect( G_OBJECT(renderer) , "toggled" , G_CALLBACK(enable_account_cb), (gpointer)treeView );
-
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes ("Alias",
-            renderer,
-            "markup", COLUMN_ACCOUNT_ALIAS,
-            NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
-
-    // A double click on the account line opens the window to edit the account
-    g_signal_connect( G_OBJECT( treeView ) , "row-activated" , G_CALLBACK( edit_account_cb ) , NULL );
-
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Protocol"),
-            renderer,
-            "markup", COLUMN_ACCOUNT_TYPE,
-            NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
-
-    renderer = gtk_cell_renderer_text_new();
-    treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Status"),
-            renderer,
-            "markup", COLUMN_ACCOUNT_STATUS,
-            NULL);
-    gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
-
-    g_object_unref(G_OBJECT(accountStore));
-    
-    gtk_container_add (GTK_CONTAINER(scrolledWindow), GTK_WIDGET (treeView));
-    
-    /* The buttons to press! */    
-    buttonBox = gtk_vbutton_box_new();
-    gtk_box_set_spacing(GTK_BOX(buttonBox), 10);
-    gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_START);
-    gtk_table_attach (GTK_TABLE(table), buttonBox, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    accountMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
-    gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
-    gtk_box_pack_start(GTK_BOX(buttonBox), accountMoveUpButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(accountMoveUpButton), "clicked", G_CALLBACK(account_move_up_cb), treeView);
-
-    accountMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
-    gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
-    gtk_box_pack_start(GTK_BOX(buttonBox), accountMoveDownButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(accountMoveDownButton), "clicked", G_CALLBACK(account_move_down_cb), treeView);
-    
-    addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
-    g_signal_connect_swapped(G_OBJECT(addButton), "clicked",
-            G_CALLBACK(add_account_cb), NULL);
-    gtk_box_pack_start(GTK_BOX(buttonBox), addButton, FALSE, FALSE, 0);
-
-    editButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
-    gtk_widget_set_sensitive(GTK_WIDGET(editButton), FALSE);    
-    g_signal_connect_swapped(G_OBJECT(editButton), "clicked",
-            G_CALLBACK(edit_account_cb), NULL);
-    gtk_box_pack_start(GTK_BOX(buttonBox), editButton, FALSE, FALSE, 0);
-
-    deleteButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
-    gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);    
-    g_signal_connect_swapped(G_OBJECT(deleteButton), "clicked",
-            G_CALLBACK(delete_account_cb), NULL);
-    gtk_box_pack_start(GTK_BOX(buttonBox), deleteButton, FALSE, FALSE, 0);
-
-    /* help and close buttons */    
-    GtkWidget * buttonHbox = gtk_hbutton_box_new();
-    gtk_table_attach(GTK_TABLE(table), buttonHbox, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
-    
-    GtkWidget * helpButton = gtk_button_new_from_stock (GTK_STOCK_HELP);
-    g_signal_connect_swapped(G_OBJECT(helpButton), "clicked",
-             G_CALLBACK(help_contents_cb), NULL);
-    gtk_box_pack_start(GTK_BOX(buttonHbox), helpButton, FALSE, FALSE, 0);
-
-    GtkWidget * closeButton = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-    g_signal_connect_swapped(G_OBJECT(closeButton), "clicked",  G_CALLBACK(close_dialog_cb), NULL);
-    gtk_box_pack_start(GTK_BOX(buttonHbox), closeButton, FALSE, FALSE, 0);
-
-    gtk_widget_show_all(table);
-    // account_list_config_dialog_fill();
-
-    /* Resize the scrolledWindow for a better view */
-    gtk_widget_size_request(GTK_WIDGET(treeView), &requisition);
-    gtk_widget_set_size_request(GTK_WIDGET(scrolledWindow), requisition.width + 20, requisition.height);
-    GtkRequisition requisitionButton;
-    gtk_widget_size_request(GTK_WIDGET(deleteButton), &requisitionButton);
-    gtk_widget_set_size_request(GTK_WIDGET(closeButton), requisitionButton.width, -1);
-    gtk_widget_set_size_request(GTK_WIDGET(helpButton), requisitionButton.width, -1);    
-
-    gtk_widget_show_all(table);
-
-    return table;
+GtkWidget* create_account_list(GtkDialog * dialog) {
+
+	GtkWidget *table, *scrolledWindow, *buttonBox;
+	GtkCellRenderer *renderer;
+	GtkTreeView * treeView;
+	GtkTreeViewColumn *treeViewColumn;
+	GtkTreeSelection *treeSelection;
+	GtkRequisition requisition;
+
+	selectedAccount = NULL;
+
+	table = gtk_table_new (1, 2, FALSE/* homogeneous */);
+	gtk_table_set_col_spacings(GTK_TABLE(table), 10); 
+	gtk_container_set_border_width (GTK_CONTAINER (table), 10);    
+
+	scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN);
+	gtk_table_attach (GTK_TABLE(table), scrolledWindow, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+	accountStore = gtk_list_store_new(COLUMN_ACCOUNT_COUNT,
+			G_TYPE_STRING,  // Name
+			G_TYPE_STRING,  // Protocol
+			G_TYPE_STRING,  // Status
+			G_TYPE_BOOLEAN, // Enabled / Disabled
+			G_TYPE_POINTER  // Pointer to the Object
+			);
+
+	account_list_config_dialog_fill();
+
+	treeView = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL(accountStore)));
+	treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW (treeView));
+	g_signal_connect(G_OBJECT (treeSelection), "changed",
+			G_CALLBACK (select_account_cb),
+			accountStore);
+
+	renderer = gtk_cell_renderer_toggle_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes("Enabled", renderer, "active", COLUMN_ACCOUNT_ACTIVE , NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(treeView), treeViewColumn);
+	g_signal_connect (G_OBJECT(renderer) , "toggled" , G_CALLBACK (enable_account_cb), (gpointer)treeView );
+
+	// gtk_cell_renderer_toggle_set_activatable (renderer, FALSE); 
+
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes ("Alias",
+			renderer,
+			"markup", COLUMN_ACCOUNT_ALIAS,
+			NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
+
+	// A double click on the account line opens the window to edit the account
+	g_signal_connect( G_OBJECT( treeView ) , "row-activated" , G_CALLBACK( edit_account_cb ) , NULL );
+
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Protocol"),
+			renderer,
+			"markup", COLUMN_ACCOUNT_TYPE,
+			NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
+
+	renderer = gtk_cell_renderer_text_new();
+	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Status"),
+			renderer,
+			"markup", COLUMN_ACCOUNT_STATUS,
+			NULL);
+	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
+
+	g_object_unref(G_OBJECT(accountStore));
+
+	gtk_container_add (GTK_CONTAINER(scrolledWindow), GTK_WIDGET (treeView));
+
+	/* The buttons to press! */    
+	buttonBox = gtk_vbutton_box_new();
+	gtk_box_set_spacing(GTK_BOX(buttonBox), 10);
+	gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_START);
+	gtk_table_attach (GTK_TABLE(table), buttonBox, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+	accountMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
+	gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
+	gtk_box_pack_start(GTK_BOX(buttonBox), accountMoveUpButton, FALSE, FALSE, 0);
+	g_signal_connect(G_OBJECT(accountMoveUpButton), "clicked", G_CALLBACK(account_move_up_cb), treeView);
+
+	accountMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
+	gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
+	gtk_box_pack_start(GTK_BOX(buttonBox), accountMoveDownButton, FALSE, FALSE, 0);
+	g_signal_connect(G_OBJECT(accountMoveDownButton), "clicked", G_CALLBACK(account_move_down_cb), treeView);
+
+	addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
+	g_signal_connect_swapped(G_OBJECT(addButton), "clicked",
+			G_CALLBACK(add_account_cb), NULL);
+	gtk_box_pack_start(GTK_BOX(buttonBox), addButton, FALSE, FALSE, 0);
+
+	editButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+	gtk_widget_set_sensitive(GTK_WIDGET(editButton), FALSE);    
+	g_signal_connect_swapped(G_OBJECT(editButton), "clicked",
+			G_CALLBACK(edit_account_cb), NULL);
+	gtk_box_pack_start(GTK_BOX(buttonBox), editButton, FALSE, FALSE, 0);
+
+	deleteButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+	gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);    
+	g_signal_connect_swapped(G_OBJECT(deleteButton), "clicked",
+			G_CALLBACK(delete_account_cb), NULL);
+	gtk_box_pack_start(GTK_BOX(buttonBox), deleteButton, FALSE, FALSE, 0);
+
+	/* help and close buttons */    
+	GtkWidget * buttonHbox = gtk_hbutton_box_new();
+	gtk_table_attach(GTK_TABLE(table), buttonHbox, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
+
+	GtkWidget * helpButton = gtk_button_new_from_stock (GTK_STOCK_HELP);
+	g_signal_connect_swapped(G_OBJECT(helpButton), "clicked",
+			G_CALLBACK(help_contents_cb), NULL);
+	gtk_box_pack_start(GTK_BOX(buttonHbox), helpButton, FALSE, FALSE, 0);
+
+	GtkWidget * closeButton = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+	g_signal_connect_swapped(G_OBJECT(closeButton), "clicked",  G_CALLBACK(close_dialog_cb), NULL);
+	gtk_box_pack_start(GTK_BOX(buttonHbox), closeButton, FALSE, FALSE, 0);
+
+	gtk_widget_show_all(table);
+	// account_list_config_dialog_fill();
+
+	/* Resize the scrolledWindow for a better view */
+	gtk_widget_size_request(GTK_WIDGET(treeView), &requisition);
+	gtk_widget_set_size_request(GTK_WIDGET(scrolledWindow), requisition.width + 20, requisition.height);
+	GtkRequisition requisitionButton;
+	gtk_widget_size_request(GTK_WIDGET(deleteButton), &requisitionButton);
+	gtk_widget_set_size_request(GTK_WIDGET(closeButton), requisitionButton.width, -1);
+	gtk_widget_set_size_request(GTK_WIDGET(helpButton), requisitionButton.width, -1);    
+
+	gtk_widget_show_all(table);
+
+	return table;
 }
 
-    void
+	void
 show_account_list_config_dialog(void)
 {
-    GtkWidget * accountFrame;
-    GtkWidget * tab;
-
-    accountListDialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Accounts"),
-                GTK_WINDOW(get_main_window()),
-                GTK_DIALOG_DESTROY_WITH_PARENT,
-                NULL));
-
-    /* Set window properties */
-    gtk_dialog_set_has_separator(accountListDialog, FALSE);
-    gtk_container_set_border_width(GTK_CONTAINER(accountListDialog), 0);
-    gtk_window_set_resizable(GTK_WINDOW(accountListDialog), FALSE);
-    
-    gnome_main_section_new (_("Configured Accounts"), &accountFrame);
-    gtk_box_pack_start( GTK_BOX(accountListDialog->vbox ), accountFrame , TRUE, TRUE, 0);
-    gtk_widget_show(accountFrame);
-
-    /* Accounts tab */
-    tab = create_account_list(accountListDialog);
-    gtk_widget_show(tab);    
-    gtk_container_add(GTK_CONTAINER(accountFrame), tab);
- 
-    /* Status bar for the account list */
-    status_bar = gtk_statusbar_new();
-    gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (status_bar), FALSE);    
-    gtk_widget_show(status_bar);
-    gtk_box_pack_start(GTK_BOX(accountListDialog->vbox ), status_bar, TRUE, TRUE, 0);
-
-    int number_accounts = account_list_get_size();
-    if (number_accounts) {
-        gchar * message = g_strdup_printf(n_("There is %d active account",
-                                             "There are %d active accounts", number_accounts),
-                                          number_accounts);
-        gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
-        g_free(message);
-    } else {
-        gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, _("You have no active account"));        
-    }
-    
-    gtk_dialog_run(accountListDialog);
-    
-    status_bar_display_account ();
-
-    gtk_widget_destroy(GTK_WIDGET(accountListDialog));
-
-    accountListDialog = NULL;
-    
-    update_actions ();
+	GtkWidget * accountFrame;
+	GtkWidget * tab;
+
+	accountListDialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Accounts"),
+				GTK_WINDOW(get_main_window()),
+				GTK_DIALOG_DESTROY_WITH_PARENT,
+				NULL));
+
+	/* Set window properties */
+	gtk_dialog_set_has_separator(accountListDialog, FALSE);
+	gtk_container_set_border_width(GTK_CONTAINER(accountListDialog), 0);
+	gtk_window_set_resizable(GTK_WINDOW(accountListDialog), FALSE);
+
+	gnome_main_section_new (_("Configured Accounts"), &accountFrame);
+	gtk_box_pack_start( GTK_BOX(accountListDialog->vbox ), accountFrame , TRUE, TRUE, 0);
+	gtk_widget_show(accountFrame);
+
+	/* Accounts tab */
+	tab = create_account_list(accountListDialog);
+	gtk_widget_show(tab);    
+	gtk_container_add(GTK_CONTAINER(accountFrame), tab);
+
+	/* Status bar for the account list */
+	status_bar = gtk_statusbar_new();
+	gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (status_bar), FALSE);    
+	gtk_widget_show(status_bar);
+	gtk_box_pack_start(GTK_BOX(accountListDialog->vbox ), status_bar, TRUE, TRUE, 0);
+
+	int number_accounts = account_list_get_size();
+	if (number_accounts) {
+		gchar * message = g_strdup_printf(n_("There is %d active account",
+					"There are %d active accounts", number_accounts),
+				number_accounts);
+		gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
+		g_free(message);
+	} else {
+		gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, _("You have no active account"));        
+	}
+
+	gtk_dialog_run(accountListDialog);
+
+	status_bar_display_account ();
+
+	gtk_widget_destroy(GTK_WIDGET(accountListDialog));
+
+	accountListDialog = NULL;
+
+	update_actions ();
+}
+
+
+/**
+ * Delete an account
+ */
+static void delete_account_cb (void) {
+	
+	if(selectedAccount != NULL) {
+		dbus_remove_account(selectedAccount->accountID);
+	}
+}
+
+
+/**
+ * Edit an account
+ */
+static void edit_account_cb (void) {
+
+	if(selectedAccount != NULL) {
+		show_account_window (selectedAccount);
+	} 
+}
+
+/**
+ * Add an account
+ */
+static void add_account_cb (void) {
+
+	show_account_window (NULL);
 }
diff --git a/sflphone-client-gnome/src/config/accountlistconfigdialog.h b/sflphone-client-gnome/src/config/accountlistconfigdialog.h
index 43e1ab228b..0990ef93d4 100644
--- a/sflphone-client-gnome/src/config/accountlistconfigdialog.h
+++ b/sflphone-client-gnome/src/config/accountlistconfigdialog.h
@@ -21,7 +21,15 @@
 #ifndef __SFL_ACCOUNTLISTDIALOG_H__
 #define __SFL_ACCOUNTLISTDIALOG_H__
 
+#include <sflphone_const.h>
+
 void show_account_list_config_dialog(void);
 void account_list_config_dialog_fill(void);
+   
+static void delete_account_cb (void);
+
+static void add_account_cb (void);
+
+static void edit_account_cb (void);
 
 #endif
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index 1a8bf8b9de..25700ea5cf 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -54,13 +54,8 @@ GtkWidget * status;
 static int history_limit;
 static gboolean history_enabled = TRUE;
 
-
-GHashTable * directIpCallsProperties = NULL;
-
-
-	static void
-set_md5_hash_cb(GtkWidget *widget UNUSED, gpointer data UNUSED)
-{
+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);
 }
@@ -104,316 +99,272 @@ clean_history( void )
 	calllist_clean_history();
 }
 
-static void show_advanced_zrtp_options_cb(GtkWidget *widget UNUSED, gpointer data)
-{
-	DEBUG("Advanced options for ZRTP");
-	show_advanced_zrtp_options((GHashTable *) data);
-}
-
-static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data)
-{
-	DEBUG("Advanced options for TLS");
-	show_advanced_tls_options((GHashTable *) data);
-}
-
-static void key_exchange_changed_cb(GtkWidget *widget, gpointer data)
-{
-	DEBUG("Key exchange changed");
-	if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "ZRTP") == 0) {
-	    gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
-	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
-	} 
-	else if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "SDES") == 0) {
-	    gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
-	}
-	else {
-		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-		DEBUG("Setting key exchange %s to %s\n", ACCOUNT_KEY_EXCHANGE, KEY_EXCHANGE_NONE);
-		g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
-		g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(KEY_EXCHANGE_NONE));
-	}
-}
-
-static void use_sip_tls_cb(GtkWidget *widget, gpointer data)
-{
-	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-		DEBUG("Using sips");
-		gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);  
-		g_hash_table_replace(directIpCallsProperties,
-				g_strdup(TLS_ENABLE), g_strdup("true"));    	          
-	} else {
-		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-		g_hash_table_replace(directIpCallsProperties,
-				g_strdup(TLS_ENABLE), g_strdup("false"));             
-	}   
-}
-
-
-static void ip2ip_local_address_changed_cb(GtkWidget *widget, gpointer data)
-{
-	DEBUG("ip2ip_local_address_changed_cb\n");
-	g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget))));
-}
-
-static void ip2ip_local_port_changed_cb(GtkWidget *widget, gpointer data)
-{
-	DEBUG("ip2ip_local_port_changed_cb\n");
-	gint new_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
-	DEBUG("new_port %i", new_port);
-	g_hash_table_replace(directIpCallsProperties,
-			g_strdup(LOCAL_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(widget)))));
-}
-
-
-GtkWidget* create_direct_ip_calls_tab()
-{
-	GtkWidget * frame;
-	GtkWidget * table;
-	GtkWidget * label;
-	GtkWidget * explanationLabel;
-
-	GtkWidget * localPortLabel;
-	// GtkWidget * localPortSpinBox;
-	GtkWidget * localAddressLabel;
-	// GtkWidget * localAddressCombo;
-
-	GtkWidget * keyExchangeCombo;
-	GtkWidget * advancedZrtpButton;
-	GtkWidget * useSipTlsCheckBox;  
-
-	gchar * curSRTPEnabled = "false";
-	gchar * curTlsEnabled = "false";    
-	gchar * curKeyExchange = "0";
-	gchar * description;
-
-	gchar * local_interface;
-	gchar * local_address;
-	gchar * local_port;
-
-	//directIpCallsProperties = sflphone_get_ip2ip_properties();
-	sflphone_get_ip2ip_properties(&directIpCallsProperties);
-
-	if(directIpCallsProperties != NULL) {
-		DEBUG("got a directIpCallsProperties");
-		local_interface = g_hash_table_lookup(directIpCallsProperties, LOCAL_INTERFACE);
-		local_port = g_hash_table_lookup(directIpCallsProperties, LOCAL_PORT);
-		DEBUG("    local interface = %s", local_interface);
-		DEBUG("    local port = %s", local_port);
-		curSRTPEnabled = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_SRTP_ENABLED);
-		DEBUG("    curSRTPEnabled = %s", curSRTPEnabled);
-		curKeyExchange = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_KEY_EXCHANGE);
-		curTlsEnabled = g_hash_table_lookup(directIpCallsProperties, TLS_ENABLE);
-	}
-
-
-
-	GtkWidget * vbox = gtk_vbox_new(FALSE, 10);
-	gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
-
-	description = g_markup_printf_escaped(_("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."));
-	explanationLabel = gtk_label_new(NULL);
-	gtk_label_set_markup(GTK_LABEL(explanationLabel), description);
-	gtk_misc_set_alignment(GTK_MISC(explanationLabel), 0, 0.5);    
-	gtk_box_pack_start(GTK_BOX(vbox), explanationLabel, FALSE, FALSE, 0);
-
-	/**
-	 * Network Interface Section 
-	 */
-	gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 3);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
-
-	/**
-	 * Retreive the list of IP interface from the 
-	 * the daemon and build the combo box.
-	 */
-
-	GtkListStore * ipInterfaceListStore; 
-	GtkTreeIter iter;
-
-	ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
-	localAddressLabel = gtk_label_new_with_mnemonic (_("Local address"));    
-	gtk_table_attach ( GTK_TABLE( table ), localAddressLabel, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (localAddressLabel), 0, 0.5);
-
-	GtkTreeIter current_local_address_iter = iter;   
-	gchar ** iface_list = NULL;
-	// iface_list = (gchar**) dbus_get_all_ip_interface();
-	iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
-	gchar ** iface;
-
-	gboolean iface_found = FALSE;
-
-	if (iface_list != NULL) {
-
-		for (iface = iface_list; *iface; iface++) {         
-			gtk_list_store_append(ipInterfaceListStore, &iter );
-			gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
-
-			if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
-				DEBUG("Setting active local address combo box");
-				current_local_address_iter = iter;
-				iface_found = TRUE;
-			}
-		}
-
-		if(!iface_found) {
-			DEBUG("Did not find local ip address, take fisrt in the list");
-			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_address_iter);
-		}
-	}
-
-
-
-
-	localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
-	gtk_label_set_mnemonic_widget(GTK_LABEL(localAddressLabel), localAddressCombo);
-	gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	g_object_unref(G_OBJECT(ipInterfaceListStore));	
-
-	GtkCellRenderer * ipInterfaceCellRenderer;
-	ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
-	gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_address_iter);
-	g_signal_connect (G_OBJECT(GTK_COMBO_BOX(localAddressCombo)), "changed", G_CALLBACK (ip2ip_local_address_changed_cb), localAddressCombo);
-
-	g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
-
-
-	/**
-	 * Local port
-	 */	    
-	/** SIP port information */
-	localPortLabel = gtk_label_new_with_mnemonic (_("Local port"));
-	gtk_table_attach_defaults(GTK_TABLE(table), localPortLabel, 0, 1, 1, 2);
-
-	gtk_misc_set_alignment(GTK_MISC (localPortLabel), 0, 0.5);
-	localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget (GTK_LABEL (localPortLabel), localPortSpinBox); 
-	gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
-
-	gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
-	g_signal_connect (G_OBJECT(localPortSpinBox), "changed", G_CALLBACK (ip2ip_local_port_changed_cb), localPortSpinBox);
-
-
-	GtkWidget *applyModificationButton = gtk_button_new_from_stock(GTK_STOCK_APPLY);
-	// g_signal_connect( G_OBJECT(applyModificationButton) , "clicked" , G_CALLBACK( update_ip_address_port_cb ), localPortSpinBox);
-	gtk_table_attach( GTK_TABLE(table), applyModificationButton, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-
-	/**
-	 * Security Section 
-	 */
-	gnome_main_section_new_with_table (_("Security"), &frame, &table, 2, 3);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
-
-	GtkWidget * sipTlsAdvancedButton;
-	sipTlsAdvancedButton = gtk_button_new_from_stock(GTK_STOCK_EDIT);
-	gtk_table_attach_defaults(GTK_TABLE(table), sipTlsAdvancedButton, 2, 3, 0, 1);
-	gtk_widget_set_sensitive(GTK_WIDGET(sipTlsAdvancedButton), FALSE);    
-	g_signal_connect(G_OBJECT(sipTlsAdvancedButton), "clicked", G_CALLBACK(show_advanced_tls_options_cb), directIpCallsProperties);
-
-	useSipTlsCheckBox = gtk_check_button_new_with_mnemonic(_("Use TLS transport (sips)"));
-	g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK(use_sip_tls_cb), sipTlsAdvancedButton);
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox), (g_strcmp0(curTlsEnabled, "false") == 0) ? FALSE:TRUE);
-	gtk_table_attach_defaults(GTK_TABLE(table), useSipTlsCheckBox, 0, 2, 0, 1);
-
-	label = gtk_label_new_with_mnemonic (_("SRTP key exchange"));
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	keyExchangeCombo = gtk_combo_box_new_text();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
-	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP");
-	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES");
-	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled"));      
-
-	advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
-	g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), directIpCallsProperties);
-
-	if (g_strcasecmp(curKeyExchange, ZRTP) == 0) {
-	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0);
-	}
-	else if(g_strcasecmp(curKeyExchange, SDES) == 0) {
-	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1);
-	}
-	else {
-		gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
-		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-	}
-
-	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), advancedZrtpButton);
-
-	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-	gtk_table_attach_defaults(GTK_TABLE(table), keyExchangeCombo, 1, 2, 1, 2);    
-	gtk_table_attach_defaults(GTK_TABLE(table), advancedZrtpButton, 2, 3, 1, 2);
-
-	gtk_widget_show_all(table);
-
-	GtkRequisition requisition;
-	gtk_widget_size_request(GTK_WIDGET(table), &requisition);
-	gtk_widget_set_size_request(GTK_WIDGET(explanationLabel), requisition.width * 1.5, -1);        
-	gtk_label_set_line_wrap(GTK_LABEL(explanationLabel), TRUE);
-
-	gtk_widget_show_all(vbox);
-
-	return vbox;
-}
 /*
-   GtkWidget* create_network_tab()
-   {
-   GtkWidget * frame;
-   GtkWidget * table;
-   GtkWidget * label;
-   GtkWidget * ret;
-   gchar * description;
-
-   ret = gtk_vbox_new(FALSE, 10);
-   gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-
-// SIP port information
-int curPort = dbus_get_sip_port();
-if(curPort <= 0 || curPort > 65535) {
-curPort = 5060; 
-}
-
-int account_number = account_list_get_sip_account_number();
-DEBUG("sip account number = %i", account_number);
-
-gnome_main_section_new_with_table (_("SIP Port"), &frame, &table, 1, 3);
-gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-gtk_widget_set_sensitive(GTK_WIDGET(frame),(account_number == 0) ? FALSE:TRUE);
-
-GtkWidget *applySipPortButton = gtk_button_new_from_stock(GTK_STOCK_APPLY);
-GtkWidget *entryPort; 
-
-label = gtk_label_new(_("UDP Transport"));
-gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-entryPort = gtk_spin_button_new_with_range(1, 65535, 1);
-gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPort);
-gtk_spin_button_set_value(GTK_SPIN_BUTTON(entryPort), curPort);
-g_signal_connect( G_OBJECT( applySipPortButton) , "clicked" , G_CALLBACK( update_port_cb ) , entryPort);
-
-gtk_table_attach( GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-gtk_table_attach( GTK_TABLE(table), entryPort, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-gtk_table_attach( GTK_TABLE(table), applySipPortButton, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-gtk_widget_show_all(ret);
-
-return ret;
-}
- */
-
-	GtkWidget*
-create_general_settings ()
-{
+//static void show_advanced_zrtp_options_cb(GtkWidget *widget UNUSED, gpointer data)
+//{
+//	DEBUG("Advanced options for ZRTP");
+//	show_advanced_zrtp_options((GHashTable *) data);
+//}
+//
+//static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data)
+//{
+//	DEBUG("Advanced options for TLS");
+//	show_advanced_tls_options((GHashTable *) data);
+//}
+//
+//static void key_exchange_changed_cb(GtkWidget *widget, gpointer data)
+//{
+//	DEBUG("Key exchange changed");
+//	if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "ZRTP") == 0) {
+//	    gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
+//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
+//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
+//	} 
+//	else if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "SDES") == 0) {
+//	    gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
+//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
+//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
+//	}
+//	else {
+//		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
+//		DEBUG("Setting key exchange %s to %s\n", ACCOUNT_KEY_EXCHANGE, KEY_EXCHANGE_NONE);
+//		g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
+//		g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(KEY_EXCHANGE_NONE));
+//	}
+//}
+//
+//static void use_sip_tls_cb(GtkWidget *widget, gpointer data)
+//{
+//	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
+//		DEBUG("Using sips");
+//		gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);  
+//		g_hash_table_replace(directIpCallsProperties,
+//				g_strdup(TLS_ENABLE), g_strdup("true"));    	          
+//	} else {
+//		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
+//		g_hash_table_replace(directIpCallsProperties,
+//				g_strdup(TLS_ENABLE), g_strdup("false"));             
+//	}   
+//}
+//
+//
+//static void ip2ip_local_address_changed_cb(GtkWidget *widget, gpointer data)
+//{
+//	DEBUG("ip2ip_local_address_changed_cb\n");
+//	g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget))));
+//}
+//
+//static void ip2ip_local_port_changed_cb(GtkWidget *widget, gpointer data)
+//{
+//	DEBUG("ip2ip_local_port_changed_cb\n");
+//	gint new_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
+//	DEBUG("new_port %i", new_port);
+//	g_hash_table_replace(directIpCallsProperties,
+//			g_strdup(LOCAL_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(widget)))));
+//}
+//
+//
+//GtkWidget* create_direct_ip_calls_tab()
+//{
+//	GtkWidget * frame;
+//	GtkWidget * table;
+//	GtkWidget * label;
+//	GtkWidget * explanationLabel;
+//
+//	GtkWidget * localPortLabel;
+//	// GtkWidget * localPortSpinBox;
+//	GtkWidget * localAddressLabel;
+//	// GtkWidget * localAddressCombo;
+//
+//	GtkWidget * keyExchangeCombo;
+//	GtkWidget * advancedZrtpButton;
+//	GtkWidget * useSipTlsCheckBox;  
+//
+//	gchar * curSRTPEnabled = "false";
+//	gchar * curTlsEnabled = "false";    
+//	gchar * curKeyExchange = "0";
+//	gchar * description;
+//
+//	gchar * local_interface;
+//	gchar * local_address;
+//	gchar * local_port;
+//
+//	//directIpCallsProperties = sflphone_get_ip2ip_properties();
+//	sflphone_get_ip2ip_properties (&directIpCallsProperties);
+//
+//	if(directIpCallsProperties != NULL) {
+//		DEBUG("got a directIpCallsProperties");
+//		local_interface = g_hash_table_lookup(directIpCallsProperties, LOCAL_INTERFACE);
+//		local_port = g_hash_table_lookup(directIpCallsProperties, LOCAL_PORT);
+//		DEBUG("    local interface = %s", local_interface);
+//		DEBUG("    local port = %s", local_port);
+//		curSRTPEnabled = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_SRTP_ENABLED);
+//		DEBUG("    curSRTPEnabled = %s", curSRTPEnabled);
+//		curKeyExchange = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_KEY_EXCHANGE);
+//		curTlsEnabled = g_hash_table_lookup(directIpCallsProperties, TLS_ENABLE);
+//	}
+//
+//
+//
+//	GtkWidget * vbox = gtk_vbox_new(FALSE, 10);
+//	gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
+//
+//	description = g_markup_printf_escaped(_("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."));
+//	explanationLabel = gtk_label_new(NULL);
+//	gtk_label_set_markup(GTK_LABEL(explanationLabel), description);
+//	gtk_misc_set_alignment(GTK_MISC(explanationLabel), 0, 0.5);    
+//	gtk_box_pack_start(GTK_BOX(vbox), explanationLabel, FALSE, FALSE, 0);
+//
+//	/**
+//	 * Network Interface Section 
+//	 */
+//	gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 3);
+//	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+//	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
+//	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
+//	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+//
+//	/**
+//	 * Retreive the list of IP interface from the 
+//	 * the daemon and build the combo box.
+//	 */
+//
+//	GtkListStore * ipInterfaceListStore; 
+//	GtkTreeIter iter;
+//
+//	ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
+//	localAddressLabel = gtk_label_new_with_mnemonic (_("Local address"));    
+//	gtk_table_attach ( GTK_TABLE( table ), localAddressLabel, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+//	gtk_misc_set_alignment(GTK_MISC (localAddressLabel), 0, 0.5);
+//
+//	GtkTreeIter current_local_address_iter = iter;   
+//	gchar ** iface_list = NULL;
+//	// iface_list = (gchar**) dbus_get_all_ip_interface();
+//	iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
+//	gchar ** iface;
+//
+//	gboolean iface_found = FALSE;
+//
+//	if (iface_list != NULL) {
+//
+//		for (iface = iface_list; *iface; iface++) {         
+//			gtk_list_store_append(ipInterfaceListStore, &iter );
+//			gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
+//
+//			if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
+//				DEBUG("Setting active local address combo box");
+//				current_local_address_iter = iter;
+//				iface_found = TRUE;
+//			}
+//		}
+//
+//		if(!iface_found) {
+//			DEBUG("Did not find local ip address, take fisrt in the list");
+//			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_address_iter);
+//		}
+//	}
+//
+//
+//
+//
+//	localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
+//	gtk_label_set_mnemonic_widget(GTK_LABEL(localAddressLabel), localAddressCombo);
+//	gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+//	g_object_unref(G_OBJECT(ipInterfaceListStore));	
+//
+//	GtkCellRenderer * ipInterfaceCellRenderer;
+//	ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
+//	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
+//	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
+//	gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_address_iter);
+//	g_signal_connect (G_OBJECT(GTK_COMBO_BOX(localAddressCombo)), "changed", G_CALLBACK (ip2ip_local_address_changed_cb), localAddressCombo);
+//
+//	g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
+//
+//
+//	/**
+//	 * Local port
+//	 */	    
+//	/** SIP port information */
+//	localPortLabel = gtk_label_new_with_mnemonic (_("Local port"));
+//	gtk_table_attach_defaults(GTK_TABLE(table), localPortLabel, 0, 1, 1, 2);
+//
+//	gtk_misc_set_alignment(GTK_MISC (localPortLabel), 0, 0.5);
+//	localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
+//	gtk_label_set_mnemonic_widget (GTK_LABEL (localPortLabel), localPortSpinBox); 
+//	gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
+//
+//	gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
+//	g_signal_connect (G_OBJECT(localPortSpinBox), "changed", G_CALLBACK (ip2ip_local_port_changed_cb), localPortSpinBox);
+//
+//
+//	GtkWidget *applyModificationButton = gtk_button_new_from_stock(GTK_STOCK_APPLY);
+//	// g_signal_connect( G_OBJECT(applyModificationButton) , "clicked" , G_CALLBACK( update_ip_address_port_cb ), localPortSpinBox);
+//	gtk_table_attach( GTK_TABLE(table), applyModificationButton, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+//
+//
+//	/**
+//	 * Security Section 
+//	 */
+//	gnome_main_section_new_with_table (_("Security"), &frame, &table, 2, 3);
+//	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+//	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
+//	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
+//	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
+//
+//	GtkWidget * sipTlsAdvancedButton;
+//	sipTlsAdvancedButton = gtk_button_new_from_stock(GTK_STOCK_EDIT);
+//	gtk_table_attach_defaults(GTK_TABLE(table), sipTlsAdvancedButton, 2, 3, 0, 1);
+//	gtk_widget_set_sensitive(GTK_WIDGET(sipTlsAdvancedButton), FALSE);    
+//	g_signal_connect(G_OBJECT(sipTlsAdvancedButton), "clicked", G_CALLBACK(show_advanced_tls_options_cb), directIpCallsProperties);
+//
+//	useSipTlsCheckBox = gtk_check_button_new_with_mnemonic(_("Use TLS transport (sips)"));
+//	g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK(use_sip_tls_cb), sipTlsAdvancedButton);
+//	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox), (g_strcmp0(curTlsEnabled, "false") == 0) ? FALSE:TRUE);
+//	gtk_table_attach_defaults(GTK_TABLE(table), useSipTlsCheckBox, 0, 2, 0, 1);
+//
+//	label = gtk_label_new_with_mnemonic (_("SRTP key exchange"));
+//	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+//	keyExchangeCombo = gtk_combo_box_new_text();
+//	gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
+//	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP");
+//	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES");
+//	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled"));      
+//
+//	advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
+//	g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), directIpCallsProperties);
+//
+//	if (g_strcasecmp(curKeyExchange, ZRTP) == 0) {
+//	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0);
+//	}
+//	else if(g_strcasecmp(curKeyExchange, SDES) == 0) {
+//	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1);
+//	}
+//	else {
+//		gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
+//		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
+//	}
+//
+//	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), advancedZrtpButton);
+//
+//	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+//	gtk_table_attach_defaults(GTK_TABLE(table), keyExchangeCombo, 1, 2, 1, 2);    
+//	gtk_table_attach_defaults(GTK_TABLE(table), advancedZrtpButton, 2, 3, 1, 2);
+//
+//	gtk_widget_show_all(table);
+//
+//	GtkRequisition requisition;
+//	gtk_widget_size_request(GTK_WIDGET(table), &requisition);
+//	gtk_widget_set_size_request(GTK_WIDGET(explanationLabel), requisition.width * 1.5, -1);        
+//	gtk_label_set_line_wrap(GTK_LABEL(explanationLabel), TRUE);
+//
+//	gtk_widget_show_all(vbox);
+//
+//	return vbox;
+//}
+//
+
+GtkWidget* create_general_settings () {
 
 	GtkWidget *ret;
 
@@ -505,7 +456,7 @@ void save_configuration_parameters (void) {
 	dbus_set_history_limit (history_limit);
 
 	// Direct IP calls config
-	dbus_set_ip2ip_details(directIpCallsProperties);
+	// dbus_set_ip2ip_details (directIpCallsProperties);
 }
 
 void history_load_configuration ()
@@ -566,18 +517,8 @@ show_preferences_dialog ()
 	tab = create_hooks_settings();
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Hooks")));
 	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
-	/*
-	// Network tab
-	tab = create_network_tab();
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Network")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
-	 */
-	// Direct IP calls tab
-	tab = create_direct_ip_calls_tab();
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Direct IP calls")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
-
-	gtk_notebook_set_current_page( GTK_NOTEBOOK( notebook) ,  0);
+		
+	gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook) ,  0);
 
 	result = gtk_dialog_run(dialog);
 
diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h
index 52e786ade3..bebfbe834d 100644
--- a/sflphone-client-gnome/src/sflphone_const.h
+++ b/sflphone-client-gnome/src/sflphone_const.h
@@ -43,7 +43,7 @@
 #define c_(COMMENT,STRING)    gettext(STRING) 
 #define n_(SING,PLUR,COUNT)   ngettext(SING,PLUR,COUNT)
 
-
+#define IP2IP	"IP2IP"
 
 /** Warnings unused variables **/
 #define UNUSED_VAR(var)      (void*)var
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 0f404b23d2..e9404f5a9c 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2273,6 +2273,7 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
     _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, "Direct calls"), IP2IP_PROFILE);
 
     // Init display name to the username under which
     // this sflphone instance is running.
@@ -3321,9 +3322,8 @@ void ManagerImpl::setAccountsOrder (const std::string& order)
     setConfig (PREFERENCES, CONFIG_ACCOUNTS_ORDER, order);
 }
 
-std::vector< std::string >
-ManagerImpl::getAccountList()
-{
+std::vector< std::string > ManagerImpl::getAccountList() {
+
     std::vector< std::string > v;
     std::vector< std::string > account_order;
     unsigned int i;
@@ -3331,6 +3331,11 @@ ManagerImpl::getAccountList()
     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 no order has been set, load the default one
     // ie according to the creation date.
 
-- 
GitLab


From 979365e7a12d403efdf93cf4f4781b34d248d242 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 3 Feb 2010 16:51:22 -0500
Subject: [PATCH 027/160] [#2725] Send REGISTER with twice the expiration value
 on SIP error 423

When receiving an error 423 (Expiration interval too short),
update expiration value and send another registration request.
---
 sflphone-common/src/sip/sipaccount.h    | 17 ++++++++++++++++-
 sflphone-common/src/sip/sipvoiplink.cpp | 15 +++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index 7e2e3386d8..dd9782f2d9 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -87,8 +87,23 @@ class SIPAccount : public Account
         
         inline bool isResolveOnce(void) { return _resolveOnce; }
         
+
+	/**
+	 * A client sendings a REGISTER request MAY suggest an expiration
+	 * interval that indicates how long the client would like the
+	 * registration to be valid.
+	 *
+	 * @return A string describing the expiration value.
+	 */
         inline std::string& getRegistrationExpire(void) { return _registrationExpire; }
-        
+
+	/**
+	 * Setting the Expiration Interval of Contact Addresses.
+	 *
+	 * @param A string describing the expiration value.
+	 */ 
+	inline void setRegistrationExpire(std::string expr) { _registrationExpire = expr; }
+
         bool fullMatch(const std::string& username, const std::string& hostname);
         bool userMatch(const std::string& username);
         bool hostnameMatch(const std::string& hostname);
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 92f91a7362..7b8f86db89 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3301,6 +3301,21 @@ void regc_cb (struct pjsip_regc_cbparam *param)
                     account->setRegistrationState (ErrorAuth);
                     break;
 
+	        case 423: { // Expiration Interval Too Brief
+
+		    int expire_value;
+		    std::istringstream stream (account->getRegistrationExpire());
+		    stream >> expire_value;
+
+		    std::stringstream out;
+		    out << (expire_value * 2);
+		    std::string s = out.str(); 
+
+		    Manager::instance().setConfig(account->getAccountID(), CONFIG_ACCOUNT_REGISTRATION_EXPIRE, s);
+		    account->registerVoIPLink();
+		}
+		    break;
+
                 default:
                     account->setRegistrationState (Error);
                     break;
-- 
GitLab


From d0f9101e389eb8c326594a536438c411d876285d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 3 Feb 2010 16:53:05 -0500
Subject: [PATCH 028/160] [#2722] Make sure TLS transport is not used on normal
 IP2IP calls

---
 sflphone-common/src/dbus/callmanager.cpp      | 12 -----
 .../src/dbus/configurationmanager.cpp         | 52 ++-----------------
 sflphone-common/src/sip/sdp.cpp               |  8 ---
 sflphone-common/src/sip/sipvoiplink.cpp       | 12 ++---
 4 files changed, 9 insertions(+), 75 deletions(-)

diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp
index 3c3306fda8..f3aa16c175 100644
--- a/sflphone-common/src/dbus/callmanager.cpp
+++ b/sflphone-common/src/dbus/callmanager.cpp
@@ -39,7 +39,6 @@ CallManager::placeCall (const std::string& accountID,
                         const std::string& callID,
                         const std::string& to)
 {
-    _debug ("CallManager::placeCall received");
     // Check if a destination number is available
 
     if (to == "")   _debug ("No number entered - Call stopped");
@@ -104,7 +103,6 @@ CallManager::transfert (const std::string& callID, const std::string& to)
 void
 CallManager::setVolume (const std::string& device, const double& value)
 {
-    _debug ("CallManager::setVolume received");
 
     if (device == "speaker") {
         Manager::instance().setSpkrVolume ( (int) (value*100.0));
@@ -118,7 +116,6 @@ CallManager::setVolume (const std::string& device, const double& value)
 double
 CallManager::getVolume (const std::string& device)
 {
-    _debug ("CallManager::getVolume received ");
 
     if (device == "speaker") {
         _debug ("Current speaker = %d", Manager::instance().getSpkrVolume());
@@ -183,14 +180,12 @@ CallManager::unholdConference (const std::string& confID)
 std::map< std::string, std::string >
 CallManager::getConferenceDetails (const std::string& callID)
 {
-    _debug ("CallManager::getCallDetails received");
     return Manager::instance().getConferenceDetails (callID);
 }
 
 std::vector< std::string >
 CallManager::getConferenceList (void)
 {
-    _debug ("CallManager::getConferenceList");
     return Manager::instance().getConferenceList();
 }
 
@@ -203,14 +198,12 @@ CallManager::getParticipantList (const std::string& confID)
 void
 CallManager::setRecording (const std::string& callID)
 {
-    _debug ("CallManager::setRecording received");
     Manager::instance().setRecordingCall (callID);
 }
 
 bool
 CallManager::getIsRecording (const std::string& callID)
 {
-    _debug ("CallManager::getIsRecording received ");
     return Manager::instance().isRecording (callID);
 }
 
@@ -218,7 +211,6 @@ CallManager::getIsRecording (const std::string& callID)
 std::string
 CallManager::getCurrentCodecName (const std::string& callID)
 {
-    _debug ("CallManager::getCurrentCodecName received %s ",Manager::instance().getCurrentCodecName (callID).c_str());
     return Manager::instance().getCurrentCodecName (callID).c_str();
 }
 
@@ -226,7 +218,6 @@ CallManager::getCurrentCodecName (const std::string& callID)
 std::map< std::string, std::string >
 CallManager::getCallDetails (const std::string& callID)
 {
-    _debug ("CallManager::getCallDetails received");
     return Manager::instance().getCallDetails (callID);
 }
 
@@ -239,7 +230,6 @@ CallManager::getCallList (void)
 std::string
 CallManager::getCurrentCallID()
 {
-    _debug ("CallManager::getCurrentCallID received");
     return Manager::instance().getCurrentCallId();
 }
 
@@ -300,7 +290,6 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal
 void
 CallManager::setSASVerified (const std::string& callID)
 {
-    _debug ("CallManager::setSASVerified received for account %s", callID.c_str());
 
     try {
         sfl::AudioZrtpSession * zSession;
@@ -315,7 +304,6 @@ CallManager::setSASVerified (const std::string& callID)
 void
 CallManager::resetSASVerified (const std::string& callID)
 {
-    _debug ("CallManager::resetSASVerified received for account %s", callID.c_str());
 
     try {
         sfl::AudioZrtpSession * zSession;
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index ee8948ac8c..e067cb7d6e 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -38,14 +38,12 @@ ConfigurationManager::ConfigurationManager (DBus::Connection& connection)
 std::map< std::string, std::string >
 ConfigurationManager::getAccountDetails (const std::string& accountID)
 {
-    _debug ("ConfigurationManager::getAccountDetails");
     return Manager::instance().getAccountDetails (accountID);
 }
 
 std::map< std::string, std::string >
 ConfigurationManager::getTlsSettingsDefault (void)
 {
-    _debug ("ConfigurationManager::getTlsDefaultSettings");
 
     std::map<std::string, std::string> tlsSettingsDefault;
     tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT));
@@ -151,6 +149,9 @@ ConfigurationManager::setIp2IpDetails (const std::map< std::string, std::string
     // Update account details to the client side
     accountsChanged();
 
+    // Reload account settings from config
+    Manager::instance().getAccount(IP2IP_PROFILE)->loadConfig();
+
 }
 
 std::map< std::string, std::string >
@@ -282,7 +283,6 @@ ConfigurationManager::setTlsSettings (const std::string& section, const std::map
 std::map< std::string, std::string >
 ConfigurationManager::getCredential (const std::string& accountID, const int32_t& index)
 {
-    _debug ("ConfigurationManager::getCredential number %i for accountID %s", index, accountID.c_str());
 
     std::string credentialIndex;
     std::stringstream streamOut;
@@ -306,7 +306,6 @@ ConfigurationManager::getCredential (const std::string& accountID, const int32_t
 int32_t
 ConfigurationManager::getNumberOfCredential (const std::string& accountID)
 {
-    _debug ("ConfigurationManager::getNumberOfCredential");
     return Manager::instance().getConfigInt (accountID, CONFIG_CREDENTIAL_NUMBER);
 }
 
@@ -322,14 +321,12 @@ void
 ConfigurationManager::setCredential (const std::string& accountID, const int32_t& index,
                                      const std::map< std::string, std::string >& details)
 {
-    _debug ("ConfigurationManager::setCredential received");
     Manager::instance().setCredential (accountID, index, details);
 }
 
 void
 ConfigurationManager::deleteAllCredential (const std::string& accountID)
 {
-    _debug ("ConfigurationManager::deleteAllCredential received");
     Manager::instance().deleteAllCredential (accountID);
 }
 
@@ -337,21 +334,18 @@ void
 ConfigurationManager::setAccountDetails (const std::string& accountID,
         const std::map< std::string, std::string >& details)
 {
-    _debug ("ConfigurationManager::setAccountDetails received");
     Manager::instance().setAccountDetails (accountID, details);
 }
 
 void
 ConfigurationManager::sendRegister (const std::string& accountID, const int32_t& expire)
 {
-    _debug ("ConfigurationManager::sendRegister received");
     Manager::instance().sendRegister (accountID, expire);
 }
 
 std::string
 ConfigurationManager::addAccount (const std::map< std::string, std::string >& details)
 {
-    _debug ("ConfigurationManager::addAccount received");
     return Manager::instance().addAccount (details);
 }
 
@@ -359,14 +353,12 @@ ConfigurationManager::addAccount (const std::map< std::string, std::string >& de
 void
 ConfigurationManager::removeAccount (const std::string& accoundID)
 {
-    _debug ("ConfigurationManager::removeAccount received");
     return Manager::instance().removeAccount (accoundID);
 }
 
 std::vector< std::string >
 ConfigurationManager::getAccountList()
 {
-    _debug ("ConfigurationManager::getAccountList received");
     return Manager::instance().getAccountList();
 }
 
@@ -375,7 +367,6 @@ std::vector< std::string >
 ConfigurationManager::getToneLocaleList()
 {
     std::vector< std::string > ret;
-    _debug ("ConfigurationManager::getToneLocaleList received");
     return ret;
 }
 
@@ -384,7 +375,6 @@ std::string
 ConfigurationManager::getVersion()
 {
     std::string ret ("");
-    _debug ("ConfigurationManager::getVersion received");
     return ret;
 }
 
@@ -393,7 +383,6 @@ std::vector< std::string >
 ConfigurationManager::getRingtoneList()
 {
     std::vector< std::string >  ret;
-    _debug ("ConfigurationManager::getRingtoneList received");
     return ret;
 }
 
@@ -402,14 +391,12 @@ ConfigurationManager::getRingtoneList()
 std::vector< std::string  >
 ConfigurationManager::getCodecList (void)
 {
-    _debug ("ConfigurationManager::getCodecList received");
     return Manager::instance().getCodecList();
 }
 
 std::vector<std::string>
 ConfigurationManager::getSupportedTlsMethod (void)
 {
-    _debug ("ConfigurationManager::getSupportedTlsMethod received");
     std::vector<std::string> method;
     method.push_back ("Default");
     method.push_back ("TLSv1");
@@ -422,21 +409,18 @@ ConfigurationManager::getSupportedTlsMethod (void)
 std::vector< std::string >
 ConfigurationManager::getCodecDetails (const int32_t& payload)
 {
-    _debug ("ConfigurationManager::getCodecDetails received");
     return Manager::instance().getCodecDetails (payload);
 }
 
 std::vector< std::string >
 ConfigurationManager::getActiveCodecList()
 {
-    _debug ("ConfigurationManager::getActiveCodecList received");
     return Manager::instance().getActiveCodecList();
 }
 
 void
 ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list)
 {
-    _debug ("ConfigurationManager::setActiveCodecList received");
     Manager::instance().setActiveCodecList (list);
 }
 
@@ -444,77 +428,66 @@ ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list
 std::vector< std::string >
 ConfigurationManager::getInputAudioPluginList()
 {
-    _debug ("ConfigurationManager::getInputAudioPluginList received");
     return Manager::instance().getInputAudioPluginList();
 }
 
 std::vector< std::string >
 ConfigurationManager::getOutputAudioPluginList()
 {
-    _debug ("ConfigurationManager::getOutputAudioPluginList received");
     return Manager::instance().getOutputAudioPluginList();
 }
 
 void
 ConfigurationManager::setInputAudioPlugin (const std::string& audioPlugin)
 {
-    _debug ("ConfigurationManager::setInputAudioPlugin received");
     return Manager::instance().setInputAudioPlugin (audioPlugin);
 }
 
 void
 ConfigurationManager::setOutputAudioPlugin (const std::string& audioPlugin)
 {
-    _debug ("ConfigurationManager::setOutputAudioPlugin received");
     return Manager::instance().setOutputAudioPlugin (audioPlugin);
 }
 
 std::vector< std::string >
 ConfigurationManager::getAudioOutputDeviceList()
 {
-    _debug ("ConfigurationManager::getAudioOutputDeviceList received");
     return Manager::instance().getAudioOutputDeviceList();
 }
 
 void
 ConfigurationManager::setAudioOutputDevice (const int32_t& index)
 {
-    _debug ("ConfigurationManager::setAudioOutputDevice received");
     return Manager::instance().setAudioOutputDevice (index);
 }
 
 std::vector< std::string >
 ConfigurationManager::getAudioInputDeviceList()
 {
-    _debug ("ConfigurationManager::getAudioInputDeviceList received");
     return Manager::instance().getAudioInputDeviceList();
 }
 
 void
 ConfigurationManager::setAudioInputDevice (const int32_t& index)
 {
-    _debug ("ConfigurationManager::setAudioInputDevice received");
     return Manager::instance().setAudioInputDevice (index);
 }
 
 std::vector< std::string >
 ConfigurationManager::getCurrentAudioDevicesIndex()
 {
-    _debug ("ConfigurationManager::getCurrentAudioDeviceIndex received");
     return Manager::instance().getCurrentAudioDevicesIndex();
 }
 
 int32_t
 ConfigurationManager::getAudioDeviceIndex (const std::string& name)
 {
-    _debug ("ConfigurationManager::getAudioDeviceIndex received");
     return Manager::instance().getAudioDeviceIndex (name);
 }
 
 std::string
 ConfigurationManager::getCurrentAudioOutputPlugin (void)
 {
-    _debug ("ConfigurationManager::getCurrentAudioOutputPlugin received");
     return Manager::instance().getCurrentAudioOutputPlugin();
 }
 
@@ -523,7 +496,6 @@ std::vector< std::string >
 ConfigurationManager::getPlaybackDeviceList()
 {
     std::vector< std::string >  ret;
-    _debug ("ConfigurationManager::getPlaybackDeviceList received");
     return ret;
 }
 
@@ -531,7 +503,6 @@ std::vector< std::string >
 ConfigurationManager::getRecordDeviceList()
 {
     std::vector< std::string >  ret;
-    _debug ("ConfigurationManager::getRecordDeviceList received");
     return ret;
 
 }
@@ -657,70 +628,60 @@ std::string ConfigurationManager::getHistoryEnabled (void)
 void
 ConfigurationManager::startHidden (void)
 {
-    _debug ("Manager received startHidden");
     Manager::instance().startHidden();
 }
 
 int32_t
 ConfigurationManager::isStartHidden (void)
 {
-    _debug ("Manager received isStartHidden");
     return Manager::instance().isStartHidden();
 }
 
 void
 ConfigurationManager::switchPopupMode (void)
 {
-    _debug ("Manager received switchPopupMode");
     Manager::instance().switchPopupMode();
 }
 
 int32_t
 ConfigurationManager::popupMode (void)
 {
-    _debug ("Manager received popupMode");
     return Manager::instance().popupMode();
 }
 
 void
 ConfigurationManager::setNotify (void)
 {
-    _debug ("Manager received setNotify");
     Manager::instance().setNotify();
 }
 
 int32_t
 ConfigurationManager::getNotify (void)
 {
-    _debug ("Manager received getNotify");
     return Manager::instance().getNotify();
 }
 
 void
 ConfigurationManager::setAudioManager (const int32_t& api)
 {
-    _debug ("Manager received setAudioManager");
     Manager::instance().setAudioManager (api);
 }
 
 int32_t
 ConfigurationManager::getAudioManager (void)
 {
-    _debug ("Manager received getAudioManager");
     return Manager::instance().getAudioManager();
 }
 
 void
 ConfigurationManager::setMailNotify (void)
 {
-    _debug ("Manager received setMailNotify");
     Manager::instance().setMailNotify();
 }
 
 int32_t
 ConfigurationManager::getMailNotify (void)
 {
-    _debug ("Manager received getMailNotify");
     return Manager::instance().getMailNotify();
 }
 
@@ -742,7 +703,6 @@ std::vector< std::string > ConfigurationManager::getAddressbookList (void)
 
 void ConfigurationManager::setAddressbookList (const std::vector< std::string >& list)
 {
-    _debug ("Manager received setAddressbookList") ;
     Manager::instance().setAddressbookList (list);
 }
 
@@ -774,18 +734,14 @@ void ConfigurationManager::setHistory (const std::map <std::string, std::string>
 std::string
 ConfigurationManager::getAddrFromInterfaceName(const std::string& interface)
 {
-    _debug ("ConfigurationManager::getAddrFromInterfaceName received");
 
     std::string address = SIPVoIPLink::instance("")->getInterfaceAddrFromName(interface);
 
-    _debug("address: %s", address.c_str());
-
     return address;
 }
 
 std::vector<std::string> ConfigurationManager::getAllIpInterface (void)
 {
-    _debug ("ConfigurationManager::getAllIpInterface received");
 
     std::vector<std::string> vector;
     SIPVoIPLink * sipLink = NULL;
@@ -800,8 +756,6 @@ std::vector<std::string> ConfigurationManager::getAllIpInterface (void)
 
 std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName(void)
 {
-    _debug ("ConfigurationManager::getAllIpInterface received\n");
-
     std::vector<std::string> vector;
     SIPVoIPLink * sipLink = NULL;
     sipLink = SIPVoIPLink::instance ("");
diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index c4bd19dd2d..afc8184e6b 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -703,18 +703,11 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd
     // get the number of media for this sdp session
     media_count = remote_sdp->media_count;
 
-    // *r_crypto = pjmedia_sdp_media_find_attr(attribute, &STR_CRYPTO, NULL);
-
-    _debug("****************** Parse for Crypto ********************");
-
     CryptoOffer remoteOffer;
 
     // iterate over all media
     for (i = 0; i < media_count; ++i) {
 
-      // _debug("%.*s", (int)remote_sdp->attr[i]->name.slen, remote_sdp->attr[i]->name.ptr);
-      // _debug("%.*s", (int)remote_sdp->attr[i]->value.slen, remote_sdp->attr[i]->value.ptr);
-
 	// get media
 	media = remote_sdp->media[i];
 
@@ -729,7 +722,6 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd
 	    // test if this attribute is a crypto
 	    if (pj_stricmp2 (&attribute->name, "crypto") == 0) {
 
-		_debug("****************** Found a Crypto ********************");
 		std::string attr(attribute->value.ptr, attribute->value.slen);
 
 		// @TODO our parser require the "a=crypto:" to be present
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 7b8f86db89..468d83b5bc 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -715,7 +715,7 @@ SIPVoIPLink::sendUnregister (AccountID id)
         return false;
     }
 
-    //account->setRegistrationInfo(regc);
+    // account->setRegistrationInfo(regc);
     account->setRegister (false);
 
     return true;
@@ -1544,7 +1544,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 
         if (account == NULL) {
 
-	    _debug ("Account %s is null. Returning", IP2IP_PROFILE);
+	    _debug ("UserAgent: Account %s is null. Returning", IP2IP_PROFILE);
             return !PJ_SUCCESS;
         }
 
@@ -1553,7 +1553,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         // Set SDP parameters - Set to local
 	addrSdp = localAddress;
 
-        _debug ("UserAgent: New IP to IP localAddress: %s", localAddress.c_str());
+        _debug ("UserAgent: Local Address for IP to IP call: %s", localAddress.c_str());
 
 	// If local address bound to ANY, reslove it using PJSIP
         if (localAddress == "0.0.0.0") {
@@ -1570,7 +1570,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 
         std::string toUri = account->getToUri (to);
         call->setPeerNumber (toUri);
-        _debug ("toUri in new_ip_to_ip call %s", toUri.c_str());
+        _debug ("UserAgent: TO uri:  %s", toUri.c_str());
 
 	// Audio Rtp Session must be initialized before creating initial offer in SDP session
 	// since SDES require crypto attribute.
@@ -1578,7 +1578,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 	    call->getAudioRtp()->initAudioRtpConfig (call);
             call->getAudioRtp()->initAudioRtpSession (call);
         } catch (...) {
-            _debug ("! SIP Failure: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__);
+            _debug ("UserAgent: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__);
         }
 
         // Building the local SDP offer
@@ -1603,7 +1603,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
             account->setAccountTransport (_localUDPTransport);
         }
 
-        _debug ("IptoIP local port %i", account->getLocalPort());
+        _debug ("UserAgent: IptoIP local port %i", account->getLocalPort());
 
         _debug ("IptoIP local address in sdp %s", localAddress.c_str());
 
-- 
GitLab


From 00b7d961dc65214eb00ef90d83cfa48938f07f3c Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 3 Feb 2010 17:52:18 -0500
Subject: [PATCH 029/160] [#2722] Make IP to IP calls robust to bad SIP scheme

---
 sflphone-common/src/managerimpl.cpp     | 10 -------
 sflphone-common/src/sip/sipvoiplink.cpp | 38 ++++++++++++++++++-------
 2 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 321d9124d8..4146b1620a 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -1578,8 +1578,6 @@ ManagerImpl::playDtmf (char code)
     AudioLayer *audiolayer;
     SFLDataFormat *buf;
 
-    _debug ("ManagerImpl::playDtmf");
-
     stopTone ();
 
     bool hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_DTMF);
@@ -1615,10 +1613,6 @@ ManagerImpl::playDtmf (char code)
     //                            ms/s
     size = (int) ( (pulselen * (float) audiolayer->getSampleRate()) / 1000);
 
-    _debug ("DTMF pulselen: %i", pulselen);
-
-    _debug ("DTMF size: %i", size);
-
     // this buffer is for mono
     // TODO <-- this should be global and hide if same size
     buf = new SFLDataFormat[size];
@@ -1634,8 +1628,6 @@ ManagerImpl::playDtmf (char code)
         // audiolayer->flushUrgent();
         audiolayer->startStream();
         audiolayer->putUrgent (buf, size * sizeof (SFLDataFormat));
-    } else {
-        _debug ("    playDtmf: Error cannot play dtmf");
     }
 
     ret = true;
@@ -2023,8 +2015,6 @@ void ManagerImpl::stopTone ()
 {
     bool hasToPlayTone;
 
-    _debug ("ManagerImpl::stopTone");
-
     hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_TONES);
 
     if (!hasToPlayTone)
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 468d83b5bc..444370ea3c 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1535,6 +1535,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
     call = new SIPCall (id, Call::Outgoing, _pool);
 
     if (call) {
+
         call->setCallConfiguration (Call::IPtoIP);
         call->initRecFileName();
 
@@ -1588,13 +1589,19 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 	// Init TLS transport if enabled
 	if(account->isTlsEnabled()) {
 
-	    _debug("UserAgent: TLS enabled for IP to IP calls, acquire TLS transport");
-
+	    _debug("UserAgent: TLS enabled for IP to IP calls");
 	    int at = toUri.find("@");
 	    int trns = toUri.find(";transport");
 	    std::string remoteAddr = toUri.substr(at+1, trns-at-1);
 
-	    createTlsTransport(account->getAccountID(), remoteAddr);
+	    if(toUri.find("sips:") != 1) {
+	        _debug("UserAgent: Error \"sips\" scheme required TLS call");
+	        return false;
+	    }
+
+	    if(createTlsTransport(account->getAccountID(), remoteAddr) != PJ_SUCCESS)
+		return false;
+
 	}
 
         // If no transport already set, use the default one created at pjsip initialization
@@ -2198,7 +2205,9 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
         // Nothing to do, TLS listener already created at pjsip's startup and TLS connection\
         // is automatically handled in pjsip when sending registration messages.
-        status = createTlsTransport(id, remoteAddr);
+        if(createTlsTransport(id, remoteAddr) != PJ_SUCCESS)
+	    return false;
+
         return true;
     }
     else {
@@ -2438,12 +2447,15 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     if (transportType == PJSIP_TRANSPORT_UDP) {
         status = init_transport_selector (transport, &tp_sel);
 
-        if (status == PJ_SUCCESS)
+        if (status == PJ_SUCCESS) {
+	    _debug("pjsip_tpmgr_find_local_addr, UDP, tpsel");
             status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, tp_sel, &localAddress, &port);
-        else
+	} else {
+	    _debug("pjsip_tpmgr_find_local_addr, UDP");
             status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
+	}
     } else {
-
+        _debug("pjsip_tpmgr_find_local_addr, TLS");
         status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
     }
 
@@ -2558,6 +2570,8 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
 
 pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::string remoteAddr)
 {
+    pj_status_t success;
+
     // Retrieve the account information
     SIPAccount * account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
@@ -2580,12 +2594,14 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 
     // Create a new TLS connection from TLS listener
     pjsip_transport *tls;
-    pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr),
-              			  NULL, &tls);
+    success = pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr), NULL, &tls);
 
-    account->setAccountTransport(tls);
+    if(success != PJ_SUCCESS)
+        _debug("UserAgent: Error could not create TLS transport");
+    else 
+        account->setAccountTransport(tls);
 
-    return PJ_SUCCESS;
+    return success;
 }
 
 pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
-- 
GitLab


From 60e10133a047285e6bf3db10e62634b4964d083c Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Feb 2010 10:21:15 -0500
Subject: [PATCH 030/160] [#2750] Fix account registration segfaults sometimes
 on entering false DNS

In SFLphone when receiving 502 error (Bad Gateway), the transport reference counter were manually decreased.

We now assume that PJSIP decreases accurately even if multiple concurrent UDP transport is not fully maintained in PJSIP.
---
 sflphone-common/src/sip/sipvoiplink.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 444370ea3c..5d7e6d8d14 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -687,7 +687,6 @@ SIPVoIPLink::sendUnregister (AccountID id)
 	       account->getAccountTransport()->info,
 	       (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
 
-        // shutdownSipTransport(account->getAccountID());
     }
 
     // This may occurs if account failed to register and is in state INVALID
@@ -2728,6 +2727,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
 
 void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
 {
+
     _debug("Shutdown Sip Transport");
 
     pj_status_t status = 0;
@@ -2743,7 +2743,9 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
 
 	// decrease reference count added by pjsip_regc_send
 	// PJSIP's IDLE timer is set if counter reach 0
-	status = pjsip_transport_dec_ref(account->getAccountTransport());
+
+        // there is still problems when account registration fails, so comment it for now
+	// status = pjsip_transport_dec_ref(account->getAccountTransport());
 
 	// detach transport from this account
 	account->setAccountTransport(NULL);
-- 
GitLab


From dd7c6691b1b90b3a3b1a41dd7a8b8cded7fc14ae Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emilou@invictus.(none)>
Date: Thu, 4 Feb 2010 11:36:22 -0500
Subject: [PATCH 031/160] [#2518] Save IP profile mocification through D-Bus

---
 .../src/config/accountconfigdialog.c          | 99 ++++++++++---------
 sflphone-client-gnome/src/dbus/dbus.c         |  3 +-
 sflphone-common/src/managerimpl.cpp           | 15 +--
 3 files changed, 54 insertions(+), 63 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 29b37a0446..341ebda64c 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -839,7 +839,7 @@ GtkWidget * create_security_tab (account_t **a)
 	gtk_widget_show_all(ret);
 
 	return ret;
-}
+	}
 
 GtkWidget* create_registration_expire (account_t **a) {
 
@@ -1150,10 +1150,11 @@ void show_account_window (account_t * a) {
 
 	if(response == GTK_RESPONSE_ACCEPT)
 	{
+		gchar *proto = "SIP";
 
 		if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
 
-			gchar* proto = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
+			proto = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
 
 			g_hash_table_replace(currentAccount->properties,
 					g_strdup(ACCOUNT_RESOLVE_ONCE),
@@ -1179,9 +1180,12 @@ void show_account_window (account_t * a) {
 			g_hash_table_replace(currentAccount->properties,
 					g_strdup(ACCOUNT_REGISTRATION_EXPIRE),
 					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(expireSpinBox))));   
+		}
 
 
-			if (strcmp(proto, "SIP") == 0) {
+		if (strcmp (proto, "SIP") == 0) {
+
+			if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
 
 				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_ENABLED), 
 						g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox)) ? "true":"false"));
@@ -1189,37 +1193,9 @@ void show_account_window (account_t * a) {
 				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_SERVER), 
 						g_strdup(gtk_entry_get_text(GTK_ENTRY(stunServerEntry))));
 
-
-				gchar* keyExchange = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo));
-
-				if (g_strcasecmp(keyExchange, "ZRTP") == 0) {
-					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
-				}
-
-				else if(g_strcasecmp(keyExchange, "SDES") == 0) {
-					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
-				}
-
-				else {
-					g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
-				}
-
-				g_hash_table_replace(currentAccount->properties, g_strdup(TLS_ENABLE), 
-						g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox)) ? "true":"false"));
-
 				g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_SAMEAS_LOCAL), g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)) ? "true":"false"));	
 
-				g_hash_table_replace(currentAccount->properties,
-						g_strdup(LOCAL_INTERFACE),
-						g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
-
-				g_hash_table_replace(currentAccount->properties,
-						g_strdup(LOCAL_PORT),
-						g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
-
-				if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)))
+				if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)))
 				{
 
 					g_hash_table_replace(currentAccount->properties,
@@ -1243,12 +1219,42 @@ void show_account_window (account_t * a) {
 							g_strdup(PUBLISHED_ADDRESS),
 							published_address);
 				}
+			}
+
 
+			gchar* keyExchange = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo));
+
+			if (g_strcasecmp(keyExchange, "ZRTP") == 0) {
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
 			}
 
-			/* Set new credentials if any */
+			else if(g_strcasecmp(keyExchange, "SDES") == 0) {
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
+			}
 
-			DEBUG("Setting credentials"); 
+			else {
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
+			}
+
+			g_hash_table_replace(currentAccount->properties, g_strdup(TLS_ENABLE), 
+					g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox)) ? "true":"false"));
+
+
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(LOCAL_INTERFACE),
+					g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
+
+			g_hash_table_replace(currentAccount->properties,
+					g_strdup(LOCAL_PORT),
+					g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
+
+		}
+
+		/* Set new credentials if any */
+		DEBUG("Setting credentials"); 
+		if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
 
 			/* This hack is necessary because of the way the 
 			 * configuration file is made (.ini at that time).
@@ -1266,16 +1272,15 @@ void show_account_window (account_t * a) {
 				}
 				dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len);
 			}
+		}
+		/** @todo Verify if it's the best condition to check */
+		if (g_strcasecmp(currentAccount->accountID, "new") == 0) {
+			dbus_add_account(currentAccount);
+		}
+		else {
+			dbus_set_account_details(currentAccount);
+		}
 
-			/** @todo Verify if it's the best condition to check */
-			if (g_strcasecmp(currentAccount->accountID, "new") == 0) {
-				dbus_add_account(currentAccount);
-			}
-			else {
-				dbus_set_account_details(currentAccount);
-			}
-		}	
-		
 		// Perpetuate changes to the deamon
 		codec_list_update_to_daemon (currentAccount);
 	}
@@ -1298,10 +1303,10 @@ GtkWidget* create_direct_ip_calls_tab (account_t **a) {
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
 
 	description = g_markup_printf_escaped(_("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."));
-  	label = gtk_label_new (NULL);
-  	gtk_label_set_markup (GTK_LABEL (label), description);
-  	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);    
-  	gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0);
+	label = gtk_label_new (NULL);
+	gtk_label_set_markup (GTK_LABEL (label), description);
+	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);    
+	gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0);
 
 	GtkRequisition requisition;
 	gtk_widget_size_request (GTK_WIDGET (ret), &requisition);
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 433d151e04..8ad9a3e5e6 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -831,8 +831,7 @@ dbus_place_call (const callable_obj_t * c)
     }
 }
 
-gchar**  dbus_account_list()
-{
+gchar**  dbus_account_list() {
     GError *error = NULL;
     char ** array;
 
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index e9404f5a9c..17d59b27c6 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2273,7 +2273,7 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
     _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, "Direct calls"), 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.
@@ -2390,19 +2390,6 @@ ManagerImpl::initAudioCodec (void)
 	 * This is a global list. Every account will inherit it.
      */
 	_codecDescriptorMap.init();
-
-	// The accounts are not yet loaded. Move this logic in loadAccount ()
-	/*
-    // if the user never set the codec list, use the default configuration
-    if (getConfigString (AUDIO, "ActiveCodecs") == "") {
-        _codecDescriptorMap.setDefaultOrder();
-    }
-
-    // else retrieve the one set in the user config file
-    else {
-        std::vector<std::string> active_list = retrieveActiveCodecs();
-        setActiveCodecList (active_list);
-    }*/
 }
 
 /*
-- 
GitLab


From 19f2ad7865dd429105577ce1aaa7289f6c704103 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Mon, 9 Nov 2009 10:42:56 -0500
Subject: [PATCH 032/160] [#1753] Remove milenage directory

---
 .../libs/pjproject/third_party/build/Makefile |    2 +-
 .../third_party/build/milenage/Makefile       |   58 -
 .../build/milenage/libmilenage.dsp            |  110 -
 .../build/milenage/libmilenage.vcp            | 1562 ---------
 .../build/milenage/libmilenage.vcproj         | 2888 -----------------
 .../pjproject/third_party/milenage/milenage.c |  284 --
 .../pjproject/third_party/milenage/milenage.h |   35 -
 .../pjproject/third_party/milenage/rijndael.c |  444 ---
 .../pjproject/third_party/milenage/rijndael.h |   26 -
 9 files changed, 1 insertion(+), 5408 deletions(-)
 delete mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/Makefile
 delete mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp
 delete mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp
 delete mode 100644 sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj
 delete mode 100644 sflphone-common/libs/pjproject/third_party/milenage/milenage.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/milenage/milenage.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/milenage/rijndael.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/milenage/rijndael.h

diff --git a/sflphone-common/libs/pjproject/third_party/build/Makefile b/sflphone-common/libs/pjproject/third_party/build/Makefile
index 36d8061207..6d84db662c 100644
--- a/sflphone-common/libs/pjproject/third_party/build/Makefile
+++ b/sflphone-common/libs/pjproject/third_party/build/Makefile
@@ -1,4 +1,4 @@
-DIRS = resample milenage srtp
+DIRS = resample srtp
 
 include ../../build.mak
 include $(PJDIR)/build/common.mak
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/Makefile b/sflphone-common/libs/pjproject/third_party/build/milenage/Makefile
deleted file mode 100644
index 094ddeaa7e..0000000000
--- a/sflphone-common/libs/pjproject/third_party/build/milenage/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-include ../../../build.mak
-include ../../../build/common.mak
-
-export LIBDIR := ../../lib
-
-RULES_MAK := $(PJDIR)/build/rules.mak
-
-export MILENAGE_LIB := ../../lib/libmilenage-$(TARGET_NAME)$(LIBEXT)
-
-###############################################################################
-# Gather all flags.
-#
-export _CFLAGS 	:= $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
-		   $(CFLAGS) $(CC_INC). $(CC_INC)../../milenage/include \
-		   $(CC_INC)../../../pjlib/include
-export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
-		   $(HOST_CXXFLAGS) $(CXXFLAGS)
-export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
-		   $(LDFLAGS) 
-
-export MILENAGE_SRCDIR = ../../milenage
-export MILENAGE_OBJS = milenage.o rijndael.o
-export MILENAGE_CFLAGS = $(_CFLAGS)
-
-
-export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
-###############################################################################
-# Main entry
-#
-# $(TARGET) is defined in os-$(OS_NAME).mak file in current directory.
-#
-TARGETS := libmilenage
-
-all: $(TARGETS)
-
-doc:
-	cd .. && doxygen docs/doxygen.cfg
-
-dep: depend
-distclean: realclean
-
-.PHONY: dep depend libmilenage clean realclean distclean
-
-libmilenage:
-	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $(MILENAGE_LIB)
-
-clean print_lib:
-	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $@
-
-realclean:
-	$(subst @@,$(subst /,$(HOST_PSEP),.ilbc-$(TARGET_NAME).depend),$(HOST_RMR))
-	
-	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $@
-
-depend:
-	$(MAKE) -f $(RULES_MAK) APP=MILENAGE app=libmilenage $@
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp
deleted file mode 100644
index cf89612e9c..0000000000
--- a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.dsp
+++ /dev/null
@@ -1,110 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libmilenage" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=libmilenage - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "libmilenage.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "libmilenage.mak" CFG="libmilenage - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "libmilenage - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "libmilenage - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "libmilenage - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "../../lib"
-# PROP BASE Intermediate_Dir "output/libmilenage-i386-win32-vc6-release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../../lib"
-# PROP Intermediate_Dir "output/libmilenage-i386-win32-vc6-release"
-# PROP Target_Dir ""
-F90=df.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../pjlib/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"../../lib/libmilenage-i386-win32-vc6-release.lib"
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "output/libmilenage-i386-win32-vc6-debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../lib"
-# PROP Intermediate_Dir "output/libmilenage-i386-win32-vc6-debug"
-# PROP Target_Dir ""
-F90=df.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../pjlib/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"../../lib/libmilenage-i386-win32-vc6-debug.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "libmilenage - Win32 Release"
-# Name "libmilenage - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\milenage\milenage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\milenage\rijndael.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\milenage\milenage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\milenage\rijndael.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp
deleted file mode 100644
index 34f4d03739..0000000000
--- a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcp
+++ /dev/null
@@ -1,1562 +0,0 @@
-# Microsoft eMbedded Visual Tools Project File - Name="libmilenage" - Package Owner=<4>
-# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (WCE x86) Static Library" 0x8304
-# TARGTYPE "Win32 (WCE MIPS16) Static Library" 0x8904
-# TARGTYPE "Win32 (WCE SH4) Static Library" 0x8604
-# TARGTYPE "Win32 (WCE MIPSII) Static Library" 0xa104
-# TARGTYPE "Win32 (WCE MIPSIV_FP) Static Library" 0x9204
-# TARGTYPE "Win32 (WCE SH3) Static Library" 0x8104
-# TARGTYPE "Win32 (WCE ARMV4) Static Library" 0xa304
-# TARGTYPE "Win32 (WCE ARMV4I) Static Library" 0xa504
-# TARGTYPE "Win32 (WCE emulator) Static Library" 0xa604
-# TARGTYPE "Win32 (WCE MIPSII_FP) Static Library" 0xa204
-# TARGTYPE "Win32 (WCE ARMV4T) Static Library" 0xa404
-# TARGTYPE "Win32 (WCE MIPSIV) Static Library" 0x9604
-
-CFG=libmilenage - Win32 (WCE MIPSII_FP) Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "libmilenage.vcn".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "libmilenage.vcn" CFG="libmilenage - Win32 (WCE MIPSII_FP) Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "libmilenage - Win32 (WCE MIPSII_FP) Release" (based on "Win32 (WCE MIPSII_FP) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSII_FP) Debug" (based on "Win32 (WCE MIPSII_FP) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSII) Release" (based on "Win32 (WCE MIPSII) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSII) Debug" (based on "Win32 (WCE MIPSII) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE SH4) Release" (based on "Win32 (WCE SH4) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE SH4) Debug" (based on "Win32 (WCE SH4) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE SH3) Release" (based on "Win32 (WCE SH3) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE SH3) Debug" (based on "Win32 (WCE SH3) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSIV) Release" (based on "Win32 (WCE MIPSIV) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSIV) Debug" (based on "Win32 (WCE MIPSIV) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE emulator) Release" (based on "Win32 (WCE emulator) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE emulator) Debug" (based on "Win32 (WCE emulator) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE ARMV4I) Release" (based on "Win32 (WCE ARMV4I) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE ARMV4I) Debug" (based on "Win32 (WCE ARMV4I) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSIV_FP) Release" (based on "Win32 (WCE MIPSIV_FP) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPSIV_FP) Debug" (based on "Win32 (WCE MIPSIV_FP) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE ARMV4) Release" (based on "Win32 (WCE ARMV4) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE ARMV4) Debug" (based on "Win32 (WCE ARMV4) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPS16) Release" (based on "Win32 (WCE MIPS16) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE MIPS16) Debug" (based on "Win32 (WCE MIPS16) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE ARMV4T) Release" (based on "Win32 (WCE ARMV4T) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE ARMV4T) Debug" (based on "Win32 (WCE ARMV4T) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE x86) Release" (based on "Win32 (WCE x86) Static Library")
-!MESSAGE "libmilenage - Win32 (WCE x86) Debug" (based on "Win32 (WCE x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-# PROP ATL_Project 2
-
-!IF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\MIPSII_FPRel"
-# PROP BASE Intermediate_Dir "output\MIPSII_FPRel"
-# PROP BASE CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\MIPSII_FPRel"
-# PROP Intermediate_Dir "output\MIPSII_FPRel"
-# PROP CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE- /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE- /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\MIPSII_FPDbg"
-# PROP BASE Intermediate_Dir "output\MIPSII_FPDbg"
-# PROP BASE CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\MIPSII_FPDbg"
-# PROP Intermediate_Dir "output\MIPSII_FPDbg"
-# PROP CPU_ID "{D8AC856C-B213-4895-9E83-9EC51A55201E}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE- /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPSII_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE- /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\MIPSIIRel"
-# PROP BASE Intermediate_Dir "output\MIPSIIRel"
-# PROP BASE CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\MIPSIIRel"
-# PROP Intermediate_Dir "output\MIPSIIRel"
-# PROP CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips2 /QMFPE /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\MIPSIIDbg"
-# PROP BASE Intermediate_Dir "output\MIPSIIDbg"
-# PROP BASE CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\MIPSIIDbg"
-# PROP Intermediate_Dir "output\MIPSIIDbg"
-# PROP CPU_ID "{689DDC64-9D9D-11D5-96F8-00207802C01C}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips2 /QMFPE /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\SH4Rel"
-# PROP BASE Intermediate_Dir "output\SH4Rel"
-# PROP BASE CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\SH4Rel"
-# PROP Intermediate_Dir "output\SH4Rel"
-# PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=shcl.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /Qsh4 /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /Qsh4 /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\SH4Dbg"
-# PROP BASE Intermediate_Dir "output\SH4Dbg"
-# PROP BASE CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\SH4Dbg"
-# PROP Intermediate_Dir "output\SH4Dbg"
-# PROP CPU_ID "{D6519021-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=shcl.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Qsh4 /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH4" /D "_SH4_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Qsh4 /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\SH3Rel"
-# PROP BASE Intermediate_Dir "output\SH3Rel"
-# PROP BASE CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\SH3Rel"
-# PROP Intermediate_Dir "output\SH3Rel"
-# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=shcl.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\SH3Dbg"
-# PROP BASE Intermediate_Dir "output\SH3Dbg"
-# PROP BASE CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\SH3Dbg"
-# PROP Intermediate_Dir "output\SH3Dbg"
-# PROP CPU_ID "{D6519020-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=shcl.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "SHx" /D "SH3" /D "_SH3_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\MIPSIVRel"
-# PROP BASE Intermediate_Dir "output\MIPSIVRel"
-# PROP BASE CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\MIPSIVRel"
-# PROP Intermediate_Dir "output\MIPSIVRel"
-# PROP CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\MIPSIVDbg"
-# PROP BASE Intermediate_Dir "output\MIPSIVDbg"
-# PROP BASE CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\MIPSIVDbg"
-# PROP Intermediate_Dir "output\MIPSIVDbg"
-# PROP CPU_ID "{0B2FE524-26C5-4194-8CEF-B1582DEB5A98}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\emulatorRel"
-# PROP BASE Intermediate_Dir "output\emulatorRel"
-# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\emulatorRel"
-# PROP Intermediate_Dir "output\emulatorRel"
-# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=cl.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\emulatorDbg"
-# PROP BASE Intermediate_Dir "output\emulatorDbg"
-# PROP BASE CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\emulatorDbg"
-# PROP Intermediate_Dir "output\emulatorDbg"
-# PROP CPU_ID "{32E52003-403E-442D-BE48-DE10F8C6131D}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=cl.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\ARMV4IRel"
-# PROP BASE Intermediate_Dir "output\ARMV4IRel"
-# PROP BASE CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\ARMV4IRel"
-# PROP Intermediate_Dir "output\ARMV4IRel"
-# PROP CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clarm.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\ARMV4IDbg"
-# PROP BASE Intermediate_Dir "output\ARMV4IDbg"
-# PROP BASE CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\ARMV4IDbg"
-# PROP Intermediate_Dir "output\ARMV4IDbg"
-# PROP CPU_ID "{DC70F430-E78B-494F-A9D5-62ADC56443B8}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clarm.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "ARMV4I" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\MIPSIV_FPRel"
-# PROP BASE Intermediate_Dir "output\MIPSIV_FPRel"
-# PROP BASE CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\MIPSIV_FPRel"
-# PROP Intermediate_Dir "output\MIPSIV_FPRel"
-# PROP CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\MIPSIV_FPDbg"
-# PROP BASE Intermediate_Dir "output\MIPSIV_FPDbg"
-# PROP BASE CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\MIPSIV_FPDbg"
-# PROP Intermediate_Dir "output\MIPSIV_FPDbg"
-# PROP CPU_ID "{046A430D-7770-48AB-89B5-24C2D300B03F}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "_MIPS64" /D "R4000" /D "MIPSIV" /D "MIPSIV_FP" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QMmips4 /QMn32 /QMFPE- /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\ARMV4Rel"
-# PROP BASE Intermediate_Dir "output\ARMV4Rel"
-# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\ARMV4Rel"
-# PROP Intermediate_Dir "output\ARMV4Rel"
-# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clarm.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\ARMV4Dbg"
-# PROP BASE Intermediate_Dir "output\ARMV4Dbg"
-# PROP BASE CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\ARMV4Dbg"
-# PROP Intermediate_Dir "output\ARMV4Dbg"
-# PROP CPU_ID "{ECBEA43D-CD7B-4852-AD55-D4227B5D624B}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clarm.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\MIPS16Rel"
-# PROP BASE Intermediate_Dir "output\MIPS16Rel"
-# PROP BASE CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\MIPS16Rel"
-# PROP Intermediate_Dir "output\MIPS16Rel"
-# PROP CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\MIPS16Dbg"
-# PROP BASE Intermediate_Dir "output\MIPS16Dbg"
-# PROP BASE CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\MIPS16Dbg"
-# PROP Intermediate_Dir "output\MIPS16Dbg"
-# PROP CPU_ID "{D6519013-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clmips.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "MIPS" /D "_MIPS_" /D "R4000" /D "MIPSII" /D "MIPS16" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_MIPS16_" /D "MIPS16SUPPORT" /D "_LIB" /YX /QMmips16 /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\ARMV4TRel"
-# PROP BASE Intermediate_Dir "output\ARMV4TRel"
-# PROP BASE CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\ARMV4TRel"
-# PROP Intermediate_Dir "output\ARMV4TRel"
-# PROP CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clthumb.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "NDEBUG" /D "_LIB" /YX /QRarch4T /QRinterwork-return /O2 /M$(CECrtMT) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\ARMV4TDbg"
-# PROP BASE Intermediate_Dir "output\ARMV4TDbg"
-# PROP BASE CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\ARMV4TDbg"
-# PROP Intermediate_Dir "output\ARMV4TDbg"
-# PROP CPU_ID "{F52316A9-3B7C-4FE7-A67F-68350B41240D}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=clthumb.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "ARM" /D "_ARM_" /D "$(CePlatform)" /D "THUMB" /D "_THUMB_" /D "ARMV4T" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /QRarch4T /QRinterwork-return /M$(CECrtMTDebug) /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "output\X86Rel"
-# PROP BASE Intermediate_Dir "output\X86Rel"
-# PROP BASE CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\X86Rel"
-# PROP Intermediate_Dir "output\X86Rel"
-# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=cl.exe
-# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
-# ADD CPP /nologo /W3 /I "../../../pjlib/include" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Gs8192 /GF /O2 /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "output\X86Dbg"
-# PROP BASE Intermediate_Dir "output\X86Dbg"
-# PROP BASE CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
-# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP BASE Target_Dir "output\"
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\X86Dbg"
-# PROP Intermediate_Dir "output\X86Dbg"
-# PROP CPU_ID "{D6518FF3-710F-11D3-99F2-00105A0DF099}"
-# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
-# PROP Target_Dir "output\"
-CPP=cl.exe
-# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
-# ADD CPP /nologo /W3 /Zi /Od /I "../../../pjlib/include" /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "_i386_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gs8192 /GF /c
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-
-!ENDIF 
-
-# Begin Target
-
-# Name "libmilenage - Win32 (WCE MIPSII_FP) Release"
-# Name "libmilenage - Win32 (WCE MIPSII_FP) Debug"
-# Name "libmilenage - Win32 (WCE MIPSII) Release"
-# Name "libmilenage - Win32 (WCE MIPSII) Debug"
-# Name "libmilenage - Win32 (WCE SH4) Release"
-# Name "libmilenage - Win32 (WCE SH4) Debug"
-# Name "libmilenage - Win32 (WCE SH3) Release"
-# Name "libmilenage - Win32 (WCE SH3) Debug"
-# Name "libmilenage - Win32 (WCE MIPSIV) Release"
-# Name "libmilenage - Win32 (WCE MIPSIV) Debug"
-# Name "libmilenage - Win32 (WCE emulator) Release"
-# Name "libmilenage - Win32 (WCE emulator) Debug"
-# Name "libmilenage - Win32 (WCE ARMV4I) Release"
-# Name "libmilenage - Win32 (WCE ARMV4I) Debug"
-# Name "libmilenage - Win32 (WCE MIPSIV_FP) Release"
-# Name "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
-# Name "libmilenage - Win32 (WCE ARMV4) Release"
-# Name "libmilenage - Win32 (WCE ARMV4) Debug"
-# Name "libmilenage - Win32 (WCE MIPS16) Release"
-# Name "libmilenage - Win32 (WCE MIPS16) Debug"
-# Name "libmilenage - Win32 (WCE ARMV4T) Release"
-# Name "libmilenage - Win32 (WCE ARMV4T) Debug"
-# Name "libmilenage - Win32 (WCE x86) Release"
-# Name "libmilenage - Win32 (WCE x86) Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\milenage\milenage.c
-
-!IF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Release"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Debug"
-
-DEP_CPP_MILEN=\
-	"..\..\milenage\milenage.h"\
-	"..\..\milenage\rijndael.h"\
-	
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\milenage\rijndael.c
-
-!IF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII_FP) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSII) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH4) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE SH3) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE emulator) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4I) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPSIV_FP) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE MIPS16) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE ARMV4T) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Release"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ELSEIF  "$(CFG)" == "libmilenage - Win32 (WCE x86) Debug"
-
-DEP_CPP_RIJND=\
-	"..\..\..\pjlib\include\pj\compat\cc_armcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_codew.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_gcce.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_msvc.h"\
-	"..\..\..\pjlib\include\pj\compat\cc_mwcc.h"\
-	"..\..\..\pjlib\include\pj\compat\m_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_auto.h"\
-	"..\..\..\pjlib\include\pj\compat\os_darwinos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux.h"\
-	"..\..\..\pjlib\include\pj\compat\os_linux_kernel.h"\
-	"..\..\..\pjlib\include\pj\compat\os_palmos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_rtems.h"\
-	"..\..\..\pjlib\include\pj\compat\os_sunos.h"\
-	"..\..\..\pjlib\include\pj\compat\os_symbian.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32.h"\
-	"..\..\..\pjlib\include\pj\compat\os_win32_wince.h"\
-	"..\..\..\pjlib\include\pj\compat\size_t.h"\
-	"..\..\..\pjlib\include\pj\config.h"\
-	"..\..\..\pjlib\include\pj\config_site.h"\
-	"..\..\..\pjlib\include\pj\config_site_sample.h"\
-	"..\..\..\pjlib\include\pj\types.h"\
-	
-
-!ENDIF 
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\milenage\milenage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\milenage\rijndael.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj b/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj
deleted file mode 100644
index c0f63e5a7e..0000000000
--- a/sflphone-common/libs/pjproject/third_party/build/milenage/libmilenage.vcproj
+++ /dev/null
@@ -1,2888 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="libmilenage"
-	ProjectGUID="{4BF51C21-5A30-423B-82FE-1ED410E5769D}"
-	RootNamespace="libmilenage"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="Windows Mobile 6 Standard SDK (ARMV4I)"
-		/>
-		<Platform
-			Name="Windows Mobile 6 Professional SDK (ARMV4I)"
-		/>
-		<Platform
-			Name="Pocket PC 2003 (ARMV4)"
-		/>
-		<Platform
-			Name="Smartphone 2003 (ARMV4)"
-		/>
-		<Platform
-			Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-		/>
-		<Platform
-			Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			ConfigurationType="4"
-			UseOfMFC="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			ConfigurationType="4"
-			UseOfMFC="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Win32"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			ConfigurationType="4"
-			UseOfMFC="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Win32"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			ConfigurationType="4"
-			UseOfMFC="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Win32"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			ConfigurationType="4"
-			UseOfMFC="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Win32"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			ConfigurationType="4"
-			UseOfMFC="0"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Pocket PC 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Smartphone 2003 (ARMV4)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="1"

-			ConfigurationType="4"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				PreprocessorDefinitions="_LIB;"

-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../../../pjlib/include"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"

-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-			>
-			<File
-				RelativePath="..\..\milenage\milenage.c"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug-Static|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release-Dynamic|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release-Static|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-			</File>
-			<File
-				RelativePath="..\..\milenage\rijndael.c"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug-Static|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release-Dynamic|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug-Dynamic|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release-Static|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						PreprocessorDefinitions=""
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl"
-			>
-			<File
-				RelativePath="..\..\milenage\milenage.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\milenage\rijndael.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/milenage.c b/sflphone-common/libs/pjproject/third_party/milenage/milenage.c
deleted file mode 100644
index 66dae9bb10..0000000000
--- a/sflphone-common/libs/pjproject/third_party/milenage/milenage.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*-------------------------------------------------------------------
- *          Example algorithms f1, f1*, f2, f3, f4, f5, f5*
- *-------------------------------------------------------------------
- *
- *  A sample implementation of the example 3GPP authentication and
- *  key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.  This is
- *  a byte-oriented implementation of the functions, and of the block
- *  cipher kernel function Rijndael.
- *
- *  This has been coded for clarity, not necessarily for efficiency.
- *
- *  The functions f2, f3, f4 and f5 share the same inputs and have
- *  been coded together as a single function.  f1, f1* and f5* are
- *  all coded separately.
- *
- *-----------------------------------------------------------------*/
-
-#include "milenage.h"
-#include "rijndael.h"
-
-/*--------------------------- prototypes --------------------------*/
-
-
-
-/*-------------------------------------------------------------------
- *                            Algorithm f1
- *-------------------------------------------------------------------
- *
- *  Computes network authentication code MAC-A from key K, random
- *  challenge RAND, sequence number SQN and authentication management
- *  field AMF.
- *
- *-----------------------------------------------------------------*/
-
-void f1    ( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], 
-             u8 mac_a[8], u8 op[16] )
-{
-  u8 op_c[16];
-  u8 temp[16];
-  u8 in1[16];
-  u8 out1[16];
-  u8 rijndaelInput[16];
-  u8 i;
-
-  RijndaelKeySchedule( k );
-
-  ComputeOPc( op_c, op );
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] = rand[i] ^ op_c[i];
-  RijndaelEncrypt( rijndaelInput, temp );
-
-  for (i=0; i<6; i++)
-  {
-    in1[i]    = sqn[i];
-    in1[i+8]  = sqn[i];
-  }
-  for (i=0; i<2; i++)
-  {
-    in1[i+6]  = amf[i];
-    in1[i+14] = amf[i];
-  }
-
-  /* XOR op_c and in1, rotate by r1=64, and XOR *
-   * on the constant c1 (which is all zeroes)   */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[(i+8) % 16] = in1[i] ^ op_c[i];
-
-  /* XOR on the value temp computed before */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] ^= temp[i];
-  
-  RijndaelEncrypt( rijndaelInput, out1 );
-  for (i=0; i<16; i++)
-    out1[i] ^= op_c[i];
-
-  for (i=0; i<8; i++)
-    mac_a[i] = out1[i];
-
-  return;
-} /* end of function f1 */
-
-
-  
-/*-------------------------------------------------------------------
- *                            Algorithms f2-f5
- *-------------------------------------------------------------------
- *
- *  Takes key K and random challenge RAND, and returns response RES,
- *  confidentiality key CK, integrity key IK and anonymity key AK.
- *
- *-----------------------------------------------------------------*/
-
-void f2345 ( u8 k[16], u8 rand[16],
-             u8 res[8], u8 ck[16], u8 ik[16], u8 ak[6], u8 op[16] )
-{
-  u8 op_c[16];
-  u8 temp[16];
-  u8 out[16];
-  u8 rijndaelInput[16];
-  u8 i;
-
-  RijndaelKeySchedule( k );
-
-  ComputeOPc( op_c, op );
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] = rand[i] ^ op_c[i];
-  RijndaelEncrypt( rijndaelInput, temp );
-
-  /* To obtain output block OUT2: XOR OPc and TEMP,    *
-   * rotate by r2=0, and XOR on the constant c2 (which *
-   * is all zeroes except that the last bit is 1).     */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] = temp[i] ^ op_c[i];
-  rijndaelInput[15] ^= 1;
-
-  RijndaelEncrypt( rijndaelInput, out );
-  for (i=0; i<16; i++)
-    out[i] ^= op_c[i];
-
-  for (i=0; i<8; i++)
-    res[i] = out[i+8];
-  for (i=0; i<6; i++)
-    ak[i]  = out[i];
-
-  /* To obtain output block OUT3: XOR OPc and TEMP,        *
-   * rotate by r3=32, and XOR on the constant c3 (which    *
-   * is all zeroes except that the next to last bit is 1). */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[(i+12) % 16] = temp[i] ^ op_c[i];
-  rijndaelInput[15] ^= 2;
-
-  RijndaelEncrypt( rijndaelInput, out );
-  for (i=0; i<16; i++)
-    out[i] ^= op_c[i];
-
-  for (i=0; i<16; i++)
-    ck[i] = out[i];
-
-  /* To obtain output block OUT4: XOR OPc and TEMP,         *
-   * rotate by r4=64, and XOR on the constant c4 (which     *
-   * is all zeroes except that the 2nd from last bit is 1). */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[(i+8) % 16] = temp[i] ^ op_c[i];
-  rijndaelInput[15] ^= 4;
-
-  RijndaelEncrypt( rijndaelInput, out );
-  for (i=0; i<16; i++)
-    out[i] ^= op_c[i];
-
-  for (i=0; i<16; i++)
-    ik[i] = out[i];
-
-  return;
-} /* end of function f2345 */
-
-  
-/*-------------------------------------------------------------------
- *                            Algorithm f1*
- *-------------------------------------------------------------------
- *
- *  Computes resynch authentication code MAC-S from key K, random
- *  challenge RAND, sequence number SQN and authentication management
- *  field AMF.
- *
- *-----------------------------------------------------------------*/
-
-void f1star( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2], 
-             u8 mac_s[8], u8 op[16] )
-{
-  u8 op_c[16];
-  u8 temp[16];
-  u8 in1[16];
-  u8 out1[16];
-  u8 rijndaelInput[16];
-  u8 i;
-
-  RijndaelKeySchedule( k );
-
-  ComputeOPc( op_c, op );
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] = rand[i] ^ op_c[i];
-  RijndaelEncrypt( rijndaelInput, temp );
-
-  for (i=0; i<6; i++)
-  {
-    in1[i]    = sqn[i];
-    in1[i+8]  = sqn[i];
-  }
-  for (i=0; i<2; i++)
-  {
-    in1[i+6]  = amf[i];
-    in1[i+14] = amf[i];
-  }
-
-  /* XOR op_c and in1, rotate by r1=64, and XOR *
-   * on the constant c1 (which is all zeroes)   */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[(i+8) % 16] = in1[i] ^ op_c[i];
-
-  /* XOR on the value temp computed before */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] ^= temp[i];
-  
-  RijndaelEncrypt( rijndaelInput, out1 );
-  for (i=0; i<16; i++)
-    out1[i] ^= op_c[i];
-
-  for (i=0; i<8; i++)
-    mac_s[i] = out1[i+8];
-
-  return;
-} /* end of function f1star */
-
-  
-/*-------------------------------------------------------------------
- *                            Algorithm f5*
- *-------------------------------------------------------------------
- *
- *  Takes key K and random challenge RAND, and returns resynch
- *  anonymity key AK.
- *
- *-----------------------------------------------------------------*/
-
-void f5star( u8 k[16], u8 rand[16],
-             u8 ak[6], u8 op[16] )
-{
-  u8 op_c[16];
-  u8 temp[16];
-  u8 out[16];
-  u8 rijndaelInput[16];
-  u8 i;
-
-  RijndaelKeySchedule( k );
-
-  ComputeOPc( op_c, op );
-
-  for (i=0; i<16; i++)
-    rijndaelInput[i] = rand[i] ^ op_c[i];
-  RijndaelEncrypt( rijndaelInput, temp );
-
-  /* To obtain output block OUT5: XOR OPc and TEMP,         *
-   * rotate by r5=96, and XOR on the constant c5 (which     *
-   * is all zeroes except that the 3rd from last bit is 1). */
-
-  for (i=0; i<16; i++)
-    rijndaelInput[(i+4) % 16] = temp[i] ^ op_c[i];
-  rijndaelInput[15] ^= 8;
-
-  RijndaelEncrypt( rijndaelInput, out );
-  for (i=0; i<16; i++)
-    out[i] ^= op_c[i];
-
-  for (i=0; i<6; i++)
-    ak[i] = out[i];
-
-  return;
-} /* end of function f5star */
-
-  
-/*-------------------------------------------------------------------
- *  Function to compute OPc from OP and K.  Assumes key schedule has
-    already been performed.
- *-----------------------------------------------------------------*/
-
-void ComputeOPc( u8 op_c[16], u8 op[16] )
-{
-  u8 i;
-  
-  RijndaelEncrypt( op, op_c );
-  for (i=0; i<16; i++)
-    op_c[i] ^= op[i];
-
-  return;
-} /* end of function ComputeOPc */
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/milenage.h b/sflphone-common/libs/pjproject/third_party/milenage/milenage.h
deleted file mode 100644
index a5f407f378..0000000000
--- a/sflphone-common/libs/pjproject/third_party/milenage/milenage.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-------------------------------------------------------------------
- *          Example algorithms f1, f1*, f2, f3, f4, f5, f5*
- *-------------------------------------------------------------------
- *
- *  A sample implementation of the example 3GPP authentication and
- *  key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.  This is
- *  a byte-oriented implementation of the functions, and of the block
- *  cipher kernel function Rijndael.
- *
- *  This has been coded for clarity, not necessarily for efficiency.
- *
- *  The functions f2, f3, f4 and f5 share the same inputs and have
- *  been coded together as a single function.  f1, f1* and f5* are
- *  all coded separately.
- *
- *-----------------------------------------------------------------*/
-
-#ifndef MILENAGE_H
-#define MILENAGE_H
-
-typedef unsigned char u8;
-
-
-void f1    ( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2],
-             u8 mac_a[8], u8 op[16] );
-void f2345 ( u8 k[16], u8 rand[16],
-             u8 res[8], u8 ck[16], u8 ik[16], u8 ak[6], u8 op[16] );
-void f1star( u8 k[16], u8 rand[16], u8 sqn[6], u8 amf[2],
-             u8 mac_s[8], u8 op[16] );
-void f5star( u8 k[16], u8 rand[16],
-             u8 ak[6], u8 op[16] );
-void ComputeOPc( u8 op_c[16], u8 op[16] );
-
-
-#endif
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/rijndael.c b/sflphone-common/libs/pjproject/third_party/milenage/rijndael.c
deleted file mode 100644
index 86557b92e4..0000000000
--- a/sflphone-common/libs/pjproject/third_party/milenage/rijndael.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*-------------------------------------------------------------------
- *                      Rijndael Implementation
- *-------------------------------------------------------------------
- *
- *  A sample 32-bit orientated implementation of Rijndael, the
- *  suggested kernel for the example 3GPP authentication and key
- *  agreement functions.
- *
- *  This implementation draws on the description in section 5.2 of
- *  the AES proposal and also on the implementation by
- *  Dr B. R. Gladman <brg@gladman.uk.net> 9th October 2000.
- *  It uses a number of large (4k) lookup tables to implement the
- *  algorithm in an efficient manner.
- *
- *  Note: in this implementation the State is stored in four 32-bit
- *  words, one per column of the State, with the top byte of the
- *  column being the _least_ significant byte of the word.
- *
-*-----------------------------------------------------------------*/
-
-#include <pj/types.h>
-
-#if defined(PJ_IS_LITTLE_ENDIAN) && PJ_IS_LITTLE_ENDIAN != 0
-#	define LITTLE_ENDIAN	/* For INTEL architecture */
-#endif
-
-typedef unsigned char   u8;
-typedef unsigned int	 u32;
-
-/* Circular byte rotates of 32 bit values */
-
-#define rot1(x) ((x <<  8) | (x >> 24))
-#define rot2(x) ((x << 16) | (x >> 16))
-#define rot3(x) ((x << 24) | (x >>  8))
-
-/* Extract a byte from a 32-bit u32 */
-
-#define byte0(x)    ((u8)(x))
-#define byte1(x)    ((u8)(x >>  8))
-#define byte2(x)    ((u8)(x >> 16))
-#define byte3(x)    ((u8)(x >> 24))
-
-
-/* Put or get a 32 bit u32 (v) in machine order from a byte	*
- * address in (x)                                           */
-
-#ifdef  LITTLE_ENDIAN
-
-#define u32_in(x)     (*(u32*)(x))
-#define u32_out(x,y)  (*(u32*)(x) = y)
-
-#else
-
-/* Invert byte order in a 32 bit variable */
-
-__inline u32 byte_swap(const u32 x)
-{
-    return rot1(x) & 0x00ff00ff | rot3(x) & 0xff00ff00;
-}
-__inline u32 u32_in(const u8 x[])
-{
-  return byte_swap(*(u32*)x);
-};
-__inline void u32_out(u8 x[], const u32 v) 
-{
-  *(u32*)x = byte_swap(v);
-};
-
-#endif
-
-/*--------------- The lookup tables ----------------------------*/
-
-static u32 rnd_con[10] = 
-{ 
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36
-};
-
-static u32 ft_tab[4][256] = 
-{
- {
- 0xA56363C6,0x847C7CF8,0x997777EE,0x8D7B7BF6,0x0DF2F2FF,0xBD6B6BD6,0xB16F6FDE,0x54C5C591,
- 0x50303060,0x03010102,0xA96767CE,0x7D2B2B56,0x19FEFEE7,0x62D7D7B5,0xE6ABAB4D,0x9A7676EC,
- 0x45CACA8F,0x9D82821F,0x40C9C989,0x877D7DFA,0x15FAFAEF,0xEB5959B2,0xC947478E,0x0BF0F0FB,
- 0xECADAD41,0x67D4D4B3,0xFDA2A25F,0xEAAFAF45,0xBF9C9C23,0xF7A4A453,0x967272E4,0x5BC0C09B,
- 0xC2B7B775,0x1CFDFDE1,0xAE93933D,0x6A26264C,0x5A36366C,0x413F3F7E,0x02F7F7F5,0x4FCCCC83,
- 0x5C343468,0xF4A5A551,0x34E5E5D1,0x08F1F1F9,0x937171E2,0x73D8D8AB,0x53313162,0x3F15152A,
- 0x0C040408,0x52C7C795,0x65232346,0x5EC3C39D,0x28181830,0xA1969637,0x0F05050A,0xB59A9A2F,
- 0x0907070E,0x36121224,0x9B80801B,0x3DE2E2DF,0x26EBEBCD,0x6927274E,0xCDB2B27F,0x9F7575EA,
- 0x1B090912,0x9E83831D,0x742C2C58,0x2E1A1A34,0x2D1B1B36,0xB26E6EDC,0xEE5A5AB4,0xFBA0A05B,
- 0xF65252A4,0x4D3B3B76,0x61D6D6B7,0xCEB3B37D,0x7B292952,0x3EE3E3DD,0x712F2F5E,0x97848413,
- 0xF55353A6,0x68D1D1B9,0000000000,0x2CEDEDC1,0x60202040,0x1FFCFCE3,0xC8B1B179,0xED5B5BB6,
- 0xBE6A6AD4,0x46CBCB8D,0xD9BEBE67,0x4B393972,0xDE4A4A94,0xD44C4C98,0xE85858B0,0x4ACFCF85,
- 0x6BD0D0BB,0x2AEFEFC5,0xE5AAAA4F,0x16FBFBED,0xC5434386,0xD74D4D9A,0x55333366,0x94858511,
- 0xCF45458A,0x10F9F9E9,0x06020204,0x817F7FFE,0xF05050A0,0x443C3C78,0xBA9F9F25,0xE3A8A84B,
- 0xF35151A2,0xFEA3A35D,0xC0404080,0x8A8F8F05,0xAD92923F,0xBC9D9D21,0x48383870,0x04F5F5F1,
- 0xDFBCBC63,0xC1B6B677,0x75DADAAF,0x63212142,0x30101020,0x1AFFFFE5,0x0EF3F3FD,0x6DD2D2BF,
- 0x4CCDCD81,0x140C0C18,0x35131326,0x2FECECC3,0xE15F5FBE,0xA2979735,0xCC444488,0x3917172E,
- 0x57C4C493,0xF2A7A755,0x827E7EFC,0x473D3D7A,0xAC6464C8,0xE75D5DBA,0x2B191932,0x957373E6,
- 0xA06060C0,0x98818119,0xD14F4F9E,0x7FDCDCA3,0x66222244,0x7E2A2A54,0xAB90903B,0x8388880B,
- 0xCA46468C,0x29EEEEC7,0xD3B8B86B,0x3C141428,0x79DEDEA7,0xE25E5EBC,0x1D0B0B16,0x76DBDBAD,
- 0x3BE0E0DB,0x56323264,0x4E3A3A74,0x1E0A0A14,0xDB494992,0x0A06060C,0x6C242448,0xE45C5CB8,
- 0x5DC2C29F,0x6ED3D3BD,0xEFACAC43,0xA66262C4,0xA8919139,0xA4959531,0x37E4E4D3,0x8B7979F2,
- 0x32E7E7D5,0x43C8C88B,0x5937376E,0xB76D6DDA,0x8C8D8D01,0x64D5D5B1,0xD24E4E9C,0xE0A9A949,
- 0xB46C6CD8,0xFA5656AC,0x07F4F4F3,0x25EAEACF,0xAF6565CA,0x8E7A7AF4,0xE9AEAE47,0x18080810,
- 0xD5BABA6F,0x887878F0,0x6F25254A,0x722E2E5C,0x241C1C38,0xF1A6A657,0xC7B4B473,0x51C6C697,
- 0x23E8E8CB,0x7CDDDDA1,0x9C7474E8,0x211F1F3E,0xDD4B4B96,0xDCBDBD61,0x868B8B0D,0x858A8A0F,
- 0x907070E0,0x423E3E7C,0xC4B5B571,0xAA6666CC,0xD8484890,0x05030306,0x01F6F6F7,0x120E0E1C,
- 0xA36161C2,0x5F35356A,0xF95757AE,0xD0B9B969,0x91868617,0x58C1C199,0x271D1D3A,0xB99E9E27,
- 0x38E1E1D9,0x13F8F8EB,0xB398982B,0x33111122,0xBB6969D2,0x70D9D9A9,0x898E8E07,0xA7949433,
- 0xB69B9B2D,0x221E1E3C,0x92878715,0x20E9E9C9,0x49CECE87,0xFF5555AA,0x78282850,0x7ADFDFA5,
- 0x8F8C8C03,0xF8A1A159,0x80898909,0x170D0D1A,0xDABFBF65,0x31E6E6D7,0xC6424284,0xB86868D0,
- 0xC3414182,0xB0999929,0x772D2D5A,0x110F0F1E,0xCBB0B07B,0xFC5454A8,0xD6BBBB6D,0x3A16162C 
- },
- {
- 0x6363C6A5,0x7C7CF884,0x7777EE99,0x7B7BF68D,0xF2F2FF0D,0x6B6BD6BD,0x6F6FDEB1,0xC5C59154,
- 0x30306050,0x01010203,0x6767CEA9,0x2B2B567D,0xFEFEE719,0xD7D7B562,0xABAB4DE6,0x7676EC9A,
- 0xCACA8F45,0x82821F9D,0xC9C98940,0x7D7DFA87,0xFAFAEF15,0x5959B2EB,0x47478EC9,0xF0F0FB0B,
- 0xADAD41EC,0xD4D4B367,0xA2A25FFD,0xAFAF45EA,0x9C9C23BF,0xA4A453F7,0x7272E496,0xC0C09B5B,
- 0xB7B775C2,0xFDFDE11C,0x93933DAE,0x26264C6A,0x36366C5A,0x3F3F7E41,0xF7F7F502,0xCCCC834F,
- 0x3434685C,0xA5A551F4,0xE5E5D134,0xF1F1F908,0x7171E293,0xD8D8AB73,0x31316253,0x15152A3F,
- 0x0404080C,0xC7C79552,0x23234665,0xC3C39D5E,0x18183028,0x969637A1,0x05050A0F,0x9A9A2FB5,
- 0x07070E09,0x12122436,0x80801B9B,0xE2E2DF3D,0xEBEBCD26,0x27274E69,0xB2B27FCD,0x7575EA9F,
- 0x0909121B,0x83831D9E,0x2C2C5874,0x1A1A342E,0x1B1B362D,0x6E6EDCB2,0x5A5AB4EE,0xA0A05BFB,
- 0x5252A4F6,0x3B3B764D,0xD6D6B761,0xB3B37DCE,0x2929527B,0xE3E3DD3E,0x2F2F5E71,0x84841397,
- 0x5353A6F5,0xD1D1B968,0000000000,0xEDEDC12C,0x20204060,0xFCFCE31F,0xB1B179C8,0x5B5BB6ED,
- 0x6A6AD4BE,0xCBCB8D46,0xBEBE67D9,0x3939724B,0x4A4A94DE,0x4C4C98D4,0x5858B0E8,0xCFCF854A,
- 0xD0D0BB6B,0xEFEFC52A,0xAAAA4FE5,0xFBFBED16,0x434386C5,0x4D4D9AD7,0x33336655,0x85851194,
- 0x45458ACF,0xF9F9E910,0x02020406,0x7F7FFE81,0x5050A0F0,0x3C3C7844,0x9F9F25BA,0xA8A84BE3,
- 0x5151A2F3,0xA3A35DFE,0x404080C0,0x8F8F058A,0x92923FAD,0x9D9D21BC,0x38387048,0xF5F5F104,
- 0xBCBC63DF,0xB6B677C1,0xDADAAF75,0x21214263,0x10102030,0xFFFFE51A,0xF3F3FD0E,0xD2D2BF6D,
- 0xCDCD814C,0x0C0C1814,0x13132635,0xECECC32F,0x5F5FBEE1,0x979735A2,0x444488CC,0x17172E39,
- 0xC4C49357,0xA7A755F2,0x7E7EFC82,0x3D3D7A47,0x6464C8AC,0x5D5DBAE7,0x1919322B,0x7373E695,
- 0x6060C0A0,0x81811998,0x4F4F9ED1,0xDCDCA37F,0x22224466,0x2A2A547E,0x90903BAB,0x88880B83,
- 0x46468CCA,0xEEEEC729,0xB8B86BD3,0x1414283C,0xDEDEA779,0x5E5EBCE2,0x0B0B161D,0xDBDBAD76,
- 0xE0E0DB3B,0x32326456,0x3A3A744E,0x0A0A141E,0x494992DB,0x06060C0A,0x2424486C,0x5C5CB8E4,
- 0xC2C29F5D,0xD3D3BD6E,0xACAC43EF,0x6262C4A6,0x919139A8,0x959531A4,0xE4E4D337,0x7979F28B,
- 0xE7E7D532,0xC8C88B43,0x37376E59,0x6D6DDAB7,0x8D8D018C,0xD5D5B164,0x4E4E9CD2,0xA9A949E0,
- 0x6C6CD8B4,0x5656ACFA,0xF4F4F307,0xEAEACF25,0x6565CAAF,0x7A7AF48E,0xAEAE47E9,0x08081018,
- 0xBABA6FD5,0x7878F088,0x25254A6F,0x2E2E5C72,0x1C1C3824,0xA6A657F1,0xB4B473C7,0xC6C69751,
- 0xE8E8CB23,0xDDDDA17C,0x7474E89C,0x1F1F3E21,0x4B4B96DD,0xBDBD61DC,0x8B8B0D86,0x8A8A0F85,
- 0x7070E090,0x3E3E7C42,0xB5B571C4,0x6666CCAA,0x484890D8,0x03030605,0xF6F6F701,0x0E0E1C12,
- 0x6161C2A3,0x35356A5F,0x5757AEF9,0xB9B969D0,0x86861791,0xC1C19958,0x1D1D3A27,0x9E9E27B9,
- 0xE1E1D938,0xF8F8EB13,0x98982BB3,0x11112233,0x6969D2BB,0xD9D9A970,0x8E8E0789,0x949433A7,
- 0x9B9B2DB6,0x1E1E3C22,0x87871592,0xE9E9C920,0xCECE8749,0x5555AAFF,0x28285078,0xDFDFA57A,
- 0x8C8C038F,0xA1A159F8,0x89890980,0x0D0D1A17,0xBFBF65DA,0xE6E6D731,0x424284C6,0x6868D0B8,
- 0x414182C3,0x999929B0,0x2D2D5A77,0x0F0F1E11,0xB0B07BCB,0x5454A8FC,0xBBBB6DD6,0x16162C3A 
- },
- {
- 0x63C6A563,0x7CF8847C,0x77EE9977,0x7BF68D7B,0xF2FF0DF2,0x6BD6BD6B,0x6FDEB16F,0xC59154C5,
- 0x30605030,0x01020301,0x67CEA967,0x2B567D2B,0xFEE719FE,0xD7B562D7,0xAB4DE6AB,0x76EC9A76,
- 0xCA8F45CA,0x821F9D82,0xC98940C9,0x7DFA877D,0xFAEF15FA,0x59B2EB59,0x478EC947,0xF0FB0BF0,
- 0xAD41ECAD,0xD4B367D4,0xA25FFDA2,0xAF45EAAF,0x9C23BF9C,0xA453F7A4,0x72E49672,0xC09B5BC0,
- 0xB775C2B7,0xFDE11CFD,0x933DAE93,0x264C6A26,0x366C5A36,0x3F7E413F,0xF7F502F7,0xCC834FCC,
- 0x34685C34,0xA551F4A5,0xE5D134E5,0xF1F908F1,0x71E29371,0xD8AB73D8,0x31625331,0x152A3F15,
- 0x04080C04,0xC79552C7,0x23466523,0xC39D5EC3,0x18302818,0x9637A196,0x050A0F05,0x9A2FB59A,
- 0x070E0907,0x12243612,0x801B9B80,0xE2DF3DE2,0xEBCD26EB,0x274E6927,0xB27FCDB2,0x75EA9F75,
- 0x09121B09,0x831D9E83,0x2C58742C,0x1A342E1A,0x1B362D1B,0x6EDCB26E,0x5AB4EE5A,0xA05BFBA0,
- 0x52A4F652,0x3B764D3B,0xD6B761D6,0xB37DCEB3,0x29527B29,0xE3DD3EE3,0x2F5E712F,0x84139784,
- 0x53A6F553,0xD1B968D1,0000000000,0xEDC12CED,0x20406020,0xFCE31FFC,0xB179C8B1,0x5BB6ED5B,
- 0x6AD4BE6A,0xCB8D46CB,0xBE67D9BE,0x39724B39,0x4A94DE4A,0x4C98D44C,0x58B0E858,0xCF854ACF,
- 0xD0BB6BD0,0xEFC52AEF,0xAA4FE5AA,0xFBED16FB,0x4386C543,0x4D9AD74D,0x33665533,0x85119485,
- 0x458ACF45,0xF9E910F9,0x02040602,0x7FFE817F,0x50A0F050,0x3C78443C,0x9F25BA9F,0xA84BE3A8,
- 0x51A2F351,0xA35DFEA3,0x4080C040,0x8F058A8F,0x923FAD92,0x9D21BC9D,0x38704838,0xF5F104F5,
- 0xBC63DFBC,0xB677C1B6,0xDAAF75DA,0x21426321,0x10203010,0xFFE51AFF,0xF3FD0EF3,0xD2BF6DD2,
- 0xCD814CCD,0x0C18140C,0x13263513,0xECC32FEC,0x5FBEE15F,0x9735A297,0x4488CC44,0x172E3917,
- 0xC49357C4,0xA755F2A7,0x7EFC827E,0x3D7A473D,0x64C8AC64,0x5DBAE75D,0x19322B19,0x73E69573,
- 0x60C0A060,0x81199881,0x4F9ED14F,0xDCA37FDC,0x22446622,0x2A547E2A,0x903BAB90,0x880B8388,
- 0x468CCA46,0xEEC729EE,0xB86BD3B8,0x14283C14,0xDEA779DE,0x5EBCE25E,0x0B161D0B,0xDBAD76DB,
- 0xE0DB3BE0,0x32645632,0x3A744E3A,0x0A141E0A,0x4992DB49,0x060C0A06,0x24486C24,0x5CB8E45C,
- 0xC29F5DC2,0xD3BD6ED3,0xAC43EFAC,0x62C4A662,0x9139A891,0x9531A495,0xE4D337E4,0x79F28B79,
- 0xE7D532E7,0xC88B43C8,0x376E5937,0x6DDAB76D,0x8D018C8D,0xD5B164D5,0x4E9CD24E,0xA949E0A9,
- 0x6CD8B46C,0x56ACFA56,0xF4F307F4,0xEACF25EA,0x65CAAF65,0x7AF48E7A,0xAE47E9AE,0x08101808,
- 0xBA6FD5BA,0x78F08878,0x254A6F25,0x2E5C722E,0x1C38241C,0xA657F1A6,0xB473C7B4,0xC69751C6,
- 0xE8CB23E8,0xDDA17CDD,0x74E89C74,0x1F3E211F,0x4B96DD4B,0xBD61DCBD,0x8B0D868B,0x8A0F858A,
- 0x70E09070,0x3E7C423E,0xB571C4B5,0x66CCAA66,0x4890D848,0x03060503,0xF6F701F6,0x0E1C120E,
- 0x61C2A361,0x356A5F35,0x57AEF957,0xB969D0B9,0x86179186,0xC19958C1,0x1D3A271D,0x9E27B99E,
- 0xE1D938E1,0xF8EB13F8,0x982BB398,0x11223311,0x69D2BB69,0xD9A970D9,0x8E07898E,0x9433A794,
- 0x9B2DB69B,0x1E3C221E,0x87159287,0xE9C920E9,0xCE8749CE,0x55AAFF55,0x28507828,0xDFA57ADF,
- 0x8C038F8C,0xA159F8A1,0x89098089,0x0D1A170D,0xBF65DABF,0xE6D731E6,0x4284C642,0x68D0B868,
- 0x4182C341,0x9929B099,0x2D5A772D,0x0F1E110F,0xB07BCBB0,0x54A8FC54,0xBB6DD6BB,0x162C3A16 
- },
- {
- 0xC6A56363,0xF8847C7C,0xEE997777,0xF68D7B7B,0xFF0DF2F2,0xD6BD6B6B,0xDEB16F6F,0x9154C5C5,
- 0x60503030,0x02030101,0xCEA96767,0x567D2B2B,0xE719FEFE,0xB562D7D7,0x4DE6ABAB,0xEC9A7676,
- 0x8F45CACA,0x1F9D8282,0x8940C9C9,0xFA877D7D,0xEF15FAFA,0xB2EB5959,0x8EC94747,0xFB0BF0F0,
- 0x41ECADAD,0xB367D4D4,0x5FFDA2A2,0x45EAAFAF,0x23BF9C9C,0x53F7A4A4,0xE4967272,0x9B5BC0C0,
- 0x75C2B7B7,0xE11CFDFD,0x3DAE9393,0x4C6A2626,0x6C5A3636,0x7E413F3F,0xF502F7F7,0x834FCCCC,
- 0x685C3434,0x51F4A5A5,0xD134E5E5,0xF908F1F1,0xE2937171,0xAB73D8D8,0x62533131,0x2A3F1515,
- 0x080C0404,0x9552C7C7,0x46652323,0x9D5EC3C3,0x30281818,0x37A19696,0x0A0F0505,0x2FB59A9A,
- 0x0E090707,0x24361212,0x1B9B8080,0xDF3DE2E2,0xCD26EBEB,0x4E692727,0x7FCDB2B2,0xEA9F7575,
- 0x121B0909,0x1D9E8383,0x58742C2C,0x342E1A1A,0x362D1B1B,0xDCB26E6E,0xB4EE5A5A,0x5BFBA0A0,
- 0xA4F65252,0x764D3B3B,0xB761D6D6,0x7DCEB3B3,0x527B2929,0xDD3EE3E3,0x5E712F2F,0x13978484,
- 0xA6F55353,0xB968D1D1,0000000000,0xC12CEDED,0x40602020,0xE31FFCFC,0x79C8B1B1,0xB6ED5B5B,
- 0xD4BE6A6A,0x8D46CBCB,0x67D9BEBE,0x724B3939,0x94DE4A4A,0x98D44C4C,0xB0E85858,0x854ACFCF,
- 0xBB6BD0D0,0xC52AEFEF,0x4FE5AAAA,0xED16FBFB,0x86C54343,0x9AD74D4D,0x66553333,0x11948585,
- 0x8ACF4545,0xE910F9F9,0x04060202,0xFE817F7F,0xA0F05050,0x78443C3C,0x25BA9F9F,0x4BE3A8A8,
- 0xA2F35151,0x5DFEA3A3,0x80C04040,0x058A8F8F,0x3FAD9292,0x21BC9D9D,0x70483838,0xF104F5F5,
- 0x63DFBCBC,0x77C1B6B6,0xAF75DADA,0x42632121,0x20301010,0xE51AFFFF,0xFD0EF3F3,0xBF6DD2D2,
- 0x814CCDCD,0x18140C0C,0x26351313,0xC32FECEC,0xBEE15F5F,0x35A29797,0x88CC4444,0x2E391717,
- 0x9357C4C4,0x55F2A7A7,0xFC827E7E,0x7A473D3D,0xC8AC6464,0xBAE75D5D,0x322B1919,0xE6957373,
- 0xC0A06060,0x19988181,0x9ED14F4F,0xA37FDCDC,0x44662222,0x547E2A2A,0x3BAB9090,0x0B838888,
- 0x8CCA4646,0xC729EEEE,0x6BD3B8B8,0x283C1414,0xA779DEDE,0xBCE25E5E,0x161D0B0B,0xAD76DBDB,
- 0xDB3BE0E0,0x64563232,0x744E3A3A,0x141E0A0A,0x92DB4949,0x0C0A0606,0x486C2424,0xB8E45C5C,
- 0x9F5DC2C2,0xBD6ED3D3,0x43EFACAC,0xC4A66262,0x39A89191,0x31A49595,0xD337E4E4,0xF28B7979,
- 0xD532E7E7,0x8B43C8C8,0x6E593737,0xDAB76D6D,0x018C8D8D,0xB164D5D5,0x9CD24E4E,0x49E0A9A9,
- 0xD8B46C6C,0xACFA5656,0xF307F4F4,0xCF25EAEA,0xCAAF6565,0xF48E7A7A,0x47E9AEAE,0x10180808,
- 0x6FD5BABA,0xF0887878,0x4A6F2525,0x5C722E2E,0x38241C1C,0x57F1A6A6,0x73C7B4B4,0x9751C6C6,
- 0xCB23E8E8,0xA17CDDDD,0xE89C7474,0x3E211F1F,0x96DD4B4B,0x61DCBDBD,0x0D868B8B,0x0F858A8A,
- 0xE0907070,0x7C423E3E,0x71C4B5B5,0xCCAA6666,0x90D84848,0x06050303,0xF701F6F6,0x1C120E0E,
- 0xC2A36161,0x6A5F3535,0xAEF95757,0x69D0B9B9,0x17918686,0x9958C1C1,0x3A271D1D,0x27B99E9E,
- 0xD938E1E1,0xEB13F8F8,0x2BB39898,0x22331111,0xD2BB6969,0xA970D9D9,0x07898E8E,0x33A79494,
- 0x2DB69B9B,0x3C221E1E,0x15928787,0xC920E9E9,0x8749CECE,0xAAFF5555,0x50782828,0xA57ADFDF,
- 0x038F8C8C,0x59F8A1A1,0x09808989,0x1A170D0D,0x65DABFBF,0xD731E6E6,0x84C64242,0xD0B86868,
- 0x82C34141,0x29B09999,0x5A772D2D,0x1E110F0F,0x7BCBB0B0,0xA8FC5454,0x6DD6BBBB,0x2C3A1616 
- } 
-};
-
-static u32 fl_tab[4][256] = 
-{
- {
- 0x00000063,0x0000007C,0x00000077,0x0000007B,0x000000F2,0x0000006B,0x0000006F,0x000000C5,
- 0x00000030,0x00000001,0x00000067,0x0000002B,0x000000FE,0x000000D7,0x000000AB,0x00000076,
- 0x000000CA,0x00000082,0x000000C9,0x0000007D,0x000000FA,0x00000059,0x00000047,0x000000F0,
- 0x000000AD,0x000000D4,0x000000A2,0x000000AF,0x0000009C,0x000000A4,0x00000072,0x000000C0,
- 0x000000B7,0x000000FD,0x00000093,0x00000026,0x00000036,0x0000003F,0x000000F7,0x000000CC,
- 0x00000034,0x000000A5,0x000000E5,0x000000F1,0x00000071,0x000000D8,0x00000031,0x00000015,
- 0x00000004,0x000000C7,0x00000023,0x000000C3,0x00000018,0x00000096,0x00000005,0x0000009A,
- 0x00000007,0x00000012,0x00000080,0x000000E2,0x000000EB,0x00000027,0x000000B2,0x00000075,
- 0x00000009,0x00000083,0x0000002C,0x0000001A,0x0000001B,0x0000006E,0x0000005A,0x000000A0,
- 0x00000052,0x0000003B,0x000000D6,0x000000B3,0x00000029,0x000000E3,0x0000002F,0x00000084,
- 0x00000053,0x000000D1,0x00000000,0x000000ED,0x00000020,0x000000FC,0x000000B1,0x0000005B,
- 0x0000006A,0x000000CB,0x000000BE,0x00000039,0x0000004A,0x0000004C,0x00000058,0x000000CF,
- 0x000000D0,0x000000EF,0x000000AA,0x000000FB,0x00000043,0x0000004D,0x00000033,0x00000085,
- 0x00000045,0x000000F9,0x00000002,0x0000007F,0x00000050,0x0000003C,0x0000009F,0x000000A8,
- 0x00000051,0x000000A3,0x00000040,0x0000008F,0x00000092,0x0000009D,0x00000038,0x000000F5,
- 0x000000BC,0x000000B6,0x000000DA,0x00000021,0x00000010,0x000000FF,0x000000F3,0x000000D2,
- 0x000000CD,0x0000000C,0x00000013,0x000000EC,0x0000005F,0x00000097,0x00000044,0x00000017,
- 0x000000C4,0x000000A7,0x0000007E,0x0000003D,0x00000064,0x0000005D,0x00000019,0x00000073,
- 0x00000060,0x00000081,0x0000004F,0x000000DC,0x00000022,0x0000002A,0x00000090,0x00000088,
- 0x00000046,0x000000EE,0x000000B8,0x00000014,0x000000DE,0x0000005E,0x0000000B,0x000000DB,
- 0x000000E0,0x00000032,0x0000003A,0x0000000A,0x00000049,0x00000006,0x00000024,0x0000005C,
- 0x000000C2,0x000000D3,0x000000AC,0x00000062,0x00000091,0x00000095,0x000000E4,0x00000079,
- 0x000000E7,0x000000C8,0x00000037,0x0000006D,0x0000008D,0x000000D5,0x0000004E,0x000000A9,
- 0x0000006C,0x00000056,0x000000F4,0x000000EA,0x00000065,0x0000007A,0x000000AE,0x00000008,
- 0x000000BA,0x00000078,0x00000025,0x0000002E,0x0000001C,0x000000A6,0x000000B4,0x000000C6,
- 0x000000E8,0x000000DD,0x00000074,0x0000001F,0x0000004B,0x000000BD,0x0000008B,0x0000008A,
- 0x00000070,0x0000003E,0x000000B5,0x00000066,0x00000048,0x00000003,0x000000F6,0x0000000E,
- 0x00000061,0x00000035,0x00000057,0x000000B9,0x00000086,0x000000C1,0x0000001D,0x0000009E,
- 0x000000E1,0x000000F8,0x00000098,0x00000011,0x00000069,0x000000D9,0x0000008E,0x00000094,
- 0x0000009B,0x0000001E,0x00000087,0x000000E9,0x000000CE,0x00000055,0x00000028,0x000000DF,
- 0x0000008C,0x000000A1,0x00000089,0x0000000D,0x000000BF,0x000000E6,0x00000042,0x00000068,
- 0x00000041,0x00000099,0x0000002D,0x0000000F,0x000000B0,0x00000054,0x000000BB,0x00000016 
- },
- {
- 0x00006300,0x00007C00,0x00007700,0x00007B00,0x0000F200,0x00006B00,0x00006F00,0x0000C500,
- 0x00003000,0x00000100,0x00006700,0x00002B00,0x0000FE00,0x0000D700,0x0000AB00,0x00007600,
- 0x0000CA00,0x00008200,0x0000C900,0x00007D00,0x0000FA00,0x00005900,0x00004700,0x0000F000,
- 0x0000AD00,0x0000D400,0x0000A200,0x0000AF00,0x00009C00,0x0000A400,0x00007200,0x0000C000,
- 0x0000B700,0x0000FD00,0x00009300,0x00002600,0x00003600,0x00003F00,0x0000F700,0x0000CC00,
- 0x00003400,0x0000A500,0x0000E500,0x0000F100,0x00007100,0x0000D800,0x00003100,0x00001500,
- 0x00000400,0x0000C700,0x00002300,0x0000C300,0x00001800,0x00009600,0x00000500,0x00009A00,
- 0x00000700,0x00001200,0x00008000,0x0000E200,0x0000EB00,0x00002700,0x0000B200,0x00007500,
- 0x00000900,0x00008300,0x00002C00,0x00001A00,0x00001B00,0x00006E00,0x00005A00,0x0000A000,
- 0x00005200,0x00003B00,0x0000D600,0x0000B300,0x00002900,0x0000E300,0x00002F00,0x00008400,
- 0x00005300,0x0000D100,0000000000,0x0000ED00,0x00002000,0x0000FC00,0x0000B100,0x00005B00,
- 0x00006A00,0x0000CB00,0x0000BE00,0x00003900,0x00004A00,0x00004C00,0x00005800,0x0000CF00,
- 0x0000D000,0x0000EF00,0x0000AA00,0x0000FB00,0x00004300,0x00004D00,0x00003300,0x00008500,
- 0x00004500,0x0000F900,0x00000200,0x00007F00,0x00005000,0x00003C00,0x00009F00,0x0000A800,
- 0x00005100,0x0000A300,0x00004000,0x00008F00,0x00009200,0x00009D00,0x00003800,0x0000F500,
- 0x0000BC00,0x0000B600,0x0000DA00,0x00002100,0x00001000,0x0000FF00,0x0000F300,0x0000D200,
- 0x0000CD00,0x00000C00,0x00001300,0x0000EC00,0x00005F00,0x00009700,0x00004400,0x00001700,
- 0x0000C400,0x0000A700,0x00007E00,0x00003D00,0x00006400,0x00005D00,0x00001900,0x00007300,
- 0x00006000,0x00008100,0x00004F00,0x0000DC00,0x00002200,0x00002A00,0x00009000,0x00008800,
- 0x00004600,0x0000EE00,0x0000B800,0x00001400,0x0000DE00,0x00005E00,0x00000B00,0x0000DB00,
- 0x0000E000,0x00003200,0x00003A00,0x00000A00,0x00004900,0x00000600,0x00002400,0x00005C00,
- 0x0000C200,0x0000D300,0x0000AC00,0x00006200,0x00009100,0x00009500,0x0000E400,0x00007900,
- 0x0000E700,0x0000C800,0x00003700,0x00006D00,0x00008D00,0x0000D500,0x00004E00,0x0000A900,
- 0x00006C00,0x00005600,0x0000F400,0x0000EA00,0x00006500,0x00007A00,0x0000AE00,0x00000800,
- 0x0000BA00,0x00007800,0x00002500,0x00002E00,0x00001C00,0x0000A600,0x0000B400,0x0000C600,
- 0x0000E800,0x0000DD00,0x00007400,0x00001F00,0x00004B00,0x0000BD00,0x00008B00,0x00008A00,
- 0x00007000,0x00003E00,0x0000B500,0x00006600,0x00004800,0x00000300,0x0000F600,0x00000E00,
- 0x00006100,0x00003500,0x00005700,0x0000B900,0x00008600,0x0000C100,0x00001D00,0x00009E00,
- 0x0000E100,0x0000F800,0x00009800,0x00001100,0x00006900,0x0000D900,0x00008E00,0x00009400,
- 0x00009B00,0x00001E00,0x00008700,0x0000E900,0x0000CE00,0x00005500,0x00002800,0x0000DF00,
- 0x00008C00,0x0000A100,0x00008900,0x00000D00,0x0000BF00,0x0000E600,0x00004200,0x00006800,
- 0x00004100,0x00009900,0x00002D00,0x00000F00,0x0000B000,0x00005400,0x0000BB00,0x00001600 
- },
- {
- 0x00630000,0x007C0000,0x00770000,0x007B0000,0x00F20000,0x006B0000,0x006F0000,0x00C50000,
- 0x00300000,0x00010000,0x00670000,0x002B0000,0x00FE0000,0x00D70000,0x00AB0000,0x00760000,
- 0x00CA0000,0x00820000,0x00C90000,0x007D0000,0x00FA0000,0x00590000,0x00470000,0x00F00000,
- 0x00AD0000,0x00D40000,0x00A20000,0x00AF0000,0x009C0000,0x00A40000,0x00720000,0x00C00000,
- 0x00B70000,0x00FD0000,0x00930000,0x00260000,0x00360000,0x003F0000,0x00F70000,0x00CC0000,
- 0x00340000,0x00A50000,0x00E50000,0x00F10000,0x00710000,0x00D80000,0x00310000,0x00150000,
- 0x00040000,0x00C70000,0x00230000,0x00C30000,0x00180000,0x00960000,0x00050000,0x009A0000,
- 0x00070000,0x00120000,0x00800000,0x00E20000,0x00EB0000,0x00270000,0x00B20000,0x00750000,
- 0x00090000,0x00830000,0x002C0000,0x001A0000,0x001B0000,0x006E0000,0x005A0000,0x00A00000,
- 0x00520000,0x003B0000,0x00D60000,0x00B30000,0x00290000,0x00E30000,0x002F0000,0x00840000,
- 0x00530000,0x00D10000,0000000000,0x00ED0000,0x00200000,0x00FC0000,0x00B10000,0x005B0000,
- 0x006A0000,0x00CB0000,0x00BE0000,0x00390000,0x004A0000,0x004C0000,0x00580000,0x00CF0000,
- 0x00D00000,0x00EF0000,0x00AA0000,0x00FB0000,0x00430000,0x004D0000,0x00330000,0x00850000,
- 0x00450000,0x00F90000,0x00020000,0x007F0000,0x00500000,0x003C0000,0x009F0000,0x00A80000,
- 0x00510000,0x00A30000,0x00400000,0x008F0000,0x00920000,0x009D0000,0x00380000,0x00F50000,
- 0x00BC0000,0x00B60000,0x00DA0000,0x00210000,0x00100000,0x00FF0000,0x00F30000,0x00D20000,
- 0x00CD0000,0x000C0000,0x00130000,0x00EC0000,0x005F0000,0x00970000,0x00440000,0x00170000,
- 0x00C40000,0x00A70000,0x007E0000,0x003D0000,0x00640000,0x005D0000,0x00190000,0x00730000,
- 0x00600000,0x00810000,0x004F0000,0x00DC0000,0x00220000,0x002A0000,0x00900000,0x00880000,
- 0x00460000,0x00EE0000,0x00B80000,0x00140000,0x00DE0000,0x005E0000,0x000B0000,0x00DB0000,
- 0x00E00000,0x00320000,0x003A0000,0x000A0000,0x00490000,0x00060000,0x00240000,0x005C0000,
- 0x00C20000,0x00D30000,0x00AC0000,0x00620000,0x00910000,0x00950000,0x00E40000,0x00790000,
- 0x00E70000,0x00C80000,0x00370000,0x006D0000,0x008D0000,0x00D50000,0x004E0000,0x00A90000,
- 0x006C0000,0x00560000,0x00F40000,0x00EA0000,0x00650000,0x007A0000,0x00AE0000,0x00080000,
- 0x00BA0000,0x00780000,0x00250000,0x002E0000,0x001C0000,0x00A60000,0x00B40000,0x00C60000,
- 0x00E80000,0x00DD0000,0x00740000,0x001F0000,0x004B0000,0x00BD0000,0x008B0000,0x008A0000,
- 0x00700000,0x003E0000,0x00B50000,0x00660000,0x00480000,0x00030000,0x00F60000,0x000E0000,
- 0x00610000,0x00350000,0x00570000,0x00B90000,0x00860000,0x00C10000,0x001D0000,0x009E0000,
- 0x00E10000,0x00F80000,0x00980000,0x00110000,0x00690000,0x00D90000,0x008E0000,0x00940000,
- 0x009B0000,0x001E0000,0x00870000,0x00E90000,0x00CE0000,0x00550000,0x00280000,0x00DF0000,
- 0x008C0000,0x00A10000,0x00890000,0x000D0000,0x00BF0000,0x00E60000,0x00420000,0x00680000,
- 0x00410000,0x00990000,0x002D0000,0x000F0000,0x00B00000,0x00540000,0x00BB0000,0x00160000 
- },
- {
- 0x63000000,0x7C000000,0x77000000,0x7B000000,0xF2000000,0x6B000000,0x6F000000,0xC5000000,
- 0x30000000,0x01000000,0x67000000,0x2B000000,0xFE000000,0xD7000000,0xAB000000,0x76000000,
- 0xCA000000,0x82000000,0xC9000000,0x7D000000,0xFA000000,0x59000000,0x47000000,0xF0000000,
- 0xAD000000,0xD4000000,0xA2000000,0xAF000000,0x9C000000,0xA4000000,0x72000000,0xC0000000,
- 0xB7000000,0xFD000000,0x93000000,0x26000000,0x36000000,0x3F000000,0xF7000000,0xCC000000,
- 0x34000000,0xA5000000,0xE5000000,0xF1000000,0x71000000,0xD8000000,0x31000000,0x15000000,
- 0x04000000,0xC7000000,0x23000000,0xC3000000,0x18000000,0x96000000,0x05000000,0x9A000000,
- 0x07000000,0x12000000,0x80000000,0xE2000000,0xEB000000,0x27000000,0xB2000000,0x75000000,
- 0x09000000,0x83000000,0x2C000000,0x1A000000,0x1B000000,0x6E000000,0x5A000000,0xA0000000,
- 0x52000000,0x3B000000,0xD6000000,0xB3000000,0x29000000,0xE3000000,0x2F000000,0x84000000,
- 0x53000000,0xD1000000,0000000000,0xED000000,0x20000000,0xFC000000,0xB1000000,0x5B000000,
- 0x6A000000,0xCB000000,0xBE000000,0x39000000,0x4A000000,0x4C000000,0x58000000,0xCF000000,
- 0xD0000000,0xEF000000,0xAA000000,0xFB000000,0x43000000,0x4D000000,0x33000000,0x85000000,
- 0x45000000,0xF9000000,0x02000000,0x7F000000,0x50000000,0x3C000000,0x9F000000,0xA8000000,
- 0x51000000,0xA3000000,0x40000000,0x8F000000,0x92000000,0x9D000000,0x38000000,0xF5000000,
- 0xBC000000,0xB6000000,0xDA000000,0x21000000,0x10000000,0xFF000000,0xF3000000,0xD2000000,
- 0xCD000000,0x0C000000,0x13000000,0xEC000000,0x5F000000,0x97000000,0x44000000,0x17000000,
- 0xC4000000,0xA7000000,0x7E000000,0x3D000000,0x64000000,0x5D000000,0x19000000,0x73000000,
- 0x60000000,0x81000000,0x4F000000,0xDC000000,0x22000000,0x2A000000,0x90000000,0x88000000,
- 0x46000000,0xEE000000,0xB8000000,0x14000000,0xDE000000,0x5E000000,0x0B000000,0xDB000000,
- 0xE0000000,0x32000000,0x3A000000,0x0A000000,0x49000000,0x06000000,0x24000000,0x5C000000,
- 0xC2000000,0xD3000000,0xAC000000,0x62000000,0x91000000,0x95000000,0xE4000000,0x79000000,
- 0xE7000000,0xC8000000,0x37000000,0x6D000000,0x8D000000,0xD5000000,0x4E000000,0xA9000000,
- 0x6C000000,0x56000000,0xF4000000,0xEA000000,0x65000000,0x7A000000,0xAE000000,0x08000000,
- 0xBA000000,0x78000000,0x25000000,0x2E000000,0x1C000000,0xA6000000,0xB4000000,0xC6000000,
- 0xE8000000,0xDD000000,0x74000000,0x1F000000,0x4B000000,0xBD000000,0x8B000000,0x8A000000,
- 0x70000000,0x3E000000,0xB5000000,0x66000000,0x48000000,0x03000000,0xF6000000,0x0E000000,
- 0x61000000,0x35000000,0x57000000,0xB9000000,0x86000000,0xC1000000,0x1D000000,0x9E000000,
- 0xE1000000,0xF8000000,0x98000000,0x11000000,0x69000000,0xD9000000,0x8E000000,0x94000000,
- 0x9B000000,0x1E000000,0x87000000,0xE9000000,0xCE000000,0x55000000,0x28000000,0xDF000000,
- 0x8C000000,0xA1000000,0x89000000,0x0D000000,0xBF000000,0xE6000000,0x42000000,0x68000000,
- 0x41000000,0x99000000,0x2D000000,0x0F000000,0xB0000000,0x54000000,0xBB000000,0x16000000 
- } 
-};
-
-/*----------------- The workspace ------------------------------*/
-
-static u32 Ekey[44];	/* The expanded key */
-
-/*------ The round Function.  4 table lookups and 4 Exors ------*/
-#define f_rnd(x, n)                     \
-  ( ft_tab[0][byte0(x[n])]              \
-  ^ ft_tab[1][byte1(x[(n + 1) & 3])]    \
-  ^ ft_tab[2][byte2(x[(n + 2) & 3])]    \
-  ^ ft_tab[3][byte3(x[(n + 3) & 3])] )
-
-#define f_round(bo, bi, k)          \
-    bo[0] = f_rnd(bi, 0) ^ k[0];    \
-    bo[1] = f_rnd(bi, 1) ^ k[1];    \
-    bo[2] = f_rnd(bi, 2) ^ k[2];    \
-    bo[3] = f_rnd(bi, 3) ^ k[3];    \
-    k += 4
-
-/*--- The S Box lookup used in constructing the Key schedule ---*/
-#define ls_box(x)       \
- (  fl_tab[0][byte0(x)] \
-  ^ fl_tab[1][byte1(x)] \
-  ^ fl_tab[2][byte2(x)] \
-  ^ fl_tab[3][byte3(x)] )
-
-/*------------ The last round function (no MixColumn) ----------*/
-#define lf_rnd(x, n)                    \
-  ( fl_tab[0][byte0(x[n])]              \
-  ^ fl_tab[1][byte1(x[(n + 1) & 3])]    \
-  ^ fl_tab[2][byte2(x[(n + 2) & 3])]    \
-  ^ fl_tab[3][byte3(x[(n + 3) & 3])] )
-
-
-/*-----------------------------------------------------------
- * RijndaelKeySchedule
- *   Initialise the key schedule from a supplied key
- */
-void RijndaelKeySchedule(u8 key[16])
-{
-    u32  t;
-    u32  *ek=Ekey,	    /* pointer to the expanded key   */
-         *rc=rnd_con;   /* pointer to the round constant */
-
-    Ekey[0] = u32_in(key     );
-    Ekey[1] = u32_in(key +  4);
-    Ekey[2] = u32_in(key +  8);
-    Ekey[3] = u32_in(key + 12);
-
-	while(ek < Ekey + 40)
-    {
-		t = rot3(ek[3]);
-        ek[4] = ek[0] ^ ls_box(t) ^ *rc++;
-        ek[5] = ek[1] ^ ek[4];
-        ek[6] = ek[2] ^ ek[5];
-        ek[7] = ek[3] ^ ek[6];
-        ek += 4;
-    }
-}
-
-/*-----------------------------------------------------------
- * RijndaelEncrypt
- *   Encrypt an input block
- */
-void RijndaelEncrypt(u8 in[16], u8 out[16])
-{
-    u32    b0[4], b1[4], *kp = Ekey;
-
-    b0[0] = u32_in(in     ) ^ *kp++;
-    b0[1] = u32_in(in +  4) ^ *kp++;
-    b0[2] = u32_in(in +  8) ^ *kp++;
-    b0[3] = u32_in(in + 12) ^ *kp++;
-
-    f_round(b1, b0, kp); 
-    f_round(b0, b1, kp);
-    f_round(b1, b0, kp); 
-    f_round(b0, b1, kp);
-    f_round(b1, b0, kp); 
-    f_round(b0, b1, kp);
-    f_round(b1, b0, kp); 
-    f_round(b0, b1, kp);
-    f_round(b1, b0, kp); 
-
-    u32_out(out,      lf_rnd(b1, 0) ^ kp[0]); 
-    u32_out(out +  4, lf_rnd(b1, 1) ^ kp[1]);
-    u32_out(out +  8, lf_rnd(b1, 2) ^ kp[2]); 
-    u32_out(out + 12, lf_rnd(b1, 3) ^ kp[3]);
-}
diff --git a/sflphone-common/libs/pjproject/third_party/milenage/rijndael.h b/sflphone-common/libs/pjproject/third_party/milenage/rijndael.h
deleted file mode 100644
index 4e728a5b3e..0000000000
--- a/sflphone-common/libs/pjproject/third_party/milenage/rijndael.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*-------------------------------------------------------------------
- *          Example algorithms f1, f1*, f2, f3, f4, f5, f5*
- *-------------------------------------------------------------------
- *
- *  A sample implementation of the example 3GPP authentication and
- *  key agreement functions f1, f1*, f2, f3, f4, f5 and f5*.  This is
- *  a byte-oriented implementation of the functions, and of the block
- *  cipher kernel function Rijndael.
- *
- *  This has been coded for clarity, not necessarily for efficiency.
- *
- *  The functions f2, f3, f4 and f5 share the same inputs and have
- *  been coded together as a single function.  f1, f1* and f5* are
- *  all coded separately.
- *
- *-----------------------------------------------------------------*/
-
-#ifndef RIJNDAEL_H
-#define RIJNDAEL_H
-
-
-void RijndaelKeySchedule( u8 key[16] );
-void RijndaelEncrypt( u8 input[16], u8 output[16] );
-
-
-#endif
-- 
GitLab


From fb20338f79138b010ff2787d42b4493cbc187aba Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Feb 2010 12:03:19 -0500
Subject: [PATCH 033/160] [#2598] PA timing automatically adjusted using
 PA_STREAM_AUTO_TIMING_UPDATE

Passed when connecting the stream to PulseAudio, it will automatically update the structure every 100ms and every time a function is called
---
 sflphone-common/src/audio/pulseaudio/audiostream.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
index dd11a28d57..0187585c22 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
@@ -207,7 +207,7 @@ AudioStream::createStream (pa_context* c)
         attributes->minreq = (uint32_t) -1;
         attributes->fragsize = (uint32_t) -1;
 
-        pa_stream_connect_playback (s , NULL , attributes, PA_STREAM_ADJUST_LATENCY, &_volume, NULL);
+        pa_stream_connect_playback (s , NULL , attributes, (pa_stream_flags_t)(PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), &_volume, NULL);
     } else if (_streamType == CAPTURE_STREAM) {
 
         // 20 ms framesize TODO: take framesize value from config
-- 
GitLab


From 3e3e77ff264deb94dd4566cc1e231e6ab936a77b Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emilou@invictus.(none)>
Date: Thu, 4 Feb 2010 12:05:37 -0500
Subject: [PATCH 034/160] [#1753] Remove ILBC code and disable it by default in
 the configure

Refer aconfigure.ac

Conflicts:

	sflphone-common/libs/pjproject/aconfigure
---
 sflphone-common/libs/pjproject/aconfigure     | 11423 ++++------------
 sflphone-common/libs/pjproject/aconfigure.ac  |     8 +-
 .../third_party/ilbc/FrameClassify.c          |   114 -
 .../third_party/ilbc/FrameClassify.h          |    27 -
 .../pjproject/third_party/ilbc/LPCdecode.c    |   158 -
 .../pjproject/third_party/ilbc/LPCdecode.h    |    52 -
 .../pjproject/third_party/ilbc/LPCencode.c    |   241 -
 .../pjproject/third_party/ilbc/LPCencode.h    |    28 -
 .../third_party/ilbc/StateConstructW.c        |    86 -
 .../third_party/ilbc/StateConstructW.h        |    31 -
 .../pjproject/third_party/ilbc/StateSearchW.c |   211 -
 .../pjproject/third_party/ilbc/StateSearchW.h |    52 -
 .../pjproject/third_party/ilbc/anaFilter.c    |    72 -
 .../pjproject/third_party/ilbc/anaFilter.h    |    30 -
 .../pjproject/third_party/ilbc/constants.c    |   770 --
 .../pjproject/third_party/ilbc/constants.h    |    80 -
 .../pjproject/third_party/ilbc/createCB.c     |   231 -
 .../pjproject/third_party/ilbc/createCB.h     |    58 -
 .../libs/pjproject/third_party/ilbc/doCPLC.c  |   270 -
 .../libs/pjproject/third_party/ilbc/doCPLC.h  |    29 -
 .../pjproject/third_party/ilbc/enhancer.c     |   701 -
 .../pjproject/third_party/ilbc/enhancer.h     |    36 -
 .../libs/pjproject/third_party/ilbc/filter.c  |   175 -
 .../libs/pjproject/third_party/ilbc/filter.h  |    80 -
 .../pjproject/third_party/ilbc/gainquant.c    |   116 -
 .../pjproject/third_party/ilbc/gainquant.h    |    30 -
 .../pjproject/third_party/ilbc/getCBvec.c     |   193 -
 .../pjproject/third_party/ilbc/getCBvec.h     |    25 -
 .../libs/pjproject/third_party/ilbc/helpfun.c |   326 -
 .../libs/pjproject/third_party/ilbc/helpfun.h |   106 -
 .../libs/pjproject/third_party/ilbc/hpInput.c |    65 -
 .../libs/pjproject/third_party/ilbc/hpInput.h |    24 -
 .../pjproject/third_party/ilbc/hpOutput.c     |    61 -
 .../pjproject/third_party/ilbc/hpOutput.h     |    24 -
 .../pjproject/third_party/ilbc/iCBConstruct.c |   112 -
 .../pjproject/third_party/ilbc/iCBConstruct.h |    40 -
 .../pjproject/third_party/ilbc/iCBSearch.c    |   515 -
 .../pjproject/third_party/ilbc/iCBSearch.h    |    37 -
 .../pjproject/third_party/ilbc/iLBC_decode.c  |   652 -
 .../pjproject/third_party/ilbc/iLBC_decode.h  |    42 -
 .../pjproject/third_party/ilbc/iLBC_define.h  |   217 -
 .../pjproject/third_party/ilbc/iLBC_encode.c  |   543 -
 .../pjproject/third_party/ilbc/iLBC_encode.h  |    39 -
 .../pjproject/third_party/ilbc/iLBC_test.c    |   310 -
 .../libs/pjproject/third_party/ilbc/lsf.c     |   283 -
 .../libs/pjproject/third_party/ilbc/lsf.h     |    27 -
 .../libs/pjproject/third_party/ilbc/packing.c |   182 -
 .../libs/pjproject/third_party/ilbc/packing.h |    68 -
 .../pjproject/third_party/ilbc/syntFilter.c   |    80 -
 .../pjproject/third_party/ilbc/syntFilter.h   |    24 -
 50 files changed, 2909 insertions(+), 16195 deletions(-)
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/constants.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/constants.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/createCB.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/createCB.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/filter.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/filter.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/lsf.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/lsf.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/packing.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/packing.h
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c
 delete mode 100644 sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h

diff --git a/sflphone-common/libs/pjproject/aconfigure b/sflphone-common/libs/pjproject/aconfigure
index 3ae02b02d2..e5b8e4aec5 100755
--- a/sflphone-common/libs/pjproject/aconfigure
+++ b/sflphone-common/libs/pjproject/aconfigure
@@ -1,60 +1,81 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for pjproject 1.0.
+# Generated by GNU Autoconf 2.64 for pjproject 1.0.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# Foundation, Inc.
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
   else
-    PATH_SEPARATOR=:
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
   fi
-  rm -f conf$$.sh
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 
@@ -63,20 +84,18 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -87,354 +106,321 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # CDPATH.
-$as_unset CDPATH
-
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 if test "x$CONFIG_SHELL" = x; then
-  if (eval ":") 2>/dev/null; then
-  as_have_required=yes
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
 else
-  as_have_required=no
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
-
-  if test $as_have_required = yes && 	 (eval ":
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
 
 exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_have_required=no
 fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
 
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
-  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
-  :
 else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  case $as_dir in
+  as_found=:
+  case $as_dir in #(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
-	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
 	   done;;
        esac
+  as_found=false
 done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
 IFS=$as_save_IFS
 
 
-      for as_shell in $as_candidate_shells $SHELL; do
-	 # Try only shells that exist, to save several forks.
-	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		{ ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
 fi
 
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-	       as_have_required=yes
-	       if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
 fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
 
-
-:
-(as_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
 }
+as_unset=as_fn_unset
 
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
 
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
 
-if as_func_ret_success; then
-  :
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
-  :
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
 else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
-fi
-
-fi
-
-      done
-
-      if test "x$CONFIG_SHELL" != x; then
-  for as_var in BASH_ENV ENV
-        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-        done
-        export CONFIG_SHELL
-        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
-    if test $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
 
 
-(eval "as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
 
-exitcode=0
-if as_func_success; then
-  :
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
 else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
+  as_expr=false
 fi
 
-if as_func_ret_success; then
-  :
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
+  as_basename=false
 fi
 
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_dirname=false
 fi
 
-test \$exitcode = 0") || {
-  echo No shell found that supports shell functions.
-  echo Please tell autoconf@gnu.org about your system,
-  echo including any error possibly output before this
-  echo message
-}
-
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
 
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
     /[$]LINENO/=
@@ -451,8 +437,7 @@ test \$exitcode = 0") || {
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
@@ -462,49 +447,40 @@ test \$exitcode = 0") || {
   exit
 }
 
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
@@ -512,7 +488,7 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -529,12 +505,12 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+	test -d "$1/.";
       else
-	case $1 in
-        -*)set "./$1";;
+	case $1 in #(
+	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -548,7 +524,6 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
-
 exec 7<&0 </dev/null 6>&1
 
 # Name of the host.
@@ -567,7 +542,6 @@ cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME='pjproject'
@@ -575,6 +549,7 @@ PACKAGE_TARNAME='pjproject'
 PACKAGE_VERSION='1.0'
 PACKAGE_STRING='pjproject 1.0'
 PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
 
 # Factoring default headers for most tests.
 ac_includes_default="\
@@ -612,96 +587,119 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-target
-target_cpu
-target_vendor
-target_os
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CXX
-CXXFLAGS
-ac_ct_CXX
-ac_pjdir
-ac_build_mak_vars
-CPP
-GREP
-EGREP
-ac_os_objs
-ac_pjmedia_snd
-ac_pa_cflags
-ac_pa_use_alsa
-ac_pa_use_oss
-ac_no_small_filter
-ac_no_large_filter
-ac_no_speex_aec
-ac_no_g711_codec
-ac_no_l16_codec
-ac_no_gsm_codec
-ac_no_g722_codec
-ac_no_g7221_codec
-ac_no_speex_codec
-ac_no_ilbc_codec
-ac_no_ssl
-openssl_h_present
-libssl_present
-libcrypto_present
-ac_cross_compile
-ac_linux_poll
-ac_host
-ac_main_obj
+ac_subst_vars='LTLIBOBJS
 LIBOBJS
-LTLIBOBJS'
+ac_main_obj
+ac_host
+ac_linux_poll
+ac_cross_compile
+libcrypto_present
+libssl_present
+openssl_h_present
+ac_no_ssl
+ac_no_ilbc_codec
+ac_no_speex_codec
+ac_no_g7221_codec
+ac_no_g722_codec
+ac_no_gsm_codec
+ac_no_l16_codec
+ac_no_g711_codec
+ac_no_speex_aec
+ac_no_large_filter
+ac_no_small_filter
+ac_pa_use_oss
+ac_pa_use_alsa
+ac_pa_cflags
+ac_pjmedia_snd
+ac_os_objs
+EGREP
+GREP
+CPP
+ac_build_mak_vars
+ac_pjdir
+ac_ct_CXX
+CXXFLAGS
+CXX
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
 ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_floating_point
+enable_epoll
+enable_sound
+enable_oss
+enable_ext_sound
+enable_small_filter
+enable_large_filter
+enable_speex_aec
+enable_g711_codec
+enable_l16_codec
+enable_gsm_codec
+enable_g722_codec
+enable_g7221_codec
+enable_speex_codec
+enable_ilbc_codec
+enable_libsamplerate
+enable_ipp
+enable_ipp_samples
+enable_ssl
+'
       ac_precious_vars='build_alias
 host_alias
 target_alias
@@ -719,6 +717,8 @@ CPP'
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -817,13 +817,20 @@ do
     datarootdir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=no ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
 
   -docdir | --docdir | --docdi | --doc | --do)
     ac_prev=docdir ;;
@@ -836,13 +843,20 @@ do
     dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=\$ac_optarg ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1033,22 +1047,36 @@ do
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=\$ac_optarg ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=no ;;
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -1068,25 +1096,25 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
+  -*) as_fn_error "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information."
     ;;
 
   *=*)
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+    esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
@@ -1095,23 +1123,36 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
 fi
 
-# Be sure to have absolute directory names.
+# Check all directory arguments for consistency.
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
 		libdir localedir mandir
 do
   eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
   case $ac_val in
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1125,7 +1166,7 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
     If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
@@ -1141,23 +1182,21 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  { echo "$as_me: error: Working directory cannot be determined" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  { echo "$as_me: error: pwd does not report name of working directory" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -1184,13 +1223,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
-   { (exit 1); exit 1; }; }
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1238,9 +1275,9 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
+                          [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
+                          [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1250,25 +1287,25 @@ for instance \`--prefix=\$HOME'.
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR          info documentation [DATAROOTDIR/info]
-  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/pjproject]
-  --htmldir=DIR          html documentation [DOCDIR]
-  --dvidir=DIR           dvi documentation [DOCDIR]
-  --pdfdir=DIR           pdf documentation [DOCDIR]
-  --psdir=DIR            ps documentation [DOCDIR]
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/pjproject]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
 _ACEOF
 
   cat <<\_ACEOF
@@ -1287,6 +1324,7 @@ if test -n "$ac_init_help"; then
   cat <<\_ACEOF
 
 Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --disable-floating-point
@@ -1332,6 +1370,7 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
+Report bugs to the package provider.
 _ACEOF
 ac_status=$?
 fi
@@ -1339,15 +1378,17 @@ fi
 if test "$ac_init_help" = "recursive"; then
   # If there are subdirs, report their specific --help.
   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" || continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
     ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1383,7 +1424,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1393,58 +1434,380 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 pjproject configure 1.0
-generated by GNU Autoconf 2.61
+generated by GNU Autoconf 2.64
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
   exit
 fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by pjproject $as_me 1.0, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
 
-  $ $0 $@
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
 
-_ACEOF
-exec 5>>config.log
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
 {
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
 
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+} # ac_fn_c_try_compile
 
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-_ASUNAME
+	ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
 
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  return $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by pjproject $as_me 1.0, which was
+generated by GNU Autoconf 2.64.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
 IFS=$as_save_IFS
 
 } >&5
@@ -1478,12 +1841,12 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
     2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      as_fn_append ac_configure_args1 " '$ac_arg'"
       if test $ac_must_keep_next = true; then
 	ac_must_keep_next=false # Got value, back to normal.
       else
@@ -1499,13 +1862,13 @@ do
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args="$ac_configure_args '$ac_arg'"
+      as_fn_append ac_configure_args " '$ac_arg'"
       ;;
     esac
   done
 done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
@@ -1530,12 +1893,13 @@ _ASBOX
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      *) $as_unset $ac_var ;;
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -1564,9 +1928,9 @@ _ASBOX
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      echo "$ac_var='\''$ac_val'\''"
+      $as_echo "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
@@ -1581,9 +1945,9 @@ _ASBOX
       do
 	eval ac_val=\$$ac_var
 	case $ac_val in
-	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
 	esac
-	echo "$ac_var='\''$ac_val'\''"
+	$as_echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
@@ -1599,64 +1963,69 @@ _ASBOX
       echo
     fi
     test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
     exit $exit_status
 ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
+$as_echo "/* confdefs.h */" > confdefs.h
+
 # Predefined preprocessor variables.
 
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  set x "$CONFIG_SITE"
+  ac_site_file1=$CONFIG_SITE
 elif test "x$prefix" != xNONE; then
-  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
 else
-  set x "$ac_default_prefix/share/config.site" \
-	"$ac_default_prefix/etc/config.site"
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
 fi
-shift
-for ac_site_file
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
+  test "x$ac_site_file" = xNONE && continue
   if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file"
   fi
@@ -1666,16 +2035,16 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
@@ -1689,68 +2058,56 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -1764,24 +2121,16 @@ host_orig="$host"
 
 ac_aux_dir=
 for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
+  done
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -1795,35 +2144,27 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
-{ echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-echo "$as_me: error: invalid value of canonical build" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -1839,28 +2180,24 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-echo "$as_me: error: invalid value of canonical host" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -1876,28 +2213,24 @@ IFS=$ac_save_IFS
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
-{ echo "$as_me:$LINENO: checking target system type" >&5
-echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
-if test "${ac_cv_target+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if test "${ac_cv_target+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test "x$target_alias" = x; then
   ac_cv_target=$ac_cv_host
 else
   ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
 fi
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-echo "${ECHO_T}$ac_cv_target" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
 case $ac_cv_target in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
-echo "$as_me: error: invalid value of canonical target" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
 esac
 target=$ac_cv_target
 ac_save_IFS=$IFS; IFS='-'
@@ -1941,10 +2274,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -1954,25 +2287,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -1981,10 +2314,10 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -1994,25 +2327,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -2020,12 +2353,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2038,10 +2367,10 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2051,25 +2380,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2078,10 +2407,10 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2092,18 +2421,18 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
@@ -2122,11 +2451,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2137,10 +2466,10 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2150,25 +2479,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2181,10 +2510,10 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2194,25 +2523,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2224,12 +2553,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2239,98 +2564,82 @@ fi
 fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
 
 # Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
 
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
+#include <stdio.h>
 int
 main ()
 {
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
 
   ;
   return 0;
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort.  b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions.  Remove them first so a
-# subsequent execution test works.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
 ac_rmfiles=
 for ac_file in $ac_files
 do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     * ) ac_rmfiles="$ac_rmfiles $ac_file";;
   esac
 done
 rm -f $ac_rmfiles
 
-if { (ac_try="$ac_link_default"
+if { { ac_try="$ac_link_default"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -2340,14 +2649,14 @@ for ac_file in $ac_files ''
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
 	;;
     [ab].out )
 	# We found the default executable, but exeext='' is most
 	# certainly right.
 	break;;
     *.* )
-        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
 	then :; else
 	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	fi
@@ -2366,78 +2675,75 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
-if test -z "$ac_file"; then
-  echo "$as_me: failed program was:" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then :
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "C compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
 fi
-
 ac_exeext=$ac_cv_exeext
 
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 # If not cross compiling, check that we can run a simple program.
 if test "$cross_compiling" != yes; then
   if { ac_try='./$ac_file'
-  { (case "(($ac_try" in
+  { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
 	cross_compiling=yes
     else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+See \`config.log' for more details." "$LINENO" 5; }
     fi
   fi
 fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
 ac_clean_files=$ac_clean_files_save
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
-
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
-if { (ac_try="$ac_link"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -2445,37 +2751,31 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
 for ac_file in conftest.exe conftest conftest.*; do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	  break;;
     * ) break;;
   esac
 done
 else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
 fi
-
 rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2487,51 +2787,46 @@ main ()
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
+if { { ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
 fi
-
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2545,54 +2840,34 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  ac_compiler_gnu=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
    CFLAGS="-g"
-   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2603,34 +2878,11 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2641,35 +2893,12 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_compile "$LINENO"; then :
 
-	ac_c_werror_flag=$ac_save_c_werror_flag
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -2680,42 +2909,18 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -2731,18 +2936,14 @@ else
     CFLAGS=
   fi
 fi
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
@@ -2799,31 +3000,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
 	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+  if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_c89=$ac_arg
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
@@ -2834,17 +3013,19 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
   xno)
-    { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c89"
-    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -2866,10 +3047,10 @@ if test -z "$CXX"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CXX"; then
   ac_cv_prog_CXX="$CXX" # Let the user override the test.
@@ -2879,25 +3060,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CXX=$ac_cv_prog_CXX
 if test -n "$CXX"; then
-  { echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2910,10 +3091,10 @@ if test -z "$CXX"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CXX"; then
   ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
@@ -2923,25 +3104,25 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
 if test -n "$ac_ct_CXX"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2953,12 +3134,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CXX=$ac_ct_CXX
@@ -2968,49 +3145,36 @@ fi
   fi
 fi
 # Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
 
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3024,54 +3188,34 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  ac_compiler_gnu=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
-GXX=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
 ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
-{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
    ac_cxx_werror_flag=yes
    ac_cv_prog_cxx_g=no
    CXXFLAGS="-g"
-   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3082,34 +3226,11 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_prog_cxx_g=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CXXFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3120,35 +3241,12 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_cxx_try_compile "$LINENO"; then :
 
-	ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 	 CXXFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3159,42 +3257,18 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_cv_prog_cxx_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_cxx_werror_flag=$ac_save_cxx_werror_flag
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
 if test "$ac_test_CXXFLAGS" = set; then
   CXXFLAGS=$ac_save_CXXFLAGS
 elif test $ac_cv_prog_cxx_g = yes; then
@@ -3235,19 +3309,14 @@ case $target in
 esac
 
 
-
-{ echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
-echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6; }
-if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpthread  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3265,39 +3334,18 @@ return pthread_create ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_pthread_pthread_create=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_pthread_pthread_create=no
+  ac_cv_lib_pthread_pthread_create=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
-echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6; }
-if test $ac_cv_lib_pthread_pthread_create = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBPTHREAD 1
 _ACEOF
@@ -3306,19 +3354,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lwsock32" >&5
-echo $ECHO_N "checking for puts in -lwsock32... $ECHO_C" >&6; }
-if test "${ac_cv_lib_wsock32_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lwsock32" >&5
+$as_echo_n "checking for puts in -lwsock32... " >&6; }
+if test "${ac_cv_lib_wsock32_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lwsock32  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3336,39 +3379,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_wsock32_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_wsock32_puts=no
+  ac_cv_lib_wsock32_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_wsock32_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_wsock32_puts" >&6; }
-if test $ac_cv_lib_wsock32_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wsock32_puts" >&5
+$as_echo "$ac_cv_lib_wsock32_puts" >&6; }
+if test "x$ac_cv_lib_wsock32_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBWSOCK32 1
 _ACEOF
@@ -3377,19 +3399,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lws2_32" >&5
-echo $ECHO_N "checking for puts in -lws2_32... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ws2_32_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lws2_32" >&5
+$as_echo_n "checking for puts in -lws2_32... " >&6; }
+if test "${ac_cv_lib_ws2_32_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lws2_32  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3407,39 +3424,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_ws2_32_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ws2_32_puts=no
+  ac_cv_lib_ws2_32_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ws2_32_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_ws2_32_puts" >&6; }
-if test $ac_cv_lib_ws2_32_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_puts" >&5
+$as_echo "$ac_cv_lib_ws2_32_puts" >&6; }
+if test "x$ac_cv_lib_ws2_32_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBWS2_32 1
 _ACEOF
@@ -3448,19 +3444,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lole32" >&5
-echo $ECHO_N "checking for puts in -lole32... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ole32_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lole32" >&5
+$as_echo_n "checking for puts in -lole32... " >&6; }
+if test "${ac_cv_lib_ole32_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lole32  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3478,39 +3469,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_ole32_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ole32_puts=no
+  ac_cv_lib_ole32_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ole32_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_ole32_puts" >&6; }
-if test $ac_cv_lib_ole32_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ole32_puts" >&5
+$as_echo "$ac_cv_lib_ole32_puts" >&6; }
+if test "x$ac_cv_lib_ole32_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBOLE32 1
 _ACEOF
@@ -3519,19 +3489,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lwinmm" >&5
-echo $ECHO_N "checking for puts in -lwinmm... $ECHO_C" >&6; }
-if test "${ac_cv_lib_winmm_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lwinmm" >&5
+$as_echo_n "checking for puts in -lwinmm... " >&6; }
+if test "${ac_cv_lib_winmm_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lwinmm  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3549,39 +3514,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_winmm_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_winmm_puts=no
+  ac_cv_lib_winmm_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_winmm_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_winmm_puts" >&6; }
-if test $ac_cv_lib_winmm_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_winmm_puts" >&5
+$as_echo "$ac_cv_lib_winmm_puts" >&6; }
+if test "x$ac_cv_lib_winmm_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBWINMM 1
 _ACEOF
@@ -3590,19 +3534,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lsocket" >&5
-echo $ECHO_N "checking for puts in -lsocket... $ECHO_C" >&6; }
-if test "${ac_cv_lib_socket_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lsocket" >&5
+$as_echo_n "checking for puts in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsocket  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3620,39 +3559,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_socket_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_socket_puts=no
+  ac_cv_lib_socket_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_socket_puts" >&6; }
-if test $ac_cv_lib_socket_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_puts" >&5
+$as_echo "$ac_cv_lib_socket_puts" >&6; }
+if test "x$ac_cv_lib_socket_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSOCKET 1
 _ACEOF
@@ -3661,19 +3579,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lrt" >&5
-echo $ECHO_N "checking for puts in -lrt... $ECHO_C" >&6; }
-if test "${ac_cv_lib_rt_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lrt" >&5
+$as_echo_n "checking for puts in -lrt... " >&6; }
+if test "${ac_cv_lib_rt_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lrt  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3691,39 +3604,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_rt_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_rt_puts=no
+  ac_cv_lib_rt_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_rt_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_rt_puts" >&6; }
-if test $ac_cv_lib_rt_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_puts" >&5
+$as_echo "$ac_cv_lib_rt_puts" >&6; }
+if test "x$ac_cv_lib_rt_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBRT 1
 _ACEOF
@@ -3732,19 +3624,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for puts in -lnsl" >&5
-echo $ECHO_N "checking for puts in -lnsl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_nsl_puts+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for puts in -lnsl" >&5
+$as_echo_n "checking for puts in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_puts+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnsl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3762,39 +3649,18 @@ return puts ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_nsl_puts=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_nsl_puts=no
+  ac_cv_lib_nsl_puts=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_puts" >&5
-echo "${ECHO_T}$ac_cv_lib_nsl_puts" >&6; }
-if test $ac_cv_lib_nsl_puts = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_puts" >&5
+$as_echo "$ac_cv_lib_nsl_puts" >&6; }
+if test "x$ac_cv_lib_nsl_puts" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBNSL 1
 _ACEOF
@@ -3803,19 +3669,14 @@ _ACEOF
 
 fi
 
-
-{ echo "$as_me:$LINENO: checking for uuid_generate in -luuid" >&5
-echo $ECHO_N "checking for uuid_generate in -luuid... $ECHO_C" >&6; }
-if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
+$as_echo_n "checking for uuid_generate in -luuid... " >&6; }
+if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3833,39 +3694,18 @@ return uuid_generate ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_uuid_uuid_generate=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_uuid_uuid_generate=no
+  ac_cv_lib_uuid_uuid_generate=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_generate" >&5
-echo "${ECHO_T}$ac_cv_lib_uuid_uuid_generate" >&6; }
-if test $ac_cv_lib_uuid_uuid_generate = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
+$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBUUID 1
 _ACEOF
@@ -3874,18 +3714,14 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for uuid_generate in -luuid" >&5
-echo $ECHO_N "checking for uuid_generate in -luuid... $ECHO_C" >&6; }
-if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
+$as_echo_n "checking for uuid_generate in -luuid... " >&6; }
+if test "${ac_cv_lib_uuid_uuid_generate+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-luuid  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -3903,68 +3739,43 @@ return uuid_generate ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_uuid_uuid_generate=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_uuid_uuid_generate=no
+  ac_cv_lib_uuid_uuid_generate=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_generate" >&5
-echo "${ECHO_T}$ac_cv_lib_uuid_uuid_generate" >&6; }
-if test $ac_cv_lib_uuid_uuid_generate = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
+$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test "x$ac_cv_lib_uuid_uuid_generate" = x""yes; then :
   ac_has_uuid_lib=1
 fi
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_M_NAME to $target_cpu" >&5
-echo "${ECHO_T}Setting PJ_M_NAME to $target_cpu" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_M_NAME to $target_cpu" >&5
+$as_echo "Setting PJ_M_NAME to $target_cpu" >&6; }
 cat >>confdefs.h <<_ACEOF
 #define PJ_M_NAME "$target_cpu"
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking memory alignment" >&5
-echo $ECHO_N "checking memory alignment... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking memory alignment" >&5
+$as_echo_n "checking memory alignment... " >&6; }
 case $target in
     ia64-* | x86_64-* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_POOL_ALIGNMENT 8
-_ACEOF
+	$as_echo "#define PJ_POOL_ALIGNMENT 8" >>confdefs.h
 
-	{ echo "$as_me:$LINENO: result: 8 bytes" >&5
-echo "${ECHO_T}8 bytes" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 8 bytes" >&5
+$as_echo "8 bytes" >&6; }
 	;;
     * )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_POOL_ALIGNMENT 4
-_ACEOF
+	$as_echo "#define PJ_POOL_ALIGNMENT 4" >>confdefs.h
 
-	{ echo "$as_me:$LINENO: result: 4 bytes (default)" >&5
-echo "${ECHO_T}4 bytes (default)" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 4 bytes (default)" >&5
+$as_echo "4 bytes (default)" >&6; }
 	;;
 esac
 
@@ -3974,15 +3785,15 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -3996,11 +3807,7 @@ do
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -4009,76 +3816,34 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -4090,8 +3855,8 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -4101,11 +3866,7 @@ do
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -4114,83 +3875,40 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
 rm -f conftest.err conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+if $ac_preproc_ok; then :
+
 else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4200,45 +3918,40 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
+  if test -z "$GREP"; then
   ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in grep ggrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-    # Check for GNU ac_path_GREP and select it if it is found.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'GREP' >> "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
     "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_GREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_GREP="$ac_path_GREP"
@@ -4250,77 +3963,61 @@ case `"$ac_path_GREP" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_GREP_found && break 3
+      $ac_path_GREP_found && break 3
+    done
+  done
   done
-done
-
-done
 IFS=$as_save_IFS
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
   ac_cv_path_GREP=$GREP
 fi
 
-
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
 
 
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
    then ac_cv_path_EGREP="$GREP -E"
    else
-     # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+     if test -z "$EGREP"; then
   ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in egrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-    # Check for GNU ac_path_EGREP and select it if it is found.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'EGREP' >> "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
     "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_EGREP="$ac_path_EGREP"
@@ -4332,46 +4029,31 @@ case `"$ac_path_EGREP" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_EGREP_found && break 3
+      $ac_path_EGREP_found && break 3
+    done
+  done
   done
-done
-
-done
 IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
   ac_cv_path_EGREP=$EGREP
 fi
 
-
    fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
 
 
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -4386,47 +4068,23 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -4436,18 +4094,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -4457,14 +4111,10 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -4491,113 +4141,36 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_run "$LINENO"; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-	       { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -4605,280 +4178,254 @@ fi
 done
 
 
-{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
-  # See if sys/param.h defines the BYTE_ORDER macro.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <sys/param.h>
+	     #include <sys/param.h>
 
 int
 main ()
 {
-#if  ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
-	&& BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
- bogus endian macros
-#endif
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   # It does; now see whether it defined to BIG_ENDIAN or not.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#include <sys/param.h>
+		#include <sys/param.h>
 
 int
 main ()
 {
 #if BYTE_ORDER != BIG_ENDIAN
- not big endian
-#endif
+		 not big endian
+		#endif
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_bigendian=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_c_bigendian=no
+  ac_cv_c_bigendian=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
 
-	# It does not; compile a test program.
-if test "$cross_compiling" = yes; then
-  # try to guess the endianness by grepping values into an object file
-  ac_cv_c_bigendian=unknown
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
-short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+#include <limits.h>
+
 int
 main ()
 {
- _ascii (); _ebcdic ();
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
 fi
-if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-  if test "$ac_cv_c_bigendian" = unknown; then
-    ac_cv_c_bigendian=no
-  else
-    # finding both strings is unlikely to happen, but who knows?
-    ac_cv_c_bigendian=unknown
-  fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
 
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
 main ()
 {
 
-  /* Are we little or big endian?  From Harbison&Steele.  */
-  union
-  {
-    long int l;
-    char c[sizeof (long int)];
-  } u;
-  u.l = 1;
-  return u.c[sizeof (long int) - 1] == 1;
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+if ac_fn_c_try_run "$LINENO"; then :
   ac_cv_c_bigendian=no
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_c_bigendian=yes
+  ac_cv_c_bigendian=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
+    fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
-case $ac_cv_c_bigendian in
-  yes)
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
-cat >>confdefs.h <<\_ACEOF
-#define WORDS_BIGENDIAN 1
-_ACEOF
- ;;
-  no)
-     ;;
-  *)
-    { { echo "$as_me:$LINENO: error: unknown endianness
-presetting ac_cv_c_bigendian=no (or yes) will help" >&5
-echo "$as_me: error: unknown endianness
-presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
-   { (exit 1); exit 1; }; } ;;
-esac
+     ;; #(
+   *)
+     as_fn_error "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
 
 
 case $target in
     *mingw* | *cygw* | *win32* | *w32* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_WIN32 1
-_ACEOF
+	$as_echo "#define PJ_WIN32 1" >>confdefs.h
 
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_WIN32_WINNT 0x0400
-_ACEOF
+	$as_echo "#define PJ_WIN32_WINNT 0x0400" >>confdefs.h
 
-	cat >>confdefs.h <<\_ACEOF
-#define WIN32_LEAN_AND_MEAN 1
-_ACEOF
+	$as_echo "#define WIN32_LEAN_AND_MEAN 1" >>confdefs.h
 
 	;;
     *darwin*)
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_DARWINOS 1
-_ACEOF
+	$as_echo "#define PJ_DARWINOS 1" >>confdefs.h
 
 	;;
     *linux*)
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_LINUX 1
-_ACEOF
+	$as_echo "#define PJ_LINUX 1" >>confdefs.h
 
 	;;
     *rtems*)
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_RTEMS 1
-_ACEOF
+	$as_echo "#define PJ_RTEMS 1" >>confdefs.h
 
 	;;
     *sunos* | *solaris* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_SUNOS 1
-_ACEOF
+	$as_echo "#define PJ_SUNOS 1" >>confdefs.h
 
 	;;
     *)
@@ -4889,36 +4436,27 @@ esac
 
 
 # Check whether --enable-floating-point was given.
-if test "${enable_floating_point+set}" = set; then
+if test "${enable_floating_point+set}" = set; then :
   enableval=$enable_floating_point; if test "$enable_floating_point" = "no"; then
-		cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_FLOATING_POINT 0
-_ACEOF
+		$as_echo "#define PJ_HAS_FLOATING_POINT 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if floating point is disabled... yes" >&5
-echo "${ECHO_T}Checking if floating point is disabled... yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if floating point is disabled... yes" >&5
+$as_echo "Checking if floating point is disabled... yes" >&6; }
 	       fi
 else
 
-		cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_FLOATING_POINT 1
-_ACEOF
-
-	        { echo "$as_me:$LINENO: result: Checking if floating point is disabled... no" >&5
-echo "${ECHO_T}Checking if floating point is disabled... no" >&6; }
+		$as_echo "#define PJ_HAS_FLOATING_POINT 1" >>confdefs.h
 
-{ echo "$as_me:$LINENO: checking for fmod in -lm" >&5
-echo $ECHO_N "checking for fmod in -lm... $ECHO_C" >&6; }
-if test "${ac_cv_lib_m_fmod+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+	        { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if floating point is disabled... no" >&5
+$as_echo "Checking if floating point is disabled... no" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fmod in -lm" >&5
+$as_echo_n "checking for fmod in -lm... " >&6; }
+if test "${ac_cv_lib_m_fmod+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lm  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -4936,39 +4474,18 @@ return fmod ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_m_fmod=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_m_fmod=no
+  ac_cv_lib_m_fmod=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_m_fmod" >&5
-echo "${ECHO_T}$ac_cv_lib_m_fmod" >&6; }
-if test $ac_cv_lib_m_fmod = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_fmod" >&5
+$as_echo "$ac_cv_lib_m_fmod" >&6; }
+if test "x$ac_cv_lib_m_fmod" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBM 1
 _ACEOF
@@ -4982,401 +4499,23 @@ fi
 
 
 
-if test "${ac_cv_header_arpa_inet_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for arpa/inet.h" >&5
-echo $ECHO_N "checking for arpa/inet.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_arpa_inet_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_arpa_inet_h" >&5
-echo "${ECHO_T}$ac_cv_header_arpa_inet_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking arpa/inet.h usability" >&5
-echo $ECHO_N "checking arpa/inet.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <arpa/inet.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default"
+if test "x$ac_cv_header_arpa_inet_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_ARPA_INET_H 1" >>confdefs.h
 
-	ac_header_compiler=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking arpa/inet.h presence" >&5
-echo $ECHO_N "checking arpa/inet.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <arpa/inet.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "assert.h" "ac_cv_header_assert_h" "$ac_includes_default"
+if test "x$ac_cv_header_assert_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_ASSERT_H 1" >>confdefs.h
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: arpa/inet.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: arpa/inet.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: arpa/inet.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: arpa/inet.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: arpa/inet.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: arpa/inet.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: arpa/inet.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: arpa/inet.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for arpa/inet.h" >&5
-echo $ECHO_N "checking for arpa/inet.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_arpa_inet_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_arpa_inet_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_arpa_inet_h" >&5
-echo "${ECHO_T}$ac_cv_header_arpa_inet_h" >&6; }
-
-fi
-if test $ac_cv_header_arpa_inet_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_ARPA_INET_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_assert_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for assert.h" >&5
-echo $ECHO_N "checking for assert.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_assert_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_assert_h" >&5
-echo "${ECHO_T}$ac_cv_header_assert_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking assert.h usability" >&5
-echo $ECHO_N "checking assert.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <assert.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking assert.h presence" >&5
-echo $ECHO_N "checking assert.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <assert.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: assert.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: assert.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: assert.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: assert.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: assert.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: assert.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: assert.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: assert.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: assert.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: assert.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: assert.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: assert.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: assert.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: assert.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: assert.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: assert.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for assert.h" >&5
-echo $ECHO_N "checking for assert.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_assert_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_assert_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_assert_h" >&5
-echo "${ECHO_T}$ac_cv_header_assert_h" >&6; }
-
-fi
-if test $ac_cv_header_assert_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_ASSERT_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_ctype_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for ctype.h" >&5
-echo $ECHO_N "checking for ctype.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_ctype_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_ctype_h" >&5
-echo "${ECHO_T}$ac_cv_header_ctype_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking ctype.h usability" >&5
-echo $ECHO_N "checking ctype.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <ctype.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking ctype.h presence" >&5
-echo $ECHO_N "checking ctype.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: ctype.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: ctype.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ctype.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: ctype.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: ctype.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: ctype.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ctype.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: ctype.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ctype.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: ctype.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ctype.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: ctype.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ctype.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: ctype.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ctype.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: ctype.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for ctype.h" >&5
-echo $ECHO_N "checking for ctype.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_ctype_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_ctype_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_ctype_h" >&5
-echo "${ECHO_T}$ac_cv_header_ctype_h" >&6; }
-
-fi
-if test $ac_cv_header_ctype_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_CTYPE_H 1
-_ACEOF
+ac_fn_c_check_header_mongrel "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default"
+if test "x$ac_cv_header_ctype_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_CTYPE_H 1" >>confdefs.h
 
 fi
 
@@ -5384,141 +4523,13 @@ fi
 
 case $target in
     *mingw* | *cygw* | *win32* | *w32* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_ERRNO_H 0
-_ACEOF
+	$as_echo "#define PJ_HAS_ERRNO_H 0" >>confdefs.h
 
 	;;
     *)
-	if test "${ac_cv_header_errno_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for errno.h" >&5
-echo $ECHO_N "checking for errno.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_errno_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
-echo "${ECHO_T}$ac_cv_header_errno_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking errno.h usability" >&5
-echo $ECHO_N "checking errno.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <errno.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking errno.h presence" >&5
-echo $ECHO_N "checking errno.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <errno.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: errno.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: errno.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: errno.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: errno.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: errno.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: errno.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: errno.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: errno.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: errno.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: errno.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for errno.h" >&5
-echo $ECHO_N "checking for errno.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_errno_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_errno_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
-echo "${ECHO_T}$ac_cv_header_errno_h" >&6; }
-
-fi
-if test $ac_cv_header_errno_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_ERRNO_H 1
-_ACEOF
+	ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default"
+if test "x$ac_cv_header_errno_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_ERRNO_H 1" >>confdefs.h
 
 fi
 
@@ -5526,3944 +4537,272 @@ fi
 	;;
 esac
 
-if test "${ac_cv_header_fcntl_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for fcntl.h" >&5
-echo $ECHO_N "checking for fcntl.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_fcntl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_fcntl_h" >&5
-echo "${ECHO_T}$ac_cv_header_fcntl_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking fcntl.h usability" >&5
-echo $ECHO_N "checking fcntl.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <fcntl.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking fcntl.h presence" >&5
-echo $ECHO_N "checking fcntl.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <fcntl.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_FCNTL_H 1" >>confdefs.h
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: fcntl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: fcntl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: fcntl.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: fcntl.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: fcntl.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: fcntl.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: fcntl.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: fcntl.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: fcntl.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: fcntl.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: fcntl.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: fcntl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: fcntl.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: fcntl.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: fcntl.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: fcntl.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for fcntl.h" >&5
-echo $ECHO_N "checking for fcntl.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_fcntl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_fcntl_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_fcntl_h" >&5
-echo "${ECHO_T}$ac_cv_header_fcntl_h" >&6; }
 
-fi
-if test $ac_cv_header_fcntl_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_FCNTL_H 1
-_ACEOF
+ac_fn_c_check_header_mongrel "$LINENO" "linux/socket.h" "ac_cv_header_linux_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_socket_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_LINUX_SOCKET_H 1" >>confdefs.h
 
 fi
 
 
-if test "${ac_cv_header_linux_socket_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for linux/socket.h" >&5
-echo $ECHO_N "checking for linux/socket.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_socket_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_socket_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_socket_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking linux/socket.h usability" >&5
-echo $ECHO_N "checking linux/socket.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <linux/socket.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_malloc_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_MALLOC_H 1" >>confdefs.h
 
-	ac_header_compiler=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking linux/socket.h presence" >&5
-echo $ECHO_N "checking linux/socket.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <linux/socket.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: linux/socket.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: linux/socket.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: linux/socket.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: linux/socket.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: linux/socket.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: linux/socket.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: linux/socket.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/socket.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: linux/socket.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for linux/socket.h" >&5
-echo $ECHO_N "checking for linux/socket.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_socket_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_linux_socket_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_socket_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_socket_h" >&6; }
-
-fi
-if test $ac_cv_header_linux_socket_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_LINUX_SOCKET_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_malloc_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for malloc.h" >&5
-echo $ECHO_N "checking for malloc.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_malloc_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_malloc_h" >&5
-echo "${ECHO_T}$ac_cv_header_malloc_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking malloc.h usability" >&5
-echo $ECHO_N "checking malloc.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <malloc.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking malloc.h presence" >&5
-echo $ECHO_N "checking malloc.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <malloc.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: malloc.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: malloc.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: malloc.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: malloc.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: malloc.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: malloc.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: malloc.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: malloc.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: malloc.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: malloc.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: malloc.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: malloc.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: malloc.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: malloc.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: malloc.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: malloc.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for malloc.h" >&5
-echo $ECHO_N "checking for malloc.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_malloc_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_malloc_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_malloc_h" >&5
-echo "${ECHO_T}$ac_cv_header_malloc_h" >&6; }
-
-fi
-if test $ac_cv_header_malloc_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_MALLOC_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_netdb_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for netdb.h" >&5
-echo $ECHO_N "checking for netdb.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netdb_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netdb_h" >&5
-echo "${ECHO_T}$ac_cv_header_netdb_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking netdb.h usability" >&5
-echo $ECHO_N "checking netdb.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <netdb.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking netdb.h presence" >&5
-echo $ECHO_N "checking netdb.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <netdb.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: netdb.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: netdb.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netdb.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: netdb.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: netdb.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: netdb.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netdb.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: netdb.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netdb.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: netdb.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netdb.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: netdb.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netdb.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: netdb.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netdb.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: netdb.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for netdb.h" >&5
-echo $ECHO_N "checking for netdb.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netdb_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_netdb_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netdb_h" >&5
-echo "${ECHO_T}$ac_cv_header_netdb_h" >&6; }
-
-fi
-if test $ac_cv_header_netdb_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_NETDB_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_netinet_in_systm_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for netinet/in_systm.h" >&5
-echo $ECHO_N "checking for netinet/in_systm.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_in_systm_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_systm_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_in_systm_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking netinet/in_systm.h usability" >&5
-echo $ECHO_N "checking netinet/in_systm.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <netinet/in_systm.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking netinet/in_systm.h presence" >&5
-echo $ECHO_N "checking netinet/in_systm.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <netinet/in_systm.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: netinet/in_systm.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: netinet/in_systm.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: netinet/in_systm.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: netinet/in_systm.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: netinet/in_systm.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: netinet/in_systm.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: netinet/in_systm.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in_systm.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: netinet/in_systm.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for netinet/in_systm.h" >&5
-echo $ECHO_N "checking for netinet/in_systm.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_in_systm_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_netinet_in_systm_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_systm_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_in_systm_h" >&6; }
-
-fi
-if test $ac_cv_header_netinet_in_systm_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_NETINET_IN_SYSTM_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_netinet_in_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for netinet/in.h" >&5
-echo $ECHO_N "checking for netinet/in.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_in_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_in_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking netinet/in.h usability" >&5
-echo $ECHO_N "checking netinet/in.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <netinet/in.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking netinet/in.h presence" >&5
-echo $ECHO_N "checking netinet/in.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <netinet/in.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: netinet/in.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: netinet/in.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: netinet/in.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: netinet/in.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: netinet/in.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: netinet/in.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: netinet/in.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: netinet/in.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for netinet/in.h" >&5
-echo $ECHO_N "checking for netinet/in.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_in_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_netinet_in_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_in_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_in_h" >&6; }
-
-fi
-if test $ac_cv_header_netinet_in_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_NETINET_IN_H 1
-_ACEOF
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for netinet/ip.h" >&5
-echo $ECHO_N "checking for netinet/ip.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_ip_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if PJ_HAS_NETINET_IN_SYSTM_H
-          	  #	include <netinet/in_systm.h>
-          	  #endif
-
-
-#include <netinet/ip.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_header_netinet_ip_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_netinet_ip_h=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_ip_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_ip_h" >&6; }
-if test $ac_cv_header_netinet_ip_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_NETINET_IP_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_netinet_tcp_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for netinet/tcp.h" >&5
-echo $ECHO_N "checking for netinet/tcp.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_tcp_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_tcp_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_tcp_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking netinet/tcp.h usability" >&5
-echo $ECHO_N "checking netinet/tcp.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <netinet/tcp.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking netinet/tcp.h presence" >&5
-echo $ECHO_N "checking netinet/tcp.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <netinet/tcp.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: netinet/tcp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: netinet/tcp.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: netinet/tcp.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: netinet/tcp.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: netinet/tcp.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: netinet/tcp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: netinet/tcp.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/tcp.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: netinet/tcp.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for netinet/tcp.h" >&5
-echo $ECHO_N "checking for netinet/tcp.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_tcp_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_netinet_tcp_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_tcp_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_tcp_h" >&6; }
-
-fi
-if test $ac_cv_header_netinet_tcp_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_NETINET_TCP_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_ifaddrs_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for ifaddrs.h" >&5
-echo $ECHO_N "checking for ifaddrs.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_ifaddrs_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_ifaddrs_h" >&5
-echo "${ECHO_T}$ac_cv_header_ifaddrs_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking ifaddrs.h usability" >&5
-echo $ECHO_N "checking ifaddrs.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <ifaddrs.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking ifaddrs.h presence" >&5
-echo $ECHO_N "checking ifaddrs.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ifaddrs.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: ifaddrs.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: ifaddrs.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: ifaddrs.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: ifaddrs.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: ifaddrs.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: ifaddrs.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: ifaddrs.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ifaddrs.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: ifaddrs.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for ifaddrs.h" >&5
-echo $ECHO_N "checking for ifaddrs.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_ifaddrs_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_ifaddrs_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_ifaddrs_h" >&5
-echo "${ECHO_T}$ac_cv_header_ifaddrs_h" >&6; }
-
-fi
-if test $ac_cv_header_ifaddrs_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_IFADDRS_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_semaphore_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for semaphore.h" >&5
-echo $ECHO_N "checking for semaphore.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_semaphore_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_semaphore_h" >&5
-echo "${ECHO_T}$ac_cv_header_semaphore_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking semaphore.h usability" >&5
-echo $ECHO_N "checking semaphore.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <semaphore.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking semaphore.h presence" >&5
-echo $ECHO_N "checking semaphore.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <semaphore.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: semaphore.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: semaphore.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: semaphore.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: semaphore.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: semaphore.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: semaphore.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: semaphore.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: semaphore.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: semaphore.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: semaphore.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: semaphore.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: semaphore.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: semaphore.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: semaphore.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: semaphore.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: semaphore.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for semaphore.h" >&5
-echo $ECHO_N "checking for semaphore.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_semaphore_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_semaphore_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_semaphore_h" >&5
-echo "${ECHO_T}$ac_cv_header_semaphore_h" >&6; }
-
-fi
-if test $ac_cv_header_semaphore_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SEMAPHORE_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_setjmp_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for setjmp.h" >&5
-echo $ECHO_N "checking for setjmp.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_setjmp_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_setjmp_h" >&5
-echo "${ECHO_T}$ac_cv_header_setjmp_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking setjmp.h usability" >&5
-echo $ECHO_N "checking setjmp.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <setjmp.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking setjmp.h presence" >&5
-echo $ECHO_N "checking setjmp.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <setjmp.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: setjmp.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: setjmp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: setjmp.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: setjmp.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: setjmp.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: setjmp.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: setjmp.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: setjmp.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: setjmp.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: setjmp.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: setjmp.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: setjmp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: setjmp.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: setjmp.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: setjmp.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: setjmp.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for setjmp.h" >&5
-echo $ECHO_N "checking for setjmp.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_setjmp_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_setjmp_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_setjmp_h" >&5
-echo "${ECHO_T}$ac_cv_header_setjmp_h" >&6; }
-
-fi
-if test $ac_cv_header_setjmp_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SETJMP_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_stdarg_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for stdarg.h" >&5
-echo $ECHO_N "checking for stdarg.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdarg_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdarg_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking stdarg.h usability" >&5
-echo $ECHO_N "checking stdarg.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <stdarg.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking stdarg.h presence" >&5
-echo $ECHO_N "checking stdarg.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stdarg.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: stdarg.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: stdarg.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stdarg.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdarg.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stdarg.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdarg.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: stdarg.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdarg.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: stdarg.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdarg.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stdarg.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdarg.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: stdarg.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for stdarg.h" >&5
-echo $ECHO_N "checking for stdarg.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdarg_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_stdarg_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdarg_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdarg_h" >&6; }
-
-fi
-if test $ac_cv_header_stdarg_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_STDARG_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_stddef_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for stddef.h" >&5
-echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stddef_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
-echo "${ECHO_T}$ac_cv_header_stddef_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking stddef.h usability" >&5
-echo $ECHO_N "checking stddef.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <stddef.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking stddef.h presence" >&5
-echo $ECHO_N "checking stddef.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stddef.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: stddef.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stddef.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: stddef.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: stddef.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stddef.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stddef.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: stddef.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: stddef.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stddef.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stddef.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: stddef.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for stddef.h" >&5
-echo $ECHO_N "checking for stddef.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stddef_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_stddef_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stddef_h" >&5
-echo "${ECHO_T}$ac_cv_header_stddef_h" >&6; }
-
-fi
-if test $ac_cv_header_stddef_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_STDDEF_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_stdio_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for stdio.h" >&5
-echo $ECHO_N "checking for stdio.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdio_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdio_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdio_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking stdio.h usability" >&5
-echo $ECHO_N "checking stdio.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <stdio.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking stdio.h presence" >&5
-echo $ECHO_N "checking stdio.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdio.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: stdio.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stdio.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdio.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: stdio.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: stdio.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stdio.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdio.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stdio.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdio.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: stdio.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdio.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: stdio.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdio.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stdio.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdio.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: stdio.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for stdio.h" >&5
-echo $ECHO_N "checking for stdio.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdio_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_stdio_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdio_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdio_h" >&6; }
-
-fi
-if test $ac_cv_header_stdio_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_STDIO_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_stdint_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking stdint.h usability" >&5
-echo $ECHO_N "checking stdint.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <stdint.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking stdint.h presence" >&5
-echo $ECHO_N "checking stdint.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdint.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: stdint.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stdint.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdint.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: stdint.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: stdint.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stdint.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdint.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stdint.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdint.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: stdint.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdint.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: stdint.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdint.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stdint.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdint.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: stdint.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_stdint_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdint_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdint_h" >&6; }
-
-fi
-if test $ac_cv_header_stdint_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_STDINT_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_stdlib_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for stdlib.h" >&5
-echo $ECHO_N "checking for stdlib.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdlib_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdlib_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking stdlib.h usability" >&5
-echo $ECHO_N "checking stdlib.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <stdlib.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking stdlib.h presence" >&5
-echo $ECHO_N "checking stdlib.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: stdlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: stdlib.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: stdlib.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: stdlib.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdlib.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: stdlib.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdlib.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: stdlib.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdlib.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: stdlib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdlib.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: stdlib.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: stdlib.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: stdlib.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for stdlib.h" >&5
-echo $ECHO_N "checking for stdlib.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdlib_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_stdlib_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdlib_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdlib_h" >&6; }
-
-fi
-if test $ac_cv_header_stdlib_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_STDLIB_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_string_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for string.h" >&5
-echo $ECHO_N "checking for string.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_string_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5
-echo "${ECHO_T}$ac_cv_header_string_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking string.h usability" >&5
-echo $ECHO_N "checking string.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <string.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking string.h presence" >&5
-echo $ECHO_N "checking string.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: string.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: string.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: string.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: string.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: string.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: string.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: string.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: string.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: string.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: string.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: string.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: string.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: string.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: string.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: string.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for string.h" >&5
-echo $ECHO_N "checking for string.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_string_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_string_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_string_h" >&5
-echo "${ECHO_T}$ac_cv_header_string_h" >&6; }
-
-fi
-if test $ac_cv_header_string_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_STRING_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_ioctl_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/ioctl.h" >&5
-echo $ECHO_N "checking for sys/ioctl.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_ioctl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_ioctl_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_ioctl_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/ioctl.h usability" >&5
-echo $ECHO_N "checking sys/ioctl.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/ioctl.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/ioctl.h presence" >&5
-echo $ECHO_N "checking sys/ioctl.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/ioctl.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/ioctl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/ioctl.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/ioctl.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/ioctl.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/ioctl.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/ioctl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/ioctl.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/ioctl.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/ioctl.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/ioctl.h" >&5
-echo $ECHO_N "checking for sys/ioctl.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_ioctl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_ioctl_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_ioctl_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_ioctl_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_ioctl_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SYS_IOCTL_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_select_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/select.h" >&5
-echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_select_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/select.h usability" >&5
-echo $ECHO_N "checking sys/select.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/select.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/select.h presence" >&5
-echo $ECHO_N "checking sys/select.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/select.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/select.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/select.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/select.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/select.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/select.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/select.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/select.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/select.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/select.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/select.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/select.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/select.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/select.h" >&5
-echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_select_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_select_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_select_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SYS_SELECT_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_socket_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/socket.h" >&5
-echo $ECHO_N "checking for sys/socket.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_socket_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_socket_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_socket_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/socket.h usability" >&5
-echo $ECHO_N "checking sys/socket.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/socket.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/socket.h presence" >&5
-echo $ECHO_N "checking sys/socket.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/socket.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/socket.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/socket.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/socket.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/socket.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/socket.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/socket.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/socket.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/socket.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/socket.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/socket.h" >&5
-echo $ECHO_N "checking for sys/socket.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_socket_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_socket_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_socket_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_socket_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_socket_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SYS_SOCKET_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_time_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/time.h" >&5
-echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/time.h usability" >&5
-echo $ECHO_N "checking sys/time.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/time.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/time.h presence" >&5
-echo $ECHO_N "checking sys/time.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/time.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/time.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/time.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/time.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/time.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/time.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/time.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/time.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/time.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/time.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/time.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/time.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/time.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/time.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/time.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/time.h" >&5
-echo $ECHO_N "checking for sys/time.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_time_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_time_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_time_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_time_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SYS_TIME_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_timeb_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/timeb.h" >&5
-echo $ECHO_N "checking for sys/timeb.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_timeb_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_timeb_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_timeb_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/timeb.h usability" >&5
-echo $ECHO_N "checking sys/timeb.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/timeb.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/timeb.h presence" >&5
-echo $ECHO_N "checking sys/timeb.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/timeb.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/timeb.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/timeb.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/timeb.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/timeb.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/timeb.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/timeb.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/timeb.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/timeb.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/timeb.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/timeb.h" >&5
-echo $ECHO_N "checking for sys/timeb.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_timeb_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_timeb_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_timeb_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_timeb_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_timeb_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SYS_TIMEB_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_sys_types_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/types.h" >&5
-echo $ECHO_N "checking for sys/types.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_types_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_types_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/types.h usability" >&5
-echo $ECHO_N "checking sys/types.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/types.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/types.h presence" >&5
-echo $ECHO_N "checking sys/types.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/types.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/types.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/types.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/types.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/types.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/types.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/types.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/types.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/types.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/types.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/types.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/types.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/types.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/types.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/types.h" >&5
-echo $ECHO_N "checking for sys/types.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_types_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_types_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_types_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_types_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SYS_TYPES_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_time_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for time.h" >&5
-echo $ECHO_N "checking for time.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_time_h" >&5
-echo "${ECHO_T}$ac_cv_header_time_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking time.h usability" >&5
-echo $ECHO_N "checking time.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <time.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking time.h presence" >&5
-echo $ECHO_N "checking time.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <time.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: time.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: time.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: time.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: time.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: time.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: time.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: time.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: time.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: time.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: time.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: time.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: time.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: time.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: time.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: time.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: time.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for time.h" >&5
-echo $ECHO_N "checking for time.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_time_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_time_h" >&5
-echo "${ECHO_T}$ac_cv_header_time_h" >&6; }
-
-fi
-if test $ac_cv_header_time_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_TIME_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_unistd_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for unistd.h" >&5
-echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_unistd_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5
-echo "${ECHO_T}$ac_cv_header_unistd_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking unistd.h usability" >&5
-echo $ECHO_N "checking unistd.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <unistd.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking unistd.h presence" >&5
-echo $ECHO_N "checking unistd.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <unistd.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: unistd.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: unistd.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: unistd.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: unistd.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: unistd.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: unistd.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: unistd.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: unistd.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: unistd.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: unistd.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: unistd.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: unistd.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: unistd.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: unistd.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for unistd.h" >&5
-echo $ECHO_N "checking for unistd.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_unistd_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_unistd_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_unistd_h" >&5
-echo "${ECHO_T}$ac_cv_header_unistd_h" >&6; }
-
-fi
-if test $ac_cv_header_unistd_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_UNISTD_H 1
-_ACEOF
-
-fi
-
-
-if test "${ac_cv_header_winsock_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for winsock.h" >&5
-echo $ECHO_N "checking for winsock.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_winsock_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock_h" >&5
-echo "${ECHO_T}$ac_cv_header_winsock_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking winsock.h usability" >&5
-echo $ECHO_N "checking winsock.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <winsock.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
+ac_fn_c_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default"
+if test "x$ac_cv_header_netdb_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_NETDB_H 1" >>confdefs.h
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking winsock.h presence" >&5
-echo $ECHO_N "checking winsock.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <winsock.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "netinet/in_systm.h" "ac_cv_header_netinet_in_systm_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_in_systm_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_NETINET_IN_SYSTM_H 1" >>confdefs.h
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: winsock.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: winsock.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: winsock.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: winsock.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: winsock.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: winsock.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: winsock.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: winsock.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: winsock.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: winsock.h: in the future, the compiler will take precedence" >&2;}
+ac_fn_c_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_in_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_NETINET_IN_H 1" >>confdefs.h
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for winsock.h" >&5
-echo $ECHO_N "checking for winsock.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_winsock_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_winsock_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock_h" >&5
-echo "${ECHO_T}$ac_cv_header_winsock_h" >&6; }
 
-fi
-if test $ac_cv_header_winsock_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_WINSOCK_H 1
-_ACEOF
 
-fi
+ac_fn_c_check_header_compile "$LINENO" "netinet/ip.h" "ac_cv_header_netinet_ip_h" "#if PJ_HAS_NETINET_IN_SYSTM_H
+          	  #	include <netinet/in_systm.h>
+          	  #endif
 
+"
+if test "x$ac_cv_header_netinet_ip_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_NETINET_IP_H 1" >>confdefs.h
 
-if test "${ac_cv_header_winsock2_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for winsock2.h" >&5
-echo $ECHO_N "checking for winsock2.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_winsock2_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock2_h" >&5
-echo "${ECHO_T}$ac_cv_header_winsock2_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking winsock2.h usability" >&5
-echo $ECHO_N "checking winsock2.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <winsock2.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
+
+ac_fn_c_check_header_mongrel "$LINENO" "netinet/tcp.h" "ac_cv_header_netinet_tcp_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_tcp_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_NETINET_TCP_H 1" >>confdefs.h
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking winsock2.h presence" >&5
-echo $ECHO_N "checking winsock2.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <winsock2.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "ifaddrs.h" "ac_cv_header_ifaddrs_h" "$ac_includes_default"
+if test "x$ac_cv_header_ifaddrs_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_IFADDRS_H 1" >>confdefs.h
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: winsock2.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: winsock2.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock2.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: winsock2.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: winsock2.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: winsock2.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock2.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: winsock2.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock2.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: winsock2.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock2.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: winsock2.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock2.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: winsock2.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: winsock2.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: winsock2.h: in the future, the compiler will take precedence" >&2;}
+ac_fn_c_check_header_mongrel "$LINENO" "semaphore.h" "ac_cv_header_semaphore_h" "$ac_includes_default"
+if test "x$ac_cv_header_semaphore_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SEMAPHORE_H 1" >>confdefs.h
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for winsock2.h" >&5
-echo $ECHO_N "checking for winsock2.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_winsock2_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_winsock2_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_winsock2_h" >&5
-echo "${ECHO_T}$ac_cv_header_winsock2_h" >&6; }
 
-fi
-if test $ac_cv_header_winsock2_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_WINSOCK2_H 1
-_ACEOF
+
+ac_fn_c_check_header_mongrel "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$ac_includes_default"
+if test "x$ac_cv_header_setjmp_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SETJMP_H 1" >>confdefs.h
 
 fi
 
 
-{ echo "$as_me:$LINENO: checking for mswsock.h" >&5
-echo $ECHO_N "checking for mswsock.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_mswsock_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if PJ_HAS_WINSOCK2_H
-          	  #	include <winsock2.h>
-		  #elif PJ_HAS_WINSOCK_H
-          	  #	include <winsock.h>
-          	  #endif
+ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdarg_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_STDARG_H 1" >>confdefs.h
 
+fi
 
-#include <mswsock.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_header_mswsock_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_cv_header_mswsock_h=no
+ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
+if test "x$ac_cv_header_stddef_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_STDDEF_H 1" >>confdefs.h
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ac_fn_c_check_header_mongrel "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdio_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_STDIO_H 1" >>confdefs.h
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_mswsock_h" >&5
-echo "${ECHO_T}$ac_cv_header_mswsock_h" >&6; }
-if test $ac_cv_header_mswsock_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_MSWSOCK_H 1
-_ACEOF
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_STDINT_H 1" >>confdefs.h
 
 fi
 
 
-if test "${ac_cv_header_ws2tcpip_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for ws2tcpip.h" >&5
-echo $ECHO_N "checking for ws2tcpip.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_ws2tcpip_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_STDLIB_H 1" >>confdefs.h
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_ws2tcpip_h" >&5
-echo "${ECHO_T}$ac_cv_header_ws2tcpip_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking ws2tcpip.h usability" >&5
-echo $ECHO_N "checking ws2tcpip.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <ws2tcpip.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
+
+ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_STRING_H 1" >>confdefs.h
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking ws2tcpip.h presence" >&5
-echo $ECHO_N "checking ws2tcpip.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ws2tcpip.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SYS_IOCTL_H 1" >>confdefs.h
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: ws2tcpip.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: ws2tcpip.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: ws2tcpip.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: ws2tcpip.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: ws2tcpip.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: ws2tcpip.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: ws2tcpip.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: ws2tcpip.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: ws2tcpip.h: in the future, the compiler will take precedence" >&2;}
+ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SYS_SELECT_H 1" >>confdefs.h
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for ws2tcpip.h" >&5
-echo $ECHO_N "checking for ws2tcpip.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_ws2tcpip_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_ws2tcpip_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_ws2tcpip_h" >&5
-echo "${ECHO_T}$ac_cv_header_ws2tcpip_h" >&6; }
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SYS_SOCKET_H 1" >>confdefs.h
 
 fi
-if test $ac_cv_header_ws2tcpip_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_WS2TCPIP_H 1
-_ACEOF
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SYS_TIME_H 1" >>confdefs.h
 
 fi
 
 
-if test "${ac_cv_header_uuid_uuid_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for uuid/uuid.h" >&5
-echo $ECHO_N "checking for uuid/uuid.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_uuid_uuid_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_timeb_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SYS_TIMEB_H 1" >>confdefs.h
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_uuid_uuid_h" >&5
-echo "${ECHO_T}$ac_cv_header_uuid_uuid_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking uuid/uuid.h usability" >&5
-echo $ECHO_N "checking uuid/uuid.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <uuid/uuid.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
+
+ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_types_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_SYS_TYPES_H 1" >>confdefs.h
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking uuid/uuid.h presence" >&5
-echo $ECHO_N "checking uuid/uuid.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <uuid/uuid.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_time_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_TIME_H 1" >>confdefs.h
 
-  ac_header_preproc=no
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: uuid/uuid.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: uuid/uuid.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: uuid/uuid.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: uuid/uuid.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: uuid/uuid.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: uuid/uuid.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: uuid/uuid.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: uuid/uuid.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: uuid/uuid.h: in the future, the compiler will take precedence" >&2;}
+ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_UNISTD_H 1" >>confdefs.h
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for uuid/uuid.h" >&5
-echo $ECHO_N "checking for uuid/uuid.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_uuid_uuid_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_uuid_uuid_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_uuid_uuid_h" >&5
-echo "${ECHO_T}$ac_cv_header_uuid_uuid_h" >&6; }
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "winsock.h" "ac_cv_header_winsock_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_WINSOCK_H 1" >>confdefs.h
 
 fi
-if test $ac_cv_header_uuid_uuid_h = yes; then
-  ac_has_uuid_h=1
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_WINSOCK2_H 1" >>confdefs.h
+
 fi
 
 
-{ echo "$as_me:$LINENO: checking for net/if.h" >&5
-echo $ECHO_N "checking for net/if.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_net_if_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if PJ_HAS_SYS_SOCKET_H
-          	  #	include <sys/socket.h>
+ac_fn_c_check_header_compile "$LINENO" "mswsock.h" "ac_cv_header_mswsock_h" "#if PJ_HAS_WINSOCK2_H
+          	  #	include <winsock2.h>
+		  #elif PJ_HAS_WINSOCK_H
+          	  #	include <winsock.h>
           	  #endif
 
+"
+if test "x$ac_cv_header_mswsock_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_MSWSOCK_H 1" >>confdefs.h
+
+fi
 
-#include <net/if.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_header_net_if_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_cv_header_net_if_h=no
+ac_fn_c_check_header_mongrel "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default"
+if test "x$ac_cv_header_ws2tcpip_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_WS2TCPIP_H 1" >>confdefs.h
+
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ac_fn_c_check_header_mongrel "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default"
+if test "x$ac_cv_header_uuid_uuid_h" = x""yes; then :
+  ac_has_uuid_h=1
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_net_if_h" >&5
-echo "${ECHO_T}$ac_cv_header_net_if_h" >&6; }
-if test $ac_cv_header_net_if_h = yes; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_NET_IF_H 1
-_ACEOF
+
+
+ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#if PJ_HAS_SYS_SOCKET_H
+          	  #	include <sys/socket.h>
+          	  #endif
+
+"
+if test "x$ac_cv_header_net_if_h" = x""yes; then :
+  $as_echo "#define PJ_HAS_NET_IF_H 1" >>confdefs.h
 
 fi
 
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_OS_NAME to $target" >&5
-echo "${ECHO_T}Setting PJ_OS_NAME to $target" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_OS_NAME to $target" >&5
+$as_echo "Setting PJ_OS_NAME to $target" >&6; }
 cat >>confdefs.h <<_ACEOF
 #define PJ_OS_NAME "$target"
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_HAS_ERRNO_VAR to 1" >&5
-echo "${ECHO_T}Setting PJ_HAS_ERRNO_VAR to 1" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_ERRNO_VAR 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_HAS_ERRNO_VAR to 1" >&5
+$as_echo "Setting PJ_HAS_ERRNO_VAR to 1" >&6; }
+$as_echo "#define PJ_HAS_ERRNO_VAR 1" >>confdefs.h
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_HAS_HIGH_RES_TIMER to 1" >&5
-echo "${ECHO_T}Setting PJ_HAS_HIGH_RES_TIMER to 1" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_HIGH_RES_TIMER 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_HAS_HIGH_RES_TIMER to 1" >&5
+$as_echo "Setting PJ_HAS_HIGH_RES_TIMER to 1" >&6; }
+$as_echo "#define PJ_HAS_HIGH_RES_TIMER 1" >>confdefs.h
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_HAS_MALLOC to 1" >&5
-echo "${ECHO_T}Setting PJ_HAS_MALLOC to 1" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_MALLOC 1
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_HAS_MALLOC to 1" >&5
+$as_echo "Setting PJ_HAS_MALLOC to 1" >&6; }
+$as_echo "#define PJ_HAS_MALLOC 1" >>confdefs.h
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&5
-echo "${ECHO_T}Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define PJ_NATIVE_STRING_IS_UNICODE 0
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&5
+$as_echo "Setting PJ_NATIVE_STRING_IS_UNICODE to 0" >&6; }
+$as_echo "#define PJ_NATIVE_STRING_IS_UNICODE 0" >>confdefs.h
 
 
-{ echo "$as_me:$LINENO: result: Setting PJ_ATOMIC_VALUE_TYPE to long" >&5
-echo "${ECHO_T}Setting PJ_ATOMIC_VALUE_TYPE to long" >&6; }
-cat >>confdefs.h <<\_ACEOF
-#define PJ_ATOMIC_VALUE_TYPE long
-_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting PJ_ATOMIC_VALUE_TYPE to long" >&5
+$as_echo "Setting PJ_ATOMIC_VALUE_TYPE to long" >&6; }
+$as_echo "#define PJ_ATOMIC_VALUE_TYPE long" >>confdefs.h
 
 
-{ echo "$as_me:$LINENO: checking if inet_aton() is available" >&5
-echo $ECHO_N "checking if inet_aton() is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_aton() is available" >&5
+$as_echo_n "checking if inet_aton() is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -9476,46 +4815,20 @@ inet_aton(0, 0);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_SOCK_HAS_INET_ATON 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_SOCK_HAS_INET_ATON 1" >>confdefs.h
 
-		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if inet_pton() is available" >&5
-echo $ECHO_N "checking if inet_pton() is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_pton() is available" >&5
+$as_echo_n "checking if inet_pton() is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -9526,48 +4839,22 @@ main ()
 inet_pton(0, 0, 0);
   ;
   return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_SOCK_HAS_INET_PTON 1
+}
 _ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_SOCK_HAS_INET_PTON 1" >>confdefs.h
 
-		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if inet_ntop() is available" >&5
-echo $ECHO_N "checking if inet_ntop() is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if inet_ntop() is available" >&5
+$as_echo_n "checking if inet_ntop() is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -9580,46 +4867,20 @@ inet_ntop(0, 0, 0, 0);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_SOCK_HAS_INET_NTOP 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_SOCK_HAS_INET_NTOP 1" >>confdefs.h
 
-		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if getaddrinfo() is available" >&5
-echo $ECHO_N "checking if getaddrinfo() is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo() is available" >&5
+$as_echo_n "checking if getaddrinfo() is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -9632,46 +4893,20 @@ getaddrinfo(0, 0, 0, 0);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_SOCK_HAS_GETADDRINFO 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_SOCK_HAS_GETADDRINFO 1" >>confdefs.h
 
-		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if sockaddr_in has sin_len member" >&5
-echo $ECHO_N "checking if sockaddr_in has sin_len member... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sockaddr_in has sin_len member" >&5
+$as_echo_n "checking if sockaddr_in has sin_len member... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 				     #include <sys/socket.h>
@@ -9685,46 +4920,20 @@ struct sockaddr_in a; a.sin_len=0;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_SOCKADDR_HAS_LEN 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_SOCKADDR_HAS_LEN 1" >>confdefs.h
 
-		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if socklen_t is available" >&5
-echo $ECHO_N "checking if socklen_t is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if socklen_t is available" >&5
+$as_echo_n "checking if socklen_t is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/socket.h>
 int
@@ -9735,56 +4944,28 @@ socklen_t xxx = 0;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SOCKLEN_T 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_HAS_SOCKLEN_T 1" >>confdefs.h
 
-		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if SO_ERROR is available" >&5
-echo $ECHO_N "checking if SO_ERROR is available... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if SO_ERROR is available" >&5
+$as_echo_n "checking if SO_ERROR is available... " >&6; }
 case $target in
     *mingw* | *cygw* | *win32* | *w32* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SO_ERROR 1
-_ACEOF
+	$as_echo "#define PJ_HAS_SO_ERROR 1" >>confdefs.h
 
-	{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 	;;
     *)
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 					     #include <sys/socket.h>
@@ -9798,49 +4979,23 @@ int i=SO_ERROR;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SO_ERROR 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_HAS_SO_ERROR 1" >>confdefs.h
 
-			   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+			   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 	;;
 esac
 
 
-{ echo "$as_me:$LINENO: checking if pthread_rwlock_t is available" >&5
-echo $ECHO_N "checking if pthread_rwlock_t is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_rwlock_t is available" >&5
+$as_echo_n "checking if pthread_rwlock_t is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -9851,53 +5006,25 @@ pthread_rwlock_t *x;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_EMULATE_RWMUTEX 0
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_EMULATE_RWMUTEX 0" >>confdefs.h
 
 		   ac_rwmutex="yes"
-  		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_EMULATE_RWMUTEX 1
-_ACEOF
+  $as_echo "#define PJ_EMULATE_RWMUTEX 1" >>confdefs.h
 
 		   ac_rwmutex="no"
-		   { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test "$ac_rwmutex" = "no"; then
-    { echo "$as_me:$LINENO: checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS" >&5
-echo $ECHO_N "checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS... $ECHO_C" >&6; }
-    cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS" >&5
+$as_echo_n "checking if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _POSIX_READER_WRITER_LOCKS
 					 #include <pthread.h>
@@ -9909,52 +5036,24 @@ pthread_rwlock_t *x;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_EMULATE_RWMUTEX 0
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_EMULATE_RWMUTEX 0" >>confdefs.h
 
 		       CFLAGS="$CFLAGS -D_POSIX_THREADS -D_POSIX_READER_WRITER_LOCKS"
-		       { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+		       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  $as_echo "#define PJ_EMULATE_RWMUTEX 1" >>confdefs.h
 
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_EMULATE_RWMUTEX 1
-_ACEOF
-
-		       { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+		       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-{ echo "$as_me:$LINENO: checking if pthread_mutexattr_settype() is available" >&5
-echo $ECHO_N "checking if pthread_mutexattr_settype() is available... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_mutexattr_settype() is available" >&5
+$as_echo_n "checking if pthread_mutexattr_settype() is available... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -9965,46 +5064,20 @@ pthread_mutexattr_settype(0,PTHREAD_MUTEX_FAST_NP);
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_PTHREAD_MUTEXATTR_SETTYPE 1
-_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_HAS_PTHREAD_MUTEXATTR_SETTYPE 1" >>confdefs.h
 
-  		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-{ echo "$as_me:$LINENO: checking if pthread_mutexattr_t has recursive member" >&5
-echo $ECHO_N "checking if pthread_mutexattr_t has recursive member... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pthread_mutexattr_t has recursive member" >&5
+$as_echo_n "checking if pthread_mutexattr_t has recursive member... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 int
@@ -10014,478 +5087,84 @@ pthread_mutexattr_t attr;
 				     attr.recursive=1;
   ;
   return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  cat >>confdefs.h <<\_ACEOF
-#define PJ_PTHREAD_MUTEXATTR_T_HAS_RECURSIVE 1
-_ACEOF
-
-  		   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-{ echo "$as_me:$LINENO: checking ioqueue backend" >&5
-echo $ECHO_N "checking ioqueue backend... $ECHO_C" >&6; }
-# Check whether --enable-epoll was given.
-if test "${enable_epoll+set}" = set; then
-  enableval=$enable_epoll;
-		ac_os_objs=ioqueue_epoll.o
-		{ echo "$as_me:$LINENO: result: /dev/epoll" >&5
-echo "${ECHO_T}/dev/epoll" >&6; }
-
-else
-
-		ac_os_objs=ioqueue_select.o
-	        { echo "$as_me:$LINENO: result: select()" >&5
-echo "${ECHO_T}select()" >&6; }
-
-fi
-
-
-
-case $target in
-  *mingw* | *cygw* | *win32* | *w32* )
-	ac_os_objs="$ac_os_objs file_access_win32.o file_io_win32.o os_core_win32.o os_error_win32.o os_time_win32.o os_timestamp_win32.o guid_win32.o"
-	;;
-  *)
-	ac_os_objs="$ac_os_objs file_access_unistd.o file_io_ansi.o os_core_unix.o os_error_unix.o os_time_unix.o os_timestamp_posix.o"
-	# UUID
-	if test "$ac_has_uuid_lib" = "1" -a "$ac_has_uuid_h" = "1"; then
-		ac_os_objs="$ac_os_objs guid_uuid.o"
-	else
-		ac_os_objs="$ac_os_objs guid_simple.o"
-	fi
-	;;
-esac
-
-
-
-
-
-# Check whether --enable-sound was given.
-if test "${enable_sound+set}" = set; then
-  enableval=$enable_sound; if test "$enable_sound" = "no"; then
-		ac_pjmedia_snd=null
-		{ echo "$as_me:$LINENO: result: Checking if sound is disabled... yes" >&5
-echo "${ECHO_T}Checking if sound is disabled... yes" >&6; }
-	       fi
-
-fi
-
-
-
-if test "${ac_cv_header_sys_soundcard_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5
-echo $ECHO_N "checking for sys/soundcard.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_soundcard_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/soundcard.h usability" >&5
-echo $ECHO_N "checking sys/soundcard.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <sys/soundcard.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking sys/soundcard.h presence" >&5
-echo $ECHO_N "checking sys/soundcard.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/soundcard.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/soundcard.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/soundcard.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/soundcard.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/soundcard.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/soundcard.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/soundcard.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5
-echo $ECHO_N "checking for sys/soundcard.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_sys_soundcard_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_sys_soundcard_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_soundcard_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6; }
-
-fi
-if test $ac_cv_header_sys_soundcard_h = yes; then
-  ac_pa_cflags="$ac_pa_cflags -DHAVE_SYS_SOUNDCARD_H"
-fi
-
-
-if test "${ac_cv_header_linux_soundcard_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for linux/soundcard.h" >&5
-echo $ECHO_N "checking for linux/soundcard.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_soundcard_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_soundcard_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_soundcard_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking linux/soundcard.h usability" >&5
-echo $ECHO_N "checking linux/soundcard.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <linux/soundcard.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking linux/soundcard.h presence" >&5
-echo $ECHO_N "checking linux/soundcard.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <linux/soundcard.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  $as_echo "#define PJ_PTHREAD_MUTEXATTR_T_HAS_RECURSIVE 1" >>confdefs.h
 
-  ac_header_preproc=no
+  		   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: linux/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: linux/soundcard.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: linux/soundcard.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: linux/soundcard.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: linux/soundcard.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: linux/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: linux/soundcard.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/soundcard.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: linux/soundcard.h: in the future, the compiler will take precedence" >&2;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ioqueue backend" >&5
+$as_echo_n "checking ioqueue backend... " >&6; }
+# Check whether --enable-epoll was given.
+if test "${enable_epoll+set}" = set; then :
+  enableval=$enable_epoll;
+		ac_os_objs=ioqueue_epoll.o
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: /dev/epoll" >&5
+$as_echo "/dev/epoll" >&6; }
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for linux/soundcard.h" >&5
-echo $ECHO_N "checking for linux/soundcard.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_soundcard_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_cv_header_linux_soundcard_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_soundcard_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_soundcard_h" >&6; }
 
-fi
-if test $ac_cv_header_linux_soundcard_h = yes; then
-  ac_pa_cflags="$ac_pa_cflags -DHAVE_LINUX_SOUNDCARD_H"
+		ac_os_objs=ioqueue_select.o
+	        { $as_echo "$as_me:${as_lineno-$LINENO}: result: select()" >&5
+$as_echo "select()" >&6; }
+
 fi
 
 
-if test "${ac_cv_header_machine_soundcard_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for machine/soundcard.h" >&5
-echo $ECHO_N "checking for machine/soundcard.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_machine_soundcard_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_machine_soundcard_h" >&5
-echo "${ECHO_T}$ac_cv_header_machine_soundcard_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking machine/soundcard.h usability" >&5
-echo $ECHO_N "checking machine/soundcard.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <machine/soundcard.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
+
+case $target in
+  *mingw* | *cygw* | *win32* | *w32* )
+	ac_os_objs="$ac_os_objs file_access_win32.o file_io_win32.o os_core_win32.o os_error_win32.o os_time_win32.o os_timestamp_win32.o guid_win32.o"
+	;;
+  *)
+	ac_os_objs="$ac_os_objs file_access_unistd.o file_io_ansi.o os_core_unix.o os_error_unix.o os_time_unix.o os_timestamp_posix.o"
+	# UUID
+	if test "$ac_has_uuid_lib" = "1" -a "$ac_has_uuid_h" = "1"; then
+		ac_os_objs="$ac_os_objs guid_uuid.o"
+	else
+		ac_os_objs="$ac_os_objs guid_simple.o"
+	fi
+	;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-	ac_header_compiler=no
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking machine/soundcard.h presence" >&5
-echo $ECHO_N "checking machine/soundcard.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <machine/soundcard.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
+
+# Check whether --enable-sound was given.
+if test "${enable_sound+set}" = set; then :
+  enableval=$enable_sound; if test "$enable_sound" = "no"; then
+		ac_pjmedia_snd=null
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if sound is disabled... yes" >&5
+$as_echo "Checking if sound is disabled... yes" >&6; }
+	       fi
+
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: machine/soundcard.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: machine/soundcard.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: machine/soundcard.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: machine/soundcard.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: machine/soundcard.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: machine/soundcard.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: machine/soundcard.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: machine/soundcard.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: machine/soundcard.h: in the future, the compiler will take precedence" >&2;}
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for machine/soundcard.h" >&5
-echo $ECHO_N "checking for machine/soundcard.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_machine_soundcard_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_machine_soundcard_h=$ac_header_preproc
+ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_soundcard_h" = x""yes; then :
+  ac_pa_cflags="$ac_pa_cflags -DHAVE_SYS_SOUNDCARD_H"
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_machine_soundcard_h" >&5
-echo "${ECHO_T}$ac_cv_header_machine_soundcard_h" >&6; }
 
+
+ac_fn_c_check_header_mongrel "$LINENO" "linux/soundcard.h" "ac_cv_header_linux_soundcard_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_soundcard_h" = x""yes; then :
+  ac_pa_cflags="$ac_pa_cflags -DHAVE_LINUX_SOUNDCARD_H"
 fi
-if test $ac_cv_header_machine_soundcard_h = yes; then
+
+
+ac_fn_c_check_header_mongrel "$LINENO" "machine/soundcard.h" "ac_cv_header_machine_soundcard_h" "$ac_includes_default"
+if test "x$ac_cv_header_machine_soundcard_h" = x""yes; then :
   ac_pa_cflags="$ac_pa_cflags -DHAVE_MACHINE_SOUNDCARD_H"
 fi
 
@@ -10507,152 +5186,28 @@ else
 		#ac_pa_cflags="$ac_pa_cflags -DPA_OLD_CORE_AUDIO -DMOSX_USE_NON_ATOMIC_FLAG_BITS"
 		#AC_MSG_RESULT([Setting additional PortAudio CFLAGS.. -DPA_OLD_CORE_AUDIO -DMOSX_USE_NON_ATOMIC_FLAG_BITS])
 		ac_pjmedia_snd=pa_old_darwinos
-		{ echo "$as_me:$LINENO: result: Checking sound device backend... old coreaudio" >&5
-echo "${ECHO_T}Checking sound device backend... old coreaudio" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... old coreaudio" >&5
+$as_echo "Checking sound device backend... old coreaudio" >&6; }
 	else
 		ac_pjmedia_snd=pa_darwinos
-		{ echo "$as_me:$LINENO: result: Checking sound device backend... coreaudio" >&5
-echo "${ECHO_T}Checking sound device backend... coreaudio" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... coreaudio" >&5
+$as_echo "Checking sound device backend... coreaudio" >&6; }
 	fi
 	;;
   *cygwin* | *mingw*)
 	ac_pjmedia_snd=pa_win32
-	{ echo "$as_me:$LINENO: result: Checking sound device backend... win32 sound" >&5
-echo "${ECHO_T}Checking sound device backend... win32 sound" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... win32 sound" >&5
+$as_echo "Checking sound device backend... win32 sound" >&6; }
 	;;
   *rtems*)
 	ac_pjmedia_snd=null
-	{ echo "$as_me:$LINENO: result: Checking sound device backend... null sound" >&5
-echo "${ECHO_T}Checking sound device backend... null sound" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... null sound" >&5
+$as_echo "Checking sound device backend... null sound" >&6; }
 	;;
   *)
 		ac_pjmedia_snd=pa_unix
-	if test "${ac_cv_header_alsa_version_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for alsa/version.h" >&5
-echo $ECHO_N "checking for alsa/version.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_alsa_version_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_alsa_version_h" >&5
-echo "${ECHO_T}$ac_cv_header_alsa_version_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking alsa/version.h usability" >&5
-echo $ECHO_N "checking alsa/version.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <alsa/version.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking alsa/version.h presence" >&5
-echo $ECHO_N "checking alsa/version.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <alsa/version.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: alsa/version.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: alsa/version.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: alsa/version.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: alsa/version.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: alsa/version.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: alsa/version.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: alsa/version.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: alsa/version.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: alsa/version.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for alsa/version.h" >&5
-echo $ECHO_N "checking for alsa/version.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_alsa_version_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_alsa_version_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_alsa_version_h" >&5
-echo "${ECHO_T}$ac_cv_header_alsa_version_h" >&6; }
-
-fi
-if test $ac_cv_header_alsa_version_h = yes; then
+	ac_fn_c_check_header_mongrel "$LINENO" "alsa/version.h" "ac_cv_header_alsa_version_h" "$ac_includes_default"
+if test "x$ac_cv_header_alsa_version_h" = x""yes; then :
   ac_pa_use_alsa=1
 
 			 LIBS="$LIBS -lasound"
@@ -10663,18 +5218,18 @@ else
 fi
 
 
-	{ echo "$as_me:$LINENO: result: Checking sound device backend... unix" >&5
-echo "${ECHO_T}Checking sound device backend... unix" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking sound device backend... unix" >&5
+$as_echo "Checking sound device backend... unix" >&6; }
 
 		ac_pa_use_oss=1
 
 	# Check whether --enable-oss was given.
-if test "${enable_oss+set}" = set; then
+if test "${enable_oss+set}" = set; then :
   enableval=$enable_oss;
 			if test "$enable_oss" = "no"; then
 			 ac_pa_use_oss=0
-			 { echo "$as_me:$LINENO: result: Checking if OSS audio is disabled... yes" >&5
-echo "${ECHO_T}Checking if OSS audio is disabled... yes" >&6; }
+			 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if OSS audio is disabled... yes" >&5
+$as_echo "Checking if OSS audio is disabled... yes" >&6; }
 			fi
 
 fi
@@ -10684,11 +5239,11 @@ fi
 fi
 
 # Check whether --enable-ext_sound was given.
-if test "${enable_ext_sound+set}" = set; then
+if test "${enable_ext_sound+set}" = set; then :
   enableval=$enable_ext_sound; if test "$enable_ext_sound" = "yes"; then
 		ac_pjmedia_snd=external
-		{ echo "$as_me:$LINENO: result: Checking if external sound is set... yes" >&5
-echo "${ECHO_T}Checking if external sound is set... yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if external sound is set... yes" >&5
+$as_echo "Checking if external sound is set... yes" >&6; }
 	       fi
 
 fi
@@ -10696,189 +5251,177 @@ fi
 
 
 # Check whether --enable-small-filter was given.
-if test "${enable_small_filter+set}" = set; then
+if test "${enable_small_filter+set}" = set; then :
   enableval=$enable_small_filter; if test "$enable_small_filter" = "no"; then
 		ac_no_small_filter='-DPJMEDIA_HAS_SMALL_FILTER=0'
-		{ echo "$as_me:$LINENO: result: Checking if small filter is disabled... yes" >&5
-echo "${ECHO_T}Checking if small filter is disabled... yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if small filter is disabled... yes" >&5
+$as_echo "Checking if small filter is disabled... yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if small filter is disabled... no" >&5
-echo "${ECHO_T}Checking if small filter is disabled... no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if small filter is disabled... no" >&5
+$as_echo "Checking if small filter is disabled... no" >&6; }
 fi
 
 
 
 # Check whether --enable-large-filter was given.
-if test "${enable_large_filter+set}" = set; then
+if test "${enable_large_filter+set}" = set; then :
   enableval=$enable_large_filter; if test "$enable_large_filter" = "no"; then
 		ac_no_large_filter='-DPJMEDIA_HAS_LARGE_FILTER=0'
-		{ echo "$as_me:$LINENO: result: Checking if large filter is disabled... yes" >&5
-echo "${ECHO_T}Checking if large filter is disabled... yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if large filter is disabled... yes" >&5
+$as_echo "Checking if large filter is disabled... yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if large filter is disabled... no" >&5
-echo "${ECHO_T}Checking if large filter is disabled... no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if large filter is disabled... no" >&5
+$as_echo "Checking if large filter is disabled... no" >&6; }
 fi
 
 
 
 # Check whether --enable-speex-aec was given.
-if test "${enable_speex_aec+set}" = set; then
+if test "${enable_speex_aec+set}" = set; then :
   enableval=$enable_speex_aec; if test "$enable_speex_aec" = "no"; then
 		ac_no_speex_aec='-DPJMEDIA_HAS_SPEEX_AEC=0'
-		{ echo "$as_me:$LINENO: result: Checking if Speex AEC is disabled...yes" >&5
-echo "${ECHO_T}Checking if Speex AEC is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex AEC is disabled...yes" >&5
+$as_echo "Checking if Speex AEC is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if Speex AEC is disabled...no" >&5
-echo "${ECHO_T}Checking if Speex AEC is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex AEC is disabled...no" >&5
+$as_echo "Checking if Speex AEC is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-g711-codec was given.
-if test "${enable_g711_codec+set}" = set; then
+if test "${enable_g711_codec+set}" = set; then :
   enableval=$enable_g711_codec; if test "$enable_g711_codec" = "no"; then
 		ac_no_g711_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_G711_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_G711_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if G.711 codec is disabled...yes" >&5
-echo "${ECHO_T}Checking if G.711 codec is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.711 codec is disabled...yes" >&5
+$as_echo "Checking if G.711 codec is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if G.711 codec is disabled...no" >&5
-echo "${ECHO_T}Checking if G.711 codec is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.711 codec is disabled...no" >&5
+$as_echo "Checking if G.711 codec is disabled...no" >&6; }
 fi
 
 
 
 
 # Check whether --enable-l16-codec was given.
-if test "${enable_l16_codec+set}" = set; then
+if test "${enable_l16_codec+set}" = set; then :
   enableval=$enable_l16_codec; if test "$enable_l16_codec" = "no"; then
 		ac_no_l16_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_L16_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_L16_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if L16 codecs are disabled...yes" >&5
-echo "${ECHO_T}Checking if L16 codecs are disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if L16 codecs are disabled...yes" >&5
+$as_echo "Checking if L16 codecs are disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if L16 codec is disabled...no" >&5
-echo "${ECHO_T}Checking if L16 codec is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if L16 codec is disabled...no" >&5
+$as_echo "Checking if L16 codec is disabled...no" >&6; }
 fi
 
 
 
 
 # Check whether --enable-gsm-codec was given.
-if test "${enable_gsm_codec+set}" = set; then
+if test "${enable_gsm_codec+set}" = set; then :
   enableval=$enable_gsm_codec; if test "$enable_gsm_codec" = "no"; then
 		ac_no_gsm_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_GSM_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_GSM_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if GSM codec is disabled...yes" >&5
-echo "${ECHO_T}Checking if GSM codec is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if GSM codec is disabled...yes" >&5
+$as_echo "Checking if GSM codec is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if GSM codec is disabled...no" >&5
-echo "${ECHO_T}Checking if GSM codec is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if GSM codec is disabled...no" >&5
+$as_echo "Checking if GSM codec is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-g722-codec was given.
-if test "${enable_g722_codec+set}" = set; then
+if test "${enable_g722_codec+set}" = set; then :
   enableval=$enable_g722_codec; if test "$enable_g722_codec" = "no"; then
 		ac_no_g722_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_G722_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_G722_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if G.722 codec is disabled...yes" >&5
-echo "${ECHO_T}Checking if G.722 codec is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722 codec is disabled...yes" >&5
+$as_echo "Checking if G.722 codec is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if G.722 codec is disabled...no" >&5
-echo "${ECHO_T}Checking if G.722 codec is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722 codec is disabled...no" >&5
+$as_echo "Checking if G.722 codec is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-g7221-codec was given.
-if test "${enable_g7221_codec+set}" = set; then
+if test "${enable_g7221_codec+set}" = set; then :
   enableval=$enable_g7221_codec; if test "$enable_g7221_codec" = "no"; then
 		ac_no_g7221_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_G7221_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_G7221_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if G.722.1 codec is disabled...yes" >&5
-echo "${ECHO_T}Checking if G.722.1 codec is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722.1 codec is disabled...yes" >&5
+$as_echo "Checking if G.722.1 codec is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if G.722.1 codec is disabled...no" >&5
-echo "${ECHO_T}Checking if G.722.1 codec is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722.1 codec is disabled...no" >&5
+$as_echo "Checking if G.722.1 codec is disabled...no" >&6; }
 fi
 
 
 
 # Check whether --enable-speex-codec was given.
-if test "${enable_speex_codec+set}" = set; then
+if test "${enable_speex_codec+set}" = set; then :
   enableval=$enable_speex_codec; if test "$enable_speex_codec" = "no"; then
 		ac_no_speex_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_SPEEX_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_SPEEX_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if Speex codec is disabled...yes" >&5
-echo "${ECHO_T}Checking if Speex codec is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex codec is disabled...yes" >&5
+$as_echo "Checking if Speex codec is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if Speex codec is disabled...no" >&5
-echo "${ECHO_T}Checking if Speex codec is disabled...no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if Speex codec is disabled...no" >&5
+$as_echo "Checking if Speex codec is disabled...no" >&6; }
 fi
 
 
 
+#AC_DEFINE(ac_no_ilbc_codec, 1)
+#AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC, 0)
+#AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
+
 # Check whether --enable-ilbc-codec was given.
-if test "${enable_ilbc_codec+set}" = set; then
+if test "${enable_ilbc_codec+set}" = set; then :
   enableval=$enable_ilbc_codec; if test "$enable_ilbc_codec" = "no"; then
 		ac_no_ilbc_codec=1
-		cat >>confdefs.h <<\_ACEOF
-#define PJMEDIA_HAS_ILBC_CODEC 0
-_ACEOF
+		$as_echo "#define PJMEDIA_HAS_ILBC_CODEC 0" >>confdefs.h
 
-		{ echo "$as_me:$LINENO: result: Checking if iLBC codec is disabled...yes" >&5
-echo "${ECHO_T}Checking if iLBC codec is disabled...yes" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if iLBC codec is disabled...yes" >&5
+$as_echo "Checking if iLBC codec is disabled...yes" >&6; }
 	       fi
 else
-  { echo "$as_me:$LINENO: result: Checking if iLBC codec is disabled...no" >&5
-echo "${ECHO_T}Checking if iLBC codec is disabled...no" >&6; }
+  ac_no_ilbc_codec=1
+		$as_echo "#define PJMEDIA_HAS_ILBC_CODEC 0" >>confdefs.h
+
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if iLBC codec is disabled...yes" >&5
+$as_echo "Checking if iLBC codec is disabled...yes" >&6; }
 fi
 
 
 # Check whether --enable-libsamplerate was given.
-if test "${enable_libsamplerate+set}" = set; then
-  enableval=$enable_libsamplerate;
-{ echo "$as_me:$LINENO: checking for src_new in -lsamplerate" >&5
-echo $ECHO_N "checking for src_new in -lsamplerate... $ECHO_C" >&6; }
-if test "${ac_cv_lib_samplerate_src_new+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+if test "${enable_libsamplerate+set}" = set; then :
+  enableval=$enable_libsamplerate;  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for src_new in -lsamplerate" >&5
+$as_echo_n "checking for src_new in -lsamplerate... " >&6; }
+if test "${ac_cv_lib_samplerate_src_new+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsamplerate  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -10896,39 +5439,18 @@ return src_new ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_samplerate_src_new=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_samplerate_src_new=no
+  ac_cv_lib_samplerate_src_new=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_samplerate_src_new" >&5
-echo "${ECHO_T}$ac_cv_lib_samplerate_src_new" >&6; }
-if test $ac_cv_lib_samplerate_src_new = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_samplerate_src_new" >&5
+$as_echo "$ac_cv_lib_samplerate_src_new" >&6; }
+if test "x$ac_cv_lib_samplerate_src_new" = x""yes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LIBSAMPLERATE 1
 _ACEOF
@@ -10938,15 +5460,15 @@ _ACEOF
 fi
 
 else
-  { echo "$as_me:$LINENO: result: Skipping libsamplerate detection" >&5
-echo "${ECHO_T}Skipping libsamplerate detection" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: Skipping libsamplerate detection" >&5
+$as_echo "Skipping libsamplerate detection" >&6; }
 
 fi
 
 
 
 # Check whether --enable-ipp was given.
-if test "${enable_ipp+set}" = set; then
+if test "${enable_ipp+set}" = set; then :
   enableval=$enable_ipp;
 else
   enable_ipp=no
@@ -10955,7 +5477,7 @@ fi
 
 
 # Check whether --enable-ipp was given.
-if test "${enable_ipp+set}" = set; then
+if test "${enable_ipp+set}" = set; then :
   enableval=$enable_ipp;
 else
   with_ipp=no
@@ -10964,7 +5486,7 @@ fi
 
 
 # Check whether --enable-ipp-samples was given.
-if test "${enable_ipp_samples+set}" = set; then
+if test "${enable_ipp_samples+set}" = set; then :
   enableval=$enable_ipp_samples;
 else
   with_ipp_samples=no
@@ -10973,36 +5495,30 @@ fi
 
 
 if test "x$enable_ipp" != "xno"; then
-                { echo "$as_me:$LINENO: checking Intel IPP location" >&5
-echo $ECHO_N "checking Intel IPP location... $ECHO_C" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP location" >&5
+$as_echo_n "checking Intel IPP location... " >&6; }
 
     if test "x$with_ipp" != "xno" -a "x$with_ipp" != "x"; then
-	{ echo "$as_me:$LINENO: result: $with_ipp" >&5
-echo "${ECHO_T}$with_ipp" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ipp" >&5
+$as_echo "$with_ipp" >&6; }
 	IPPROOT=$with_ipp
     elif test "x$IPPROOT" = "x"; then
 	if test -d /opt/intel/ipp; then
 	    IPPROOT=`ls -d /opt/intel/ipp/*/* | head -1`
-	    { echo "$as_me:$LINENO: result: autodetected in $IPPROOT" >&5
-echo "${ECHO_T}autodetected in $IPPROOT" >&6; }
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: autodetected in $IPPROOT" >&5
+$as_echo "autodetected in $IPPROOT" >&6; }
 	fi
     else
-	{ echo "$as_me:$LINENO: result: $IPPROOT" >&5
-echo "${ECHO_T}$IPPROOT" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPROOT" >&5
+$as_echo "$IPPROOT" >&6; }
     fi
 
     if test x$IPPROOT = x; then
-	{ { echo "$as_me:$LINENO: error: the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option" >&5
-echo "$as_me: error: the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option" >&2;}
-   { (exit 1); exit 1; }; }
+	as_fn_error "the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option" "$LINENO" 5
     elif test ! -d $IPPROOT; then
-	{ { echo "$as_me:$LINENO: error: not found" >&5
-echo "$as_me: error: not found" >&2;}
-   { (exit 1); exit 1; }; }
+	as_fn_error "not found" "$LINENO" 5
     elif test ! -d $IPPROOT/include; then
-	{ { echo "$as_me:$LINENO: error: directory doesn't seem to be valid" >&5
-echo "$as_me: error: directory doesn't seem to be valid" >&2;}
-   { (exit 1); exit 1; }; }
+	as_fn_error "directory doesn't seem to be valid" "$LINENO" 5
     else
 	# IPP directory looks okay.
 	# Remove trailing backslash
@@ -11023,13 +5539,9 @@ echo "$as_me: error: directory doesn't seem to be valid" >&2;}
 	LIBS="$IPP_LIBS $LIBS"
 
 
-	{ echo "$as_me:$LINENO: checking Intel IPP usability" >&5
-echo $ECHO_N "checking Intel IPP usability... $ECHO_C" >&6; }
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP usability" >&5
+$as_echo_n "checking Intel IPP usability... " >&6; }
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ippcore.h>
 
@@ -11041,99 +5553,69 @@ ippStaticInit();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  { echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6; }
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ { echo "$as_me:$LINENO: error: failed
-See \`config.log' for more details." >&5
-echo "$as_me: error: failed
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "failed
+See \`config.log' for more details." "$LINENO" 5; }
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
 	CFLAGS="$SAVED_CFLAGS"
 	LDFLAGS="$SAVED_LDFLAGS"
 	LIBS="$SAVED_LIBS"
     fi
 
-                { echo "$as_me:$LINENO: checking Intel IPP samples location" >&5
-echo $ECHO_N "checking Intel IPP samples location... $ECHO_C" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP samples location" >&5
+$as_echo_n "checking Intel IPP samples location... " >&6; }
 
     if test "x$with_ipp_samples" != "xno" -a "x$with_ipp_samples" != "x"; then
-	{ echo "$as_me:$LINENO: result: $with_ipp_samples" >&5
-echo "${ECHO_T}$with_ipp_samples" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ipp_samples" >&5
+$as_echo "$with_ipp_samples" >&6; }
 	IPPSAMPLES=$with_ipp_samples
     elif test "x$IPPSAMPLES" = "x"; then
 	if test -d /opt/intel/ipp-samples; then
 	    IPPSAMPLES=/opt/intel/ipp-samples
-	    { echo "$as_me:$LINENO: result: autodetected in $IPPSAMPLES" >&5
-echo "${ECHO_T}autodetected in $IPPSAMPLES" >&6; }
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: autodetected in $IPPSAMPLES" >&5
+$as_echo "autodetected in $IPPSAMPLES" >&6; }
 	fi
     else
-	{ echo "$as_me:$LINENO: result: $IPPSAMPLES" >&5
-echo "${ECHO_T}$IPPSAMPLES" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPSAMPLES" >&5
+$as_echo "$IPPSAMPLES" >&6; }
     fi
 
     if test x$IPPSAMPLES = x; then
-	{ { echo "$as_me:$LINENO: error: the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option" >&5
-echo "$as_me: error: the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option" >&2;}
-   { (exit 1); exit 1; }; }
+	as_fn_error "the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option" "$LINENO" 5
     elif test ! -d $IPPSAMPLES; then
-	{ { echo "$as_me:$LINENO: error: not found" >&5
-echo "$as_me: error: not found" >&2;}
-   { (exit 1); exit 1; }; }
+	as_fn_error "not found" "$LINENO" 5
     elif test ! -d $IPPSAMPLES/speech-codecs; then
-	{ { echo "$as_me:$LINENO: error: directory doesn't seem to be valid" >&5
-echo "$as_me: error: directory doesn't seem to be valid" >&2;}
-   { (exit 1); exit 1; }; }
+	as_fn_error "directory doesn't seem to be valid" "$LINENO" 5
     else
 	# Remove trailing backslash
 	IPPSAMPLES=`echo $IPPSAMPLES | sed 's/\/$//'`
 
 	# Guess the libusc.a build location
-	{ echo "$as_me:$LINENO: checking Intel IPP USC build location" >&5
-echo $ECHO_N "checking Intel IPP USC build location... $ECHO_C" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP USC build location" >&5
+$as_echo_n "checking Intel IPP USC build location... " >&6; }
 	IPPSAMPLESLIB=`ls -d $IPPSAMPLES/speech-codecs/bin/*gcc*/lib | head -1`
 	if test ! -d $IPPSAMPLESLIB; then
-	    { { echo "$as_me:$LINENO: error: the $IPPSAMPLES/speech-codecs/bin/*gcc*/lib directory not found. Have you built the samples?
-See \`config.log' for more details." >&5
-echo "$as_me: error: the $IPPSAMPLES/speech-codecs/bin/*gcc*/lib directory not found. Have you built the samples?
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+	    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "the $IPPSAMPLES/speech-codecs/bin/*gcc*/lib directory not found. Have you built the samples?
+See \`config.log' for more details." "$LINENO" 5; }
 	fi
 	if test ! -f $IPPSAMPLESLIB/libusc.a; then
-	    { { echo "$as_me:$LINENO: error: libusc.a doesn't exist in $IPPSAMPLESLIB
-See \`config.log' for more details." >&5
-echo "$as_me: error: libusc.a doesn't exist in $IPPSAMPLESLIB
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+	    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "libusc.a doesn't exist in $IPPSAMPLESLIB
+See \`config.log' for more details." "$LINENO" 5; }
 	fi
-	{ echo "$as_me:$LINENO: result: $IPPSAMPLESLIB" >&5
-echo "${ECHO_T}$IPPSAMPLESLIB" >&6; }
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPSAMPLESLIB" >&5
+$as_echo "$IPPSAMPLESLIB" >&6; }
 
 	SAVED_CFLAGS="$CFLAGS"
 	SAVED_LDFLAGS="$LDFLAGS"
@@ -11144,13 +5626,9 @@ echo "${ECHO_T}$IPPSAMPLESLIB" >&6; }
 	LDFLAGS="$LDFLAGS -L$IPPSAMPLESLIB"
 	LIBS="-lusc $LIBS"
 
-	{ echo "$as_me:$LINENO: checking Intel IPP USC usability" >&5
-echo $ECHO_N "checking Intel IPP USC usability... $ECHO_C" >&6; }
-	cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Intel IPP USC usability" >&5
+$as_echo_n "checking Intel IPP USC usability... " >&6; }
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <usc.h>
 
@@ -11162,39 +5640,17 @@ extern USC_Fxns USC_G729AFP_Fxns;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  { echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6; }
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	{ { echo "$as_me:$LINENO: error: failed
-See \`config.log' for more details." >&5
-echo "$as_me: error: failed
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "failed
+See \`config.log' for more details." "$LINENO" 5; }
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
 	CFLAGS="$SAVED_CFLAGS"
 	LDFLAGS="\$(IPP_LDFLAGS) $SAVED_LDFLAGS"
@@ -11210,171 +5666,43 @@ export IPP_CFLAGS=$IPP_CFLAGS\n\
 export IPP_LDFLAGS=$IPP_LDFLAGS\n\
 export IPP_LIBS=$IPP_LIBS"
 else
-    { echo "$as_me:$LINENO: result: Skipping Intel IPP settings (not wanted)" >&5
-echo "${ECHO_T}Skipping Intel IPP settings (not wanted)" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: Skipping Intel IPP settings (not wanted)" >&5
+$as_echo "Skipping Intel IPP settings (not wanted)" >&6; }
 fi
 
 
 
 
 # Check whether --enable-ssl was given.
-if test "${enable_ssl+set}" = set; then
+if test "${enable_ssl+set}" = set; then :
   enableval=$enable_ssl;
 		if test "$enable_ssl" = "no"; then
 		 ac_no_ssl=1
-		 { echo "$as_me:$LINENO: result: Checking if SSL support is disabled... yes" >&5
-echo "${ECHO_T}Checking if SSL support is disabled... yes" >&6; }
+		 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if SSL support is disabled... yes" >&5
+$as_echo "Checking if SSL support is disabled... yes" >&6; }
 	        fi
 
 else
 
-		{ echo "$as_me:$LINENO: result: checking for OpenSSL installations.." >&5
-echo "${ECHO_T}checking for OpenSSL installations.." >&6; }
-
-
-
-		if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
-echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
-echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking openssl/ssl.h usability" >&5
-echo $ECHO_N "checking openssl/ssl.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <openssl/ssl.h>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking openssl/ssl.h presence" >&5
-echo $ECHO_N "checking openssl/ssl.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <openssl/ssl.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for OpenSSL installations.." >&5
+$as_echo "checking for OpenSSL installations.." >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: openssl/ssl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: openssl/ssl.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: openssl/ssl.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: openssl/ssl.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: openssl/ssl.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: openssl/ssl.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: openssl/ssl.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: openssl/ssl.h: in the future, the compiler will take precedence" >&2;}
 
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for openssl/ssl.h" >&5
-echo $ECHO_N "checking for openssl/ssl.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_openssl_ssl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_openssl_ssl_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_openssl_ssl_h" >&5
-echo "${ECHO_T}$ac_cv_header_openssl_ssl_h" >&6; }
 
-fi
-if test $ac_cv_header_openssl_ssl_h = yes; then
+		ac_fn_c_check_header_mongrel "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_ssl_h" = x""yes; then :
   openssl_h_present=1
 fi
 
 
-		{ echo "$as_me:$LINENO: checking for SSL_library_init in -lssl" >&5
-echo $ECHO_N "checking for SSL_library_init in -lssl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_library_init in -lssl" >&5
+$as_echo_n "checking for SSL_library_init in -lssl... " >&6; }
+if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lssl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11392,54 +5720,29 @@ return SSL_library_init ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_ssl_SSL_library_init=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_ssl_SSL_library_init=no
+  ac_cv_lib_ssl_SSL_library_init=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_library_init" >&5
-echo "${ECHO_T}$ac_cv_lib_ssl_SSL_library_init" >&6; }
-if test $ac_cv_lib_ssl_SSL_library_init = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_library_init" >&5
+$as_echo "$ac_cv_lib_ssl_SSL_library_init" >&6; }
+if test "x$ac_cv_lib_ssl_SSL_library_init" = x""yes; then :
   libssl_present=1 && LIBS="$LIBS -lssl"
 fi
 
-		{ echo "$as_me:$LINENO: checking for ERR_load_BIO_strings in -lcrypto" >&5
-echo $ECHO_N "checking for ERR_load_BIO_strings in -lcrypto... $ECHO_C" >&6; }
-if test "${ac_cv_lib_crypto_ERR_load_BIO_strings+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ERR_load_BIO_strings in -lcrypto" >&5
+$as_echo_n "checking for ERR_load_BIO_strings in -lcrypto... " >&6; }
+if test "${ac_cv_lib_crypto_ERR_load_BIO_strings+set}" = set; then :
+  $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrypto  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11457,54 +5760,31 @@ return ERR_load_BIO_strings ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_crypto_ERR_load_BIO_strings=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_crypto_ERR_load_BIO_strings=no
+  ac_cv_lib_crypto_ERR_load_BIO_strings=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_ERR_load_BIO_strings" >&5
-echo "${ECHO_T}$ac_cv_lib_crypto_ERR_load_BIO_strings" >&6; }
-if test $ac_cv_lib_crypto_ERR_load_BIO_strings = yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_ERR_load_BIO_strings" >&5
+$as_echo "$ac_cv_lib_crypto_ERR_load_BIO_strings" >&6; }
+if test "x$ac_cv_lib_crypto_ERR_load_BIO_strings" = x""yes; then :
   libcrypto_present=1 && LIBS="$LIBS -lcrypto"
 fi
 
 		if test "x$openssl_h_present" = "x1" -a "x$libssl_present" = "x1" -a "x$libcrypto_present" = "x1"; then
-	        	{ echo "$as_me:$LINENO: result: OpenSSL library found, SSL support enabled" >&5
-echo "${ECHO_T}OpenSSL library found, SSL support enabled" >&6; }
+	        	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenSSL library found, SSL support enabled" >&5
+$as_echo "OpenSSL library found, SSL support enabled" >&6; }
 			# PJSIP_HAS_TLS_TRANSPORT setting follows PJ_HAS_SSL_SOCK
 			#AC_DEFINE(PJSIP_HAS_TLS_TRANSPORT, 1)
-			cat >>confdefs.h <<\_ACEOF
-#define PJ_HAS_SSL_SOCK 1
-_ACEOF
+			$as_echo "#define PJ_HAS_SSL_SOCK 1" >>confdefs.h
 
 		else
-			{ echo "$as_me:$LINENO: result: ** OpenSSL libraries not found, disabling SSL support **" >&5
-echo "${ECHO_T}** OpenSSL libraries not found, disabling SSL support **" >&6; }
+			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ** OpenSSL libraries not found, disabling SSL support **" >&5
+$as_echo "** OpenSSL libraries not found, disabling SSL support **" >&6; }
 		fi
 
 fi
@@ -11513,94 +5793,74 @@ fi
 
 
 
-{ echo "$as_me:$LINENO: checking if select() needs correct nfds" >&5
-echo $ECHO_N "checking if select() needs correct nfds... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if select() needs correct nfds" >&5
+$as_echo_n "checking if select() needs correct nfds... " >&6; }
 case $target in
-  *rtems*) cat >>confdefs.h <<\_ACEOF
-#define PJ_SELECT_NEEDS_NFDS 1
-_ACEOF
+  *rtems*) $as_echo "#define PJ_SELECT_NEEDS_NFDS 1" >>confdefs.h
 
-	   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 	;;
-  *) cat >>confdefs.h <<\_ACEOF
-#define PJ_SELECT_NEEDS_NFDS 0
-_ACEOF
+  *) $as_echo "#define PJ_SELECT_NEEDS_NFDS 0" >>confdefs.h
 
-     { echo "$as_me:$LINENO: result: no (default)" >&5
-echo "${ECHO_T}no (default)" >&6; }
-     { echo "$as_me:$LINENO: result: ** Decided that select() doesn't need correct nfds (please check)" >&5
-echo "${ECHO_T}** Decided that select() doesn't need correct nfds (please check)" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
+$as_echo "no (default)" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Decided that select() doesn't need correct nfds (please check)" >&5
+$as_echo "** Decided that select() doesn't need correct nfds (please check)" >&6; }
 	;;
 esac
 
-{ echo "$as_me:$LINENO: checking if pj_thread_create() should enforce stack size" >&5
-echo $ECHO_N "checking if pj_thread_create() should enforce stack size... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pj_thread_create() should enforce stack size" >&5
+$as_echo_n "checking if pj_thread_create() should enforce stack size... " >&6; }
 case $target in
-  *rtems*) cat >>confdefs.h <<\_ACEOF
-#define PJ_THREAD_SET_STACK_SIZE 1
-_ACEOF
+  *rtems*) $as_echo "#define PJ_THREAD_SET_STACK_SIZE 1" >>confdefs.h
 
-	   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 	;;
-  *) cat >>confdefs.h <<\_ACEOF
-#define PJ_THREAD_SET_STACK_SIZE 0
-_ACEOF
+  *) $as_echo "#define PJ_THREAD_SET_STACK_SIZE 0" >>confdefs.h
 
-     { echo "$as_me:$LINENO: result: no (default)" >&5
-echo "${ECHO_T}no (default)" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
+$as_echo "no (default)" >&6; }
 	;;
 esac
 
-{ echo "$as_me:$LINENO: checking if pj_thread_create() should allocate stack" >&5
-echo $ECHO_N "checking if pj_thread_create() should allocate stack... $ECHO_C" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if pj_thread_create() should allocate stack" >&5
+$as_echo_n "checking if pj_thread_create() should allocate stack... " >&6; }
 case $target in
-  *rtems*) cat >>confdefs.h <<\_ACEOF
-#define PJ_THREAD_ALLOCATE_STACK 1
-_ACEOF
+  *rtems*) $as_echo "#define PJ_THREAD_ALLOCATE_STACK 1" >>confdefs.h
 
-	   { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+	   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 	;;
-  *) cat >>confdefs.h <<\_ACEOF
-#define PJ_THREAD_ALLOCATE_STACK 0
-_ACEOF
+  *) $as_echo "#define PJ_THREAD_ALLOCATE_STACK 0" >>confdefs.h
 
-     { echo "$as_me:$LINENO: result: no (default)" >&5
-echo "${ECHO_T}no (default)" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
+$as_echo "no (default)" >&6; }
 	;;
 esac
 
 case $target in
   *mingw* | *cygw* | *win32* | *w32* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_BLOCKING_ERROR_VAL WSAEWOULDBLOCK
-_ACEOF
+	$as_echo "#define PJ_BLOCKING_ERROR_VAL WSAEWOULDBLOCK" >>confdefs.h
 
 	;;
-  *) cat >>confdefs.h <<\_ACEOF
-#define PJ_BLOCKING_ERROR_VAL EAGAIN
-_ACEOF
+  *) $as_echo "#define PJ_BLOCKING_ERROR_VAL EAGAIN" >>confdefs.h
 
-     { echo "$as_me:$LINENO: result: ** Setting non-blocking recv() retval to EAGAIN (please check)" >&5
-echo "${ECHO_T}** Setting non-blocking recv() retval to EAGAIN (please check)" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Setting non-blocking recv() retval to EAGAIN (please check)" >&5
+$as_echo "** Setting non-blocking recv() retval to EAGAIN (please check)" >&6; }
 	;;
 esac
 
 case $target in
   *mingw* | *cygw* | *win32* | *w32* )
-	cat >>confdefs.h <<\_ACEOF
-#define PJ_BLOCKING_CONNECT_ERROR_VAL WSAEWOULDBLOCK
-_ACEOF
+	$as_echo "#define PJ_BLOCKING_CONNECT_ERROR_VAL WSAEWOULDBLOCK" >>confdefs.h
 
 	;;
-  *) cat >>confdefs.h <<\_ACEOF
-#define PJ_BLOCKING_CONNECT_ERROR_VAL EINPROGRESS
-_ACEOF
+  *) $as_echo "#define PJ_BLOCKING_CONNECT_ERROR_VAL EINPROGRESS" >>confdefs.h
 
-     { echo "$as_me:$LINENO: result: ** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&5
-echo "${ECHO_T}** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: ** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&5
+$as_echo "** Setting non-blocking connect() retval to EINPROGRESS (please check)" >&6; }
 	;;
 esac
 
@@ -11655,12 +5915,13 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
-      *) $as_unset $ac_var ;;
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -11668,8 +5929,8 @@ echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
   (set) 2>&1 |
     case $as_nl`(ac_space=' '; set) 2>&1` in #(
     *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
       sed -n \
 	"s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
@@ -11692,12 +5953,12 @@ echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     test "x$cache_file" != "x/dev/null" &&
-      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
     cat confcache >$cache_file
   else
-    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -11713,11 +5974,11 @@ ac_ltlibobjs=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
-  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -11725,12 +5986,15 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 
+
 : ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -11740,59 +6004,79 @@ cat >$CONFIG_STATUS <<_ACEOF
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
   else
-    PATH_SEPARATOR=:
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
   fi
-  rm -f conf$$.sh
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 
@@ -11801,20 +6085,18 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -11825,32 +6107,111 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
   fi
-done
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
 
-# Required to use basename.
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -11864,13 +6225,17 @@ else
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
 as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
 	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
 	    s//\1/
 	    q
@@ -11885,104 +6250,103 @@ echo X/"$0" |
 	  }
 	  s/.*/./; q'`
 
-# CDPATH.
-$as_unset CDPATH
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
 
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -11999,12 +6363,12 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+	test -d "$1/.";
       else
-	case $1 in
-        -*)set "./$1";;
+	case $1 in #(
+	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -12019,13 +6383,19 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
 exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
 
-# Save the log message, to keep $[0] and so on meaningful, and to
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
 This file was extended by pjproject $as_me 1.0, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -12038,29 +6408,40 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<_ACEOF
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files="$ac_config_files"
 config_headers="$ac_config_headers"
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
 
-Usage: $0 [OPTIONS] [FILE]...
+Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
-  -q, --quiet      do not print progress messages
+  -q, --quiet, --silent
+                   do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
 
 Configuration files:
 $config_files
@@ -12068,26 +6449,26 @@ $config_files
 Configuration headers:
 $config_headers
 
-Report bugs to <bug-autoconf@gnu.org>."
+Report bugs to the package provider."
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
 pjproject config.status 1.0
-configured by $0, generated by GNU Autoconf 2.61,
-  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+configured by $0, generated by GNU Autoconf 2.64,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
-Copyright (C) 2006 Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
+test -n "\$AWK" || AWK=awk
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
 ac_need_defaults=:
 while test $# != 0
 do
@@ -12109,34 +6490,38 @@ do
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    echo "$ac_cs_version"; exit ;;
+    $as_echo "$ac_cs_version"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
     $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    { echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; };;
+    as_fn_error "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
   --help | --hel | -h )
-    echo "$ac_cs_usage"; exit ;;
+    $as_echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; } ;;
+  -*) as_fn_error "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
 
-  *) ac_config_targets="$ac_config_targets $1"
+  *) as_fn_append ac_config_targets " $1"
      ac_need_defaults=false ;;
 
   esac
@@ -12151,30 +6536,32 @@ if $ac_cs_silent; then
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  CONFIG_SHELL=$SHELL
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
-  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  exec "\$@"
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 exec 5>>config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  echo "$ac_log"
+  $as_echo "$ac_log"
 } >&5
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 
 # Handling of arguments.
 for ac_config_target in $ac_config_targets
@@ -12194,9 +6581,7 @@ do
     "third_party/build/portaudio/os-auto.mak") CONFIG_FILES="$CONFIG_FILES third_party/build/portaudio/os-auto.mak" ;;
     "third_party/build/os-auto.mak") CONFIG_FILES="$CONFIG_FILES third_party/build/os-auto.mak" ;;
 
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
+  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -12222,7 +6607,7 @@ $debug ||
   trap 'exit_status=$?
   { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
 ' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
+  trap 'as_fn_exit 1' 1 2 13 15
 }
 # Create a (secure) tmp directory for tmp files.
 
@@ -12233,156 +6618,140 @@ $debug ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
 
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
 if test -n "$CONFIG_FILES"; then
 
-_ACEOF
 
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
 
 
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-build!$build$ac_delim
-build_cpu!$build_cpu$ac_delim
-build_vendor!$build_vendor$ac_delim
-build_os!$build_os$ac_delim
-host!$host$ac_delim
-host_cpu!$host_cpu$ac_delim
-host_vendor!$host_vendor$ac_delim
-host_os!$host_os$ac_delim
-target!$target$ac_delim
-target_cpu!$target_cpu$ac_delim
-target_vendor!$target_vendor$ac_delim
-target_os!$target_os$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-CXX!$CXX$ac_delim
-CXXFLAGS!$CXXFLAGS$ac_delim
-ac_ct_CXX!$ac_ct_CXX$ac_delim
-ac_pjdir!$ac_pjdir$ac_delim
-ac_build_mak_vars!$ac_build_mak_vars$ac_delim
-CPP!$CPP$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-ac_os_objs!$ac_os_objs$ac_delim
-ac_pjmedia_snd!$ac_pjmedia_snd$ac_delim
-ac_pa_cflags!$ac_pa_cflags$ac_delim
-ac_pa_use_alsa!$ac_pa_use_alsa$ac_delim
-ac_pa_use_oss!$ac_pa_use_oss$ac_delim
-ac_no_small_filter!$ac_no_small_filter$ac_delim
-ac_no_large_filter!$ac_no_large_filter$ac_delim
-ac_no_speex_aec!$ac_no_speex_aec$ac_delim
-ac_no_g711_codec!$ac_no_g711_codec$ac_delim
-ac_no_l16_codec!$ac_no_l16_codec$ac_delim
-ac_no_gsm_codec!$ac_no_gsm_codec$ac_delim
-ac_no_g722_codec!$ac_no_g722_codec$ac_delim
-ac_no_g7221_codec!$ac_no_g7221_codec$ac_delim
-ac_no_speex_codec!$ac_no_speex_codec$ac_delim
-ac_no_ilbc_codec!$ac_no_ilbc_codec$ac_delim
-ac_no_ssl!$ac_no_ssl$ac_delim
-openssl_h_present!$openssl_h_present$ac_delim
-libssl_present!$libssl_present$ac_delim
-libcrypto_present!$libcrypto_present$ac_delim
-ac_cross_compile!$ac_cross_compile$ac_delim
-ac_linux_poll!$ac_linux_poll$ac_delim
-ac_host!$ac_host$ac_delim
-ac_main_obj!$ac_main_obj$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
+  . ./conf$$subs.sh ||
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 89; then
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
 done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
 
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
 
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACAWK
 _ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-
 # VPATH may cause trouble with some makes, so we remove $(srcdir),
 # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
@@ -12398,20 +6767,128 @@ s/^[^=]*=[	 ]*$//
 }'
 fi
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_FILES"
 
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
 
-for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
+shift
+for ac_tag
 do
   case $ac_tag in
   :[FHLC]) ac_mode=$ac_tag; continue;;
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
-   { (exit 1); exit 1; }; };;
+  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -12439,26 +6916,34 @@ echo "$as_me: error: Invalid tag $ac_tag." >&2;}
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
-   { (exit 1); exit 1; }; };;
+	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
-      ac_file_inputs="$ac_file_inputs $ac_f"
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
-    configure_input="Generated from "`IFS=:
-	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
     fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin";;
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -12468,42 +6953,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
 	 X"$ac_file" : 'X\(//\)[^/]' \| \
 	 X"$ac_file" : 'X\(//\)$' \| \
 	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  { as_dir="$ac_dir"
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
+$as_echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
 	    s//\1/
 	    q
@@ -12521,20 +6971,15 @@ echo X"$as_dir" |
 	    q
 	  }
 	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
+  as_dir="$ac_dir"; as_fn_mkdir_p
   ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -12570,12 +7015,12 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # If the template does not know about datarootdir, expand it.
 # FIXME: This hack should be removed a few years after 2.60.
 ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
+ac_sed_dataroot='
+/datarootdir/ {
   p
   q
 }
@@ -12583,36 +7028,37 @@ case `sed -n '/datarootdir/ {
 /@docdir@/p
 /@infodir@/p
 /@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
   s&@datadir@&$datadir&g
   s&@docdir@&$docdir&g
   s&@infodir@&$infodir&g
   s&@localedir@&$localedir&g
   s&@mandir@&$mandir&g
-    s&\\\${datarootdir}&$datarootdir&g' ;;
+  s&\\\${datarootdir}&$datarootdir&g' ;;
 esac
 _ACEOF
 
 # Neutralize VPATH when `$srcdir' = `.'.
 # Shell code in configure.ac might set extrasub.
 # FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
 $extrasub
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
+s|@configure_input@|$ac_sed_conf_input|;t t
 s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
 s&@srcdir@&$ac_srcdir&;t t
 s&@abs_srcdir@&$ac_abs_srcdir&;t t
 s&@top_srcdir@&$ac_top_srcdir&;t t
@@ -12621,119 +7067,48 @@ s&@builddir@&$ac_builddir&;t t
 s&@abs_builddir@&$ac_abs_builddir&;t t
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 $ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&5
-echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out"; rm -f "$tmp/out";;
-  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
-  esac
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
   # CONFIG_HEADER
   #
-_ACEOF
-
-# Transform confdefs.h into a sed script `conftest.defines', that
-# substitutes the proper values into config.h.in to produce config.h.
-rm -f conftest.defines conftest.tail
-# First, append a space to every undef/define line, to ease matching.
-echo 's/$/ /' >conftest.defines
-# Then, protect against being on the right side of a sed subst, or in
-# an unquoted here document, in config.status.  If some macros were
-# called several times there might be several #defines for the same
-# symbol, which is useless.  But do not sort them, since the last
-# AC_DEFINE must be honored.
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
-# NAME is the cpp macro being defined, VALUE is the value it is being given.
-# PARAMS is the parameter list in the macro definition--in most cases, it's
-# just an empty string.
-ac_dA='s,^\\([	 #]*\\)[^	 ]*\\([	 ]*'
-ac_dB='\\)[	 (].*,\\1define\\2'
-ac_dC=' '
-ac_dD=' ,'
-
-uniq confdefs.h |
-  sed -n '
-	t rset
-	:rset
-	s/^[	 ]*#[	 ]*define[	 ][	 ]*//
-	t ok
-	d
-	:ok
-	s/[\\&,]/\\&/g
-	s/^\('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
-	s/^\('"$ac_word_re"'\)[	 ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
-  ' >>conftest.defines
-
-# Remove the space that was appended to ease matching.
-# Then replace #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-# (The regexp can be short, since the line contains either #define or #undef.)
-echo 's/ $//
-s,^[	 #]*u.*,/* & */,' >>conftest.defines
-
-# Break up conftest.defines:
-ac_max_sed_lines=50
-
-# First sed command is:	 sed -f defines.sed $ac_file_inputs >"$tmp/out1"
-# Second one is:	 sed -f defines.sed "$tmp/out1" >"$tmp/out2"
-# Third one will be:	 sed -f defines.sed "$tmp/out2" >"$tmp/out1"
-# et cetera.
-ac_in='$ac_file_inputs'
-ac_out='"$tmp/out1"'
-ac_nxt='"$tmp/out2"'
-
-while :
-do
-  # Write a here document:
-    cat >>$CONFIG_STATUS <<_ACEOF
-    # First, check the format of the line:
-    cat >"\$tmp/defines.sed" <<\\CEOF
-/^[	 ]*#[	 ]*undef[	 ][	 ]*$ac_word_re[	 ]*\$/b def
-/^[	 ]*#[	 ]*define[	 ][	 ]*$ac_word_re[(	 ]/b def
-b
-:def
-_ACEOF
-  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
-  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
-  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
-  grep . conftest.tail >/dev/null || break
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines conftest.tail
-
-echo "ac_result=$ac_in" >>$CONFIG_STATUS
-cat >>$CONFIG_STATUS <<\_ACEOF
   if test x"$ac_file" != x-; then
-    echo "/* $configure_input  */" >"$tmp/config.h"
-    cat "$ac_result" >>"$tmp/config.h"
-    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
-      rm -f $ac_file
-      mv "$tmp/config.h" $ac_file
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+	|| as_fn_error "could not create $ac_file" "$LINENO" 5
     fi
   else
-    echo "/* $configure_input  */"
-    cat "$ac_result"
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error "could not create -" "$LINENO" 5
   fi
-  rm -f "$tmp/out12"
  ;;
 
 
@@ -12742,11 +7117,13 @@ echo "$as_me: $ac_file is unchanged" >&6;}
 done # for ac_tag
 
 
-{ (exit 0); exit 0; }
+as_fn_exit 0
 _ACEOF
-chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
+test $ac_write_fail = 0 ||
+  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -12766,12 +7143,16 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
+  $ac_cs_success || as_fn_exit $?
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
 
 
-{ echo "$as_me:$LINENO: result:
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
 
 Configurations for current target have been written to 'build.mak', and 'os-auto.mak' in various build directories, and pjlib/include/pj/compat/os_auto.h.
 
@@ -12781,7 +7162,7 @@ Further customizations can be put in:
 
 The next step now is to run 'make dep' and 'make'.
 " >&5
-echo "${ECHO_T}
+$as_echo "
 
 Configurations for current target have been written to 'build.mak', and 'os-auto.mak' in various build directories, and pjlib/include/pj/compat/os_auto.h.
 
diff --git a/sflphone-common/libs/pjproject/aconfigure.ac b/sflphone-common/libs/pjproject/aconfigure.ac
index 7f579e7fe6..92eaa9dcb2 100644
--- a/sflphone-common/libs/pjproject/aconfigure.ac
+++ b/sflphone-common/libs/pjproject/aconfigure.ac
@@ -560,6 +560,10 @@ AC_ARG_ENABLE(speex-codec,
 
 dnl # Include iLBC codec
 AC_SUBST(ac_no_ilbc_codec)
+#AC_DEFINE(ac_no_ilbc_codec, 1)
+#AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC, 0)
+#AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
+
 AC_ARG_ENABLE(ilbc-codec,
 	      AC_HELP_STRING([--disable-ilbc-codec],
 			     [Exclude iLBC codec in the build]),
@@ -568,7 +572,9 @@ AC_ARG_ENABLE(ilbc-codec,
 		AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC,0)
 		AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
 	       fi],
-	      AC_MSG_RESULT([Checking if iLBC codec is disabled...no]))
+		[ac_no_ilbc_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC,0)
+	    AC_MSG_RESULT([Checking if iLBC codec is disabled...yes]))
 
 dnl # Include libsamplerate
 AC_ARG_ENABLE(libsamplerate,
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c b/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c
deleted file mode 100644
index 80d72d917d..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.c
+++ /dev/null
@@ -1,114 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       FrameClassify.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "iLBC_define.h"
-
-   /*---------------------------------------------------------------*
-    *  Classification of subframes to localize start state
-    *--------------------------------------------------------------*/
-
-   int FrameClassify(      /* index to the max-energy sub-frame */
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i/o) the encoder state structure */
-       float *residual     /* (i) lpc residual signal */
-   ) {
-       float max_ssqEn, fssqEn[NSUB_MAX], bssqEn[NSUB_MAX], *pp;
-       int n, l, max_ssqEn_n;
-       const float ssqEn_win[NSUB_MAX-1]={(float)0.8,(float)0.9,
-           (float)1.0,(float)0.9,(float)0.8};
-       const float sampEn_win[5]={(float)1.0/(float)6.0,
-           (float)2.0/(float)6.0, (float)3.0/(float)6.0,
-           (float)4.0/(float)6.0, (float)5.0/(float)6.0};
-
-       /* init the front and back energies to zero */
-
-       memset(fssqEn, 0, NSUB_MAX*sizeof(float));
-       memset(bssqEn, 0, NSUB_MAX*sizeof(float));
-
-       /* Calculate front of first seqence */
-
-       n=0;
-       pp=residual;
-       for (l=0; l<5; l++) {
-           fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
-           pp++;
-       }
-       for (l=5; l<SUBL; l++) {
-
-
-
-
-
-           fssqEn[n] += (*pp) * (*pp);
-           pp++;
-       }
-
-       /* Calculate front and back of all middle sequences */
-
-       for (n=1; n<iLBCenc_inst->nsub-1; n++) {
-           pp=residual+n*SUBL;
-           for (l=0; l<5; l++) {
-               fssqEn[n] += sampEn_win[l] * (*pp) * (*pp);
-               bssqEn[n] += (*pp) * (*pp);
-               pp++;
-           }
-           for (l=5; l<SUBL-5; l++) {
-               fssqEn[n] += (*pp) * (*pp);
-               bssqEn[n] += (*pp) * (*pp);
-               pp++;
-           }
-           for (l=SUBL-5; l<SUBL; l++) {
-               fssqEn[n] += (*pp) * (*pp);
-               bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
-               pp++;
-           }
-       }
-
-       /* Calculate back of last seqence */
-
-       n=iLBCenc_inst->nsub-1;
-       pp=residual+n*SUBL;
-       for (l=0; l<SUBL-5; l++) {
-           bssqEn[n] += (*pp) * (*pp);
-           pp++;
-       }
-       for (l=SUBL-5; l<SUBL; l++) {
-           bssqEn[n] += sampEn_win[SUBL-l-1] * (*pp) * (*pp);
-           pp++;
-       }
-
-       /* find the index to the weighted 80 sample with
-          most energy */
-
-       if (iLBCenc_inst->mode==20) l=1;
-       else                        l=0;
-
-       max_ssqEn=(fssqEn[0]+bssqEn[1])*ssqEn_win[l];
-       max_ssqEn_n=1;
-       for (n=2; n<iLBCenc_inst->nsub; n++) {
-
-
-
-
-
-
-           l++;
-           if ((fssqEn[n-1]+bssqEn[n])*ssqEn_win[l] > max_ssqEn) {
-               max_ssqEn=(fssqEn[n-1]+bssqEn[n]) *
-                               ssqEn_win[l];
-               max_ssqEn_n=n;
-           }
-       }
-
-       return max_ssqEn_n;
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h b/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h
deleted file mode 100644
index 018ddbe5da..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/FrameClassify.h
+++ /dev/null
@@ -1,27 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       FrameClassify.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_FRAMECLASSIFY_H
-   #define __iLBC_FRAMECLASSIFY_H
-
-   int FrameClassify(      /* index to the max-energy sub-frame */
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i/o) the encoder state structure */
-       float *residual     /* (i) lpc residual signal */
-   );
-
-
-
-
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c b/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c
deleted file mode 100644
index 81bab90485..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.c
+++ /dev/null
@@ -1,158 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       LPC_decode.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <string.h>
-
-   #include "helpfun.h"
-   #include "lsf.h"
-   #include "iLBC_define.h"
-   #include "constants.h"
-
-   /*---------------------------------------------------------------*
-    *  interpolation of lsf coefficients for the decoder
-    *--------------------------------------------------------------*/
-
-   void LSFinterpolate2a_dec(
-       float *a,           /* (o) lpc coefficients for a sub-frame */
-       float *lsf1,    /* (i) first lsf coefficient vector */
-       float *lsf2,    /* (i) second lsf coefficient vector */
-       float coef,         /* (i) interpolation weight */
-       int length          /* (i) length of lsf vectors */
-   ){
-       float  lsftmp[LPC_FILTERORDER];
-
-       interpolate(lsftmp, lsf1, lsf2, coef, length);
-       lsf2a(a, lsftmp);
-   }
-
-   /*---------------------------------------------------------------*
-    *  obtain dequantized lsf coefficients from quantization index
-    *--------------------------------------------------------------*/
-
-   void SimplelsfDEQ(
-       float *lsfdeq,    /* (o) dequantized lsf coefficients */
-       int *index,         /* (i) quantization index */
-       int lpc_n           /* (i) number of LPCs */
-   ){
-       int i, j, pos, cb_pos;
-
-
-
-
-
-       /* decode first LSF */
-
-       pos = 0;
-       cb_pos = 0;
-       for (i = 0; i < LSF_NSPLIT; i++) {
-           for (j = 0; j < dim_lsfCbTbl[i]; j++) {
-               lsfdeq[pos + j] = lsfCbTbl[cb_pos +
-                   (long)(index[i])*dim_lsfCbTbl[i] + j];
-           }
-           pos += dim_lsfCbTbl[i];
-           cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i];
-       }
-
-       if (lpc_n>1) {
-
-           /* decode last LSF */
-
-           pos = 0;
-           cb_pos = 0;
-           for (i = 0; i < LSF_NSPLIT; i++) {
-               for (j = 0; j < dim_lsfCbTbl[i]; j++) {
-                   lsfdeq[LPC_FILTERORDER + pos + j] =
-                       lsfCbTbl[cb_pos +
-                       (long)(index[LSF_NSPLIT + i])*
-                       dim_lsfCbTbl[i] + j];
-               }
-               pos += dim_lsfCbTbl[i];
-               cb_pos += size_lsfCbTbl[i]*dim_lsfCbTbl[i];
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  obtain synthesis and weighting filters form lsf coefficients
-    *---------------------------------------------------------------*/
-
-   void DecoderInterpolateLSF(
-       float *syntdenum, /* (o) synthesis filter coefficients */
-       float *weightdenum, /* (o) weighting denumerator
-                                  coefficients */
-       float *lsfdeq,       /* (i) dequantized lsf coefficients */
-       int length,         /* (i) length of lsf coefficient vector */
-       iLBC_Dec_Inst_t *iLBCdec_inst
-                           /* (i) the decoder state structure */
-   ){
-       int    i, pos, lp_length;
-       float  lp[LPC_FILTERORDER + 1], *lsfdeq2;
-
-
-
-
-
-
-       lsfdeq2 = lsfdeq + length;
-       lp_length = length + 1;
-
-       if (iLBCdec_inst->mode==30) {
-           /* sub-frame 1: Interpolation between old and first */
-
-           LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold, lsfdeq,
-               lsf_weightTbl_30ms[0], length);
-           memcpy(syntdenum,lp,lp_length*sizeof(float));
-           bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM,
-               lp_length);
-
-           /* sub-frames 2 to 6: interpolation between first
-              and last LSF */
-
-           pos = lp_length;
-           for (i = 1; i < 6; i++) {
-               LSFinterpolate2a_dec(lp, lsfdeq, lsfdeq2,
-                   lsf_weightTbl_30ms[i], length);
-               memcpy(syntdenum + pos,lp,lp_length*sizeof(float));
-               bwexpand(weightdenum + pos, lp,
-                   LPC_CHIRP_WEIGHTDENUM, lp_length);
-               pos += lp_length;
-           }
-       }
-       else {
-           pos = 0;
-           for (i = 0; i < iLBCdec_inst->nsub; i++) {
-               LSFinterpolate2a_dec(lp, iLBCdec_inst->lsfdeqold,
-                   lsfdeq, lsf_weightTbl_20ms[i], length);
-               memcpy(syntdenum+pos,lp,lp_length*sizeof(float));
-               bwexpand(weightdenum+pos, lp, LPC_CHIRP_WEIGHTDENUM,
-                   lp_length);
-               pos += lp_length;
-           }
-       }
-
-       /* update memory */
-
-       if (iLBCdec_inst->mode==30)
-           memcpy(iLBCdec_inst->lsfdeqold, lsfdeq2,
-                       length*sizeof(float));
-       else
-           memcpy(iLBCdec_inst->lsfdeqold, lsfdeq,
-                       length*sizeof(float));
-
-   }
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h b/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h
deleted file mode 100644
index abe1d7b3b1..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/LPCdecode.h
+++ /dev/null
@@ -1,52 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       LPC_decode.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_LPC_DECODE_H
-   #define __iLBC_LPC_DECODE_H
-
-   void LSFinterpolate2a_dec(
-       float *a,           /* (o) lpc coefficients for a sub-frame */
-       float *lsf1,    /* (i) first lsf coefficient vector */
-       float *lsf2,    /* (i) second lsf coefficient vector */
-       float coef,         /* (i) interpolation weight */
-       int length          /* (i) length of lsf vectors */
-   );
-
-   void SimplelsfDEQ(
-       float *lsfdeq,      /* (o) dequantized lsf coefficients */
-       int *index,         /* (i) quantization index */
-       int lpc_n           /* (i) number of LPCs */
-   );
-
-   void DecoderInterpolateLSF(
-       float *syntdenum,   /* (o) synthesis filter coefficients */
-       float *weightdenum, /* (o) weighting denumerator
-                                  coefficients */
-       float *lsfdeq,      /* (i) dequantized lsf coefficients */
-       int length,         /* (i) length of lsf coefficient vector */
-       iLBC_Dec_Inst_t *iLBCdec_inst
-                           /* (i) the decoder state structure */
-   );
-
-   #endif
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c b/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c
deleted file mode 100644
index 19695c0fa5..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.c
+++ /dev/null
@@ -1,241 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       LPCencode.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <string.h>
-
-   #include "iLBC_define.h"
-   #include "helpfun.h"
-   #include "lsf.h"
-   #include "constants.h"
-
-
-
-
-
-   /*----------------------------------------------------------------*
-    *  lpc analysis (subrutine to LPCencode)
-    *---------------------------------------------------------------*/
-
-   void SimpleAnalysis(
-       float *lsf,         /* (o) lsf coefficients */
-       float *data,    /* (i) new data vector */
-       iLBC_Enc_Inst_t *iLBCenc_inst
-                           /* (i/o) the encoder state structure */
-   ){
-       int k, is;
-       float temp[BLOCKL_MAX], lp[LPC_FILTERORDER + 1];
-       float lp2[LPC_FILTERORDER + 1];
-       float r[LPC_FILTERORDER + 1];
-
-       is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl;
-       memcpy(iLBCenc_inst->lpc_buffer+is,data,
-           iLBCenc_inst->blockl*sizeof(float));
-
-       /* No lookahead, last window is asymmetric */
-
-       for (k = 0; k < iLBCenc_inst->lpc_n; k++) {
-
-           is = LPC_LOOKBACK;
-
-           if (k < (iLBCenc_inst->lpc_n - 1)) {
-               window(temp, lpc_winTbl,
-                   iLBCenc_inst->lpc_buffer, BLOCKL_MAX);
-           } else {
-               window(temp, lpc_asymwinTbl,
-                   iLBCenc_inst->lpc_buffer + is, BLOCKL_MAX);
-           }
-
-           autocorr(r, temp, BLOCKL_MAX, LPC_FILTERORDER);
-           window(r, r, lpc_lagwinTbl, LPC_FILTERORDER + 1);
-
-           levdurb(lp, temp, r, LPC_FILTERORDER);
-           bwexpand(lp2, lp, LPC_CHIRP_SYNTDENUM, LPC_FILTERORDER+1);
-
-           a2lsf(lsf + k*LPC_FILTERORDER, lp2);
-       }
-       is=LPC_LOOKBACK+BLOCKL_MAX-iLBCenc_inst->blockl;
-       memmove(iLBCenc_inst->lpc_buffer,
-           iLBCenc_inst->lpc_buffer+LPC_LOOKBACK+BLOCKL_MAX-is,
-           is*sizeof(float));
-   }
-
-   /*----------------------------------------------------------------*
-
-
-
-
-
-    *  lsf interpolator and conversion from lsf to a coefficients
-    *  (subrutine to SimpleInterpolateLSF)
-    *---------------------------------------------------------------*/
-
-   void LSFinterpolate2a_enc(
-       float *a,       /* (o) lpc coefficients */
-       float *lsf1,/* (i) first set of lsf coefficients */
-       float *lsf2,/* (i) second set of lsf coefficients */
-       float coef,     /* (i) weighting coefficient to use between
-                              lsf1 and lsf2 */
-       long length      /* (i) length of coefficient vectors */
-   ){
-       float  lsftmp[LPC_FILTERORDER];
-
-       interpolate(lsftmp, lsf1, lsf2, coef, length);
-       lsf2a(a, lsftmp);
-   }
-
-   /*----------------------------------------------------------------*
-    *  lsf interpolator (subrutine to LPCencode)
-    *---------------------------------------------------------------*/
-
-   void SimpleInterpolateLSF(
-       float *syntdenum,   /* (o) the synthesis filter denominator
-                                  resulting from the quantized
-                                  interpolated lsf */
-       float *weightdenum, /* (o) the weighting filter denominator
-                                  resulting from the unquantized
-                                  interpolated lsf */
-       float *lsf,         /* (i) the unquantized lsf coefficients */
-       float *lsfdeq,      /* (i) the dequantized lsf coefficients */
-       float *lsfold,      /* (i) the unquantized lsf coefficients of
-                                  the previous signal frame */
-       float *lsfdeqold, /* (i) the dequantized lsf coefficients of
-                                  the previous signal frame */
-       int length,         /* (i) should equate LPC_FILTERORDER */
-       iLBC_Enc_Inst_t *iLBCenc_inst
-                           /* (i/o) the encoder state structure */
-   ){
-       int    i, pos, lp_length;
-       float  lp[LPC_FILTERORDER + 1], *lsf2, *lsfdeq2;
-
-       lsf2 = lsf + length;
-       lsfdeq2 = lsfdeq + length;
-       lp_length = length + 1;
-
-       if (iLBCenc_inst->mode==30) {
-           /* sub-frame 1: Interpolation between old and first
-
-
-
-
-
-              set of lsf coefficients */
-
-           LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq,
-               lsf_weightTbl_30ms[0], length);
-           memcpy(syntdenum,lp,lp_length*sizeof(float));
-           LSFinterpolate2a_enc(lp, lsfold, lsf,
-               lsf_weightTbl_30ms[0], length);
-           bwexpand(weightdenum, lp, LPC_CHIRP_WEIGHTDENUM, lp_length);
-
-           /* sub-frame 2 to 6: Interpolation between first
-              and second set of lsf coefficients */
-
-           pos = lp_length;
-           for (i = 1; i < iLBCenc_inst->nsub; i++) {
-               LSFinterpolate2a_enc(lp, lsfdeq, lsfdeq2,
-                   lsf_weightTbl_30ms[i], length);
-               memcpy(syntdenum + pos,lp,lp_length*sizeof(float));
-
-               LSFinterpolate2a_enc(lp, lsf, lsf2,
-                   lsf_weightTbl_30ms[i], length);
-               bwexpand(weightdenum + pos, lp,
-                   LPC_CHIRP_WEIGHTDENUM, lp_length);
-               pos += lp_length;
-           }
-       }
-       else {
-           pos = 0;
-           for (i = 0; i < iLBCenc_inst->nsub; i++) {
-               LSFinterpolate2a_enc(lp, lsfdeqold, lsfdeq,
-                   lsf_weightTbl_20ms[i], length);
-               memcpy(syntdenum+pos,lp,lp_length*sizeof(float));
-               LSFinterpolate2a_enc(lp, lsfold, lsf,
-                   lsf_weightTbl_20ms[i], length);
-               bwexpand(weightdenum+pos, lp,
-                   LPC_CHIRP_WEIGHTDENUM, lp_length);
-               pos += lp_length;
-           }
-       }
-
-       /* update memory */
-
-       if (iLBCenc_inst->mode==30) {
-           memcpy(lsfold, lsf2, length*sizeof(float));
-           memcpy(lsfdeqold, lsfdeq2, length*sizeof(float));
-       }
-       else {
-           memcpy(lsfold, lsf, length*sizeof(float));
-           memcpy(lsfdeqold, lsfdeq, length*sizeof(float));
-
-
-
-
-
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  lsf quantizer (subrutine to LPCencode)
-    *---------------------------------------------------------------*/
-
-   void SimplelsfQ(
-       float *lsfdeq,    /* (o) dequantized lsf coefficients
-                              (dimension FILTERORDER) */
-       int *index,     /* (o) quantization index */
-       float *lsf,      /* (i) the lsf coefficient vector to be
-                              quantized (dimension FILTERORDER ) */
-       int lpc_n     /* (i) number of lsf sets to quantize */
-   ){
-       /* Quantize first LSF with memoryless split VQ */
-       SplitVQ(lsfdeq, index, lsf, lsfCbTbl, LSF_NSPLIT,
-           dim_lsfCbTbl, size_lsfCbTbl);
-
-       if (lpc_n==2) {
-           /* Quantize second LSF with memoryless split VQ */
-           SplitVQ(lsfdeq + LPC_FILTERORDER, index + LSF_NSPLIT,
-               lsf + LPC_FILTERORDER, lsfCbTbl, LSF_NSPLIT,
-               dim_lsfCbTbl, size_lsfCbTbl);
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  lpc encoder
-    *---------------------------------------------------------------*/
-
-   void LPCencode(
-       float *syntdenum, /* (i/o) synthesis filter coefficients
-                                  before/after encoding */
-       float *weightdenum, /* (i/o) weighting denumerator
-                                  coefficients before/after
-                                  encoding */
-       int *lsf_index,     /* (o) lsf quantization index */
-       float *data,    /* (i) lsf coefficients to quantize */
-       iLBC_Enc_Inst_t *iLBCenc_inst
-                           /* (i/o) the encoder state structure */
-   ){
-       float lsf[LPC_FILTERORDER * LPC_N_MAX];
-       float lsfdeq[LPC_FILTERORDER * LPC_N_MAX];
-       int change=0;
-
-       SimpleAnalysis(lsf, data, iLBCenc_inst);
-       SimplelsfQ(lsfdeq, lsf_index, lsf, iLBCenc_inst->lpc_n);
-
-
-
-
-
-       change=LSF_check(lsfdeq, LPC_FILTERORDER, iLBCenc_inst->lpc_n);
-       SimpleInterpolateLSF(syntdenum, weightdenum,
-           lsf, lsfdeq, iLBCenc_inst->lsfold,
-           iLBCenc_inst->lsfdeqold, LPC_FILTERORDER, iLBCenc_inst);
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h b/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h
deleted file mode 100644
index 39a9b04037..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/LPCencode.h
+++ /dev/null
@@ -1,28 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       LPCencode.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_LPCENCOD_H
-   #define __iLBC_LPCENCOD_H
-
-   void LPCencode(
-       float *syntdenum,   /* (i/o) synthesis filter coefficients
-                                  before/after encoding */
-       float *weightdenum, /* (i/o) weighting denumerator coefficients
-                                  before/after encoding */
-       int *lsf_index,     /* (o) lsf quantization index */
-       float *data,    /* (i) lsf coefficients to quantize */
-       iLBC_Enc_Inst_t *iLBCenc_inst
-                           /* (i/o) the encoder state structure */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c b/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c
deleted file mode 100644
index 1d3e65fa63..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.c
+++ /dev/null
@@ -1,86 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       StateConstructW.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <string.h>
-
-   #include "iLBC_define.h"
-   #include "constants.h"
-   #include "filter.h"
-
-   /*----------------------------------------------------------------*
-    *  decoding of the start state
-    *---------------------------------------------------------------*/
-
-   void StateConstructW(
-       int idxForMax,      /* (i) 6-bit index for the quantization of
-                                  max amplitude */
-       int *idxVec,    /* (i) vector of quantization indexes */
-       float *syntDenum,   /* (i) synthesis filter denumerator */
-
-
-
-
-
-       float *out,         /* (o) the decoded state vector */
-       int len             /* (i) length of a state vector */
-   ){
-       float maxVal, tmpbuf[LPC_FILTERORDER+2*STATE_LEN], *tmp,
-           numerator[LPC_FILTERORDER+1];
-       float foutbuf[LPC_FILTERORDER+2*STATE_LEN], *fout;
-       int k,tmpi;
-
-       /* decoding of the maximum value */
-
-       maxVal = state_frgqTbl[idxForMax];
-       maxVal = (float)pow(10,maxVal)/(float)4.5;
-
-       /* initialization of buffers and coefficients */
-
-       memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float));
-       memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float));
-       for (k=0; k<LPC_FILTERORDER; k++) {
-           numerator[k]=syntDenum[LPC_FILTERORDER-k];
-       }
-       numerator[LPC_FILTERORDER]=syntDenum[0];
-       tmp = &tmpbuf[LPC_FILTERORDER];
-       fout = &foutbuf[LPC_FILTERORDER];
-
-       /* decoding of the sample values */
-
-       for (k=0; k<len; k++) {
-           tmpi = len-1-k;
-           /* maxVal = 1/scal */
-           tmp[k] = maxVal*state_sq3Tbl[idxVec[tmpi]];
-       }
-
-       /* circular convolution with all-pass filter */
-
-       memset(tmp+len, 0, len*sizeof(float));
-       ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,
-           LPC_FILTERORDER, fout);
-       for (k=0;k<len;k++) {
-           out[k] = fout[len-1-k]+fout[2*len-1-k];
-       }
-   }
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h b/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h
deleted file mode 100644
index 08f93d2815..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/StateConstructW.h
+++ /dev/null
@@ -1,31 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       StateConstructW.h
-
-
-
-
-
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_STATECONSTRUCTW_H
-   #define __iLBC_STATECONSTRUCTW_H
-
-   void StateConstructW(
-       int idxForMax,      /* (i) 6-bit index for the quantization of
-                                  max amplitude */
-       int *idxVec,    /* (i) vector of quantization indexes */
-       float *syntDenum,   /* (i) synthesis filter denumerator */
-       float *out,         /* (o) the decoded state vector */
-       int len             /* (i) length of a state vector */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c b/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c
deleted file mode 100644
index 1eeee936c1..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.c
+++ /dev/null
@@ -1,211 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       StateSearchW.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <string.h>
-
-   #include "iLBC_define.h"
-   #include "constants.h"
-   #include "filter.h"
-   #include "helpfun.h"
-
-   /*----------------------------------------------------------------*
-    *  predictive noise shaping encoding of scaled start state
-    *  (subrutine for StateSearchW)
-    *---------------------------------------------------------------*/
-
-   void AbsQuantW(
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i) Encoder instance */
-       float *in,          /* (i) vector to encode */
-       float *syntDenum,   /* (i) denominator of synthesis filter */
-       float *weightDenum, /* (i) denominator of weighting filter */
-       int *out,           /* (o) vector of quantizer indexes */
-       int len,        /* (i) length of vector to encode and
-                                  vector of quantizer indexes */
-       int state_first     /* (i) position of start state in the
-                                  80 vec */
-   ){
-       float *syntOut;
-       float syntOutBuf[LPC_FILTERORDER+STATE_SHORT_LEN_30MS];
-       float toQ, xq;
-       int n;
-       int index;
-
-       /* initialization of buffer for filtering */
-
-       memset(syntOutBuf, 0, LPC_FILTERORDER*sizeof(float));
-
-
-
-
-
-
-       /* initialization of pointer for filtering */
-
-       syntOut = &syntOutBuf[LPC_FILTERORDER];
-
-       /* synthesis and weighting filters on input */
-
-       if (state_first) {
-           AllPoleFilter (in, weightDenum, SUBL, LPC_FILTERORDER);
-       } else {
-           AllPoleFilter (in, weightDenum,
-               iLBCenc_inst->state_short_len-SUBL,
-               LPC_FILTERORDER);
-       }
-
-       /* encoding loop */
-
-       for (n=0; n<len; n++) {
-
-           /* time update of filter coefficients */
-
-           if ((state_first)&&(n==SUBL)){
-               syntDenum += (LPC_FILTERORDER+1);
-               weightDenum += (LPC_FILTERORDER+1);
-
-               /* synthesis and weighting filters on input */
-               AllPoleFilter (&in[n], weightDenum, len-n,
-                   LPC_FILTERORDER);
-
-           } else if ((state_first==0)&&
-               (n==(iLBCenc_inst->state_short_len-SUBL))) {
-               syntDenum += (LPC_FILTERORDER+1);
-               weightDenum += (LPC_FILTERORDER+1);
-
-               /* synthesis and weighting filters on input */
-               AllPoleFilter (&in[n], weightDenum, len-n,
-                   LPC_FILTERORDER);
-
-           }
-
-           /* prediction of synthesized and weighted input */
-
-           syntOut[n] = 0.0;
-           AllPoleFilter (&syntOut[n], weightDenum, 1,
-               LPC_FILTERORDER);
-
-           /* quantization */
-
-           toQ = in[n]-syntOut[n];
-
-
-
-
-
-           sort_sq(&xq, &index, toQ, state_sq3Tbl, 8);
-           out[n]=index;
-           syntOut[n] = state_sq3Tbl[out[n]];
-
-           /* update of the prediction filter */
-
-           AllPoleFilter(&syntOut[n], weightDenum, 1,
-               LPC_FILTERORDER);
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  encoding of start state
-    *---------------------------------------------------------------*/
-
-   void StateSearchW(
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i) Encoder instance */
-       float *residual,/* (i) target residual vector */
-       float *syntDenum,   /* (i) lpc synthesis filter */
-       float *weightDenum, /* (i) weighting filter denuminator */
-       int *idxForMax,     /* (o) quantizer index for maximum
-                                  amplitude */
-       int *idxVec,    /* (o) vector of quantization indexes */
-       int len,        /* (i) length of all vectors */
-       int state_first     /* (i) position of start state in the
-                                  80 vec */
-   ){
-       float dtmp, maxVal;
-       float tmpbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS];
-       float *tmp, numerator[1+LPC_FILTERORDER];
-       float foutbuf[LPC_FILTERORDER+2*STATE_SHORT_LEN_30MS], *fout;
-       int k;
-       float qmax, scal;
-
-       /* initialization of buffers and filter coefficients */
-
-       memset(tmpbuf, 0, LPC_FILTERORDER*sizeof(float));
-       memset(foutbuf, 0, LPC_FILTERORDER*sizeof(float));
-       for (k=0; k<LPC_FILTERORDER; k++) {
-           numerator[k]=syntDenum[LPC_FILTERORDER-k];
-       }
-       numerator[LPC_FILTERORDER]=syntDenum[0];
-       tmp = &tmpbuf[LPC_FILTERORDER];
-       fout = &foutbuf[LPC_FILTERORDER];
-
-       /* circular convolution with the all-pass filter */
-
-
-
-
-
-
-       memcpy(tmp, residual, len*sizeof(float));
-       memset(tmp+len, 0, len*sizeof(float));
-       ZeroPoleFilter(tmp, numerator, syntDenum, 2*len,
-           LPC_FILTERORDER, fout);
-       for (k=0; k<len; k++) {
-           fout[k] += fout[k+len];
-       }
-
-       /* identification of the maximum amplitude value */
-
-       maxVal = fout[0];
-       for (k=1; k<len; k++) {
-
-           if (fout[k]*fout[k] > maxVal*maxVal){
-               maxVal = fout[k];
-           }
-       }
-       maxVal=(float)fabs(maxVal);
-
-       /* encoding of the maximum amplitude value */
-
-       if (maxVal < 10.0) {
-           maxVal = 10.0;
-       }
-       maxVal = (float)log10(maxVal);
-       sort_sq(&dtmp, idxForMax, maxVal, state_frgqTbl, 64);
-
-       /* decoding of the maximum amplitude representation value,
-          and corresponding scaling of start state */
-
-       maxVal=state_frgqTbl[*idxForMax];
-       qmax = (float)pow(10,maxVal);
-       scal = (float)(4.5)/qmax;
-       for (k=0; k<len; k++){
-           fout[k] *= scal;
-       }
-
-       /* predictive noise shaping encoding of scaled start state */
-
-       AbsQuantW(iLBCenc_inst, fout,syntDenum,
-           weightDenum,idxVec, len, state_first);
-   }
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h b/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h
deleted file mode 100644
index 9036daa892..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/StateSearchW.h
+++ /dev/null
@@ -1,52 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       StateSearchW.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_STATESEARCHW_H
-   #define __iLBC_STATESEARCHW_H
-
-   void AbsQuantW(
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i) Encoder instance */
-       float *in,          /* (i) vector to encode */
-       float *syntDenum,   /* (i) denominator of synthesis filter */
-       float *weightDenum, /* (i) denominator of weighting filter */
-       int *out,           /* (o) vector of quantizer indexes */
-       int len,        /* (i) length of vector to encode and
-                                  vector of quantizer indexes */
-       int state_first     /* (i) position of start state in the
-                                  80 vec */
-   );
-
-   void StateSearchW(
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i) Encoder instance */
-       float *residual,/* (i) target residual vector */
-       float *syntDenum,   /* (i) lpc synthesis filter */
-       float *weightDenum, /* (i) weighting filter denuminator */
-       int *idxForMax,     /* (o) quantizer index for maximum
-                                  amplitude */
-       int *idxVec,    /* (o) vector of quantization indexes */
-       int len,        /* (i) length of all vectors */
-       int state_first     /* (i) position of start state in the
-                                  80 vec */
-   );
-
-
-   #endif
-
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c b/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c
deleted file mode 100644
index c161f98a5b..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.c
+++ /dev/null
@@ -1,72 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       anaFilter.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <string.h>
-   #include "iLBC_define.h"
-
-   /*----------------------------------------------------------------*
-    *  LP analysis filter.
-    *---------------------------------------------------------------*/
-
-   void anaFilter(
-       float *In,  /* (i) Signal to be filtered */
-       float *a,   /* (i) LP parameters */
-       int len,/* (i) Length of signal */
-       float *Out, /* (o) Filtered signal */
-       float *mem  /* (i/o) Filter state */
-   ){
-       int i, j;
-       float *po, *pi, *pm, *pa;
-
-       po = Out;
-
-       /* Filter first part using memory from past */
-
-       for (i=0; i<LPC_FILTERORDER; i++) {
-           pi = &In[i];
-           pm = &mem[LPC_FILTERORDER-1];
-           pa = a;
-           *po=0.0;
-
-
-
-
-
-           for (j=0; j<=i; j++) {
-               *po+=(*pa++)*(*pi--);
-           }
-           for (j=i+1; j<LPC_FILTERORDER+1; j++) {
-
-               *po+=(*pa++)*(*pm--);
-           }
-           po++;
-       }
-
-       /* Filter last part where the state is entirely
-          in the input vector */
-
-       for (i=LPC_FILTERORDER; i<len; i++) {
-           pi = &In[i];
-           pa = a;
-           *po=0.0;
-           for (j=0; j<LPC_FILTERORDER+1; j++) {
-               *po+=(*pa++)*(*pi--);
-           }
-           po++;
-       }
-
-       /* Update state vector */
-
-       memcpy(mem, &In[len-LPC_FILTERORDER],
-           LPC_FILTERORDER*sizeof(float));
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h b/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h
deleted file mode 100644
index 91367f95e0..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/anaFilter.h
+++ /dev/null
@@ -1,30 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       anaFilter.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_ANAFILTER_H
-   #define __iLBC_ANAFILTER_H
-
-   void anaFilter(
-
-
-
-
-
-       float *In,  /* (i) Signal to be filtered */
-       float *a,   /* (i) LP parameters */
-       int len,/* (i) Length of signal */
-       float *Out, /* (o) Filtered signal */
-       float *mem  /* (i/o) Filter state */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/constants.c b/sflphone-common/libs/pjproject/third_party/ilbc/constants.c
deleted file mode 100644
index d43dac4d4e..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/constants.c
+++ /dev/null
@@ -1,770 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       constants.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "iLBC_define.h"
-
-   /* ULP bit allocation */
-
-       /* 20 ms frame */
-
-   const iLBC_ULP_Inst_t ULP_20msTbl = {
-       /* LSF */
-       {   {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0},
-           {0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
-       /* Start state location, gain and samples */
-       {2,0,0,0,0},
-       {1,0,0,0,0},
-       {6,0,0,0,0},
-       {0,1,2,0,0},
-       /* extra CB index and extra CB gain */
-       {{6,0,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
-       {{2,0,3,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
-       /* CB index and CB gain */
-       {   {{7,0,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
-           {{0,0,8,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
-           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
-           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}}},
-       {   {{1,2,2,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
-           {{1,1,3,0,0}, {0,2,2,0,0}, {0,0,3,0,0}},
-           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}},
-           {{0,0,0,0,0}, {0,0,0,0,0}, {0,0,0,0,0}}}
-   };
-
-       /* 30 ms frame */
-
-   const iLBC_ULP_Inst_t ULP_30msTbl = {
-       /* LSF */
-
-
-
-
-
-       {   {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0},
-           {6,0,0,0,0}, {7,0,0,0,0}, {7,0,0,0,0}},
-       /* Start state location, gain and samples */
-       {3,0,0,0,0},
-       {1,0,0,0,0},
-       {6,0,0,0,0},
-       {0,1,2,0,0},
-       /* extra CB index and extra CB gain */
-       {{4,2,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
-       {{1,1,3,0,0}, {1,1,2,0,0}, {0,0,3,0,0}},
-       /* CB index and CB gain */
-       {   {{6,1,1,0,0}, {0,0,7,0,0}, {0,0,7,0,0}},
-           {{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
-           {{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}},
-           {{0,7,1,0,0}, {0,0,8,0,0}, {0,0,8,0,0}}},
-       {   {{1,2,2,0,0}, {1,2,1,0,0}, {0,0,3,0,0}},
-           {{0,2,3,0,0}, {0,2,2,0,0}, {0,0,3,0,0}},
-           {{0,1,4,0,0}, {0,1,3,0,0}, {0,0,3,0,0}},
-           {{0,1,4,0,0}, {0,1,3,0,0}, {0,0,3,0,0}}}
-   };
-
-   /* HP Filters */
-
-   float hpi_zero_coefsTbl[3] = {
-       (float)0.92727436, (float)-1.8544941, (float)0.92727436
-   };
-   float hpi_pole_coefsTbl[3] = {
-       (float)1.0, (float)-1.9059465, (float)0.9114024
-   };
-   float hpo_zero_coefsTbl[3] = {
-       (float)0.93980581, (float)-1.8795834, (float)0.93980581
-   };
-   float hpo_pole_coefsTbl[3] = {
-       (float)1.0, (float)-1.9330735, (float)0.93589199
-   };
-
-   /* LP Filter */
-
-   float lpFilt_coefsTbl[FILTERORDER_DS]={
-       (float)-0.066650, (float)0.125000, (float)0.316650,
-       (float)0.414063, (float)0.316650,
-       (float)0.125000, (float)-0.066650
-   };
-
-   /* State quantization tables */
-
-   float state_sq3Tbl[8] = {
-       (float)-3.719849, (float)-2.177490, (float)-1.130005,
-
-
-
-
-
-       (float)-0.309692, (float)0.444214, (float)1.329712,
-       (float)2.436279, (float)3.983887
-   };
-
-   float state_frgqTbl[64] = {
-       (float)1.000085, (float)1.071695, (float)1.140395,
-       (float)1.206868, (float)1.277188, (float)1.351503,
-       (float)1.429380, (float)1.500727, (float)1.569049,
-       (float)1.639599, (float)1.707071, (float)1.781531,
-       (float)1.840799, (float)1.901550, (float)1.956695,
-       (float)2.006750, (float)2.055474, (float)2.102787,
-       (float)2.142819, (float)2.183592, (float)2.217962,
-       (float)2.257177, (float)2.295739, (float)2.332967,
-       (float)2.369248, (float)2.402792, (float)2.435080,
-       (float)2.468598, (float)2.503394, (float)2.539284,
-       (float)2.572944, (float)2.605036, (float)2.636331,
-       (float)2.668939, (float)2.698780, (float)2.729101,
-       (float)2.759786, (float)2.789834, (float)2.818679,
-       (float)2.848074, (float)2.877470, (float)2.906899,
-       (float)2.936655, (float)2.967804, (float)3.000115,
-       (float)3.033367, (float)3.066355, (float)3.104231,
-       (float)3.141499, (float)3.183012, (float)3.222952,
-       (float)3.265433, (float)3.308441, (float)3.350823,
-       (float)3.395275, (float)3.442793, (float)3.490801,
-       (float)3.542514, (float)3.604064, (float)3.666050,
-       (float)3.740994, (float)3.830749, (float)3.938770,
-       (float)4.101764
-   };
-
-   /* CB tables */
-
-   int search_rangeTbl[5][CB_NSTAGES]={{58,58,58}, {108,44,44},
-               {108,108,108}, {108,108,108}, {108,108,108}};
-   int stMemLTbl=85;
-   int memLfTbl[NASUB_MAX]={147,147,147,147};
-
-   /* expansion filter(s) */
-
-   float cbfiltersTbl[CB_FILTERLEN]={
-       (float)-0.034180, (float)0.108887, (float)-0.184326,
-       (float)0.806152,  (float)0.713379, (float)-0.144043,
-       (float)0.083740,  (float)-0.033691
-   };
-
-   /* Gain Quantization */
-
-   float gain_sq3Tbl[8]={
-       (float)-1.000000,  (float)-0.659973,  (float)-0.330017,
-
-
-
-
-
-       (float)0.000000, (float)0.250000, (float)0.500000,
-       (float)0.750000, (float)1.00000};
-
-   float gain_sq4Tbl[16]={
-       (float)-1.049988, (float)-0.900024, (float)-0.750000,
-       (float)-0.599976, (float)-0.450012, (float)-0.299988,
-       (float)-0.150024, (float)0.000000, (float)0.150024,
-       (float)0.299988, (float)0.450012, (float)0.599976,
-       (float)0.750000, (float)0.900024, (float)1.049988,
-       (float)1.200012};
-
-   float gain_sq5Tbl[32]={
-       (float)0.037476, (float)0.075012, (float)0.112488,
-       (float)0.150024, (float)0.187500, (float)0.224976,
-       (float)0.262512, (float)0.299988, (float)0.337524,
-       (float)0.375000, (float)0.412476, (float)0.450012,
-       (float)0.487488, (float)0.525024, (float)0.562500,
-       (float)0.599976, (float)0.637512, (float)0.674988,
-       (float)0.712524, (float)0.750000, (float)0.787476,
-       (float)0.825012, (float)0.862488, (float)0.900024,
-       (float)0.937500, (float)0.974976, (float)1.012512,
-       (float)1.049988, (float)1.087524, (float)1.125000,
-       (float)1.162476, (float)1.200012};
-
-   /* Enhancer - Upsamling a factor 4 (ENH_UPS0 = 4) */
-   float polyphaserTbl[ENH_UPS0*(2*ENH_FL0+1)]={
-       (float)0.000000, (float)0.000000, (float)0.000000,
-   (float)1.000000,
-           (float)0.000000, (float)0.000000, (float)0.000000,
-       (float)0.015625, (float)-0.076904, (float)0.288330,
-   (float)0.862061,
-           (float)-0.106445, (float)0.018799, (float)-0.015625,
-       (float)0.023682, (float)-0.124268, (float)0.601563,
-   (float)0.601563,
-           (float)-0.124268, (float)0.023682, (float)-0.023682,
-       (float)0.018799, (float)-0.106445, (float)0.862061,
-   (float)0.288330,
-           (float)-0.076904, (float)0.015625, (float)-0.018799};
-
-   float enh_plocsTbl[ENH_NBLOCKS_TOT] = {(float)40.0, (float)120.0,
-               (float)200.0, (float)280.0, (float)360.0,
-               (float)440.0, (float)520.0, (float)600.0};
-
-   /* LPC analysis and quantization */
-
-   int dim_lsfCbTbl[LSF_NSPLIT] = {3, 3, 4};
-   int size_lsfCbTbl[LSF_NSPLIT] = {64,128,128};
-
-
-
-
-
-
-   float lsfmeanTbl[LPC_FILTERORDER] = {
-       (float)0.281738, (float)0.445801, (float)0.663330,
-       (float)0.962524, (float)1.251831, (float)1.533081,
-       (float)1.850586, (float)2.137817, (float)2.481445,
-       (float)2.777344};
-
-   float lsf_weightTbl_30ms[6] = {(float)(1.0/2.0), (float)1.0,
-   (float)(2.0/3.0),
-       (float)(1.0/3.0), (float)0.0, (float)0.0};
-
-   float lsf_weightTbl_20ms[4] = {(float)(3.0/4.0), (float)(2.0/4.0),
-       (float)(1.0/4.0), (float)(0.0)};
-
-   /* Hanning LPC window */
-   float lpc_winTbl[BLOCKL_MAX]={
-       (float)0.000183, (float)0.000671, (float)0.001526,
-       (float)0.002716, (float)0.004242, (float)0.006104,
-       (float)0.008301, (float)0.010834, (float)0.013702,
-       (float)0.016907, (float)0.020416, (float)0.024261,
-       (float)0.028442, (float)0.032928, (float)0.037750,
-       (float)0.042877, (float)0.048309, (float)0.054047,
-       (float)0.060089, (float)0.066437, (float)0.073090,
-       (float)0.080017, (float)0.087219, (float)0.094727,
-       (float)0.102509, (float)0.110535, (float)0.118835,
-       (float)0.127411, (float)0.136230, (float)0.145294,
-       (float)0.154602, (float)0.164154, (float)0.173920,
-       (float)0.183899, (float)0.194122, (float)0.204529,
-       (float)0.215149, (float)0.225952, (float)0.236938,
-       (float)0.248108, (float)0.259460, (float)0.270966,
-       (float)0.282654, (float)0.294464, (float)0.306396,
-       (float)0.318481, (float)0.330688, (float)0.343018,
-       (float)0.355438, (float)0.367981, (float)0.380585,
-       (float)0.393280, (float)0.406067, (float)0.418884,
-       (float)0.431763, (float)0.444702, (float)0.457672,
-       (float)0.470673, (float)0.483704, (float)0.496735,
-       (float)0.509766, (float)0.522797, (float)0.535828,
-       (float)0.548798, (float)0.561768, (float)0.574677,
-       (float)0.587524, (float)0.600342, (float)0.613068,
-       (float)0.625732, (float)0.638306, (float)0.650787,
-       (float)0.663147, (float)0.675415, (float)0.687561,
-       (float)0.699585, (float)0.711487, (float)0.723206,
-       (float)0.734802, (float)0.746216, (float)0.757477,
-       (float)0.768585, (float)0.779480, (float)0.790192,
-       (float)0.800720, (float)0.811005, (float)0.821106,
-       (float)0.830994, (float)0.840668, (float)0.850067,
-       (float)0.859253, (float)0.868225, (float)0.876892,
-       (float)0.885345, (float)0.893524, (float)0.901428,
-       (float)0.909058, (float)0.916412, (float)0.923492,
-
-
-
-
-
-       (float)0.930267, (float)0.936768, (float)0.942963,
-       (float)0.948853, (float)0.954437, (float)0.959717,
-       (float)0.964691, (float)0.969360, (float)0.973694,
-       (float)0.977692, (float)0.981384, (float)0.984741,
-       (float)0.987762, (float)0.990479, (float)0.992828,
-       (float)0.994873, (float)0.996552, (float)0.997925,
-       (float)0.998932, (float)0.999603, (float)0.999969,
-       (float)0.999969, (float)0.999603, (float)0.998932,
-       (float)0.997925, (float)0.996552, (float)0.994873,
-       (float)0.992828, (float)0.990479, (float)0.987762,
-       (float)0.984741, (float)0.981384, (float)0.977692,
-       (float)0.973694, (float)0.969360, (float)0.964691,
-       (float)0.959717, (float)0.954437, (float)0.948853,
-       (float)0.942963, (float)0.936768, (float)0.930267,
-       (float)0.923492, (float)0.916412, (float)0.909058,
-       (float)0.901428, (float)0.893524, (float)0.885345,
-       (float)0.876892, (float)0.868225, (float)0.859253,
-       (float)0.850067, (float)0.840668, (float)0.830994,
-       (float)0.821106, (float)0.811005, (float)0.800720,
-       (float)0.790192, (float)0.779480, (float)0.768585,
-       (float)0.757477, (float)0.746216, (float)0.734802,
-       (float)0.723206, (float)0.711487, (float)0.699585,
-       (float)0.687561, (float)0.675415, (float)0.663147,
-       (float)0.650787, (float)0.638306, (float)0.625732,
-       (float)0.613068, (float)0.600342, (float)0.587524,
-       (float)0.574677, (float)0.561768, (float)0.548798,
-       (float)0.535828, (float)0.522797, (float)0.509766,
-       (float)0.496735, (float)0.483704, (float)0.470673,
-       (float)0.457672, (float)0.444702, (float)0.431763,
-       (float)0.418884, (float)0.406067, (float)0.393280,
-       (float)0.380585, (float)0.367981, (float)0.355438,
-       (float)0.343018, (float)0.330688, (float)0.318481,
-       (float)0.306396, (float)0.294464, (float)0.282654,
-       (float)0.270966, (float)0.259460, (float)0.248108,
-       (float)0.236938, (float)0.225952, (float)0.215149,
-       (float)0.204529, (float)0.194122, (float)0.183899,
-       (float)0.173920, (float)0.164154, (float)0.154602,
-       (float)0.145294, (float)0.136230, (float)0.127411,
-       (float)0.118835, (float)0.110535, (float)0.102509,
-       (float)0.094727, (float)0.087219, (float)0.080017,
-       (float)0.073090, (float)0.066437, (float)0.060089,
-       (float)0.054047, (float)0.048309, (float)0.042877,
-       (float)0.037750, (float)0.032928, (float)0.028442,
-       (float)0.024261, (float)0.020416, (float)0.016907,
-       (float)0.013702, (float)0.010834, (float)0.008301,
-       (float)0.006104, (float)0.004242, (float)0.002716,
-       (float)0.001526, (float)0.000671, (float)0.000183
-   };
-
-
-
-
-
-   /* Asymmetric LPC window */
-   float lpc_asymwinTbl[BLOCKL_MAX]={
-       (float)0.000061, (float)0.000214, (float)0.000458,
-       (float)0.000824, (float)0.001282, (float)0.001831,
-       (float)0.002472, (float)0.003235, (float)0.004120,
-       (float)0.005066, (float)0.006134, (float)0.007294,
-       (float)0.008545, (float)0.009918, (float)0.011383,
-       (float)0.012939, (float)0.014587, (float)0.016357,
-       (float)0.018219, (float)0.020172, (float)0.022217,
-       (float)0.024353, (float)0.026611, (float)0.028961,
-       (float)0.031372, (float)0.033905, (float)0.036530,
-       (float)0.039276, (float)0.042084, (float)0.044983,
-       (float)0.047974, (float)0.051086, (float)0.054260,
-       (float)0.057526, (float)0.060883, (float)0.064331,
-       (float)0.067871, (float)0.071503, (float)0.075226,
-       (float)0.079010, (float)0.082916, (float)0.086884,
-       (float)0.090942, (float)0.095062, (float)0.099304,
-       (float)0.103607, (float)0.107971, (float)0.112427,
-       (float)0.116974, (float)0.121582, (float)0.126282,
-       (float)0.131073, (float)0.135895, (float)0.140839,
-       (float)0.145813, (float)0.150879, (float)0.156006,
-       (float)0.161224, (float)0.166504, (float)0.171844,
-       (float)0.177246, (float)0.182709, (float)0.188263,
-       (float)0.193848, (float)0.199524, (float)0.205231,
-       (float)0.211029, (float)0.216858, (float)0.222778,
-       (float)0.228729, (float)0.234741, (float)0.240814,
-       (float)0.246918, (float)0.253082, (float)0.259308,
-       (float)0.265564, (float)0.271881, (float)0.278259,
-       (float)0.284668, (float)0.291107, (float)0.297607,
-       (float)0.304138, (float)0.310730, (float)0.317322,
-       (float)0.323975, (float)0.330658, (float)0.337372,
-       (float)0.344147, (float)0.350922, (float)0.357727,
-       (float)0.364594, (float)0.371460, (float)0.378357,
-       (float)0.385284, (float)0.392212, (float)0.399170,
-       (float)0.406158, (float)0.413177, (float)0.420197,
-       (float)0.427246, (float)0.434296, (float)0.441376,
-       (float)0.448456, (float)0.455536, (float)0.462646,
-       (float)0.469757, (float)0.476868, (float)0.483978,
-       (float)0.491089, (float)0.498230, (float)0.505341,
-       (float)0.512451, (float)0.519592, (float)0.526703,
-       (float)0.533813, (float)0.540924, (float)0.548004,
-       (float)0.555084, (float)0.562164, (float)0.569244,
-       (float)0.576294, (float)0.583313, (float)0.590332,
-       (float)0.597321, (float)0.604309, (float)0.611267,
-       (float)0.618195, (float)0.625092, (float)0.631989,
-       (float)0.638855, (float)0.645660, (float)0.652466,
-       (float)0.659241, (float)0.665985, (float)0.672668,
-       (float)0.679352, (float)0.685974, (float)0.692566,
-
-
-
-
-
-       (float)0.699127, (float)0.705658, (float)0.712128,
-       (float)0.718536, (float)0.724945, (float)0.731262,
-       (float)0.737549, (float)0.743805, (float)0.750000,
-       (float)0.756134, (float)0.762238, (float)0.768280,
-       (float)0.774261, (float)0.780182, (float)0.786072,
-       (float)0.791870, (float)0.797638, (float)0.803314,
-       (float)0.808960, (float)0.814514, (float)0.820038,
-       (float)0.825470, (float)0.830841, (float)0.836151,
-       (float)0.841400, (float)0.846558, (float)0.851654,
-       (float)0.856689, (float)0.861633, (float)0.866516,
-       (float)0.871338, (float)0.876068, (float)0.880737,
-       (float)0.885315, (float)0.889801, (float)0.894226,
-       (float)0.898560, (float)0.902832, (float)0.907013,
-       (float)0.911102, (float)0.915100, (float)0.919037,
-       (float)0.922882, (float)0.926636, (float)0.930328,
-       (float)0.933899, (float)0.937408, (float)0.940796,
-       (float)0.944122, (float)0.947357, (float)0.950470,
-       (float)0.953522, (float)0.956482, (float)0.959351,
-       (float)0.962097, (float)0.964783, (float)0.967377,
-       (float)0.969849, (float)0.972229, (float)0.974518,
-       (float)0.976715, (float)0.978821, (float)0.980835,
-       (float)0.982727, (float)0.984528, (float)0.986237,
-       (float)0.987854, (float)0.989380, (float)0.990784,
-       (float)0.992096, (float)0.993317, (float)0.994415,
-       (float)0.995422, (float)0.996338, (float)0.997162,
-       (float)0.997864, (float)0.998474, (float)0.998962,
-       (float)0.999390, (float)0.999695, (float)0.999878,
-       (float)0.999969, (float)0.999969, (float)0.996918,
-       (float)0.987701, (float)0.972382, (float)0.951050,
-       (float)0.923889, (float)0.891022, (float)0.852631,
-       (float)0.809021, (float)0.760406, (float)0.707092,
-       (float)0.649445, (float)0.587799, (float)0.522491,
-       (float)0.453979, (float)0.382690, (float)0.309021,
-       (float)0.233459, (float)0.156433, (float)0.078461
-   };
-
-   /* Lag window for LPC */
-   float lpc_lagwinTbl[LPC_FILTERORDER + 1]={
-       (float)1.000100, (float)0.998890, (float)0.995569,
-           (float)0.990057, (float)0.982392,
-       (float)0.972623, (float)0.960816, (float)0.947047,
-           (float)0.931405, (float)0.913989, (float)0.894909};
-
-   /* LSF quantization*/
-   float lsfCbTbl[64 * 3 + 128 * 3 + 128 * 4] = {
-   (float)0.155396, (float)0.273193, (float)0.451172,
-   (float)0.390503, (float)0.648071, (float)1.002075,
-   (float)0.440186, (float)0.692261, (float)0.955688,
-
-
-
-
-
-   (float)0.343628, (float)0.642334, (float)1.071533,
-   (float)0.318359, (float)0.491577, (float)0.670532,
-   (float)0.193115, (float)0.375488, (float)0.725708,
-   (float)0.364136, (float)0.510376, (float)0.658691,
-   (float)0.297485, (float)0.527588, (float)0.842529,
-   (float)0.227173, (float)0.365967, (float)0.563110,
-   (float)0.244995, (float)0.396729, (float)0.636475,
-   (float)0.169434, (float)0.300171, (float)0.520264,
-   (float)0.312866, (float)0.464478, (float)0.643188,
-   (float)0.248535, (float)0.429932, (float)0.626099,
-   (float)0.236206, (float)0.491333, (float)0.817139,
-   (float)0.334961, (float)0.625122, (float)0.895752,
-   (float)0.343018, (float)0.518555, (float)0.698608,
-   (float)0.372803, (float)0.659790, (float)0.945435,
-   (float)0.176880, (float)0.316528, (float)0.581421,
-   (float)0.416382, (float)0.625977, (float)0.805176,
-   (float)0.303223, (float)0.568726, (float)0.915039,
-   (float)0.203613, (float)0.351440, (float)0.588135,
-   (float)0.221191, (float)0.375000, (float)0.614746,
-   (float)0.199951, (float)0.323364, (float)0.476074,
-   (float)0.300781, (float)0.433350, (float)0.566895,
-   (float)0.226196, (float)0.354004, (float)0.507568,
-   (float)0.300049, (float)0.508179, (float)0.711670,
-   (float)0.312012, (float)0.492676, (float)0.763428,
-   (float)0.329956, (float)0.541016, (float)0.795776,
-   (float)0.373779, (float)0.604614, (float)0.928833,
-   (float)0.210571, (float)0.452026, (float)0.755249,
-   (float)0.271118, (float)0.473267, (float)0.662476,
-   (float)0.285522, (float)0.436890, (float)0.634399,
-   (float)0.246704, (float)0.565552, (float)0.859009,
-   (float)0.270508, (float)0.406250, (float)0.553589,
-   (float)0.361450, (float)0.578491, (float)0.813843,
-   (float)0.342651, (float)0.482788, (float)0.622437,
-   (float)0.340332, (float)0.549438, (float)0.743164,
-   (float)0.200439, (float)0.336304, (float)0.540894,
-   (float)0.407837, (float)0.644775, (float)0.895142,
-   (float)0.294678, (float)0.454834, (float)0.699097,
-   (float)0.193115, (float)0.344482, (float)0.643188,
-   (float)0.275757, (float)0.420776, (float)0.598755,
-   (float)0.380493, (float)0.608643, (float)0.861084,
-   (float)0.222778, (float)0.426147, (float)0.676514,
-   (float)0.407471, (float)0.700195, (float)1.053101,
-   (float)0.218384, (float)0.377197, (float)0.669922,
-   (float)0.313232, (float)0.454102, (float)0.600952,
-   (float)0.347412, (float)0.571533, (float)0.874146,
-   (float)0.238037, (float)0.405396, (float)0.729492,
-   (float)0.223877, (float)0.412964, (float)0.822021,
-   (float)0.395264, (float)0.582153, (float)0.743896,
-
-
-
-
-
-   (float)0.247925, (float)0.485596, (float)0.720581,
-   (float)0.229126, (float)0.496582, (float)0.907715,
-   (float)0.260132, (float)0.566895, (float)1.012695,
-   (float)0.337402, (float)0.611572, (float)0.978149,
-   (float)0.267822, (float)0.447632, (float)0.769287,
-   (float)0.250610, (float)0.381714, (float)0.530029,
-   (float)0.430054, (float)0.805054, (float)1.221924,
-   (float)0.382568, (float)0.544067, (float)0.701660,
-   (float)0.383545, (float)0.710327, (float)1.149170,
-   (float)0.271362, (float)0.529053, (float)0.775513,
-   (float)0.246826, (float)0.393555, (float)0.588623,
-   (float)0.266846, (float)0.422119, (float)0.676758,
-   (float)0.311523, (float)0.580688, (float)0.838623,
-   (float)1.331177, (float)1.576782, (float)1.779541,
-   (float)1.160034, (float)1.401978, (float)1.768188,
-   (float)1.161865, (float)1.525146, (float)1.715332,
-   (float)0.759521, (float)0.913940, (float)1.119873,
-   (float)0.947144, (float)1.121338, (float)1.282471,
-   (float)1.015015, (float)1.557007, (float)1.804932,
-   (float)1.172974, (float)1.402100, (float)1.692627,
-   (float)1.087524, (float)1.474243, (float)1.665405,
-   (float)0.899536, (float)1.105225, (float)1.406250,
-   (float)1.148438, (float)1.484741, (float)1.796265,
-   (float)0.785645, (float)1.209839, (float)1.567749,
-   (float)0.867798, (float)1.166504, (float)1.450684,
-   (float)0.922485, (float)1.229858, (float)1.420898,
-   (float)0.791260, (float)1.123291, (float)1.409546,
-   (float)0.788940, (float)0.966064, (float)1.340332,
-   (float)1.051147, (float)1.272827, (float)1.556641,
-   (float)0.866821, (float)1.181152, (float)1.538818,
-   (float)0.906738, (float)1.373535, (float)1.607910,
-   (float)1.244751, (float)1.581421, (float)1.933838,
-   (float)0.913940, (float)1.337280, (float)1.539673,
-   (float)0.680542, (float)0.959229, (float)1.662720,
-   (float)0.887207, (float)1.430542, (float)1.800781,
-   (float)0.912598, (float)1.433594, (float)1.683960,
-   (float)0.860474, (float)1.060303, (float)1.455322,
-   (float)1.005127, (float)1.381104, (float)1.706909,
-   (float)0.800781, (float)1.363892, (float)1.829102,
-   (float)0.781860, (float)1.124390, (float)1.505981,
-   (float)1.003662, (float)1.471436, (float)1.684692,
-   (float)0.981323, (float)1.309570, (float)1.618042,
-   (float)1.228760, (float)1.554321, (float)1.756470,
-   (float)0.734375, (float)0.895752, (float)1.225586,
-   (float)0.841797, (float)1.055664, (float)1.249268,
-   (float)0.920166, (float)1.119385, (float)1.486206,
-   (float)0.894409, (float)1.539063, (float)1.828979,
-   (float)1.283691, (float)1.543335, (float)1.858276,
-
-
-
-
-
-   (float)0.676025, (float)0.933105, (float)1.490845,
-   (float)0.821289, (float)1.491821, (float)1.739868,
-   (float)0.923218, (float)1.144653, (float)1.580566,
-   (float)1.057251, (float)1.345581, (float)1.635864,
-   (float)0.888672, (float)1.074951, (float)1.353149,
-   (float)0.942749, (float)1.195435, (float)1.505493,
-   (float)1.492310, (float)1.788086, (float)2.039673,
-   (float)1.070313, (float)1.634399, (float)1.860962,
-   (float)1.253296, (float)1.488892, (float)1.686035,
-   (float)0.647095, (float)0.864014, (float)1.401855,
-   (float)0.866699, (float)1.254883, (float)1.453369,
-   (float)1.063965, (float)1.532593, (float)1.731323,
-   (float)1.167847, (float)1.521484, (float)1.884033,
-   (float)0.956055, (float)1.502075, (float)1.745605,
-   (float)0.928711, (float)1.288574, (float)1.479614,
-   (float)1.088013, (float)1.380737, (float)1.570801,
-   (float)0.905029, (float)1.186768, (float)1.371948,
-   (float)1.057861, (float)1.421021, (float)1.617432,
-   (float)1.108276, (float)1.312500, (float)1.501465,
-   (float)0.979492, (float)1.416992, (float)1.624268,
-   (float)1.276001, (float)1.661011, (float)2.007935,
-   (float)0.993042, (float)1.168579, (float)1.331665,
-   (float)0.778198, (float)0.944946, (float)1.235962,
-   (float)1.223755, (float)1.491333, (float)1.815674,
-   (float)0.852661, (float)1.350464, (float)1.722290,
-   (float)1.134766, (float)1.593140, (float)1.787354,
-   (float)1.051392, (float)1.339722, (float)1.531006,
-   (float)0.803589, (float)1.271240, (float)1.652100,
-   (float)0.755737, (float)1.143555, (float)1.639404,
-   (float)0.700928, (float)0.837280, (float)1.130371,
-   (float)0.942749, (float)1.197876, (float)1.669800,
-   (float)0.993286, (float)1.378296, (float)1.566528,
-   (float)0.801025, (float)1.095337, (float)1.298950,
-   (float)0.739990, (float)1.032959, (float)1.383667,
-   (float)0.845703, (float)1.072266, (float)1.543823,
-   (float)0.915649, (float)1.072266, (float)1.224487,
-   (float)1.021973, (float)1.226196, (float)1.481323,
-   (float)0.999878, (float)1.204102, (float)1.555908,
-   (float)0.722290, (float)0.913940, (float)1.340210,
-   (float)0.673340, (float)0.835938, (float)1.259521,
-   (float)0.832397, (float)1.208374, (float)1.394165,
-   (float)0.962158, (float)1.576172, (float)1.912842,
-   (float)1.166748, (float)1.370850, (float)1.556763,
-   (float)0.946289, (float)1.138550, (float)1.400391,
-   (float)1.035034, (float)1.218262, (float)1.386475,
-   (float)1.393799, (float)1.717773, (float)2.000244,
-   (float)0.972656, (float)1.260986, (float)1.760620,
-   (float)1.028198, (float)1.288452, (float)1.484619,
-
-
-
-
-
-   (float)0.773560, (float)1.258057, (float)1.756714,
-   (float)1.080322, (float)1.328003, (float)1.742676,
-   (float)0.823975, (float)1.450806, (float)1.917725,
-   (float)0.859009, (float)1.016602, (float)1.191895,
-   (float)0.843994, (float)1.131104, (float)1.645020,
-   (float)1.189697, (float)1.702759, (float)1.894409,
-   (float)1.346680, (float)1.763184, (float)2.066040,
-   (float)0.980469, (float)1.253784, (float)1.441650,
-   (float)1.338135, (float)1.641968, (float)1.932739,
-   (float)1.223267, (float)1.424194, (float)1.626465,
-   (float)0.765747, (float)1.004150, (float)1.579102,
-   (float)1.042847, (float)1.269165, (float)1.647461,
-   (float)0.968750, (float)1.257568, (float)1.555786,
-   (float)0.826294, (float)0.993408, (float)1.275146,
-   (float)0.742310, (float)0.950439, (float)1.430542,
-   (float)1.054321, (float)1.439819, (float)1.828003,
-   (float)1.072998, (float)1.261719, (float)1.441895,
-   (float)0.859375, (float)1.036377, (float)1.314819,
-   (float)0.895752, (float)1.267212, (float)1.605591,
-   (float)0.805420, (float)0.962891, (float)1.142334,
-   (float)0.795654, (float)1.005493, (float)1.468506,
-   (float)1.105347, (float)1.313843, (float)1.584839,
-   (float)0.792236, (float)1.221802, (float)1.465698,
-   (float)1.170532, (float)1.467651, (float)1.664063,
-   (float)0.838257, (float)1.153198, (float)1.342163,
-   (float)0.968018, (float)1.198242, (float)1.391235,
-   (float)1.250122, (float)1.623535, (float)1.823608,
-   (float)0.711670, (float)1.058350, (float)1.512085,
-   (float)1.204834, (float)1.454468, (float)1.739136,
-   (float)1.137451, (float)1.421753, (float)1.620117,
-   (float)0.820435, (float)1.322754, (float)1.578247,
-   (float)0.798706, (float)1.005005, (float)1.213867,
-   (float)0.980713, (float)1.324951, (float)1.512939,
-   (float)1.112305, (float)1.438843, (float)1.735596,
-   (float)1.135498, (float)1.356689, (float)1.635742,
-   (float)1.101318, (float)1.387451, (float)1.686523,
-   (float)0.849854, (float)1.276978, (float)1.523438,
-   (float)1.377930, (float)1.627563, (float)1.858154,
-   (float)0.884888, (float)1.095459, (float)1.287476,
-   (float)1.289795, (float)1.505859, (float)1.756592,
-   (float)0.817505, (float)1.384155, (float)1.650513,
-   (float)1.446655, (float)1.702148, (float)1.931885,
-   (float)0.835815, (float)1.023071, (float)1.385376,
-   (float)0.916626, (float)1.139038, (float)1.335327,
-   (float)0.980103, (float)1.174072, (float)1.453735,
-   (float)1.705688, (float)2.153809, (float)2.398315, (float)2.743408,
-   (float)1.797119, (float)2.016846, (float)2.445679, (float)2.701904,
-   (float)1.990356, (float)2.219116, (float)2.576416, (float)2.813477,
-
-
-
-
-
-   (float)1.849365, (float)2.190918, (float)2.611572, (float)2.835083,
-   (float)1.657959, (float)1.854370, (float)2.159058, (float)2.726196,
-   (float)1.437744, (float)1.897705, (float)2.253174, (float)2.655396,
-   (float)2.028687, (float)2.247314, (float)2.542358, (float)2.875854,
-   (float)1.736938, (float)1.922119, (float)2.185913, (float)2.743408,
-   (float)1.521606, (float)1.870972, (float)2.526855, (float)2.786987,
-   (float)1.841431, (float)2.050659, (float)2.463623, (float)2.857666,
-   (float)1.590088, (float)2.067261, (float)2.427979, (float)2.794434,
-   (float)1.746826, (float)2.057373, (float)2.320190, (float)2.800781,
-   (float)1.734619, (float)1.940552, (float)2.306030, (float)2.826416,
-   (float)1.786255, (float)2.204468, (float)2.457520, (float)2.795288,
-   (float)1.861084, (float)2.170532, (float)2.414551, (float)2.763672,
-   (float)2.001465, (float)2.307617, (float)2.552734, (float)2.811890,
-   (float)1.784424, (float)2.124146, (float)2.381592, (float)2.645508,
-   (float)1.888794, (float)2.135864, (float)2.418579, (float)2.861206,
-   (float)2.301147, (float)2.531250, (float)2.724976, (float)2.913086,
-   (float)1.837769, (float)2.051270, (float)2.261963, (float)2.553223,
-   (float)2.012939, (float)2.221191, (float)2.440186, (float)2.678101,
-   (float)1.429565, (float)1.858276, (float)2.582275, (float)2.845703,
-   (float)1.622803, (float)1.897705, (float)2.367310, (float)2.621094,
-   (float)1.581543, (float)1.960449, (float)2.515869, (float)2.736450,
-   (float)1.419434, (float)1.933960, (float)2.394653, (float)2.746704,
-   (float)1.721924, (float)2.059570, (float)2.421753, (float)2.769653,
-   (float)1.911011, (float)2.220703, (float)2.461060, (float)2.740723,
-   (float)1.581177, (float)1.860840, (float)2.516968, (float)2.874634,
-   (float)1.870361, (float)2.098755, (float)2.432373, (float)2.656494,
-   (float)2.059692, (float)2.279785, (float)2.495605, (float)2.729370,
-   (float)1.815674, (float)2.181519, (float)2.451538, (float)2.680542,
-   (float)1.407959, (float)1.768311, (float)2.343018, (float)2.668091,
-   (float)2.168701, (float)2.394653, (float)2.604736, (float)2.829346,
-   (float)1.636230, (float)1.865723, (float)2.329102, (float)2.824219,
-   (float)1.878906, (float)2.139526, (float)2.376709, (float)2.679810,
-   (float)1.765381, (float)1.971802, (float)2.195435, (float)2.586914,
-   (float)2.164795, (float)2.410889, (float)2.673706, (float)2.903198,
-   (float)2.071899, (float)2.331055, (float)2.645874, (float)2.907104,
-   (float)2.026001, (float)2.311523, (float)2.594849, (float)2.863892,
-   (float)1.948975, (float)2.180786, (float)2.514893, (float)2.797852,
-   (float)1.881836, (float)2.130859, (float)2.478149, (float)2.804199,
-   (float)2.238159, (float)2.452759, (float)2.652832, (float)2.868286,
-   (float)1.897949, (float)2.101685, (float)2.524292, (float)2.880127,
-   (float)1.856445, (float)2.074585, (float)2.541016, (float)2.791748,
-   (float)1.695557, (float)2.199097, (float)2.506226, (float)2.742676,
-   (float)1.612671, (float)1.877075, (float)2.435425, (float)2.732910,
-   (float)1.568848, (float)1.786499, (float)2.194580, (float)2.768555,
-   (float)1.953369, (float)2.164551, (float)2.486938, (float)2.874023,
-   (float)1.388306, (float)1.725342, (float)2.384521, (float)2.771851,
-   (float)2.115356, (float)2.337769, (float)2.592896, (float)2.864014,
-   (float)1.905762, (float)2.111328, (float)2.363525, (float)2.789307,
-
-
-
-
-
-   (float)1.882568, (float)2.332031, (float)2.598267, (float)2.827637,
-   (float)1.683594, (float)2.088745, (float)2.361938, (float)2.608643,
-   (float)1.874023, (float)2.182129, (float)2.536133, (float)2.766968,
-   (float)1.861938, (float)2.070435, (float)2.309692, (float)2.700562,
-   (float)1.722168, (float)2.107422, (float)2.477295, (float)2.837646,
-   (float)1.926880, (float)2.184692, (float)2.442627, (float)2.663818,
-   (float)2.123901, (float)2.337280, (float)2.553101, (float)2.777466,
-   (float)1.588135, (float)1.911499, (float)2.212769, (float)2.543945,
-   (float)2.053955, (float)2.370850, (float)2.712158, (float)2.939941,
-   (float)2.210449, (float)2.519653, (float)2.770386, (float)2.958618,
-   (float)2.199463, (float)2.474731, (float)2.718262, (float)2.919922,
-   (float)1.960083, (float)2.175415, (float)2.608032, (float)2.888794,
-   (float)1.953735, (float)2.185181, (float)2.428223, (float)2.809570,
-   (float)1.615234, (float)2.036499, (float)2.576538, (float)2.834595,
-   (float)1.621094, (float)2.028198, (float)2.431030, (float)2.664673,
-   (float)1.824951, (float)2.267456, (float)2.514526, (float)2.747925,
-   (float)1.994263, (float)2.229126, (float)2.475220, (float)2.833984,
-   (float)1.746338, (float)2.011353, (float)2.588257, (float)2.826904,
-   (float)1.562866, (float)2.135986, (float)2.471680, (float)2.687256,
-   (float)1.748901, (float)2.083496, (float)2.460938, (float)2.686279,
-   (float)1.758057, (float)2.131470, (float)2.636597, (float)2.891602,
-   (float)2.071289, (float)2.299072, (float)2.550781, (float)2.814331,
-   (float)1.839600, (float)2.094360, (float)2.496460, (float)2.723999,
-   (float)1.882202, (float)2.088257, (float)2.636841, (float)2.923096,
-   (float)1.957886, (float)2.153198, (float)2.384399, (float)2.615234,
-   (float)1.992920, (float)2.351196, (float)2.654419, (float)2.889771,
-   (float)2.012817, (float)2.262451, (float)2.643799, (float)2.903076,
-   (float)2.025635, (float)2.254761, (float)2.508423, (float)2.784058,
-   (float)2.316040, (float)2.589355, (float)2.794189, (float)2.963623,
-   (float)1.741211, (float)2.279541, (float)2.578491, (float)2.816284,
-   (float)1.845337, (float)2.055786, (float)2.348511, (float)2.822021,
-   (float)1.679932, (float)1.926514, (float)2.499756, (float)2.835693,
-   (float)1.722534, (float)1.946899, (float)2.448486, (float)2.728760,
-   (float)1.829834, (float)2.043213, (float)2.580444, (float)2.867676,
-   (float)1.676636, (float)2.071655, (float)2.322510, (float)2.704834,
-   (float)1.791504, (float)2.113525, (float)2.469727, (float)2.784058,
-   (float)1.977051, (float)2.215088, (float)2.497437, (float)2.726929,
-   (float)1.800171, (float)2.106689, (float)2.357788, (float)2.738892,
-   (float)1.827759, (float)2.170166, (float)2.525879, (float)2.852417,
-   (float)1.918335, (float)2.132813, (float)2.488403, (float)2.728149,
-   (float)1.916748, (float)2.225098, (float)2.542603, (float)2.857666,
-   (float)1.761230, (float)1.976074, (float)2.507446, (float)2.884521,
-   (float)2.053711, (float)2.367432, (float)2.608032, (float)2.837646,
-   (float)1.595337, (float)2.000977, (float)2.307129, (float)2.578247,
-   (float)1.470581, (float)2.031250, (float)2.375854, (float)2.647583,
-   (float)1.801392, (float)2.128052, (float)2.399780, (float)2.822876,
-   (float)1.853638, (float)2.066650, (float)2.429199, (float)2.751465,
-   (float)1.956299, (float)2.163696, (float)2.394775, (float)2.734253,
-
-
-
-
-
-   (float)1.963623, (float)2.275757, (float)2.585327, (float)2.865234,
-   (float)1.887451, (float)2.105469, (float)2.331787, (float)2.587402,
-   (float)2.120117, (float)2.443359, (float)2.733887, (float)2.941406,
-   (float)1.506348, (float)1.766968, (float)2.400513, (float)2.851807,
-   (float)1.664551, (float)1.981079, (float)2.375732, (float)2.774414,
-   (float)1.720703, (float)1.978882, (float)2.391479, (float)2.640991,
-   (float)1.483398, (float)1.814819, (float)2.434448, (float)2.722290,
-   (float)1.769043, (float)2.136597, (float)2.563721, (float)2.774414,
-   (float)1.810791, (float)2.049316, (float)2.373901, (float)2.613647,
-   (float)1.788330, (float)2.005981, (float)2.359131, (float)2.723145,
-   (float)1.785156, (float)1.993164, (float)2.399780, (float)2.832520,
-   (float)1.695313, (float)2.022949, (float)2.522583, (float)2.745117,
-   (float)1.584106, (float)1.965576, (float)2.299927, (float)2.715576,
-   (float)1.894897, (float)2.249878, (float)2.655884, (float)2.897705,
-   (float)1.720581, (float)1.995728, (float)2.299438, (float)2.557007,
-   (float)1.619385, (float)2.173950, (float)2.574219, (float)2.787964,
-   (float)1.883179, (float)2.220459, (float)2.474365, (float)2.825073,
-   (float)1.447632, (float)2.045044, (float)2.555542, (float)2.744873,
-   (float)1.502686, (float)2.156616, (float)2.653320, (float)2.846558,
-   (float)1.711548, (float)1.944092, (float)2.282959, (float)2.685791,
-   (float)1.499756, (float)1.867554, (float)2.341064, (float)2.578857,
-   (float)1.916870, (float)2.135132, (float)2.568237, (float)2.826050,
-   (float)1.498047, (float)1.711182, (float)2.223267, (float)2.755127,
-   (float)1.808716, (float)1.997559, (float)2.256470, (float)2.758545,
-   (float)2.088501, (float)2.402710, (float)2.667358, (float)2.890259,
-   (float)1.545044, (float)1.819214, (float)2.324097, (float)2.692993,
-   (float)1.796021, (float)2.012573, (float)2.505737, (float)2.784912,
-   (float)1.786499, (float)2.041748, (float)2.290405, (float)2.650757,
-   (float)1.938232, (float)2.264404, (float)2.529053, (float)2.796143
-   };
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/constants.h b/sflphone-common/libs/pjproject/third_party/ilbc/constants.h
deleted file mode 100644
index 3487d529db..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/constants.h
+++ /dev/null
@@ -1,80 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       constants.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_CONSTANTS_H
-   #define __iLBC_CONSTANTS_H
-
-   #include "iLBC_define.h"
-
-
-   /* ULP bit allocation */
-
-
-
-
-
-
-   extern const iLBC_ULP_Inst_t ULP_20msTbl;
-   extern const iLBC_ULP_Inst_t ULP_30msTbl;
-
-   /* high pass filters */
-
-   extern float hpi_zero_coefsTbl[];
-   extern float hpi_pole_coefsTbl[];
-   extern float hpo_zero_coefsTbl[];
-   extern float hpo_pole_coefsTbl[];
-
-   /* low pass filters */
-   extern float lpFilt_coefsTbl[];
-
-   /* LPC analysis and quantization */
-
-   extern float lpc_winTbl[];
-   extern float lpc_asymwinTbl[];
-   extern float lpc_lagwinTbl[];
-   extern float lsfCbTbl[];
-   extern float lsfmeanTbl[];
-   extern int   dim_lsfCbTbl[];
-   extern int   size_lsfCbTbl[];
-   extern float lsf_weightTbl_30ms[];
-   extern float lsf_weightTbl_20ms[];
-
-   /* state quantization tables */
-
-   extern float state_sq3Tbl[];
-   extern float state_frgqTbl[];
-
-   /* gain quantization tables */
-
-   extern float gain_sq3Tbl[];
-   extern float gain_sq4Tbl[];
-   extern float gain_sq5Tbl[];
-
-   /* adaptive codebook definitions */
-
-   extern int search_rangeTbl[5][CB_NSTAGES];
-   extern int memLfTbl[];
-   extern int stMemLTbl;
-   extern float cbfiltersTbl[CB_FILTERLEN];
-
-   /* enhancer definitions */
-
-   extern float polyphaserTbl[];
-   extern float enh_plocsTbl[];
-
-
-
-
-
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/createCB.c b/sflphone-common/libs/pjproject/third_party/ilbc/createCB.c
deleted file mode 100644
index aefacf200a..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/createCB.c
+++ /dev/null
@@ -1,231 +0,0 @@
-
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       createCB.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-
-
-
-
-   #include "iLBC_define.h"
-   #include "constants.h"
-   #include <string.h>
-   #include <math.h>
-
-   /*----------------------------------------------------------------*
-    *  Construct an additional codebook vector by filtering the
-    *  initial codebook buffer. This vector is then used to expand
-    *  the codebook with an additional section.
-    *---------------------------------------------------------------*/
-
-   void filteredCBvecs(
-       float *cbvectors,   /* (o) Codebook vectors for the
-                                  higher section */
-       float *mem,         /* (i) Buffer to create codebook
-                                  vector from */
-       int lMem        /* (i) Length of buffer */
-   ){
-       int j, k;
-       float *pp, *pp1;
-       float tempbuff2[CB_MEML+CB_FILTERLEN];
-       float *pos;
-
-       memset(tempbuff2, 0, (CB_HALFFILTERLEN-1)*sizeof(float));
-       memcpy(&tempbuff2[CB_HALFFILTERLEN-1], mem, lMem*sizeof(float));
-       memset(&tempbuff2[lMem+CB_HALFFILTERLEN-1], 0,
-           (CB_HALFFILTERLEN+1)*sizeof(float));
-
-       /* Create codebook vector for higher section by filtering */
-
-       /* do filtering */
-       pos=cbvectors;
-       memset(pos, 0, lMem*sizeof(float));
-       for (k=0; k<lMem; k++) {
-           pp=&tempbuff2[k];
-           pp1=&cbfiltersTbl[CB_FILTERLEN-1];
-           for (j=0;j<CB_FILTERLEN;j++) {
-               (*pos)+=(*pp++)*(*pp1--);
-           }
-           pos++;
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  Search the augmented part of the codebook to find the best
-    *  measure.
-    *----------------------------------------------------------------*/
-
-
-
-
-
-
-   void searchAugmentedCB(
-       int low,        /* (i) Start index for the search */
-       int high,           /* (i) End index for the search */
-       int stage,          /* (i) Current stage */
-       int startIndex,     /* (i) Codebook index for the first
-                                  aug vector */
-       float *target,      /* (i) Target vector for encoding */
-       float *buffer,      /* (i) Pointer to the end of the buffer for
-                                  augmented codebook construction */
-       float *max_measure, /* (i/o) Currently maximum measure */
-       int *best_index,/* (o) Currently the best index */
-       float *gain,    /* (o) Currently the best gain */
-       float *energy,      /* (o) Energy of augmented codebook
-                                  vectors */
-       float *invenergy/* (o) Inv energy of augmented codebook
-                                  vectors */
-   ) {
-       int icount, ilow, j, tmpIndex;
-       float *pp, *ppo, *ppi, *ppe, crossDot, alfa;
-       float weighted, measure, nrjRecursive;
-       float ftmp;
-
-       /* Compute the energy for the first (low-5)
-          noninterpolated samples */
-       nrjRecursive = (float) 0.0;
-       pp = buffer - low + 1;
-       for (j=0; j<(low-5); j++) {
-           nrjRecursive += ( (*pp)*(*pp) );
-           pp++;
-       }
-       ppe = buffer - low;
-
-
-       for (icount=low; icount<=high; icount++) {
-
-           /* Index of the codebook vector used for retrieving
-              energy values */
-           tmpIndex = startIndex+icount-20;
-
-           ilow = icount-4;
-
-           /* Update the energy recursively to save complexity */
-           nrjRecursive = nrjRecursive + (*ppe)*(*ppe);
-           ppe--;
-           energy[tmpIndex] = nrjRecursive;
-
-           /* Compute cross dot product for the first (low-5)
-              samples */
-
-
-
-
-
-           crossDot = (float) 0.0;
-           pp = buffer-icount;
-           for (j=0; j<ilow; j++) {
-               crossDot += target[j]*(*pp++);
-           }
-
-           /* interpolation */
-           alfa = (float) 0.2;
-           ppo = buffer-4;
-           ppi = buffer-icount-4;
-           for (j=ilow; j<icount; j++) {
-               weighted = ((float)1.0-alfa)*(*ppo)+alfa*(*ppi);
-               ppo++;
-               ppi++;
-               energy[tmpIndex] += weighted*weighted;
-               crossDot += target[j]*weighted;
-               alfa += (float)0.2;
-           }
-
-           /* Compute energy and cross dot product for the
-              remaining samples */
-           pp = buffer - icount;
-           for (j=icount; j<SUBL; j++) {
-               energy[tmpIndex] += (*pp)*(*pp);
-               crossDot += target[j]*(*pp++);
-           }
-
-           if (energy[tmpIndex]>0.0) {
-               invenergy[tmpIndex]=(float)1.0/(energy[tmpIndex]+EPS);
-           } else {
-               invenergy[tmpIndex] = (float) 0.0;
-           }
-
-           if (stage==0) {
-               measure = (float)-10000000.0;
-
-               if (crossDot > 0.0) {
-                   measure = crossDot*crossDot*invenergy[tmpIndex];
-               }
-           }
-           else {
-               measure = crossDot*crossDot*invenergy[tmpIndex];
-           }
-
-           /* check if measure is better */
-           ftmp = crossDot*invenergy[tmpIndex];
-
-           if ((measure>*max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
-
-
-
-
-
-               *best_index = tmpIndex;
-               *max_measure = measure;
-               *gain = ftmp;
-           }
-       }
-   }
-
-
-   /*----------------------------------------------------------------*
-    *  Recreate a specific codebook vector from the augmented part.
-    *
-    *----------------------------------------------------------------*/
-
-   void createAugmentedVec(
-       int index,      /* (i) Index for the augmented vector
-                              to be created */
-       float *buffer,  /* (i) Pointer to the end of the buffer for
-                              augmented codebook construction */
-       float *cbVec/* (o) The construced codebook vector */
-   ) {
-       int ilow, j;
-       float *pp, *ppo, *ppi, alfa, alfa1, weighted;
-
-       ilow = index-5;
-
-       /* copy the first noninterpolated part */
-
-       pp = buffer-index;
-       memcpy(cbVec,pp,sizeof(float)*index);
-
-       /* interpolation */
-
-       alfa1 = (float)0.2;
-       alfa = 0.0;
-       ppo = buffer-5;
-       ppi = buffer-index-5;
-       for (j=ilow; j<index; j++) {
-           weighted = ((float)1.0-alfa)*(*ppo)+alfa*(*ppi);
-           ppo++;
-           ppi++;
-           cbVec[j] = weighted;
-           alfa += alfa1;
-       }
-
-       /* copy the second noninterpolated part */
-
-       pp = buffer - index;
-       memcpy(cbVec+index,pp,sizeof(float)*(SUBL-index));
-
-
-
-
-
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/createCB.h b/sflphone-common/libs/pjproject/third_party/ilbc/createCB.h
deleted file mode 100644
index eda547c669..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/createCB.h
+++ /dev/null
@@ -1,58 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       createCB.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_CREATECB_H
-   #define __iLBC_CREATECB_H
-
-   void filteredCBvecs(
-       float *cbvectors,   /* (o) Codebook vector for the
-                                  higher section */
-
-
-
-
-
-       float *mem,         /* (i) Buffer to create codebook
-                                  vectors from */
-       int lMem        /* (i) Length of buffer */
-   );
-
-   void searchAugmentedCB(
-       int low,        /* (i) Start index for the search */
-       int high,           /* (i) End index for the search */
-       int stage,          /* (i) Current stage */
-       int startIndex,     /* (i) CB index for the first
-                                  augmented vector */
-       float *target,      /* (i) Target vector for encoding */
-       float *buffer,      /* (i) Pointer to the end of the
-                                  buffer for augmented codebook
-                                  construction */
-       float *max_measure, /* (i/o) Currently maximum measure */
-       int *best_index,/* (o) Currently the best index */
-       float *gain,    /* (o) Currently the best gain */
-       float *energy,      /* (o) Energy of augmented
-                                  codebook vectors */
-       float *invenergy/* (o) Inv energy of aug codebook
-                                  vectors */
-   );
-
-   void createAugmentedVec(
-       int index,          /* (i) Index for the aug vector
-                                  to be created */
-       float *buffer,      /* (i) Pointer to the end of the
-                                  buffer for augmented codebook
-                                  construction */
-       float *cbVec    /* (o) The construced codebook vector */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c b/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c
deleted file mode 100644
index 9fa4584fe8..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.c
+++ /dev/null
@@ -1,270 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       doCPLC.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <string.h>
-   #include <stdio.h>
-
-
-
-
-
-   #include "iLBC_define.h"
-
-   /*----------------------------------------------------------------*
-    *  Compute cross correlation and pitch gain for pitch prediction
-    *  of last subframe at given lag.
-    *---------------------------------------------------------------*/
-
-   void compCorr(
-       float *cc,      /* (o) cross correlation coefficient */
-       float *gc,      /* (o) gain */
-       float *pm,
-       float *buffer,  /* (i) signal buffer */
-       int lag,    /* (i) pitch lag */
-       int bLen,       /* (i) length of buffer */
-       int sRange      /* (i) correlation search length */
-   ){
-       int i;
-       float ftmp1, ftmp2, ftmp3;
-
-       /* Guard against getting outside buffer */
-       if ((bLen-sRange-lag)<0) {
-           sRange=bLen-lag;
-       }
-
-       ftmp1 = 0.0;
-       ftmp2 = 0.0;
-       ftmp3 = 0.0;
-       for (i=0; i<sRange; i++) {
-           ftmp1 += buffer[bLen-sRange+i] *
-               buffer[bLen-sRange+i-lag];
-           ftmp2 += buffer[bLen-sRange+i-lag] *
-                   buffer[bLen-sRange+i-lag];
-           ftmp3 += buffer[bLen-sRange+i] *
-                   buffer[bLen-sRange+i];
-       }
-
-       if (ftmp2 > 0.0) {
-           *cc = ftmp1*ftmp1/ftmp2;
-           *gc = (float)fabs(ftmp1/ftmp2);
-           *pm=(float)fabs(ftmp1)/
-               ((float)sqrt(ftmp2)*(float)sqrt(ftmp3));
-       }
-       else {
-           *cc = 0.0;
-           *gc = 0.0;
-           *pm=0.0;
-       }
-   }
-
-
-
-
-
-   /*----------------------------------------------------------------*
-    *  Packet loss concealment routine. Conceals a residual signal
-    *  and LP parameters. If no packet loss, update state.
-    *---------------------------------------------------------------*/
-
-   void doThePLC(
-       float *PLCresidual, /* (o) concealed residual */
-       float *PLClpc,      /* (o) concealed LP parameters */
-       int PLI,        /* (i) packet loss indicator
-                                  0 - no PL, 1 = PL */
-       float *decresidual, /* (i) decoded residual */
-       float *lpc,         /* (i) decoded LPC (only used for no PL) */
-       int inlag,          /* (i) pitch lag */
-       iLBC_Dec_Inst_t *iLBCdec_inst
-                           /* (i/o) decoder instance */
-   ){
-       int lag=20, randlag;
-       float gain, maxcc;
-       float use_gain;
-       float gain_comp, maxcc_comp, per, max_per=0;
-       int i, pick, use_lag;
-       float ftmp, randvec[BLOCKL_MAX], pitchfact, energy;
-
-       /* Packet Loss */
-
-       if (PLI == 1) {
-
-           iLBCdec_inst->consPLICount += 1;
-
-           /* if previous frame not lost,
-              determine pitch pred. gain */
-
-           if (iLBCdec_inst->prevPLI != 1) {
-
-               /* Search around the previous lag to find the
-                  best pitch period */
-
-               lag=inlag-3;
-               compCorr(&maxcc, &gain, &max_per,
-                   iLBCdec_inst->prevResidual,
-                   lag, iLBCdec_inst->blockl, 60);
-               for (i=inlag-2;i<=inlag+3;i++) {
-                   compCorr(&maxcc_comp, &gain_comp, &per,
-                       iLBCdec_inst->prevResidual,
-                       i, iLBCdec_inst->blockl, 60);
-
-                   if (maxcc_comp>maxcc) {
-                       maxcc=maxcc_comp;
-
-
-
-
-
-                       gain=gain_comp;
-                       lag=i;
-                       max_per=per;
-                   }
-               }
-
-           }
-
-           /* previous frame lost, use recorded lag and periodicity */
-
-           else {
-               lag=iLBCdec_inst->prevLag;
-               max_per=iLBCdec_inst->per;
-           }
-
-           /* downscaling */
-
-           use_gain=1.0;
-           if (iLBCdec_inst->consPLICount*iLBCdec_inst->blockl>320)
-               use_gain=(float)0.9;
-           else if (iLBCdec_inst->consPLICount*
-                           iLBCdec_inst->blockl>2*320)
-               use_gain=(float)0.7;
-           else if (iLBCdec_inst->consPLICount*
-                           iLBCdec_inst->blockl>3*320)
-               use_gain=(float)0.5;
-           else if (iLBCdec_inst->consPLICount*
-                           iLBCdec_inst->blockl>4*320)
-               use_gain=(float)0.0;
-
-           /* mix noise and pitch repeatition */
-           ftmp=(float)sqrt(max_per);
-           if (ftmp>(float)0.7)
-               pitchfact=(float)1.0;
-           else if (ftmp>(float)0.4)
-               pitchfact=(ftmp-(float)0.4)/((float)0.7-(float)0.4);
-           else
-               pitchfact=0.0;
-
-
-           /* avoid repetition of same pitch cycle */
-           use_lag=lag;
-           if (lag<80) {
-               use_lag=2*lag;
-           }
-
-           /* compute concealed residual */
-
-
-
-
-
-
-           energy = 0.0;
-           for (i=0; i<iLBCdec_inst->blockl; i++) {
-
-               /* noise component */
-
-               iLBCdec_inst->seed=(iLBCdec_inst->seed*69069L+1) &
-                   (0x80000000L-1);
-               randlag = 50 + ((signed long) iLBCdec_inst->seed)%70;
-               pick = i - randlag;
-
-               if (pick < 0) {
-                   randvec[i] =
-                       iLBCdec_inst->prevResidual[
-                                   iLBCdec_inst->blockl+pick];
-               } else {
-                   randvec[i] =  randvec[pick];
-               }
-
-               /* pitch repeatition component */
-               pick = i - use_lag;
-
-               if (pick < 0) {
-                   PLCresidual[i] =
-                       iLBCdec_inst->prevResidual[
-                                   iLBCdec_inst->blockl+pick];
-               } else {
-                   PLCresidual[i] = PLCresidual[pick];
-               }
-
-               /* mix random and periodicity component */
-
-               if (i<80)
-                   PLCresidual[i] = use_gain*(pitchfact *
-                               PLCresidual[i] +
-                               ((float)1.0 - pitchfact) * randvec[i]);
-               else if (i<160)
-                   PLCresidual[i] = (float)0.95*use_gain*(pitchfact *
-                               PLCresidual[i] +
-                               ((float)1.0 - pitchfact) * randvec[i]);
-               else
-                   PLCresidual[i] = (float)0.9*use_gain*(pitchfact *
-                               PLCresidual[i] +
-                               ((float)1.0 - pitchfact) * randvec[i]);
-
-               energy += PLCresidual[i] * PLCresidual[i];
-           }
-
-           /* less than 30 dB, use only noise */
-
-
-
-
-
-
-           if (sqrt(energy/(float)iLBCdec_inst->blockl) < 30.0) {
-               gain=0.0;
-               for (i=0; i<iLBCdec_inst->blockl; i++) {
-                   PLCresidual[i] = randvec[i];
-               }
-           }
-
-           /* use old LPC */
-
-           memcpy(PLClpc,iLBCdec_inst->prevLpc,
-               (LPC_FILTERORDER+1)*sizeof(float));
-
-       }
-
-       /* no packet loss, copy input */
-
-       else {
-           memcpy(PLCresidual, decresidual,
-               iLBCdec_inst->blockl*sizeof(float));
-           memcpy(PLClpc, lpc, (LPC_FILTERORDER+1)*sizeof(float));
-           iLBCdec_inst->consPLICount = 0;
-       }
-
-       /* update state */
-
-       if (PLI) {
-           iLBCdec_inst->prevLag = lag;
-           iLBCdec_inst->per=max_per;
-       }
-
-       iLBCdec_inst->prevPLI = PLI;
-       memcpy(iLBCdec_inst->prevLpc, PLClpc,
-           (LPC_FILTERORDER+1)*sizeof(float));
-       memcpy(iLBCdec_inst->prevResidual, PLCresidual,
-           iLBCdec_inst->blockl*sizeof(float));
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h b/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h
deleted file mode 100644
index 2bda7a1441..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/doCPLC.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       doCPLC.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_DOLPC_H
-   #define __iLBC_DOLPC_H
-
-   void doThePLC(
-       float *PLCresidual, /* (o) concealed residual */
-       float *PLClpc,      /* (o) concealed LP parameters */
-       int PLI,        /* (i) packet loss indicator
-                                  0 - no PL, 1 = PL */
-       float *decresidual, /* (i) decoded residual */
-       float *lpc,         /* (i) decoded LPC (only used for no PL) */
-       int inlag,          /* (i) pitch lag */
-       iLBC_Dec_Inst_t *iLBCdec_inst
-                           /* (i/o) decoder instance */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c b/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c
deleted file mode 100644
index dee13b03d5..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.c
+++ /dev/null
@@ -1,701 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       enhancer.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <string.h>
-   #include "iLBC_define.h"
-   #include "constants.h"
-   #include "filter.h"
-
-   /*----------------------------------------------------------------*
-    * Find index in array such that the array element with said
-    * index is the element of said array closest to "value"
-    * according to the squared-error criterion
-    *---------------------------------------------------------------*/
-
-   void NearestNeighbor(
-
-
-
-
-
-       int   *index,   /* (o) index of array element closest
-                              to value */
-       float *array,   /* (i) data array */
-       float value,/* (i) value */
-       int arlength/* (i) dimension of data array */
-   ){
-       int i;
-       float bestcrit,crit;
-
-       crit=array[0]-value;
-       bestcrit=crit*crit;
-       *index=0;
-       for (i=1; i<arlength; i++) {
-           crit=array[i]-value;
-           crit=crit*crit;
-
-           if (crit<bestcrit) {
-               bestcrit=crit;
-               *index=i;
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    * compute cross correlation between sequences
-    *---------------------------------------------------------------*/
-
-   void mycorr1(
-       float* corr,    /* (o) correlation of seq1 and seq2 */
-       float* seq1,    /* (i) first sequence */
-       int dim1,           /* (i) dimension first seq1 */
-       const float *seq2,  /* (i) second sequence */
-       int dim2        /* (i) dimension seq2 */
-   ){
-       int i,j;
-
-       for (i=0; i<=dim1-dim2; i++) {
-           corr[i]=0.0;
-           for (j=0; j<dim2; j++) {
-               corr[i] += seq1[i+j] * seq2[j];
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    * upsample finite array assuming zeros outside bounds
-    *---------------------------------------------------------------*/
-
-
-
-
-
-
-   void enh_upsample(
-       float* useq1,   /* (o) upsampled output sequence */
-       float* seq1,/* (i) unupsampled sequence */
-       int dim1,       /* (i) dimension seq1 */
-       int hfl         /* (i) polyphase filter length=2*hfl+1 */
-   ){
-       float *pu,*ps;
-       int i,j,k,q,filterlength,hfl2;
-       const float *polyp[ENH_UPS0]; /* pointers to
-                                        polyphase columns */
-       const float *pp;
-
-       /* define pointers for filter */
-
-       filterlength=2*hfl+1;
-
-       if ( filterlength > dim1 ) {
-           hfl2=(int) (dim1/2);
-           for (j=0; j<ENH_UPS0; j++) {
-               polyp[j]=polyphaserTbl+j*filterlength+hfl-hfl2;
-           }
-           hfl=hfl2;
-           filterlength=2*hfl+1;
-       }
-       else {
-           for (j=0; j<ENH_UPS0; j++) {
-               polyp[j]=polyphaserTbl+j*filterlength;
-           }
-       }
-
-       /* filtering: filter overhangs left side of sequence */
-
-       pu=useq1;
-       for (i=hfl; i<filterlength; i++) {
-           for (j=0; j<ENH_UPS0; j++) {
-               *pu=0.0;
-               pp = polyp[j];
-               ps = seq1+i;
-               for (k=0; k<=i; k++) {
-                   *pu += *ps-- * *pp++;
-               }
-               pu++;
-           }
-       }
-
-       /* filtering: simple convolution=inner products */
-
-       for (i=filterlength; i<dim1; i++) {
-
-
-
-
-
-           for (j=0;j<ENH_UPS0; j++){
-               *pu=0.0;
-               pp = polyp[j];
-               ps = seq1+i;
-               for (k=0; k<filterlength; k++) {
-                   *pu += *ps-- * *pp++;
-               }
-               pu++;
-           }
-       }
-
-       /* filtering: filter overhangs right side of sequence */
-
-       for (q=1; q<=hfl; q++) {
-           for (j=0; j<ENH_UPS0; j++) {
-               *pu=0.0;
-               pp = polyp[j]+q;
-               ps = seq1+dim1-1;
-               for (k=0; k<filterlength-q; k++) {
-                   *pu += *ps-- * *pp++;
-               }
-               pu++;
-           }
-       }
-   }
-
-
-   /*----------------------------------------------------------------*
-    * find segment starting near idata+estSegPos that has highest
-    * correlation with idata+centerStartPos through
-    * idata+centerStartPos+ENH_BLOCKL-1 segment is found at a
-    * resolution of ENH_UPSO times the original of the original
-    * sampling rate
-    *---------------------------------------------------------------*/
-
-   void refiner(
-       float *seg,         /* (o) segment array */
-       float *updStartPos, /* (o) updated start point */
-       float* idata,       /* (i) original data buffer */
-       int idatal,         /* (i) dimension of idata */
-       int centerStartPos, /* (i) beginning center segment */
-       float estSegPos,/* (i) estimated beginning other segment */
-       float period    /* (i) estimated pitch period */
-   ){
-       int estSegPosRounded,searchSegStartPos,searchSegEndPos,corrdim;
-       int tloc,tloc2,i,st,en,fraction;
-       float vect[ENH_VECTL],corrVec[ENH_CORRDIM],maxv;
-       float corrVecUps[ENH_CORRDIM*ENH_UPS0];
-
-       (void)period;
-
-
-
-       /* defining array bounds */
-
-       estSegPosRounded=(int)(estSegPos - 0.5);
-
-       searchSegStartPos=estSegPosRounded-ENH_SLOP;
-
-       if (searchSegStartPos<0) {
-           searchSegStartPos=0;
-       }
-       searchSegEndPos=estSegPosRounded+ENH_SLOP;
-
-       if (searchSegEndPos+ENH_BLOCKL >= idatal) {
-           searchSegEndPos=idatal-ENH_BLOCKL-1;
-       }
-       corrdim=searchSegEndPos-searchSegStartPos+1;
-
-       /* compute upsampled correlation (corr33) and find
-          location of max */
-
-       mycorr1(corrVec,idata+searchSegStartPos,
-           corrdim+ENH_BLOCKL-1,idata+centerStartPos,ENH_BLOCKL);
-       enh_upsample(corrVecUps,corrVec,corrdim,ENH_FL0);
-       tloc=0; maxv=corrVecUps[0];
-       for (i=1; i<ENH_UPS0*corrdim; i++) {
-
-           if (corrVecUps[i]>maxv) {
-               tloc=i;
-               maxv=corrVecUps[i];
-           }
-       }
-
-       /* make vector can be upsampled without ever running outside
-          bounds */
-
-       *updStartPos= (float)searchSegStartPos +
-           (float)tloc/(float)ENH_UPS0+(float)1.0;
-       tloc2=(int)(tloc/ENH_UPS0);
-
-       if (tloc>tloc2*ENH_UPS0) {
-           tloc2++;
-       }
-       st=searchSegStartPos+tloc2-ENH_FL0;
-
-       if (st<0) {
-           memset(vect,0,-st*sizeof(float));
-           memcpy(&vect[-st],idata, (ENH_VECTL+st)*sizeof(float));
-       }
-       else {
-
-
-
-
-
-           en=st+ENH_VECTL;
-
-           if (en>idatal) {
-               memcpy(vect, &idata[st],
-                   (ENH_VECTL-(en-idatal))*sizeof(float));
-               memset(&vect[ENH_VECTL-(en-idatal)], 0,
-                   (en-idatal)*sizeof(float));
-           }
-           else {
-               memcpy(vect, &idata[st], ENH_VECTL*sizeof(float));
-           }
-       }
-       fraction=tloc2*ENH_UPS0-tloc;
-
-       /* compute the segment (this is actually a convolution) */
-
-       mycorr1(seg,vect,ENH_VECTL,polyphaserTbl+(2*ENH_FL0+1)*fraction,
-           2*ENH_FL0+1);
-   }
-
-   /*----------------------------------------------------------------*
-    * find the smoothed output data
-    *---------------------------------------------------------------*/
-
-   void smath(
-       float *odata,   /* (o) smoothed output */
-       float *sseq,/* (i) said second sequence of waveforms */
-       int hl,         /* (i) 2*hl+1 is sseq dimension */
-       float alpha0/* (i) max smoothing energy fraction */
-   ){
-       int i,k;
-       float w00,w10,w11,A,B,C,*psseq,err,errs;
-       float surround[BLOCKL_MAX]; /* shape contributed by other than
-                                      current */
-       float wt[2*ENH_HL+1];       /* waveform weighting to get
-                                      surround shape */
-       float denom;
-
-       /* create shape of contribution from all waveforms except the
-          current one */
-
-       for (i=1; i<=2*hl+1; i++) {
-           wt[i-1] = (float)0.5*(1 - (float)cos(2*PI*i/(2*hl+2)));
-       }
-       wt[hl]=0.0; /* for clarity, not used */
-       for (i=0; i<ENH_BLOCKL; i++) {
-           surround[i]=sseq[i]*wt[0];
-       }
-
-
-
-
-
-       for (k=1; k<hl; k++) {
-           psseq=sseq+k*ENH_BLOCKL;
-           for(i=0;i<ENH_BLOCKL; i++) {
-               surround[i]+=psseq[i]*wt[k];
-           }
-       }
-       for (k=hl+1; k<=2*hl; k++) {
-           psseq=sseq+k*ENH_BLOCKL;
-           for(i=0;i<ENH_BLOCKL; i++) {
-               surround[i]+=psseq[i]*wt[k];
-           }
-       }
-
-       /* compute some inner products */
-
-       w00 = w10 = w11 = 0.0;
-       psseq=sseq+hl*ENH_BLOCKL; /* current block  */
-       for (i=0; i<ENH_BLOCKL;i++) {
-           w00+=psseq[i]*psseq[i];
-           w11+=surround[i]*surround[i];
-           w10+=surround[i]*psseq[i];
-       }
-
-       if (fabs(w11) < 1.0) {
-           w11=1.0;
-       }
-       C = (float)sqrt( w00/w11);
-
-       /* first try enhancement without power-constraint */
-
-       errs=0.0;
-       psseq=sseq+hl*ENH_BLOCKL;
-       for (i=0; i<ENH_BLOCKL; i++) {
-           odata[i]=C*surround[i];
-           err=psseq[i]-odata[i];
-           errs+=err*err;
-       }
-
-       /* if constraint violated by first try, add constraint */
-
-       if (errs > alpha0 * w00) {
-           if ( w00 < 1) {
-               w00=1;
-           }
-           denom = (w11*w00-w10*w10)/(w00*w00);
-
-           if (denom > 0.0001) { /* eliminates numerical problems
-                                    for if smooth */
-
-
-
-
-
-               A = (float)sqrt( (alpha0- alpha0*alpha0/4)/denom);
-               B = -alpha0/2 - A * w10/w00;
-               B = B+1;
-           }
-           else { /* essentially no difference between cycles;
-                     smoothing not needed */
-               A= 0.0;
-               B= 1.0;
-           }
-
-           /* create smoothed sequence */
-
-           psseq=sseq+hl*ENH_BLOCKL;
-           for (i=0; i<ENH_BLOCKL; i++) {
-               odata[i]=A*surround[i]+B*psseq[i];
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    * get the pitch-synchronous sample sequence
-    *---------------------------------------------------------------*/
-
-   void getsseq(
-       float *sseq,    /* (o) the pitch-synchronous sequence */
-       float *idata,       /* (i) original data */
-       int idatal,         /* (i) dimension of data */
-       int centerStartPos, /* (i) where current block starts */
-       float *period,      /* (i) rough-pitch-period array */
-       float *plocs,       /* (i) where periods of period array
-                                  are taken */
-       int periodl,    /* (i) dimension period array */
-       int hl              /* (i) 2*hl+1 is the number of sequences */
-   ){
-       int i,centerEndPos,q;
-       float blockStartPos[2*ENH_HL+1];
-       int lagBlock[2*ENH_HL+1];
-       float plocs2[ENH_PLOCSL];
-       float *psseq;
-
-       centerEndPos=centerStartPos+ENH_BLOCKL-1;
-
-       /* present */
-
-       NearestNeighbor(lagBlock+hl,plocs,
-           (float)0.5*(centerStartPos+centerEndPos),periodl);
-
-       blockStartPos[hl]=(float)centerStartPos;
-
-
-
-
-
-       psseq=sseq+ENH_BLOCKL*hl;
-       memcpy(psseq, idata+centerStartPos, ENH_BLOCKL*sizeof(float));
-
-       /* past */
-
-       for (q=hl-1; q>=0; q--) {
-           blockStartPos[q]=blockStartPos[q+1]-period[lagBlock[q+1]];
-           NearestNeighbor(lagBlock+q,plocs,
-               blockStartPos[q]+
-               ENH_BLOCKL_HALF-period[lagBlock[q+1]], periodl);
-
-
-           if (blockStartPos[q]-ENH_OVERHANG>=0) {
-               refiner(sseq+q*ENH_BLOCKL, blockStartPos+q, idata,
-                   idatal, centerStartPos, blockStartPos[q],
-                   period[lagBlock[q+1]]);
-           } else {
-               psseq=sseq+q*ENH_BLOCKL;
-               memset(psseq, 0, ENH_BLOCKL*sizeof(float));
-           }
-       }
-
-       /* future */
-
-       for (i=0; i<periodl; i++) {
-           plocs2[i]=plocs[i]-period[i];
-       }
-       for (q=hl+1; q<=2*hl; q++) {
-           NearestNeighbor(lagBlock+q,plocs2,
-               blockStartPos[q-1]+ENH_BLOCKL_HALF,periodl);
-
-           blockStartPos[q]=blockStartPos[q-1]+period[lagBlock[q]];
-           if (blockStartPos[q]+ENH_BLOCKL+ENH_OVERHANG<idatal) {
-               refiner(sseq+ENH_BLOCKL*q, blockStartPos+q, idata,
-                   idatal, centerStartPos, blockStartPos[q],
-                   period[lagBlock[q]]);
-           }
-           else {
-               psseq=sseq+q*ENH_BLOCKL;
-               memset(psseq, 0, ENH_BLOCKL*sizeof(float));
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    * perform enhancement on idata+centerStartPos through
-    * idata+centerStartPos+ENH_BLOCKL-1
-    *---------------------------------------------------------------*/
-
-
-
-
-
-   void enhancer(
-       float *odata,       /* (o) smoothed block, dimension blockl */
-       float *idata,       /* (i) data buffer used for enhancing */
-       int idatal,         /* (i) dimension idata */
-       int centerStartPos, /* (i) first sample current block
-                                  within idata */
-       float alpha0,       /* (i) max correction-energy-fraction
-                                 (in [0,1]) */
-       float *period,      /* (i) pitch period array */
-       float *plocs,       /* (i) locations where period array
-                                  values valid */
-       int periodl         /* (i) dimension of period and plocs */
-   ){
-       float sseq[(2*ENH_HL+1)*ENH_BLOCKL];
-
-       /* get said second sequence of segments */
-
-       getsseq(sseq,idata,idatal,centerStartPos,period,
-           plocs,periodl,ENH_HL);
-
-       /* compute the smoothed output from said second sequence */
-
-       smath(odata,sseq,ENH_HL,alpha0);
-
-   }
-
-   /*----------------------------------------------------------------*
-    * cross correlation
-    *---------------------------------------------------------------*/
-
-   float xCorrCoef(
-       float *target,      /* (i) first array */
-       float *regressor,   /* (i) second array */
-       int subl        /* (i) dimension arrays */
-   ){
-       int i;
-       float ftmp1, ftmp2;
-
-       ftmp1 = 0.0;
-       ftmp2 = 0.0;
-       for (i=0; i<subl; i++) {
-           ftmp1 += target[i]*regressor[i];
-           ftmp2 += regressor[i]*regressor[i];
-       }
-
-       if (ftmp1 > 0.0) {
-           return (float)(ftmp1*ftmp1/ftmp2);
-       }
-
-
-
-
-
-       else {
-           return (float)0.0;
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    * interface for enhancer
-    *---------------------------------------------------------------*/
-
-   int enhancerInterface(
-       float *out,                     /* (o) enhanced signal */
-       float *in,                      /* (i) unenhanced signal */
-       iLBC_Dec_Inst_t *iLBCdec_inst   /* (i) buffers etc */
-   ){
-       float *enh_buf, *enh_period;
-       int iblock, isample;
-       int lag=0, ilag, i, ioffset;
-       float cc, maxcc;
-       float ftmp1, ftmp2;
-       float *inPtr, *enh_bufPtr1, *enh_bufPtr2;
-       float plc_pred[ENH_BLOCKL];
-
-       float lpState[6], downsampled[(ENH_NBLOCKS*ENH_BLOCKL+120)/2];
-       int inLen=ENH_NBLOCKS*ENH_BLOCKL+120;
-       int start, plc_blockl, inlag;
-
-       enh_buf=iLBCdec_inst->enh_buf;
-       enh_period=iLBCdec_inst->enh_period;
-
-       memmove(enh_buf, &enh_buf[iLBCdec_inst->blockl],
-           (ENH_BUFL-iLBCdec_inst->blockl)*sizeof(float));
-
-       memcpy(&enh_buf[ENH_BUFL-iLBCdec_inst->blockl], in,
-           iLBCdec_inst->blockl*sizeof(float));
-
-       if (iLBCdec_inst->mode==30)
-           plc_blockl=ENH_BLOCKL;
-       else
-           plc_blockl=40;
-
-       /* when 20 ms frame, move processing one block */
-       ioffset=0;
-       if (iLBCdec_inst->mode==20) ioffset=1;
-
-       i=3-ioffset;
-       memmove(enh_period, &enh_period[i],
-           (ENH_NBLOCKS_TOT-i)*sizeof(float));
-
-
-
-
-
-
-       /* Set state information to the 6 samples right before
-          the samples to be downsampled. */
-
-       memcpy(lpState,
-           enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-126,
-           6*sizeof(float));
-
-       /* Down sample a factor 2 to save computations */
-
-       DownSample(enh_buf+(ENH_NBLOCKS_EXTRA+ioffset)*ENH_BLOCKL-120,
-                   lpFilt_coefsTbl, inLen-ioffset*ENH_BLOCKL,
-                   lpState, downsampled);
-
-       /* Estimate the pitch in the down sampled domain. */
-       for (iblock = 0; iblock<ENH_NBLOCKS-ioffset; iblock++) {
-
-           lag = 10;
-           maxcc = xCorrCoef(downsampled+60+iblock*
-               ENH_BLOCKL_HALF, downsampled+60+iblock*
-               ENH_BLOCKL_HALF-lag, ENH_BLOCKL_HALF);
-           for (ilag=11; ilag<60; ilag++) {
-               cc = xCorrCoef(downsampled+60+iblock*
-                   ENH_BLOCKL_HALF, downsampled+60+iblock*
-                   ENH_BLOCKL_HALF-ilag, ENH_BLOCKL_HALF);
-
-               if (cc > maxcc) {
-                   maxcc = cc;
-                   lag = ilag;
-               }
-           }
-
-           /* Store the estimated lag in the non-downsampled domain */
-           enh_period[iblock+ENH_NBLOCKS_EXTRA+ioffset] = (float)lag*2;
-
-
-       }
-
-
-       /* PLC was performed on the previous packet */
-       if (iLBCdec_inst->prev_enh_pl==1) {
-
-           inlag=(int)enh_period[ENH_NBLOCKS_EXTRA+ioffset];
-
-           lag = inlag-1;
-           maxcc = xCorrCoef(in, in+lag, plc_blockl);
-           for (ilag=inlag; ilag<=inlag+1; ilag++) {
-               cc = xCorrCoef(in, in+ilag, plc_blockl);
-
-
-
-
-
-
-               if (cc > maxcc) {
-                   maxcc = cc;
-                   lag = ilag;
-               }
-           }
-
-           enh_period[ENH_NBLOCKS_EXTRA+ioffset-1]=(float)lag;
-
-           /* compute new concealed residual for the old lookahead,
-              mix the forward PLC with a backward PLC from
-              the new frame */
-
-           inPtr=&in[lag-1];
-
-           enh_bufPtr1=&plc_pred[plc_blockl-1];
-
-           if (lag>plc_blockl) {
-               start=plc_blockl;
-           } else {
-               start=lag;
-           }
-
-           for (isample = start; isample>0; isample--) {
-               *enh_bufPtr1-- = *inPtr--;
-           }
-
-           enh_bufPtr2=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
-           for (isample = (plc_blockl-1-lag); isample>=0; isample--) {
-               *enh_bufPtr1-- = *enh_bufPtr2--;
-           }
-
-           /* limit energy change */
-           ftmp2=0.0;
-           ftmp1=0.0;
-           for (i=0;i<plc_blockl;i++) {
-               ftmp2+=enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i]*
-                   enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl-i];
-               ftmp1+=plc_pred[i]*plc_pred[i];
-           }
-           ftmp1=(float)sqrt(ftmp1/(float)plc_blockl);
-           ftmp2=(float)sqrt(ftmp2/(float)plc_blockl);
-           if (ftmp1>(float)2.0*ftmp2 && ftmp1>0.0) {
-               for (i=0;i<plc_blockl-10;i++) {
-                   plc_pred[i]*=(float)2.0*ftmp2/ftmp1;
-               }
-               for (i=plc_blockl-10;i<plc_blockl;i++) {
-                   plc_pred[i]*=(float)(i-plc_blockl+10)*
-                       ((float)1.0-(float)2.0*ftmp2/ftmp1)/(float)(10)+
-
-
-
-
-
-                       (float)2.0*ftmp2/ftmp1;
-               }
-           }
-
-           enh_bufPtr1=&enh_buf[ENH_BUFL-1-iLBCdec_inst->blockl];
-           for (i=0; i<plc_blockl; i++) {
-               ftmp1 = (float) (i+1) / (float) (plc_blockl+1);
-               *enh_bufPtr1 *= ftmp1;
-               *enh_bufPtr1 += ((float)1.0-ftmp1)*
-                                   plc_pred[plc_blockl-1-i];
-               enh_bufPtr1--;
-           }
-       }
-
-       if (iLBCdec_inst->mode==20) {
-           /* Enhancer with 40 samples delay */
-           for (iblock = 0; iblock<2; iblock++) {
-               enhancer(out+iblock*ENH_BLOCKL, enh_buf,
-                   ENH_BUFL, (5+iblock)*ENH_BLOCKL+40,
-                   ENH_ALPHA0, enh_period, enh_plocsTbl,
-                       ENH_NBLOCKS_TOT);
-           }
-       } else if (iLBCdec_inst->mode==30) {
-           /* Enhancer with 80 samples delay */
-           for (iblock = 0; iblock<3; iblock++) {
-               enhancer(out+iblock*ENH_BLOCKL, enh_buf,
-                   ENH_BUFL, (4+iblock)*ENH_BLOCKL,
-                   ENH_ALPHA0, enh_period, enh_plocsTbl,
-                       ENH_NBLOCKS_TOT);
-           }
-       }
-
-       return (lag*2);
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h b/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h
deleted file mode 100644
index 8a081fb1bc..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/enhancer.h
+++ /dev/null
@@ -1,36 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       enhancer.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-
-
-
-
-   ******************************************************************/
-
-   #ifndef __ENHANCER_H
-   #define __ENHANCER_H
-
-   #include "iLBC_define.h"
-
-   float xCorrCoef(
-       float *target,      /* (i) first array */
-       float *regressor,   /* (i) second array */
-       int subl        /* (i) dimension arrays */
-   );
-
-   int enhancerInterface(
-       float *out,         /* (o) the enhanced recidual signal */
-       float *in,          /* (i) the recidual signal to enhance */
-       iLBC_Dec_Inst_t *iLBCdec_inst
-                           /* (i/o) the decoder state structure */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/filter.c b/sflphone-common/libs/pjproject/third_party/ilbc/filter.c
deleted file mode 100644
index 6565c2beee..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/filter.c
+++ /dev/null
@@ -1,175 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       filter.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "iLBC_define.h"
-
-   /*----------------------------------------------------------------*
-    *  all-pole filter
-    *---------------------------------------------------------------*/
-
-   void AllPoleFilter(
-       float *InOut,   /* (i/o) on entrance InOut[-orderCoef] to
-                              InOut[-1] contain the state of the
-                              filter (delayed samples). InOut[0] to
-                              InOut[lengthInOut-1] contain the filter
-                              input, on en exit InOut[-orderCoef] to
-                              InOut[-1] is unchanged and InOut[0] to
-                              InOut[lengthInOut-1] contain filtered
-                              samples */
-       float *Coef,/* (i) filter coefficients, Coef[0] is assumed
-                              to be 1.0 */
-       int lengthInOut,/* (i) number of input/output samples */
-       int orderCoef   /* (i) number of filter coefficients */
-   ){
-       int n,k;
-
-       for(n=0;n<lengthInOut;n++){
-           for(k=1;k<=orderCoef;k++){
-               *InOut -= Coef[k]*InOut[-k];
-
-
-
-
-
-           }
-           InOut++;
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  all-zero filter
-    *---------------------------------------------------------------*/
-
-   void AllZeroFilter(
-       float *In,      /* (i) In[0] to In[lengthInOut-1] contain
-                              filter input samples */
-       float *Coef,/* (i) filter coefficients (Coef[0] is assumed
-                              to be 1.0) */
-       int lengthInOut,/* (i) number of input/output samples */
-       int orderCoef,  /* (i) number of filter coefficients */
-       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
-                              contain the filter state, on exit Out[0]
-                              to Out[lengthInOut-1] contain filtered
-                              samples */
-   ){
-       int n,k;
-
-       for(n=0;n<lengthInOut;n++){
-           *Out = Coef[0]*In[0];
-           for(k=1;k<=orderCoef;k++){
-               *Out += Coef[k]*In[-k];
-           }
-           Out++;
-           In++;
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  pole-zero filter
-    *---------------------------------------------------------------*/
-
-   void ZeroPoleFilter(
-       float *In,      /* (i) In[0] to In[lengthInOut-1] contain
-                              filter input samples In[-orderCoef] to
-                              In[-1] contain state of all-zero
-                              section */
-       float *ZeroCoef,/* (i) filter coefficients for all-zero
-                              section (ZeroCoef[0] is assumed to
-                              be 1.0) */
-       float *PoleCoef,/* (i) filter coefficients for all-pole section
-                              (ZeroCoef[0] is assumed to be 1.0) */
-       int lengthInOut,/* (i) number of input/output samples */
-
-
-
-
-
-       int orderCoef,  /* (i) number of filter coefficients */
-       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
-                              contain state of all-pole section. On
-                              exit Out[0] to Out[lengthInOut-1]
-                              contain filtered samples */
-   ){
-       AllZeroFilter(In,ZeroCoef,lengthInOut,orderCoef,Out);
-       AllPoleFilter(Out,PoleCoef,lengthInOut,orderCoef);
-   }
-
-   /*----------------------------------------------------------------*
-    * downsample (LP filter and decimation)
-    *---------------------------------------------------------------*/
-
-   void DownSample (
-       float  *In,     /* (i) input samples */
-       float  *Coef,   /* (i) filter coefficients */
-       int lengthIn,   /* (i) number of input samples */
-       float  *state,  /* (i) filter state */
-       float  *Out     /* (o) downsampled output */
-   ){
-       float   o;
-       float *Out_ptr = Out;
-       float *Coef_ptr, *In_ptr;
-       float *state_ptr;
-       int i, j, stop;
-
-       /* LP filter and decimate at the same time */
-
-       for (i = DELAY_DS; i < lengthIn; i+=FACTOR_DS)
-       {
-           Coef_ptr = &Coef[0];
-           In_ptr = &In[i];
-           state_ptr = &state[FILTERORDER_DS-2];
-
-           o = (float)0.0;
-
-           stop = (i < FILTERORDER_DS) ? i + 1 : FILTERORDER_DS;
-
-           for (j = 0; j < stop; j++)
-           {
-               o += *Coef_ptr++ * (*In_ptr--);
-           }
-           for (j = i + 1; j < FILTERORDER_DS; j++)
-           {
-               o += *Coef_ptr++ * (*state_ptr--);
-           }
-
-
-
-
-
-
-           *Out_ptr++ = o;
-       }
-
-       /* Get the last part (use zeros as input for the future) */
-
-       for (i=(lengthIn+FACTOR_DS); i<(lengthIn+DELAY_DS);
-               i+=FACTOR_DS) {
-
-           o=(float)0.0;
-
-           if (i<lengthIn) {
-               Coef_ptr = &Coef[0];
-               In_ptr = &In[i];
-               for (j=0; j<FILTERORDER_DS; j++) {
-                       o += *Coef_ptr++ * (*Out_ptr--);
-               }
-           } else {
-               Coef_ptr = &Coef[i-lengthIn];
-               In_ptr = &In[lengthIn-1];
-               for (j=0; j<FILTERORDER_DS-(i-lengthIn); j++) {
-                       o += *Coef_ptr++ * (*In_ptr--);
-               }
-           }
-           *Out_ptr++ = o;
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/filter.h b/sflphone-common/libs/pjproject/third_party/ilbc/filter.h
deleted file mode 100644
index 4c512cd937..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/filter.h
+++ /dev/null
@@ -1,80 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       filter.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-
-
-
-
-
-   #ifndef __iLBC_FILTER_H
-   #define __iLBC_FILTER_H
-
-   void AllPoleFilter(
-       float *InOut,   /* (i/o) on entrance InOut[-orderCoef] to
-                              InOut[-1] contain the state of the
-                              filter (delayed samples). InOut[0] to
-                              InOut[lengthInOut-1] contain the filter
-                              input, on en exit InOut[-orderCoef] to
-                              InOut[-1] is unchanged and InOut[0] to
-                              InOut[lengthInOut-1] contain filtered
-                              samples */
-       float *Coef,/* (i) filter coefficients, Coef[0] is assumed
-                              to be 1.0 */
-       int lengthInOut,/* (i) number of input/output samples */
-       int orderCoef   /* (i) number of filter coefficients */
-   );
-
-   void AllZeroFilter(
-       float *In,      /* (i) In[0] to In[lengthInOut-1] contain
-                              filter input samples */
-       float *Coef,/* (i) filter coefficients (Coef[0] is assumed
-                              to be 1.0) */
-       int lengthInOut,/* (i) number of input/output samples */
-       int orderCoef,  /* (i) number of filter coefficients */
-       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
-                              contain the filter state, on exit Out[0]
-                              to Out[lengthInOut-1] contain filtered
-                              samples */
-   );
-
-   void ZeroPoleFilter(
-       float *In,      /* (i) In[0] to In[lengthInOut-1] contain filter
-                              input samples In[-orderCoef] to In[-1]
-                              contain state of all-zero section */
-       float *ZeroCoef,/* (i) filter coefficients for all-zero
-                              section (ZeroCoef[0] is assumed to
-                              be 1.0) */
-       float *PoleCoef,/* (i) filter coefficients for all-pole section
-                              (ZeroCoef[0] is assumed to be 1.0) */
-       int lengthInOut,/* (i) number of input/output samples */
-       int orderCoef,  /* (i) number of filter coefficients */
-       float *Out      /* (i/o) on entrance Out[-orderCoef] to Out[-1]
-                              contain state of all-pole section. On
-                              exit Out[0] to Out[lengthInOut-1]
-                              contain filtered samples */
-   );
-
-
-
-
-
-
-   void DownSample (
-       float  *In,     /* (i) input samples */
-       float  *Coef,   /* (i) filter coefficients */
-       int lengthIn,   /* (i) number of input samples */
-       float  *state,  /* (i) filter state */
-       float  *Out     /* (o) downsampled output */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c b/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c
deleted file mode 100644
index 0e74ff8270..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.c
+++ /dev/null
@@ -1,116 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-
-
-
-
-
-       gainquant.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <string.h>
-   #include <math.h>
-   #include "constants.h"
-   #include "filter.h"
-
-   /*----------------------------------------------------------------*
-    *  quantizer for the gain in the gain-shape coding of residual
-    *---------------------------------------------------------------*/
-
-   float gainquant(/* (o) quantized gain value */
-       float in,       /* (i) gain value */
-       float maxIn,/* (i) maximum of gain value */
-       int cblen,      /* (i) number of quantization indices */
-       int *index      /* (o) quantization index */
-   ){
-       int i, tindex;
-       float minmeasure,measure, *cb, scale;
-
-       /* ensure a lower bound on the scaling factor */
-
-       scale=maxIn;
-
-       if (scale<0.1) {
-           scale=(float)0.1;
-       }
-
-       /* select the quantization table */
-
-       if (cblen == 8) {
-           cb = gain_sq3Tbl;
-       } else if (cblen == 16) {
-           cb = gain_sq4Tbl;
-       } else  {
-           cb = gain_sq5Tbl;
-       }
-
-       /* select the best index in the quantization table */
-
-       minmeasure=10000000.0;
-       tindex=0;
-       for (i=0; i<cblen; i++) {
-
-
-
-
-
-           measure=(in-scale*cb[i])*(in-scale*cb[i]);
-
-           if (measure<minmeasure) {
-               tindex=i;
-               minmeasure=measure;
-           }
-       }
-       *index=tindex;
-
-       /* return the quantized value */
-
-       return scale*cb[tindex];
-   }
-
-   /*----------------------------------------------------------------*
-    *  decoder for quantized gains in the gain-shape coding of
-    *  residual
-    *---------------------------------------------------------------*/
-
-   float gaindequant(  /* (o) quantized gain value */
-       int index,      /* (i) quantization index */
-       float maxIn,/* (i) maximum of unquantized gain */
-       int cblen       /* (i) number of quantization indices */
-   ){
-       float scale;
-
-       /* obtain correct scale factor */
-
-       scale=(float)fabs(maxIn);
-
-       if (scale<0.1) {
-           scale=(float)0.1;
-       }
-
-       /* select the quantization table and return the decoded value */
-
-       if (cblen==8) {
-           return scale*gain_sq3Tbl[index];
-       } else if (cblen==16) {
-           return scale*gain_sq4Tbl[index];
-       }
-       else if (cblen==32) {
-           return scale*gain_sq5Tbl[index];
-       }
-
-       return 0.0;
-   }
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h b/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h
deleted file mode 100644
index 0d024246d7..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/gainquant.h
+++ /dev/null
@@ -1,30 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       gainquant.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_GAINQUANT_H
-   #define __iLBC_GAINQUANT_H
-
-   float gainquant(/* (o) quantized gain value */
-       float in,       /* (i) gain value */
-       float maxIn,/* (i) maximum of gain value */
-       int cblen,      /* (i) number of quantization indices */
-       int *index      /* (o) quantization index */
-   );
-
-   float gaindequant(  /* (o) quantized gain value */
-       int index,      /* (i) quantization index */
-       float maxIn,/* (i) maximum of unquantized gain */
-       int cblen       /* (i) number of quantization indices */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c b/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c
deleted file mode 100644
index 4f2d291417..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.c
+++ /dev/null
@@ -1,193 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       getCBvec.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "iLBC_define.h"
-   #include "constants.h"
-   #include <string.h>
-
-   /*----------------------------------------------------------------*
-    *  Construct codebook vector for given index.
-    *---------------------------------------------------------------*/
-
-   void getCBvec(
-
-
-
-
-
-       float *cbvec,   /* (o) Constructed codebook vector */
-       float *mem,     /* (i) Codebook buffer */
-       int index,      /* (i) Codebook index */
-       int lMem,       /* (i) Length of codebook buffer */
-       int cbveclen/* (i) Codebook vector length */
-   ){
-       int j, k, n, memInd, sFilt;
-       float tmpbuf[CB_MEML];
-       int base_size;
-       int ilow, ihigh;
-       float alfa, alfa1;
-
-       /* Determine size of codebook sections */
-
-       base_size=lMem-cbveclen+1;
-
-       if (cbveclen==SUBL) {
-           base_size+=cbveclen/2;
-       }
-
-       /* No filter -> First codebook section */
-
-       if (index<lMem-cbveclen+1) {
-
-           /* first non-interpolated vectors */
-
-           k=index+cbveclen;
-           /* get vector */
-           memcpy(cbvec, mem+lMem-k, cbveclen*sizeof(float));
-
-       } else if (index < base_size) {
-
-           k=2*(index-(lMem-cbveclen+1))+cbveclen;
-
-           ihigh=k/2;
-           ilow=ihigh-5;
-
-           /* Copy first noninterpolated part */
-
-           memcpy(cbvec, mem+lMem-k/2, ilow*sizeof(float));
-
-           /* interpolation */
-
-           alfa1=(float)0.2;
-           alfa=0.0;
-           for (j=ilow; j<ihigh; j++) {
-               cbvec[j]=((float)1.0-alfa)*mem[lMem-k/2+j]+
-                   alfa*mem[lMem-k+j];
-
-
-
-
-
-               alfa+=alfa1;
-           }
-
-           /* Copy second noninterpolated part */
-
-           memcpy(cbvec+ihigh, mem+lMem-k+ihigh,
-               (cbveclen-ihigh)*sizeof(float));
-
-       }
-
-       /* Higher codebook section based on filtering */
-
-       else {
-
-           /* first non-interpolated vectors */
-
-           if (index-base_size<lMem-cbveclen+1) {
-               float tempbuff2[CB_MEML+CB_FILTERLEN+1];
-               float *pos;
-               float *pp, *pp1;
-
-               memset(tempbuff2, 0,
-                   CB_HALFFILTERLEN*sizeof(float));
-               memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,
-                   lMem*sizeof(float));
-               memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,
-                   (CB_HALFFILTERLEN+1)*sizeof(float));
-
-               k=index-base_size+cbveclen;
-               sFilt=lMem-k;
-               memInd=sFilt+1-CB_HALFFILTERLEN;
-
-               /* do filtering */
-               pos=cbvec;
-               memset(pos, 0, cbveclen*sizeof(float));
-               for (n=0; n<cbveclen; n++) {
-                   pp=&tempbuff2[memInd+n+CB_HALFFILTERLEN];
-                   pp1=&cbfiltersTbl[CB_FILTERLEN-1];
-                   for (j=0; j<CB_FILTERLEN; j++) {
-                       (*pos)+=(*pp++)*(*pp1--);
-                   }
-                   pos++;
-               }
-           }
-
-           /* interpolated vectors */
-
-           else {
-
-
-
-
-
-               float tempbuff2[CB_MEML+CB_FILTERLEN+1];
-
-               float *pos;
-               float *pp, *pp1;
-               int i;
-
-               memset(tempbuff2, 0,
-                   CB_HALFFILTERLEN*sizeof(float));
-               memcpy(&tempbuff2[CB_HALFFILTERLEN], mem,
-                   lMem*sizeof(float));
-               memset(&tempbuff2[lMem+CB_HALFFILTERLEN], 0,
-                   (CB_HALFFILTERLEN+1)*sizeof(float));
-
-               k=2*(index-base_size-
-                   (lMem-cbveclen+1))+cbveclen;
-               sFilt=lMem-k;
-               memInd=sFilt+1-CB_HALFFILTERLEN;
-
-               /* do filtering */
-               pos=&tmpbuf[sFilt];
-               memset(pos, 0, k*sizeof(float));
-               for (i=0; i<k; i++) {
-                   pp=&tempbuff2[memInd+i+CB_HALFFILTERLEN];
-                   pp1=&cbfiltersTbl[CB_FILTERLEN-1];
-                   for (j=0; j<CB_FILTERLEN; j++) {
-                       (*pos)+=(*pp++)*(*pp1--);
-                   }
-                   pos++;
-               }
-
-               ihigh=k/2;
-               ilow=ihigh-5;
-
-               /* Copy first noninterpolated part */
-
-               memcpy(cbvec, tmpbuf+lMem-k/2,
-                   ilow*sizeof(float));
-
-               /* interpolation */
-
-               alfa1=(float)0.2;
-               alfa=0.0;
-               for (j=ilow; j<ihigh; j++) {
-                   cbvec[j]=((float)1.0-alfa)*
-                       tmpbuf[lMem-k/2+j]+alfa*tmpbuf[lMem-k+j];
-                   alfa+=alfa1;
-               }
-
-
-
-
-
-
-               /* Copy second noninterpolated part */
-
-               memcpy(cbvec+ihigh, tmpbuf+lMem-k+ihigh,
-                   (cbveclen-ihigh)*sizeof(float));
-           }
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h b/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h
deleted file mode 100644
index 0080907c02..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/getCBvec.h
+++ /dev/null
@@ -1,25 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       getCBvec.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_GETCBVEC_H
-   #define __iLBC_GETCBVEC_H
-
-   void getCBvec(
-       float *cbvec,   /* (o) Constructed codebook vector */
-       float *mem,     /* (i) Codebook buffer */
-       int index,      /* (i) Codebook index */
-       int lMem,       /* (i) Length of codebook buffer */
-       int cbveclen/* (i) Codebook vector length */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c b/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c
deleted file mode 100644
index 1aba65788f..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.c
+++ /dev/null
@@ -1,326 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       helpfun.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-
-   #include "iLBC_define.h"
-   #include "constants.h"
-
-   /*----------------------------------------------------------------*
-    *  calculation of auto correlation
-    *---------------------------------------------------------------*/
-
-   void autocorr(
-       float *r,       /* (o) autocorrelation vector */
-       const float *x, /* (i) data vector */
-       int N,          /* (i) length of data vector */
-       int order       /* largest lag for calculated
-                          autocorrelations */
-   ){
-       int     lag, n;
-       float   sum;
-
-       for (lag = 0; lag <= order; lag++) {
-           sum = 0;
-           for (n = 0; n < N - lag; n++) {
-               sum += x[n] * x[n+lag];
-           }
-           r[lag] = sum;
-       }
-
-
-
-
-
-   }
-
-   /*----------------------------------------------------------------*
-    *  window multiplication
-    *---------------------------------------------------------------*/
-
-   void window(
-       float *z,       /* (o) the windowed data */
-       const float *x, /* (i) the original data vector */
-       const float *y, /* (i) the window */
-       int N           /* (i) length of all vectors */
-   ){
-       int     i;
-
-       for (i = 0; i < N; i++) {
-           z[i] = x[i] * y[i];
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  levinson-durbin solution for lpc coefficients
-    *---------------------------------------------------------------*/
-
-   void levdurb(
-       float *a,       /* (o) lpc coefficient vector starting
-                              with 1.0 */
-       float *k,       /* (o) reflection coefficients */
-       float *r,       /* (i) autocorrelation vector */
-       int order       /* (i) order of lpc filter */
-   ){
-       float  sum, alpha;
-       int     m, m_h, i;
-
-       a[0] = 1.0;
-
-       if (r[0] < EPS) { /* if r[0] <= 0, set LPC coeff. to zero */
-           for (i = 0; i < order; i++) {
-               k[i] = 0;
-               a[i+1] = 0;
-           }
-       } else {
-           a[1] = k[0] = -r[1]/r[0];
-           alpha = r[0] + r[1] * k[0];
-           for (m = 1; m < order; m++){
-               sum = r[m + 1];
-               for (i = 0; i < m; i++){
-                   sum += a[i+1] * r[m - i];
-               }
-
-
-
-
-
-               k[m] = -sum / alpha;
-               alpha += k[m] * sum;
-               m_h = (m + 1) >> 1;
-               for (i = 0; i < m_h; i++){
-                   sum = a[i+1] + k[m] * a[m - i];
-                   a[m - i] += k[m] * a[i+1];
-                   a[i+1] = sum;
-               }
-               a[m+1] = k[m];
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  interpolation between vectors
-    *---------------------------------------------------------------*/
-
-   void interpolate(
-       float *out,      /* (o) the interpolated vector */
-       float *in1,     /* (i) the first vector for the
-                              interpolation */
-       float *in2,     /* (i) the second vector for the
-                              interpolation */
-       float coef,      /* (i) interpolation weights */
-       int length      /* (i) length of all vectors */
-   ){
-       int i;
-       float invcoef;
-
-       invcoef = (float)1.0 - coef;
-       for (i = 0; i < length; i++) {
-           out[i] = coef * in1[i] + invcoef * in2[i];
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  lpc bandwidth expansion
-    *---------------------------------------------------------------*/
-
-   void bwexpand(
-       float *out,      /* (o) the bandwidth expanded lpc
-                              coefficients */
-       float *in,      /* (i) the lpc coefficients before bandwidth
-                              expansion */
-       float coef,     /* (i) the bandwidth expansion factor */
-       int length      /* (i) the length of lpc coefficient vectors */
-   ){
-       int i;
-
-
-
-
-
-       float  chirp;
-
-       chirp = coef;
-
-       out[0] = in[0];
-       for (i = 1; i < length; i++) {
-           out[i] = chirp * in[i];
-           chirp *= coef;
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  vector quantization
-    *---------------------------------------------------------------*/
-
-   void vq(
-       float *Xq,      /* (o) the quantized vector */
-       int *index,     /* (o) the quantization index */
-       const float *CB,/* (i) the vector quantization codebook */
-       float *X,       /* (i) the vector to quantize */
-       int n_cb,       /* (i) the number of vectors in the codebook */
-       int dim         /* (i) the dimension of all vectors */
-   ){
-       int     i, j;
-       int     pos, minindex;
-       float   dist, tmp, mindist;
-
-       pos = 0;
-       mindist = FLOAT_MAX;
-       minindex = 0;
-       for (j = 0; j < n_cb; j++) {
-           dist = X[0] - CB[pos];
-           dist *= dist;
-           for (i = 1; i < dim; i++) {
-               tmp = X[i] - CB[pos + i];
-               dist += tmp*tmp;
-           }
-
-           if (dist < mindist) {
-               mindist = dist;
-               minindex = j;
-           }
-           pos += dim;
-       }
-       for (i = 0; i < dim; i++) {
-           Xq[i] = CB[minindex*dim + i];
-       }
-       *index = minindex;
-
-
-
-
-
-   }
-
-   /*----------------------------------------------------------------*
-    *  split vector quantization
-    *---------------------------------------------------------------*/
-
-   void SplitVQ(
-       float *qX,      /* (o) the quantized vector */
-       int *index,     /* (o) a vector of indexes for all vector
-                              codebooks in the split */
-       float *X,       /* (i) the vector to quantize */
-       const float *CB,/* (i) the quantizer codebook */
-       int nsplit,     /* the number of vector splits */
-       const int *dim, /* the dimension of X and qX */
-       const int *cbsize /* the number of vectors in the codebook */
-   ){
-       int    cb_pos, X_pos, i;
-
-       cb_pos = 0;
-       X_pos= 0;
-       for (i = 0; i < nsplit; i++) {
-           vq(qX + X_pos, index + i, CB + cb_pos, X + X_pos,
-               cbsize[i], dim[i]);
-           X_pos += dim[i];
-           cb_pos += dim[i] * cbsize[i];
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  scalar quantization
-    *---------------------------------------------------------------*/
-
-   void sort_sq(
-       float *xq,      /* (o) the quantized value */
-       int *index,     /* (o) the quantization index */
-       float x,    /* (i) the value to quantize */
-       const float *cb,/* (i) the quantization codebook */
-       int cb_size      /* (i) the size of the quantization codebook */
-   ){
-       int i;
-
-       if (x <= cb[0]) {
-           *index = 0;
-           *xq = cb[0];
-       } else {
-           i = 0;
-           while ((x > cb[i]) && i < cb_size - 1) {
-               i++;
-
-
-
-
-
-           }
-
-           if (x > ((cb[i] + cb[i - 1])/2)) {
-               *index = i;
-               *xq = cb[i];
-           } else {
-               *index = i - 1;
-               *xq = cb[i - 1];
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  check for stability of lsf coefficients
-    *---------------------------------------------------------------*/
-
-   int LSF_check(    /* (o) 1 for stable lsf vectors and 0 for
-                              nonstable ones */
-       float *lsf,     /* (i) a table of lsf vectors */
-       int dim,    /* (i) the dimension of each lsf vector */
-       int NoAn    /* (i) the number of lsf vectors in the
-                              table */
-   ){
-       int k,n,m, Nit=2, change=0,pos;
-       float tmp;
-       static float eps=(float)0.039; /* 50 Hz */
-       static float eps2=(float)0.0195;
-       static float maxlsf=(float)3.14; /* 4000 Hz */
-       static float minlsf=(float)0.01; /* 0 Hz */
-
-       /* LSF separation check*/
-
-       for (n=0; n<Nit; n++) { /* Run through a couple of times */
-           for (m=0; m<NoAn; m++) { /* Number of analyses per frame */
-               for (k=0; k<(dim-1); k++) {
-                   pos=m*dim+k;
-
-                   if ((lsf[pos+1]-lsf[pos])<eps) {
-
-                       if (lsf[pos+1]<lsf[pos]) {
-                           tmp=lsf[pos+1];
-                           lsf[pos+1]= lsf[pos]+eps2;
-                           lsf[pos]= lsf[pos+1]-eps2;
-                       } else {
-                           lsf[pos]-=eps2;
-                           lsf[pos+1]+=eps2;
-                       }
-                       change=1;
-
-
-
-
-
-                   }
-
-                   if (lsf[pos]<minlsf) {
-                       lsf[pos]=minlsf;
-                       change=1;
-                   }
-
-                   if (lsf[pos]>maxlsf) {
-                       lsf[pos]=maxlsf;
-                       change=1;
-                   }
-               }
-           }
-       }
-
-       return change;
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h b/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h
deleted file mode 100644
index 931ca68a64..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/helpfun.h
+++ /dev/null
@@ -1,106 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       helpfun.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_HELPFUN_H
-   #define __iLBC_HELPFUN_H
-
-   void autocorr(
-       float *r,       /* (o) autocorrelation vector */
-       const float *x, /* (i) data vector */
-       int N,          /* (i) length of data vector */
-       int order       /* largest lag for calculated
-                          autocorrelations */
-   );
-
-   void window(
-       float *z,       /* (o) the windowed data */
-       const float *x, /* (i) the original data vector */
-       const float *y, /* (i) the window */
-       int N           /* (i) length of all vectors */
-   );
-
-   void levdurb(
-       float *a,       /* (o) lpc coefficient vector starting
-                              with 1.0 */
-       float *k,       /* (o) reflection coefficients */
-       float *r,       /* (i) autocorrelation vector */
-       int order       /* (i) order of lpc filter */
-   );
-
-   void interpolate(
-
-
-
-
-
-       float *out,     /* (o) the interpolated vector */
-       float *in1,     /* (i) the first vector for the
-                              interpolation */
-       float *in2,     /* (i) the second vector for the
-                              interpolation */
-       float coef,     /* (i) interpolation weights */
-       int length      /* (i) length of all vectors */
-   );
-
-   void bwexpand(
-       float *out,     /* (o) the bandwidth expanded lpc
-                              coefficients */
-       float *in,      /* (i) the lpc coefficients before bandwidth
-                              expansion */
-       float coef,     /* (i) the bandwidth expansion factor */
-       int length      /* (i) the length of lpc coefficient vectors */
-   );
-
-   void vq(
-       float *Xq,      /* (o) the quantized vector */
-       int *index,     /* (o) the quantization index */
-       const float *CB,/* (i) the vector quantization codebook */
-       float *X,       /* (i) the vector to quantize */
-       int n_cb,       /* (i) the number of vectors in the codebook */
-       int dim         /* (i) the dimension of all vectors */
-   );
-
-   void SplitVQ(
-       float *qX,      /* (o) the quantized vector */
-       int *index,     /* (o) a vector of indexes for all vector
-                              codebooks in the split */
-       float *X,       /* (i) the vector to quantize */
-       const float *CB,/* (i) the quantizer codebook */
-       int nsplit,     /* the number of vector splits */
-       const int *dim, /* the dimension of X and qX */
-       const int *cbsize /* the number of vectors in the codebook */
-   );
-
-
-   void sort_sq(
-       float *xq,      /* (o) the quantized value */
-       int *index,     /* (o) the quantization index */
-       float x,    /* (i) the value to quantize */
-       const float *cb,/* (i) the quantization codebook */
-       int cb_size     /* (i) the size of the quantization codebook */
-   );
-
-   int LSF_check(      /* (o) 1 for stable lsf vectors and 0 for
-
-
-
-
-
-                              nonstable ones */
-       float *lsf,     /* (i) a table of lsf vectors */
-       int dim,    /* (i) the dimension of each lsf vector */
-       int NoAn    /* (i) the number of lsf vectors in the
-                              table */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c b/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c
deleted file mode 100644
index 7ceee09643..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-
-
-
-
-       hpInput.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "constants.h"
-
-   /*----------------------------------------------------------------*
-    *  Input high-pass filter
-    *---------------------------------------------------------------*/
-
-   void hpInput(
-       float *In,  /* (i) vector to filter */
-       int len,    /* (i) length of vector to filter */
-       float *Out, /* (o) the resulting filtered vector */
-       float *mem  /* (i/o) the filter state */
-   ){
-       int i;
-       float *pi, *po;
-
-       /* all-zero section*/
-
-       pi = &In[0];
-       po = &Out[0];
-       for (i=0; i<len; i++) {
-           *po = hpi_zero_coefsTbl[0] * (*pi);
-           *po += hpi_zero_coefsTbl[1] * mem[0];
-           *po += hpi_zero_coefsTbl[2] * mem[1];
-
-           mem[1] = mem[0];
-           mem[0] = *pi;
-           po++;
-           pi++;
-
-       }
-
-       /* all-pole section*/
-
-       po = &Out[0];
-       for (i=0; i<len; i++) {
-           *po -= hpi_pole_coefsTbl[1] * mem[2];
-           *po -= hpi_pole_coefsTbl[2] * mem[3];
-
-           mem[3] = mem[2];
-           mem[2] = *po;
-           po++;
-
-
-
-
-
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h b/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h
deleted file mode 100644
index 3b020d11df..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/hpInput.h
+++ /dev/null
@@ -1,24 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       hpInput.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_HPINPUT_H
-   #define __iLBC_HPINPUT_H
-
-   void hpInput(
-       float *In,  /* (i) vector to filter */
-       int len,    /* (i) length of vector to filter */
-       float *Out, /* (o) the resulting filtered vector */
-       float *mem  /* (i/o) the filter state */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c b/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c
deleted file mode 100644
index 756160a657..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.c
+++ /dev/null
@@ -1,61 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       hpOutput.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "constants.h"
-
-   /*----------------------------------------------------------------*
-    *  Output high-pass filter
-    *---------------------------------------------------------------*/
-
-   void hpOutput(
-
-
-
-
-
-       float *In,  /* (i) vector to filter */
-       int len,/* (i) length of vector to filter */
-       float *Out, /* (o) the resulting filtered vector */
-       float *mem  /* (i/o) the filter state */
-   ){
-       int i;
-       float *pi, *po;
-
-       /* all-zero section*/
-
-       pi = &In[0];
-       po = &Out[0];
-       for (i=0; i<len; i++) {
-           *po = hpo_zero_coefsTbl[0] * (*pi);
-           *po += hpo_zero_coefsTbl[1] * mem[0];
-           *po += hpo_zero_coefsTbl[2] * mem[1];
-
-           mem[1] = mem[0];
-           mem[0] = *pi;
-           po++;
-           pi++;
-
-       }
-
-       /* all-pole section*/
-
-       po = &Out[0];
-       for (i=0; i<len; i++) {
-           *po -= hpo_pole_coefsTbl[1] * mem[2];
-           *po -= hpo_pole_coefsTbl[2] * mem[3];
-
-           mem[3] = mem[2];
-           mem[2] = *po;
-           po++;
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h b/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h
deleted file mode 100644
index b213a19348..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/hpOutput.h
+++ /dev/null
@@ -1,24 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       hpOutput.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_HPOUTPUT_H
-   #define __iLBC_HPOUTPUT_H
-
-   void hpOutput(
-       float *In,  /* (i) vector to filter */
-       int len,/* (i) length of vector to filter */
-       float *Out, /* (o) the resulting filtered vector */
-       float *mem  /* (i/o) the filter state */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c b/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c
deleted file mode 100644
index ee9a73ca58..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.c
+++ /dev/null
@@ -1,112 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iCBConstruct.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-
-   #include "iLBC_define.h"
-   #include "gainquant.h"
-   #include "getCBvec.h"
-
-   /*----------------------------------------------------------------*
-    *  Convert the codebook indexes to make the search easier
-    *---------------------------------------------------------------*/
-
-
-
-
-
-
-   void index_conv_enc(
-       int *index          /* (i/o) Codebook indexes */
-   ){
-       int k;
-
-       for (k=1; k<CB_NSTAGES; k++) {
-
-           if ((index[k]>=108)&&(index[k]<172)) {
-               index[k]-=64;
-           } else if (index[k]>=236) {
-               index[k]-=128;
-           } else {
-               /* ERROR */
-           }
-       }
-   }
-
-   void index_conv_dec(
-       int *index          /* (i/o) Codebook indexes */
-   ){
-       int k;
-
-       for (k=1; k<CB_NSTAGES; k++) {
-
-           if ((index[k]>=44)&&(index[k]<108)) {
-               index[k]+=64;
-           } else if ((index[k]>=108)&&(index[k]<128)) {
-               index[k]+=128;
-           } else {
-               /* ERROR */
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  Construct decoded vector from codebook and gains.
-    *---------------------------------------------------------------*/
-
-   void iCBConstruct(
-       float *decvector,   /* (o) Decoded vector */
-       int *index,         /* (i) Codebook indices */
-       int *gain_index,/* (i) Gain quantization indices */
-       float *mem,         /* (i) Buffer for codevector construction */
-       int lMem,           /* (i) Length of buffer */
-       int veclen,         /* (i) Length of vector */
-       int nStages         /* (i) Number of codebook stages */
-   ){
-       int j,k;
-
-
-
-
-
-       float gain[CB_NSTAGES];
-       float cbvec[SUBL];
-
-       /* gain de-quantization */
-
-       gain[0] = gaindequant(gain_index[0], 1.0, 32);
-       if (nStages > 1) {
-           gain[1] = gaindequant(gain_index[1],
-               (float)fabs(gain[0]), 16);
-       }
-       if (nStages > 2) {
-           gain[2] = gaindequant(gain_index[2],
-               (float)fabs(gain[1]), 8);
-       }
-
-       /* codebook vector construction and construction of
-       total vector */
-
-       getCBvec(cbvec, mem, index[0], lMem, veclen);
-       for (j=0;j<veclen;j++){
-           decvector[j] = gain[0]*cbvec[j];
-       }
-       if (nStages > 1) {
-           for (k=1; k<nStages; k++) {
-               getCBvec(cbvec, mem, index[k], lMem, veclen);
-               for (j=0;j<veclen;j++) {
-                   decvector[j] += gain[k]*cbvec[j];
-               }
-           }
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h b/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h
deleted file mode 100644
index 143501ed64..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iCBConstruct.h
+++ /dev/null
@@ -1,40 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iCBConstruct.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-
-
-
-
-
-   ******************************************************************/
-
-   #ifndef __iLBC_ICBCONSTRUCT_H
-   #define __iLBC_ICBCONSTRUCT_H
-
-   void index_conv_enc(
-       int *index          /* (i/o) Codebook indexes */
-   );
-
-   void index_conv_dec(
-       int *index          /* (i/o) Codebook indexes */
-   );
-
-   void iCBConstruct(
-       float *decvector,   /* (o) Decoded vector */
-       int *index,         /* (i) Codebook indices */
-       int *gain_index,/* (i) Gain quantization indices */
-       float *mem,         /* (i) Buffer for codevector construction */
-       int lMem,           /* (i) Length of buffer */
-       int veclen,         /* (i) Length of vector */
-       int nStages         /* (i) Number of codebook stages */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c b/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c
deleted file mode 100644
index e0442bf054..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.c
+++ /dev/null
@@ -1,515 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iCBSearch.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <string.h>
-
-   #include "iLBC_define.h"
-   #include "gainquant.h"
-   #include "createCB.h"
-   #include "filter.h"
-   #include "constants.h"
-
-   /*----------------------------------------------------------------*
-    *  Search routine for codebook encoding and gain quantization.
-    *---------------------------------------------------------------*/
-
-   void iCBSearch(
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i) the encoder state structure */
-       int *index,         /* (o) Codebook indices */
-       int *gain_index,/* (o) Gain quantization indices */
-
-
-
-
-
-       float *intarget,/* (i) Target vector for encoding */
-       float *mem,         /* (i) Buffer for codebook construction */
-       int lMem,           /* (i) Length of buffer */
-       int lTarget,    /* (i) Length of vector */
-       int nStages,    /* (i) Number of codebook stages */
-       float *weightDenum, /* (i) weighting filter coefficients */
-       float *weightState, /* (i) weighting filter state */
-       int block           /* (i) the sub-block number */
-   ){
-       int i, j, icount, stage, best_index, range, counter;
-       float max_measure, gain, measure, crossDot, ftmp;
-       float gains[CB_NSTAGES];
-       float target[SUBL];
-       int base_index, sInd, eInd, base_size;
-       int sIndAug=0, eIndAug=0;
-       float buf[CB_MEML+SUBL+2*LPC_FILTERORDER];
-       float invenergy[CB_EXPAND*128], energy[CB_EXPAND*128];
-       float *pp, *ppi=0, *ppo=0, *ppe=0;
-       float cbvectors[CB_MEML];
-       float tene, cene, cvec[SUBL];
-       float aug_vec[SUBL];
-
-       memset(cvec,0,SUBL*sizeof(float));
-
-       /* Determine size of codebook sections */
-
-       base_size=lMem-lTarget+1;
-
-       if (lTarget==SUBL) {
-           base_size=lMem-lTarget+1+lTarget/2;
-       }
-
-       /* setup buffer for weighting */
-
-       memcpy(buf,weightState,sizeof(float)*LPC_FILTERORDER);
-       memcpy(buf+LPC_FILTERORDER,mem,lMem*sizeof(float));
-       memcpy(buf+LPC_FILTERORDER+lMem,intarget,lTarget*sizeof(float));
-
-       /* weighting */
-
-       AllPoleFilter(buf+LPC_FILTERORDER, weightDenum,
-           lMem+lTarget, LPC_FILTERORDER);
-
-       /* Construct the codebook and target needed */
-
-       memcpy(target, buf+LPC_FILTERORDER+lMem, lTarget*sizeof(float));
-
-       tene=0.0;
-
-
-
-
-
-       for (i=0; i<lTarget; i++) {
-           tene+=target[i]*target[i];
-       }
-
-       /* Prepare search over one more codebook section. This section
-          is created by filtering the original buffer with a filter. */
-
-       filteredCBvecs(cbvectors, buf+LPC_FILTERORDER, lMem);
-
-       /* The Main Loop over stages */
-
-       for (stage=0; stage<nStages; stage++) {
-
-           range = search_rangeTbl[block][stage];
-
-           /* initialize search measure */
-
-           max_measure = (float)-10000000.0;
-           gain = (float)0.0;
-           best_index = 0;
-
-           /* Compute cross dot product between the target
-              and the CB memory */
-
-           crossDot=0.0;
-           pp=buf+LPC_FILTERORDER+lMem-lTarget;
-           for (j=0; j<lTarget; j++) {
-               crossDot += target[j]*(*pp++);
-           }
-
-           if (stage==0) {
-
-               /* Calculate energy in the first block of
-                 'lTarget' samples. */
-               ppe = energy;
-               ppi = buf+LPC_FILTERORDER+lMem-lTarget-1;
-               ppo = buf+LPC_FILTERORDER+lMem-1;
-
-               *ppe=0.0;
-               pp=buf+LPC_FILTERORDER+lMem-lTarget;
-               for (j=0; j<lTarget; j++) {
-                   *ppe+=(*pp)*(*pp);
-		   ++pp;
-               }
-
-               if (*ppe>0.0) {
-                   invenergy[0] = (float) 1.0 / (*ppe + EPS);
-               } else {
-                   invenergy[0] = (float) 0.0;
-
-
-
-
-
-               }
-               ppe++;
-
-               measure=(float)-10000000.0;
-
-               if (crossDot > 0.0) {
-                      measure = crossDot*crossDot*invenergy[0];
-               }
-           }
-           else {
-               measure = crossDot*crossDot*invenergy[0];
-           }
-
-           /* check if measure is better */
-           ftmp = crossDot*invenergy[0];
-
-           if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
-               best_index = 0;
-               max_measure = measure;
-               gain = ftmp;
-           }
-
-           /* loop over the main first codebook section,
-              full search */
-
-           for (icount=1; icount<range; icount++) {
-
-               /* calculate measure */
-
-               crossDot=0.0;
-               pp = buf+LPC_FILTERORDER+lMem-lTarget-icount;
-
-               for (j=0; j<lTarget; j++) {
-                   crossDot += target[j]*(*pp++);
-               }
-
-               if (stage==0) {
-                   *ppe++ = energy[icount-1] + (*ppi)*(*ppi) -
-                       (*ppo)*(*ppo);
-                   ppo--;
-                   ppi--;
-
-                   if (energy[icount]>0.0) {
-                       invenergy[icount] =
-                           (float)1.0/(energy[icount]+EPS);
-                   } else {
-                       invenergy[icount] = (float) 0.0;
-                   }
-
-
-
-
-
-                   measure=(float)-10000000.0;
-
-                   if (crossDot > 0.0) {
-                       measure = crossDot*crossDot*invenergy[icount];
-                   }
-               }
-               else {
-                   measure = crossDot*crossDot*invenergy[icount];
-               }
-
-               /* check if measure is better */
-               ftmp = crossDot*invenergy[icount];
-
-               if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
-                   best_index = icount;
-                   max_measure = measure;
-                   gain = ftmp;
-               }
-           }
-
-           /* Loop over augmented part in the first codebook
-            * section, full search.
-            * The vectors are interpolated.
-            */
-
-           if (lTarget==SUBL) {
-
-               /* Search for best possible cb vector and
-                  compute the CB-vectors' energy. */
-               searchAugmentedCB(20, 39, stage, base_size-lTarget/2,
-                   target, buf+LPC_FILTERORDER+lMem,
-                   &max_measure, &best_index, &gain, energy,
-                   invenergy);
-           }
-
-           /* set search range for following codebook sections */
-
-           base_index=best_index;
-
-           /* unrestricted search */
-
-#	   if CB_RESRANGE == -1
-           //if (CB_RESRANGE == -1) {
-               sInd=0;
-               eInd=range-1;
-               sIndAug=20;
-               eIndAug=39;
-           //}
-
-#	   else
-
-           /* restricted search around best index from first
-           codebook section */
-
-           //else {
-               /* Initialize search indices */
-               sIndAug=0;
-               eIndAug=0;
-               sInd=base_index-CB_RESRANGE/2;
-               eInd=sInd+CB_RESRANGE;
-
-               if (lTarget==SUBL) {
-
-                   if (sInd<0) {
-
-                       sIndAug = 40 + sInd;
-                       eIndAug = 39;
-                       sInd=0;
-
-                   } else if ( base_index < (base_size-20) ) {
-
-                       if (eInd > range) {
-                           sInd -= (eInd-range);
-                           eInd = range;
-                       }
-                   } else { /* base_index >= (base_size-20) */
-
-                       if (sInd < (base_size-20)) {
-                           sIndAug = 20;
-                           sInd = 0;
-                           eInd = 0;
-                           eIndAug = 19 + CB_RESRANGE;
-
-                           if(eIndAug > 39) {
-                               eInd = eIndAug-39;
-                               eIndAug = 39;
-                           }
-                       } else {
-                           sIndAug = 20 + sInd - (base_size-20);
-                           eIndAug = 39;
-                           sInd = 0;
-                           eInd = CB_RESRANGE - (eIndAug-sIndAug+1);
-                       }
-                   }
-
-               } else { /* lTarget = 22 or 23 */
-
-                   if (sInd < 0) {
-                       eInd -= sInd;
-
-
-
-
-
-                       sInd = 0;
-                   }
-
-                   if(eInd > range) {
-                       sInd -= (eInd - range);
-                       eInd = range;
-                   }
-               }
-
-           //}
-#	   endif /* CB_RESRANGE == -1 */
-
-
-           /* search of higher codebook section */
-
-           /* index search range */
-           counter = sInd;
-           sInd += base_size;
-           eInd += base_size;
-
-
-           if (stage==0) {
-               ppe = energy+base_size;
-               *ppe=0.0;
-
-               pp=cbvectors+lMem-lTarget;
-               for (j=0; j<lTarget; j++) {
-                   *ppe+=(*pp)*(*pp);
-		   ++pp;
-               }
-
-               ppi = cbvectors + lMem - 1 - lTarget;
-               ppo = cbvectors + lMem - 1;
-
-               for (j=0; j<(range-1); j++) {
-                   *(ppe+1) = *ppe + (*ppi)*(*ppi) - (*ppo)*(*ppo);
-                   ppo--;
-                   ppi--;
-                   ppe++;
-               }
-           }
-
-           /* loop over search range */
-
-           for (icount=sInd; icount<eInd; icount++) {
-
-               /* calculate measure */
-
-               crossDot=0.0;
-               pp=cbvectors + lMem - (counter++) - lTarget;
-
-               for (j=0;j<lTarget;j++) {
-
-
-
-
-
-                   crossDot += target[j]*(*pp++);
-               }
-
-               if (energy[icount]>0.0) {
-                   invenergy[icount] =(float)1.0/(energy[icount]+EPS);
-               } else {
-                   invenergy[icount] =(float)0.0;
-               }
-
-               if (stage==0) {
-
-                   measure=(float)-10000000.0;
-
-                   if (crossDot > 0.0) {
-                       measure = crossDot*crossDot*
-                           invenergy[icount];
-                   }
-               }
-               else {
-                   measure = crossDot*crossDot*invenergy[icount];
-               }
-
-               /* check if measure is better */
-               ftmp = crossDot*invenergy[icount];
-
-               if ((measure>max_measure) && (fabs(ftmp)<CB_MAXGAIN)) {
-                   best_index = icount;
-                   max_measure = measure;
-                   gain = ftmp;
-               }
-           }
-
-           /* Search the augmented CB inside the limited range. */
-
-           if ((lTarget==SUBL)&&(sIndAug!=0)) {
-               searchAugmentedCB(sIndAug, eIndAug, stage,
-                   2*base_size-20, target, cbvectors+lMem,
-                   &max_measure, &best_index, &gain, energy,
-                   invenergy);
-           }
-
-           /* record best index */
-
-           index[stage] = best_index;
-
-           /* gain quantization */
-
-           if (stage==0){
-
-
-
-
-
-
-               if (gain<0.0){
-                   gain = 0.0;
-               }
-
-               if (gain>CB_MAXGAIN) {
-                   gain = (float)CB_MAXGAIN;
-               }
-               gain = gainquant(gain, 1.0, 32, &gain_index[stage]);
-           }
-           else {
-               if (stage==1) {
-                   gain = gainquant(gain, (float)fabs(gains[stage-1]),
-                       16, &gain_index[stage]);
-               } else {
-                   gain = gainquant(gain, (float)fabs(gains[stage-1]),
-                       8, &gain_index[stage]);
-               }
-           }
-
-           /* Extract the best (according to measure)
-              codebook vector */
-
-           if (lTarget==(STATE_LEN-iLBCenc_inst->state_short_len)) {
-
-               if (index[stage]<base_size) {
-                   pp=buf+LPC_FILTERORDER+lMem-lTarget-index[stage];
-               } else {
-                   pp=cbvectors+lMem-lTarget-
-                       index[stage]+base_size;
-               }
-           } else {
-
-               if (index[stage]<base_size) {
-                   if (index[stage]<(base_size-20)) {
-                       pp=buf+LPC_FILTERORDER+lMem-
-                           lTarget-index[stage];
-                   } else {
-                       createAugmentedVec(index[stage]-base_size+40,
-                               buf+LPC_FILTERORDER+lMem,aug_vec);
-                       pp=aug_vec;
-                   }
-               } else {
-                   int filterno, position;
-
-                   filterno=index[stage]/base_size;
-                   position=index[stage]-filterno*base_size;
-
-
-
-
-
-
-
-                   if (position<(base_size-20)) {
-                       pp=cbvectors+filterno*lMem-lTarget-
-                           index[stage]+filterno*base_size;
-                   } else {
-                       createAugmentedVec(
-                           index[stage]-(filterno+1)*base_size+40,
-                           cbvectors+filterno*lMem,aug_vec);
-                       pp=aug_vec;
-                   }
-               }
-           }
-
-           /* Subtract the best codebook vector, according
-              to measure, from the target vector */
-
-           for (j=0;j<lTarget;j++) {
-               cvec[j] += gain*(*pp);
-               target[j] -= gain*(*pp++);
-           }
-
-           /* record quantized gain */
-
-           gains[stage]=gain;
-
-       }/* end of Main Loop. for (stage=0;... */
-
-       /* Gain adjustment for energy matching */
-       cene=0.0;
-       for (i=0; i<lTarget; i++) {
-           cene+=cvec[i]*cvec[i];
-       }
-       j=gain_index[0];
-
-       for (i=gain_index[0]; i<32; i++) {
-           ftmp=cene*gain_sq5Tbl[i]*gain_sq5Tbl[i];
-
-           if ((ftmp<(tene*gains[0]*gains[0])) &&
-               (gain_sq5Tbl[j]<(2.0*gains[0]))) {
-               j=i;
-           }
-       }
-       gain_index[0]=j;
-   }
-
-
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h b/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h
deleted file mode 100644
index a61db15403..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iCBSearch.h
+++ /dev/null
@@ -1,37 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iCBSearch.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_ICBSEARCH_H
-   #define __iLBC_ICBSEARCH_H
-
-
-
-
-
-
-   void iCBSearch(
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                           /* (i) the encoder state structure */
-       int *index,         /* (o) Codebook indices */
-       int *gain_index,/* (o) Gain quantization indices */
-       float *intarget,/* (i) Target vector for encoding */
-       float *mem,         /* (i) Buffer for codebook construction */
-       int lMem,           /* (i) Length of buffer */
-       int lTarget,    /* (i) Length of vector */
-       int nStages,    /* (i) Number of codebook stages */
-       float *weightDenum, /* (i) weighting filter coefficients */
-       float *weightState, /* (i) weighting filter state */
-       int block           /* (i) the sub-block number */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c
deleted file mode 100644
index 33d3f740f4..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.c
+++ /dev/null
@@ -1,652 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iLBC_decode.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <stdlib.h>
-
-   #include "iLBC_define.h"
-   #include "StateConstructW.h"
-   #include "LPCdecode.h"
-   #include "iCBConstruct.h"
-   #include "doCPLC.h"
-   #include "helpfun.h"
-   #include "constants.h"
-   #include "packing.h"
-   #include "string.h"
-   #include "enhancer.h"
-   #include "hpOutput.h"
-   #include "syntFilter.h"
-
-   /*----------------------------------------------------------------*
-    *  Initiation of decoder instance.
-    *---------------------------------------------------------------*/
-
-   short initDecode(                   /* (o) Number of decoded
-                                              samples */
-       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) Decoder instance */
-       int mode,                       /* (i) frame size mode */
-       int use_enhancer                /* (i) 1 to use enhancer
-                                              0 to run without
-                                                enhancer */
-   ){
-       int i;
-
-       iLBCdec_inst->mode = mode;
-
-
-
-
-
-       if (mode==30) {
-           iLBCdec_inst->blockl = BLOCKL_30MS;
-           iLBCdec_inst->nsub = NSUB_30MS;
-           iLBCdec_inst->nasub = NASUB_30MS;
-           iLBCdec_inst->lpc_n = LPC_N_30MS;
-           iLBCdec_inst->no_of_bytes = NO_OF_BYTES_30MS;
-           iLBCdec_inst->no_of_words = NO_OF_WORDS_30MS;
-           iLBCdec_inst->state_short_len=STATE_SHORT_LEN_30MS;
-           /* ULP init */
-           iLBCdec_inst->ULP_inst=&ULP_30msTbl;
-       }
-       else if (mode==20) {
-           iLBCdec_inst->blockl = BLOCKL_20MS;
-           iLBCdec_inst->nsub = NSUB_20MS;
-           iLBCdec_inst->nasub = NASUB_20MS;
-           iLBCdec_inst->lpc_n = LPC_N_20MS;
-           iLBCdec_inst->no_of_bytes = NO_OF_BYTES_20MS;
-           iLBCdec_inst->no_of_words = NO_OF_WORDS_20MS;
-           iLBCdec_inst->state_short_len=STATE_SHORT_LEN_20MS;
-           /* ULP init */
-           iLBCdec_inst->ULP_inst=&ULP_20msTbl;
-       }
-       else {
-           exit(2);
-       }
-
-       memset(iLBCdec_inst->syntMem, 0,
-           LPC_FILTERORDER*sizeof(float));
-       memcpy((*iLBCdec_inst).lsfdeqold, lsfmeanTbl,
-           LPC_FILTERORDER*sizeof(float));
-
-       memset(iLBCdec_inst->old_syntdenum, 0,
-           ((LPC_FILTERORDER + 1)*NSUB_MAX)*sizeof(float));
-       for (i=0; i<NSUB_MAX; i++)
-           iLBCdec_inst->old_syntdenum[i*(LPC_FILTERORDER+1)]=1.0;
-
-       iLBCdec_inst->last_lag = 20;
-
-       iLBCdec_inst->prevLag = 120;
-       iLBCdec_inst->per = 0.0;
-       iLBCdec_inst->consPLICount = 0;
-       iLBCdec_inst->prevPLI = 0;
-       iLBCdec_inst->prevLpc[0] = 1.0;
-       memset(iLBCdec_inst->prevLpc+1,0,
-           LPC_FILTERORDER*sizeof(float));
-       memset(iLBCdec_inst->prevResidual, 0, BLOCKL_MAX*sizeof(float));
-       iLBCdec_inst->seed=777;
-
-
-
-
-
-
-       memset(iLBCdec_inst->hpomem, 0, 4*sizeof(float));
-
-       iLBCdec_inst->use_enhancer = use_enhancer;
-       memset(iLBCdec_inst->enh_buf, 0, ENH_BUFL*sizeof(float));
-       for (i=0;i<ENH_NBLOCKS_TOT;i++)
-           iLBCdec_inst->enh_period[i]=(float)40.0;
-
-       iLBCdec_inst->prev_enh_pl = 0;
-
-       return (short)(iLBCdec_inst->blockl);
-   }
-
-   /*----------------------------------------------------------------*
-    *  frame residual decoder function (subrutine to iLBC_decode)
-    *---------------------------------------------------------------*/
-
-   void Decode(
-       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) the decoder state
-                                                structure */
-       float *decresidual,             /* (o) decoded residual frame */
-       int start,                      /* (i) location of start
-                                              state */
-       int idxForMax,                  /* (i) codebook index for the
-                                              maximum value */
-       int *idxVec,                /* (i) codebook indexes for the
-                                              samples  in the start
-                                              state */
-       float *syntdenum,               /* (i) the decoded synthesis
-                                              filter coefficients */
-       int *cb_index,                  /* (i) the indexes for the
-                                              adaptive codebook */
-       int *gain_index,            /* (i) the indexes for the
-                                              corresponding gains */
-       int *extra_cb_index,        /* (i) the indexes for the
-                                              adaptive codebook part
-                                              of start state */
-       int *extra_gain_index,          /* (i) the indexes for the
-                                              corresponding gains */
-       int state_first                 /* (i) 1 if non adaptive part
-                                              of start state comes
-                                              first 0 if that part
-                                              comes last */
-   ){
-       float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
-       int k, meml_gotten, Nfor, Nback, i;
-       int diff, start_pos;
-       int subcount, subframe;
-
-
-
-
-
-
-       diff = STATE_LEN - iLBCdec_inst->state_short_len;
-
-       if (state_first == 1) {
-           start_pos = (start-1)*SUBL;
-       } else {
-           start_pos = (start-1)*SUBL + diff;
-       }
-
-       /* decode scalar part of start state */
-
-       StateConstructW(idxForMax, idxVec,
-           &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
-           &decresidual[start_pos], iLBCdec_inst->state_short_len);
-
-
-       if (state_first) { /* put adaptive part in the end */
-
-           /* setup memory */
-
-           memset(mem, 0,
-               (CB_MEML-iLBCdec_inst->state_short_len)*sizeof(float));
-           memcpy(mem+CB_MEML-iLBCdec_inst->state_short_len,
-               decresidual+start_pos,
-               iLBCdec_inst->state_short_len*sizeof(float));
-
-           /* construct decoded vector */
-
-           iCBConstruct(
-               &decresidual[start_pos+iLBCdec_inst->state_short_len],
-               extra_cb_index, extra_gain_index, mem+CB_MEML-stMemLTbl,
-               stMemLTbl, diff, CB_NSTAGES);
-
-       }
-       else {/* put adaptive part in the beginning */
-
-           /* create reversed vectors for prediction */
-
-           for (k=0; k<diff; k++) {
-               reverseDecresidual[k] =
-                   decresidual[(start+1)*SUBL-1-
-                           (k+iLBCdec_inst->state_short_len)];
-           }
-
-           /* setup memory */
-
-           meml_gotten = iLBCdec_inst->state_short_len;
-           for (k=0; k<meml_gotten; k++){
-               mem[CB_MEML-1-k] = decresidual[start_pos + k];
-
-
-
-
-
-           }
-           memset(mem, 0, (CB_MEML-k)*sizeof(float));
-
-           /* construct decoded vector */
-
-           iCBConstruct(reverseDecresidual, extra_cb_index,
-               extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
-               diff, CB_NSTAGES);
-
-           /* get decoded residual from reversed vector */
-
-           for (k=0; k<diff; k++) {
-               decresidual[start_pos-1-k] = reverseDecresidual[k];
-           }
-       }
-
-       /* counter for predicted sub-frames */
-
-       subcount=0;
-
-       /* forward prediction of sub-frames */
-
-       Nfor = iLBCdec_inst->nsub-start-1;
-
-       if ( Nfor > 0 ){
-
-           /* setup memory */
-
-           memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
-           memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
-               STATE_LEN*sizeof(float));
-
-           /* loop over sub-frames to encode */
-
-           for (subframe=0; subframe<Nfor; subframe++) {
-
-               /* construct decoded vector */
-
-               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
-                   cb_index+subcount*CB_NSTAGES,
-                   gain_index+subcount*CB_NSTAGES,
-                   mem+CB_MEML-memLfTbl[subcount],
-                   memLfTbl[subcount], SUBL, CB_NSTAGES);
-
-               /* update memory */
-
-               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
-               memcpy(mem+CB_MEML-SUBL,
-
-
-
-
-
-                   &decresidual[(start+1+subframe)*SUBL],
-                   SUBL*sizeof(float));
-
-               subcount++;
-
-           }
-
-       }
-
-       /* backward prediction of sub-frames */
-
-       Nback = start-1;
-
-       if ( Nback > 0 ) {
-
-           /* setup memory */
-
-           meml_gotten = SUBL*(iLBCdec_inst->nsub+1-start);
-
-           if ( meml_gotten > CB_MEML ) {
-               meml_gotten=CB_MEML;
-           }
-           for (k=0; k<meml_gotten; k++) {
-               mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
-           }
-           memset(mem, 0, (CB_MEML-k)*sizeof(float));
-
-           /* loop over subframes to decode */
-
-           for (subframe=0; subframe<Nback; subframe++) {
-
-               /* construct decoded vector */
-
-               iCBConstruct(&reverseDecresidual[subframe*SUBL],
-                   cb_index+subcount*CB_NSTAGES,
-                   gain_index+subcount*CB_NSTAGES,
-                   mem+CB_MEML-memLfTbl[subcount], memLfTbl[subcount],
-                   SUBL, CB_NSTAGES);
-
-               /* update memory */
-
-               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
-               memcpy(mem+CB_MEML-SUBL,
-                   &reverseDecresidual[subframe*SUBL],
-                   SUBL*sizeof(float));
-
-               subcount++;
-           }
-
-
-
-
-
-           /* get decoded residual from reversed vector */
-
-           for (i=0; i<SUBL*Nback; i++)
-               decresidual[SUBL*Nback - i - 1] =
-               reverseDecresidual[i];
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  main decoder function
-    *---------------------------------------------------------------*/
-
-   void iLBC_decode(
-       float *decblock,            /* (o) decoded signal block */
-       unsigned char *bytes,           /* (i) encoded signal bits */
-       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) the decoder state
-                                                structure */
-       int mode                    /* (i) 0: bad packet, PLC,
-                                              1: normal */
-   ){
-       float data[BLOCKL_MAX];
-       float lsfdeq[LPC_FILTERORDER*LPC_N_MAX];
-       float PLCresidual[BLOCKL_MAX], PLClpc[LPC_FILTERORDER + 1];
-       float zeros[BLOCKL_MAX], one[LPC_FILTERORDER + 1];
-       int k, i, start, idxForMax, pos, lastpart, ulp;
-       int lag, ilag;
-       float cc, maxcc;
-       int idxVec[STATE_LEN];
-       int check;
-       int gain_index[NASUB_MAX*CB_NSTAGES],
-           extra_gain_index[CB_NSTAGES];
-       int cb_index[CB_NSTAGES*NASUB_MAX], extra_cb_index[CB_NSTAGES];
-       int lsf_i[LSF_NSPLIT*LPC_N_MAX];
-       int state_first;
-       int last_bit;
-       unsigned char *pbytes;
-       float weightdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
-       int order_plus_one;
-       float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
-       float decresidual[BLOCKL_MAX];
-
-       if (mode>0) { /* the data are good */
-
-           /* decode data */
-
-           pbytes=bytes;
-           pos=0;
-
-
-
-
-
-
-           /* Set everything to zero before decoding */
-
-           for (k=0; k<LSF_NSPLIT*LPC_N_MAX; k++) {
-               lsf_i[k]=0;
-           }
-           start=0;
-           state_first=0;
-           idxForMax=0;
-           for (k=0; k<iLBCdec_inst->state_short_len; k++) {
-               idxVec[k]=0;
-           }
-           for (k=0; k<CB_NSTAGES; k++) {
-               extra_cb_index[k]=0;
-           }
-           for (k=0; k<CB_NSTAGES; k++) {
-               extra_gain_index[k]=0;
-           }
-           for (i=0; i<iLBCdec_inst->nasub; i++) {
-               for (k=0; k<CB_NSTAGES; k++) {
-                   cb_index[i*CB_NSTAGES+k]=0;
-               }
-           }
-           for (i=0; i<iLBCdec_inst->nasub; i++) {
-               for (k=0; k<CB_NSTAGES; k++) {
-                   gain_index[i*CB_NSTAGES+k]=0;
-               }
-           }
-
-           /* loop over ULP classes */
-
-           for (ulp=0; ulp<3; ulp++) {
-
-               /* LSF */
-               for (k=0; k<LSF_NSPLIT*iLBCdec_inst->lpc_n; k++){
-                   unpack( &pbytes, &lastpart,
-                       iLBCdec_inst->ULP_inst->lsf_bits[k][ulp], &pos);
-                   packcombine(&lsf_i[k], lastpart,
-                       iLBCdec_inst->ULP_inst->lsf_bits[k][ulp]);
-               }
-
-               /* Start block info */
-
-               unpack( &pbytes, &lastpart,
-                   iLBCdec_inst->ULP_inst->start_bits[ulp], &pos);
-               packcombine(&start, lastpart,
-                   iLBCdec_inst->ULP_inst->start_bits[ulp]);
-
-               unpack( &pbytes, &lastpart,
-
-
-
-
-
-                   iLBCdec_inst->ULP_inst->startfirst_bits[ulp], &pos);
-               packcombine(&state_first, lastpart,
-                   iLBCdec_inst->ULP_inst->startfirst_bits[ulp]);
-
-               unpack( &pbytes, &lastpart,
-                   iLBCdec_inst->ULP_inst->scale_bits[ulp], &pos);
-               packcombine(&idxForMax, lastpart,
-                   iLBCdec_inst->ULP_inst->scale_bits[ulp]);
-
-               for (k=0; k<iLBCdec_inst->state_short_len; k++) {
-                   unpack( &pbytes, &lastpart,
-                       iLBCdec_inst->ULP_inst->state_bits[ulp], &pos);
-                   packcombine(idxVec+k, lastpart,
-                       iLBCdec_inst->ULP_inst->state_bits[ulp]);
-               }
-
-               /* 23/22 (20ms/30ms) sample block */
-
-               for (k=0; k<CB_NSTAGES; k++) {
-                   unpack( &pbytes, &lastpart,
-                       iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp],
-                       &pos);
-                   packcombine(extra_cb_index+k, lastpart,
-                       iLBCdec_inst->ULP_inst->extra_cb_index[k][ulp]);
-               }
-               for (k=0; k<CB_NSTAGES; k++) {
-                   unpack( &pbytes, &lastpart,
-                       iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp],
-                       &pos);
-                   packcombine(extra_gain_index+k, lastpart,
-                       iLBCdec_inst->ULP_inst->extra_cb_gain[k][ulp]);
-               }
-
-               /* The two/four (20ms/30ms) 40 sample sub-blocks */
-
-               for (i=0; i<iLBCdec_inst->nasub; i++) {
-                   for (k=0; k<CB_NSTAGES; k++) {
-                       unpack( &pbytes, &lastpart,
-                       iLBCdec_inst->ULP_inst->cb_index[i][k][ulp],
-                           &pos);
-                       packcombine(cb_index+i*CB_NSTAGES+k, lastpart,
-                       iLBCdec_inst->ULP_inst->cb_index[i][k][ulp]);
-                   }
-               }
-
-               for (i=0; i<iLBCdec_inst->nasub; i++) {
-                   for (k=0; k<CB_NSTAGES; k++) {
-                       unpack( &pbytes, &lastpart,
-
-
-
-
-
-                       iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp],
-                           &pos);
-                       packcombine(gain_index+i*CB_NSTAGES+k, lastpart,
-                           iLBCdec_inst->ULP_inst->cb_gain[i][k][ulp]);
-                   }
-               }
-           }
-           /* Extract last bit. If it is 1 this indicates an
-              empty/lost frame */
-           unpack( &pbytes, &last_bit, 1, &pos);
-
-           /* Check for bit errors or empty/lost frames */
-           if (start<1)
-               mode = 0;
-           if (iLBCdec_inst->mode==20 && start>3)
-               mode = 0;
-           if (iLBCdec_inst->mode==30 && start>5)
-               mode = 0;
-           if (last_bit==1)
-               mode = 0;
-
-           if (mode==1) { /* No bit errors was detected,
-                             continue decoding */
-
-               /* adjust index */
-               index_conv_dec(cb_index);
-
-               /* decode the lsf */
-
-               SimplelsfDEQ(lsfdeq, lsf_i, iLBCdec_inst->lpc_n);
-               check=LSF_check(lsfdeq, LPC_FILTERORDER,
-                   iLBCdec_inst->lpc_n);
-               DecoderInterpolateLSF(syntdenum, weightdenum,
-                   lsfdeq, LPC_FILTERORDER, iLBCdec_inst);
-
-               Decode(iLBCdec_inst, decresidual, start, idxForMax,
-                   idxVec, syntdenum, cb_index, gain_index,
-                   extra_cb_index, extra_gain_index,
-                   state_first);
-
-               /* preparing the plc for a future loss! */
-
-               doThePLC(PLCresidual, PLClpc, 0, decresidual,
-                   syntdenum +
-                   (LPC_FILTERORDER + 1)*(iLBCdec_inst->nsub - 1),
-                   (*iLBCdec_inst).last_lag, iLBCdec_inst);
-
-
-
-
-
-
-
-               memcpy(decresidual, PLCresidual,
-                   iLBCdec_inst->blockl*sizeof(float));
-           }
-
-       }
-
-       if (mode == 0) {
-           /* the data is bad (either a PLC call
-            * was made or a severe bit error was detected)
-            */
-
-           /* packet loss conceal */
-
-           memset(zeros, 0, BLOCKL_MAX*sizeof(float));
-
-           one[0] = 1;
-           memset(one+1, 0, LPC_FILTERORDER*sizeof(float));
-
-           start=0;
-
-           doThePLC(PLCresidual, PLClpc, 1, zeros, one,
-               (*iLBCdec_inst).last_lag, iLBCdec_inst);
-           memcpy(decresidual, PLCresidual,
-               iLBCdec_inst->blockl*sizeof(float));
-
-           order_plus_one = LPC_FILTERORDER + 1;
-           for (i = 0; i < iLBCdec_inst->nsub; i++) {
-               memcpy(syntdenum+(i*order_plus_one), PLClpc,
-                   order_plus_one*sizeof(float));
-           }
-       }
-
-       if (iLBCdec_inst->use_enhancer == 1) {
-
-           /* post filtering */
-
-           iLBCdec_inst->last_lag =
-               enhancerInterface(data, decresidual, iLBCdec_inst);
-
-           /* synthesis filtering */
-
-           if (iLBCdec_inst->mode==20) {
-               /* Enhancer has 40 samples delay */
-               i=0;
-               syntFilter(data + i*SUBL,
-                   iLBCdec_inst->old_syntdenum +
-                   (i+iLBCdec_inst->nsub-1)*(LPC_FILTERORDER+1),
-                   SUBL, iLBCdec_inst->syntMem);
-
-
-
-
-
-               for (i=1; i < iLBCdec_inst->nsub; i++) {
-                   syntFilter(data + i*SUBL,
-                       syntdenum + (i-1)*(LPC_FILTERORDER+1),
-                       SUBL, iLBCdec_inst->syntMem);
-               }
-           } else if (iLBCdec_inst->mode==30) {
-               /* Enhancer has 80 samples delay */
-               for (i=0; i < 2; i++) {
-                   syntFilter(data + i*SUBL,
-                       iLBCdec_inst->old_syntdenum +
-                       (i+iLBCdec_inst->nsub-2)*(LPC_FILTERORDER+1),
-                       SUBL, iLBCdec_inst->syntMem);
-               }
-               for (i=2; i < iLBCdec_inst->nsub; i++) {
-                   syntFilter(data + i*SUBL,
-                       syntdenum + (i-2)*(LPC_FILTERORDER+1), SUBL,
-                       iLBCdec_inst->syntMem);
-               }
-           }
-
-       } else {
-
-           /* Find last lag */
-           lag = 20;
-           maxcc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
-               &decresidual[BLOCKL_MAX-ENH_BLOCKL-lag], ENH_BLOCKL);
-
-           for (ilag=21; ilag<120; ilag++) {
-               cc = xCorrCoef(&decresidual[BLOCKL_MAX-ENH_BLOCKL],
-                   &decresidual[BLOCKL_MAX-ENH_BLOCKL-ilag],
-                   ENH_BLOCKL);
-
-               if (cc > maxcc) {
-                   maxcc = cc;
-                   lag = ilag;
-               }
-           }
-           iLBCdec_inst->last_lag = lag;
-
-           /* copy data and run synthesis filter */
-
-           memcpy(data, decresidual,
-               iLBCdec_inst->blockl*sizeof(float));
-           for (i=0; i < iLBCdec_inst->nsub; i++) {
-               syntFilter(data + i*SUBL,
-                   syntdenum + i*(LPC_FILTERORDER+1), SUBL,
-                   iLBCdec_inst->syntMem);
-           }
-
-
-
-
-
-       }
-
-       /* high pass filtering on output if desired, otherwise
-          copy to out */
-
-       hpOutput(data, iLBCdec_inst->blockl,
-                   decblock,iLBCdec_inst->hpomem);
-
-       /* memcpy(decblock,data,iLBCdec_inst->blockl*sizeof(float));*/
-
-       memcpy(iLBCdec_inst->old_syntdenum, syntdenum,
-
-           iLBCdec_inst->nsub*(LPC_FILTERORDER+1)*sizeof(float));
-
-       iLBCdec_inst->prev_enh_pl=0;
-
-       if (mode==0) { /* PLC was used */
-           iLBCdec_inst->prev_enh_pl=1;
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h
deleted file mode 100644
index 5f4384dcde..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_decode.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iLBC_decode.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_ILBCDECODE_H
-   #define __iLBC_ILBCDECODE_H
-
-   #include "iLBC_define.h"
-
-   short initDecode(                   /* (o) Number of decoded
-                                              samples */
-       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) Decoder instance */
-       int mode,                       /* (i) frame size mode */
-       int use_enhancer                /* (i) 1 to use enhancer
-                                              0 to run without
-                                                enhancer */
-   );
-
-   void iLBC_decode(
-       float *decblock,            /* (o) decoded signal block */
-       unsigned char *bytes,           /* (i) encoded signal bits */
-       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) the decoder state
-                                                structure */
-       int mode                    /* (i) 0: bad packet, PLC,
-                                              1: normal */
-
-
-
-
-
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h
deleted file mode 100644
index 480c834b97..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_define.h
+++ /dev/null
@@ -1,217 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iLBC_define.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-   #include <string.h>
-
-   #ifndef __iLBC_ILBCDEFINE_H
-   #define __iLBC_ILBCDEFINE_H
-
-   /* general codec settings */
-
-   #define FS                      (float)8000.0
-   #define BLOCKL_20MS             160
-   #define BLOCKL_30MS             240
-   #define BLOCKL_MAX              240
-   #define NSUB_20MS               4
-   #define NSUB_30MS               6
-   #define NSUB_MAX            6
-   #define NASUB_20MS              2
-
-
-
-
-
-   #define NASUB_30MS              4
-   #define NASUB_MAX               4
-   #define SUBL                40
-   #define STATE_LEN               80
-   #define STATE_SHORT_LEN_30MS    58
-   #define STATE_SHORT_LEN_20MS    57
-
-   /* LPC settings */
-
-   #define LPC_FILTERORDER         10
-   #define LPC_CHIRP_SYNTDENUM     (float)0.9025
-   #define LPC_CHIRP_WEIGHTDENUM   (float)0.4222
-   #define LPC_LOOKBACK        60
-   #define LPC_N_20MS              1
-   #define LPC_N_30MS              2
-   #define LPC_N_MAX               2
-   #define LPC_ASYMDIFF        20
-   #define LPC_BW                  (float)60.0
-   #define LPC_WN                  (float)1.0001
-   #define LSF_NSPLIT              3
-   #define LSF_NUMBER_OF_STEPS     4
-   #define LPC_HALFORDER           (LPC_FILTERORDER/2)
-
-   /* cb settings */
-
-   #define CB_NSTAGES              3
-   #define CB_EXPAND               2
-   #define CB_MEML                 147
-   #define CB_FILTERLEN        2*4
-   #define CB_HALFFILTERLEN    4
-   #define CB_RESRANGE             34
-   #define CB_MAXGAIN              (float)1.3
-
-   /* enhancer */
-
-   #define ENH_BLOCKL              80  /* block length */
-   #define ENH_BLOCKL_HALF         (ENH_BLOCKL/2)
-   #define ENH_HL                  3   /* 2*ENH_HL+1 is number blocks
-                                          in said second sequence */
-   #define ENH_SLOP            2   /* max difference estimated and
-                                          correct pitch period */
-   #define ENH_PLOCSL              20  /* pitch-estimates and pitch-
-                                          locations buffer length */
-   #define ENH_OVERHANG        2
-   #define ENH_UPS0            4   /* upsampling rate */
-   #define ENH_FL0                 3   /* 2*FLO+1 is the length of
-                                          each filter */
-   #define ENH_VECTL               (ENH_BLOCKL+2*ENH_FL0)
-
-
-
-
-
-   #define ENH_CORRDIM             (2*ENH_SLOP+1)
-   #define ENH_NBLOCKS             (BLOCKL_MAX/ENH_BLOCKL)
-   #define ENH_NBLOCKS_EXTRA       5
-   #define ENH_NBLOCKS_TOT         8   /* ENH_NBLOCKS +
-                                          ENH_NBLOCKS_EXTRA */
-   #define ENH_BUFL            (ENH_NBLOCKS_TOT)*ENH_BLOCKL
-   #define ENH_ALPHA0              (float)0.05
-
-   /* Down sampling */
-
-   #define FILTERORDER_DS          7
-   #define DELAY_DS            3
-   #define FACTOR_DS               2
-
-   /* bit stream defs */
-
-   #define NO_OF_BYTES_20MS    38
-   #define NO_OF_BYTES_30MS    50
-   #define NO_OF_WORDS_20MS    19
-   #define NO_OF_WORDS_30MS    25
-   #define STATE_BITS              3
-   #define BYTE_LEN            8
-   #define ULP_CLASSES             3
-
-   /* help parameters */
-
-   #define FLOAT_MAX               (float)1.0e37
-   #define EPS                     (float)2.220446049250313e-016
-   #define PI                      (float)3.14159265358979323846
-   #define MIN_SAMPLE              -32768
-   #define MAX_SAMPLE              32767
-   #define TWO_PI                  (float)6.283185307
-   #define PI2                     (float)0.159154943
-
-   /* type definition encoder instance */
-   typedef struct iLBC_ULP_Inst_t_ {
-       int lsf_bits[6][ULP_CLASSES+2];
-       int start_bits[ULP_CLASSES+2];
-       int startfirst_bits[ULP_CLASSES+2];
-       int scale_bits[ULP_CLASSES+2];
-       int state_bits[ULP_CLASSES+2];
-       int extra_cb_index[CB_NSTAGES][ULP_CLASSES+2];
-       int extra_cb_gain[CB_NSTAGES][ULP_CLASSES+2];
-       int cb_index[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2];
-       int cb_gain[NSUB_MAX][CB_NSTAGES][ULP_CLASSES+2];
-   } iLBC_ULP_Inst_t;
-
-   /* type definition encoder instance */
-
-
-
-
-
-   typedef struct iLBC_Enc_Inst_t_ {
-
-       /* flag for frame size mode */
-       int mode;
-
-       /* basic parameters for different frame sizes */
-       int blockl;
-       int nsub;
-       int nasub;
-       int no_of_bytes, no_of_words;
-       int lpc_n;
-       int state_short_len;
-       const iLBC_ULP_Inst_t *ULP_inst;
-
-       /* analysis filter state */
-       float anaMem[LPC_FILTERORDER];
-
-       /* old lsf parameters for interpolation */
-       float lsfold[LPC_FILTERORDER];
-       float lsfdeqold[LPC_FILTERORDER];
-
-       /* signal buffer for LP analysis */
-       float lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX];
-
-       /* state of input HP filter */
-       float hpimem[4];
-
-   } iLBC_Enc_Inst_t;
-
-   /* type definition decoder instance */
-   typedef struct iLBC_Dec_Inst_t_ {
-
-       /* flag for frame size mode */
-       int mode;
-
-       /* basic parameters for different frame sizes */
-       int blockl;
-       int nsub;
-       int nasub;
-       int no_of_bytes, no_of_words;
-       int lpc_n;
-       int state_short_len;
-       const iLBC_ULP_Inst_t *ULP_inst;
-
-       /* synthesis filter state */
-       float syntMem[LPC_FILTERORDER];
-
-       /* old LSF for interpolation */
-
-
-
-
-
-       float lsfdeqold[LPC_FILTERORDER];
-
-       /* pitch lag estimated in enhancer and used in PLC */
-       int last_lag;
-
-       /* PLC state information */
-       int prevLag, consPLICount, prevPLI, prev_enh_pl;
-       float prevLpc[LPC_FILTERORDER+1];
-       float prevResidual[NSUB_MAX*SUBL];
-       float per;
-       unsigned long seed;
-
-       /* previous synthesis filter parameters */
-       float old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX];
-
-       /* state of output HP filter */
-       float hpomem[4];
-
-       /* enhancer state information */
-       int use_enhancer;
-       float enh_buf[ENH_BUFL];
-       float enh_period[ENH_NBLOCKS_TOT];
-
-   } iLBC_Dec_Inst_t;
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c
deleted file mode 100644
index 438545883d..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.c
+++ /dev/null
@@ -1,543 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iLBC_encode.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <stdlib.h>
-   #include <string.h>
-
-   #include "iLBC_define.h"
-   #include "LPCencode.h"
-   #include "FrameClassify.h"
-   #include "StateSearchW.h"
-   #include "StateConstructW.h"
-   #include "helpfun.h"
-   #include "constants.h"
-   #include "packing.h"
-   #include "iCBSearch.h"
-   #include "iCBConstruct.h"
-   #include "hpInput.h"
-   #include "anaFilter.h"
-   #include "syntFilter.h"
-
-   /*----------------------------------------------------------------*
-    *  Initiation of encoder instance.
-    *---------------------------------------------------------------*/
-
-   short initEncode(                   /* (o) Number of bytes
-                                              encoded */
-       iLBC_Enc_Inst_t *iLBCenc_inst,  /* (i/o) Encoder instance */
-       int mode                    /* (i) frame size mode */
-   ){
-       iLBCenc_inst->mode = mode;
-       if (mode==30) {
-           iLBCenc_inst->blockl = BLOCKL_30MS;
-           iLBCenc_inst->nsub = NSUB_30MS;
-           iLBCenc_inst->nasub = NASUB_30MS;
-           iLBCenc_inst->lpc_n = LPC_N_30MS;
-           iLBCenc_inst->no_of_bytes = NO_OF_BYTES_30MS;
-           iLBCenc_inst->no_of_words = NO_OF_WORDS_30MS;
-
-
-
-
-
-           iLBCenc_inst->state_short_len=STATE_SHORT_LEN_30MS;
-           /* ULP init */
-           iLBCenc_inst->ULP_inst=&ULP_30msTbl;
-       }
-       else if (mode==20) {
-           iLBCenc_inst->blockl = BLOCKL_20MS;
-           iLBCenc_inst->nsub = NSUB_20MS;
-           iLBCenc_inst->nasub = NASUB_20MS;
-           iLBCenc_inst->lpc_n = LPC_N_20MS;
-           iLBCenc_inst->no_of_bytes = NO_OF_BYTES_20MS;
-           iLBCenc_inst->no_of_words = NO_OF_WORDS_20MS;
-           iLBCenc_inst->state_short_len=STATE_SHORT_LEN_20MS;
-           /* ULP init */
-           iLBCenc_inst->ULP_inst=&ULP_20msTbl;
-       }
-       else {
-           exit(2);
-       }
-
-       memset((*iLBCenc_inst).anaMem, 0,
-           LPC_FILTERORDER*sizeof(float));
-       memcpy((*iLBCenc_inst).lsfold, lsfmeanTbl,
-           LPC_FILTERORDER*sizeof(float));
-       memcpy((*iLBCenc_inst).lsfdeqold, lsfmeanTbl,
-           LPC_FILTERORDER*sizeof(float));
-       memset((*iLBCenc_inst).lpc_buffer, 0,
-           (LPC_LOOKBACK+BLOCKL_MAX)*sizeof(float));
-       memset((*iLBCenc_inst).hpimem, 0, 4*sizeof(float));
-
-       return (short)(iLBCenc_inst->no_of_bytes);
-   }
-
-   /*----------------------------------------------------------------*
-    *  main encoder function
-    *---------------------------------------------------------------*/
-
-   void iLBC_encode(
-       unsigned char *bytes,           /* (o) encoded data bits iLBC */
-       float *block,                   /* (o) speech vector to
-                                              encode */
-       iLBC_Enc_Inst_t *iLBCenc_inst   /* (i/o) the general encoder
-                                              state */
-   ){
-
-       float data[BLOCKL_MAX];
-       float residual[BLOCKL_MAX], reverseResidual[BLOCKL_MAX];
-
-       int start, idxForMax, idxVec[STATE_LEN];
-
-
-
-
-
-       float reverseDecresidual[BLOCKL_MAX], mem[CB_MEML];
-       int n, k, meml_gotten, Nfor, Nback, i, pos;
-       int gain_index[CB_NSTAGES*NASUB_MAX],
-           extra_gain_index[CB_NSTAGES];
-       int cb_index[CB_NSTAGES*NASUB_MAX],extra_cb_index[CB_NSTAGES];
-       int lsf_i[LSF_NSPLIT*LPC_N_MAX];
-       unsigned char *pbytes;
-       int diff, start_pos, state_first;
-       float en1, en2;
-       int index, ulp, firstpart;
-       int subcount, subframe;
-       float weightState[LPC_FILTERORDER];
-       float syntdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
-       float weightdenum[NSUB_MAX*(LPC_FILTERORDER+1)];
-       float decresidual[BLOCKL_MAX];
-
-       /* high pass filtering of input signal if such is not done
-              prior to calling this function */
-
-       hpInput(block, iLBCenc_inst->blockl,
-                   data, (*iLBCenc_inst).hpimem);
-
-       /* otherwise simply copy */
-
-       /*memcpy(data,block,iLBCenc_inst->blockl*sizeof(float));*/
-
-       /* LPC of hp filtered input data */
-
-       LPCencode(syntdenum, weightdenum, lsf_i, data, iLBCenc_inst);
-
-
-       /* inverse filter to get residual */
-
-       for (n=0; n<iLBCenc_inst->nsub; n++) {
-           anaFilter(&data[n*SUBL], &syntdenum[n*(LPC_FILTERORDER+1)],
-               SUBL, &residual[n*SUBL], iLBCenc_inst->anaMem);
-       }
-
-       /* find state location */
-
-       start = FrameClassify(iLBCenc_inst, residual);
-
-       /* check if state should be in first or last part of the
-       two subframes */
-
-       diff = STATE_LEN - iLBCenc_inst->state_short_len;
-       en1 = 0;
-       index = (start-1)*SUBL;
-
-
-
-
-
-       for (i = 0; i < iLBCenc_inst->state_short_len; i++) {
-           en1 += residual[index+i]*residual[index+i];
-       }
-       en2 = 0;
-       index = (start-1)*SUBL+diff;
-       for (i = 0; i < iLBCenc_inst->state_short_len; i++) {
-           en2 += residual[index+i]*residual[index+i];
-       }
-
-
-       if (en1 > en2) {
-           state_first = 1;
-           start_pos = (start-1)*SUBL;
-       } else {
-           state_first = 0;
-           start_pos = (start-1)*SUBL + diff;
-       }
-
-       /* scalar quantization of state */
-
-       StateSearchW(iLBCenc_inst, &residual[start_pos],
-           &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
-           &weightdenum[(start-1)*(LPC_FILTERORDER+1)], &idxForMax,
-           idxVec, iLBCenc_inst->state_short_len, state_first);
-
-       StateConstructW(idxForMax, idxVec,
-           &syntdenum[(start-1)*(LPC_FILTERORDER+1)],
-           &decresidual[start_pos], iLBCenc_inst->state_short_len);
-
-       /* predictive quantization in state */
-
-       if (state_first) { /* put adaptive part in the end */
-
-           /* setup memory */
-
-           memset(mem, 0,
-               (CB_MEML-iLBCenc_inst->state_short_len)*sizeof(float));
-           memcpy(mem+CB_MEML-iLBCenc_inst->state_short_len,
-               decresidual+start_pos,
-               iLBCenc_inst->state_short_len*sizeof(float));
-           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
-
-           /* encode sub-frames */
-
-           iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index,
-               &residual[start_pos+iLBCenc_inst->state_short_len],
-               mem+CB_MEML-stMemLTbl,
-               stMemLTbl, diff, CB_NSTAGES,
-
-
-
-
-
-               &weightdenum[start*(LPC_FILTERORDER+1)],
-               weightState, 0);
-
-           /* construct decoded vector */
-
-           iCBConstruct(
-               &decresidual[start_pos+iLBCenc_inst->state_short_len],
-               extra_cb_index, extra_gain_index,
-               mem+CB_MEML-stMemLTbl,
-               stMemLTbl, diff, CB_NSTAGES);
-
-       }
-       else { /* put adaptive part in the beginning */
-
-           /* create reversed vectors for prediction */
-
-           for (k=0; k<diff; k++) {
-               reverseResidual[k] = residual[(start+1)*SUBL-1
-                   -(k+iLBCenc_inst->state_short_len)];
-           }
-
-           /* setup memory */
-
-           meml_gotten = iLBCenc_inst->state_short_len;
-           for (k=0; k<meml_gotten; k++) {
-               mem[CB_MEML-1-k] = decresidual[start_pos + k];
-           }
-           memset(mem, 0, (CB_MEML-k)*sizeof(float));
-           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
-
-           /* encode sub-frames */
-
-           iCBSearch(iLBCenc_inst, extra_cb_index, extra_gain_index,
-               reverseResidual, mem+CB_MEML-stMemLTbl, stMemLTbl,
-               diff, CB_NSTAGES,
-               &weightdenum[(start-1)*(LPC_FILTERORDER+1)],
-               weightState, 0);
-
-           /* construct decoded vector */
-
-           iCBConstruct(reverseDecresidual, extra_cb_index,
-               extra_gain_index, mem+CB_MEML-stMemLTbl, stMemLTbl,
-               diff, CB_NSTAGES);
-
-           /* get decoded residual from reversed vector */
-
-           for (k=0; k<diff; k++) {
-               decresidual[start_pos-1-k] = reverseDecresidual[k];
-
-
-
-
-
-           }
-       }
-
-       /* counter for predicted sub-frames */
-
-       subcount=0;
-
-       /* forward prediction of sub-frames */
-
-       Nfor = iLBCenc_inst->nsub-start-1;
-
-
-       if ( Nfor > 0 ) {
-
-           /* setup memory */
-
-           memset(mem, 0, (CB_MEML-STATE_LEN)*sizeof(float));
-           memcpy(mem+CB_MEML-STATE_LEN, decresidual+(start-1)*SUBL,
-               STATE_LEN*sizeof(float));
-           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
-
-           /* loop over sub-frames to encode */
-
-           for (subframe=0; subframe<Nfor; subframe++) {
-
-               /* encode sub-frame */
-
-               iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,
-                   gain_index+subcount*CB_NSTAGES,
-                   &residual[(start+1+subframe)*SUBL],
-                   mem+CB_MEML-memLfTbl[subcount],
-                   memLfTbl[subcount], SUBL, CB_NSTAGES,
-                   &weightdenum[(start+1+subframe)*
-                               (LPC_FILTERORDER+1)],
-                   weightState, subcount+1);
-
-               /* construct decoded vector */
-
-               iCBConstruct(&decresidual[(start+1+subframe)*SUBL],
-                   cb_index+subcount*CB_NSTAGES,
-                   gain_index+subcount*CB_NSTAGES,
-                   mem+CB_MEML-memLfTbl[subcount],
-                   memLfTbl[subcount], SUBL, CB_NSTAGES);
-
-               /* update memory */
-
-               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
-               memcpy(mem+CB_MEML-SUBL,
-
-
-
-
-
-                   &decresidual[(start+1+subframe)*SUBL],
-                   SUBL*sizeof(float));
-               memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
-
-               subcount++;
-           }
-       }
-
-
-       /* backward prediction of sub-frames */
-
-       Nback = start-1;
-
-
-       if ( Nback > 0 ) {
-
-           /* create reverse order vectors */
-
-           for (n=0; n<Nback; n++) {
-               for (k=0; k<SUBL; k++) {
-                   reverseResidual[n*SUBL+k] =
-                       residual[(start-1)*SUBL-1-n*SUBL-k];
-                   reverseDecresidual[n*SUBL+k] =
-                       decresidual[(start-1)*SUBL-1-n*SUBL-k];
-               }
-           }
-
-           /* setup memory */
-
-           meml_gotten = SUBL*(iLBCenc_inst->nsub+1-start);
-
-
-           if ( meml_gotten > CB_MEML ) {
-               meml_gotten=CB_MEML;
-           }
-           for (k=0; k<meml_gotten; k++) {
-               mem[CB_MEML-1-k] = decresidual[(start-1)*SUBL + k];
-           }
-           memset(mem, 0, (CB_MEML-k)*sizeof(float));
-           memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
-
-           /* loop over sub-frames to encode */
-
-           for (subframe=0; subframe<Nback; subframe++) {
-
-               /* encode sub-frame */
-
-               iCBSearch(iLBCenc_inst, cb_index+subcount*CB_NSTAGES,
-
-
-
-
-
-                   gain_index+subcount*CB_NSTAGES,
-                   &reverseResidual[subframe*SUBL],
-                   mem+CB_MEML-memLfTbl[subcount],
-                   memLfTbl[subcount], SUBL, CB_NSTAGES,
-                   &weightdenum[(start-2-subframe)*
-                               (LPC_FILTERORDER+1)],
-                   weightState, subcount+1);
-
-               /* construct decoded vector */
-
-               iCBConstruct(&reverseDecresidual[subframe*SUBL],
-                   cb_index+subcount*CB_NSTAGES,
-                   gain_index+subcount*CB_NSTAGES,
-                   mem+CB_MEML-memLfTbl[subcount],
-                   memLfTbl[subcount], SUBL, CB_NSTAGES);
-
-               /* update memory */
-
-               memcpy(mem, mem+SUBL, (CB_MEML-SUBL)*sizeof(float));
-               memcpy(mem+CB_MEML-SUBL,
-                   &reverseDecresidual[subframe*SUBL],
-                   SUBL*sizeof(float));
-               memset(weightState, 0, LPC_FILTERORDER*sizeof(float));
-
-               subcount++;
-
-           }
-
-           /* get decoded residual from reversed vector */
-
-           for (i=0; i<SUBL*Nback; i++) {
-               decresidual[SUBL*Nback - i - 1] =
-                   reverseDecresidual[i];
-           }
-       }
-       /* end encoding part */
-
-       /* adjust index */
-       index_conv_enc(cb_index);
-
-       /* pack bytes */
-
-       pbytes=bytes;
-       pos=0;
-
-       /* loop over the 3 ULP classes */
-
-       for (ulp=0; ulp<3; ulp++) {
-
-
-
-
-
-
-           /* LSF */
-           for (k=0; k<LSF_NSPLIT*iLBCenc_inst->lpc_n; k++) {
-               packsplit(&lsf_i[k], &firstpart, &lsf_i[k],
-                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp],
-                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp]+
-                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+1]+
-                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp+2]);
-               dopack( &pbytes, firstpart,
-                   iLBCenc_inst->ULP_inst->lsf_bits[k][ulp], &pos);
-           }
-
-           /* Start block info */
-
-           packsplit(&start, &firstpart, &start,
-               iLBCenc_inst->ULP_inst->start_bits[ulp],
-               iLBCenc_inst->ULP_inst->start_bits[ulp]+
-               iLBCenc_inst->ULP_inst->start_bits[ulp+1]+
-               iLBCenc_inst->ULP_inst->start_bits[ulp+2]);
-           dopack( &pbytes, firstpart,
-               iLBCenc_inst->ULP_inst->start_bits[ulp], &pos);
-
-           packsplit(&state_first, &firstpart, &state_first,
-               iLBCenc_inst->ULP_inst->startfirst_bits[ulp],
-               iLBCenc_inst->ULP_inst->startfirst_bits[ulp]+
-               iLBCenc_inst->ULP_inst->startfirst_bits[ulp+1]+
-               iLBCenc_inst->ULP_inst->startfirst_bits[ulp+2]);
-           dopack( &pbytes, firstpart,
-               iLBCenc_inst->ULP_inst->startfirst_bits[ulp], &pos);
-
-           packsplit(&idxForMax, &firstpart, &idxForMax,
-               iLBCenc_inst->ULP_inst->scale_bits[ulp],
-               iLBCenc_inst->ULP_inst->scale_bits[ulp]+
-               iLBCenc_inst->ULP_inst->scale_bits[ulp+1]+
-               iLBCenc_inst->ULP_inst->scale_bits[ulp+2]);
-           dopack( &pbytes, firstpart,
-               iLBCenc_inst->ULP_inst->scale_bits[ulp], &pos);
-
-           for (k=0; k<iLBCenc_inst->state_short_len; k++) {
-               packsplit(idxVec+k, &firstpart, idxVec+k,
-                   iLBCenc_inst->ULP_inst->state_bits[ulp],
-                   iLBCenc_inst->ULP_inst->state_bits[ulp]+
-                   iLBCenc_inst->ULP_inst->state_bits[ulp+1]+
-                   iLBCenc_inst->ULP_inst->state_bits[ulp+2]);
-               dopack( &pbytes, firstpart,
-                   iLBCenc_inst->ULP_inst->state_bits[ulp], &pos);
-           }
-
-
-
-
-
-
-           /* 23/22 (20ms/30ms) sample block */
-
-           for (k=0;k<CB_NSTAGES;k++) {
-               packsplit(extra_cb_index+k, &firstpart,
-                   extra_cb_index+k,
-                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],
-                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp]+
-                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+1]+
-                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp+2]);
-               dopack( &pbytes, firstpart,
-                   iLBCenc_inst->ULP_inst->extra_cb_index[k][ulp],
-                   &pos);
-           }
-
-           for (k=0;k<CB_NSTAGES;k++) {
-               packsplit(extra_gain_index+k, &firstpart,
-                   extra_gain_index+k,
-                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],
-                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp]+
-                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+1]+
-                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp+2]);
-               dopack( &pbytes, firstpart,
-                   iLBCenc_inst->ULP_inst->extra_cb_gain[k][ulp],
-                   &pos);
-           }
-
-           /* The two/four (20ms/30ms) 40 sample sub-blocks */
-
-           for (i=0; i<iLBCenc_inst->nasub; i++) {
-               for (k=0; k<CB_NSTAGES; k++) {
-                   packsplit(cb_index+i*CB_NSTAGES+k, &firstpart,
-                       cb_index+i*CB_NSTAGES+k,
-                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],
-                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp]+
-                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+1]+
-                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp+2]);
-                   dopack( &pbytes, firstpart,
-                       iLBCenc_inst->ULP_inst->cb_index[i][k][ulp],
-                       &pos);
-               }
-           }
-
-           for (i=0; i<iLBCenc_inst->nasub; i++) {
-               for (k=0; k<CB_NSTAGES; k++) {
-                   packsplit(gain_index+i*CB_NSTAGES+k, &firstpart,
-                       gain_index+i*CB_NSTAGES+k,
-                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],
-                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp]+
-
-
-
-
-
-                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+1]+
-                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp+2]);
-                   dopack( &pbytes, firstpart,
-                       iLBCenc_inst->ULP_inst->cb_gain[i][k][ulp],
-                       &pos);
-               }
-           }
-       }
-
-       /* set the last bit to zero (otherwise the decoder
-          will treat it as a lost frame) */
-       dopack( &pbytes, 0, 1, &pos);
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h
deleted file mode 100644
index a3ab55f9dc..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_encode.h
+++ /dev/null
@@ -1,39 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iLBC_encode.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_ILBCENCODE_H
-   #define __iLBC_ILBCENCODE_H
-
-   #include "iLBC_define.h"
-
-   short initEncode(                   /* (o) Number of bytes
-                                              encoded */
-       iLBC_Enc_Inst_t *iLBCenc_inst,  /* (i/o) Encoder instance */
-       int mode                    /* (i) frame size mode */
-   );
-
-   void iLBC_encode(
-
-       unsigned char *bytes,           /* (o) encoded data bits iLBC */
-       float *block,                   /* (o) speech vector to
-                                              encode */
-       iLBC_Enc_Inst_t *iLBCenc_inst   /* (i/o) the general encoder
-                                              state */
-   );
-
-   #endif
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c b/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c
deleted file mode 100644
index 81985c09a5..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/iLBC_test.c
+++ /dev/null
@@ -1,310 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       iLBC_test.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <stdlib.h>
-   #include <stdio.h>
-   #include <string.h>
-   #include "iLBC_define.h"
-   #include "iLBC_encode.h"
-   #include "iLBC_decode.h"
-
-   /* Runtime statistics */
-   #include <time.h>
-
-   #define ILBCNOOFWORDS_MAX   (NO_OF_BYTES_30MS/2)
-
-   /*----------------------------------------------------------------*
-    *  Encoder interface function
-
-
-
-
-
-    *---------------------------------------------------------------*/
-
-   short encode(   /* (o) Number of bytes encoded */
-       iLBC_Enc_Inst_t *iLBCenc_inst,
-                                   /* (i/o) Encoder instance */
-       short *encoded_data,    /* (o) The encoded bytes */
-       short *data                 /* (i) The signal block to encode*/
-   ){
-       float block[BLOCKL_MAX];
-       int k;
-
-       /* convert signal to float */
-
-       for (k=0; k<iLBCenc_inst->blockl; k++)
-           block[k] = (float)data[k];
-
-       /* do the actual encoding */
-
-       iLBC_encode((unsigned char *)encoded_data, block, iLBCenc_inst);
-
-
-       return (iLBCenc_inst->no_of_bytes);
-   }
-
-   /*----------------------------------------------------------------*
-    *  Decoder interface function
-    *---------------------------------------------------------------*/
-
-   short decode(       /* (o) Number of decoded samples */
-       iLBC_Dec_Inst_t *iLBCdec_inst,  /* (i/o) Decoder instance */
-       short *decoded_data,        /* (o) Decoded signal block*/
-       short *encoded_data,        /* (i) Encoded bytes */
-       short mode                       /* (i) 0=PL, 1=Normal */
-   ){
-       int k;
-       float decblock[BLOCKL_MAX], dtmp;
-
-       /* check if mode is valid */
-
-       if (mode<0 || mode>1) {
-           printf("\nERROR - Wrong mode - 0, 1 allowed\n"); exit(3);}
-
-       /* do actual decoding of block */
-
-       iLBC_decode(decblock, (unsigned char *)encoded_data,
-           iLBCdec_inst, mode);
-
-       /* convert to short */
-
-
-
-
-
-       for (k=0; k<iLBCdec_inst->blockl; k++){
-           dtmp=decblock[k];
-
-           if (dtmp<MIN_SAMPLE)
-               dtmp=MIN_SAMPLE;
-           else if (dtmp>MAX_SAMPLE)
-               dtmp=MAX_SAMPLE;
-           decoded_data[k] = (short) dtmp;
-       }
-
-       return (iLBCdec_inst->blockl);
-   }
-
-   /*---------------------------------------------------------------*
-    *  Main program to test iLBC encoding and decoding
-    *
-    *  Usage:
-    *    exefile_name.exe <infile> <bytefile> <outfile> <channel>
-    *
-    *    <infile>   : Input file, speech for encoder (16-bit pcm file)
-    *    <bytefile> : Bit stream output from the encoder
-    *    <outfile>  : Output file, decoded speech (16-bit pcm file)
-    *    <channel>  : Bit error file, optional (16-bit)
-    *                     1 - Packet received correctly
-    *                     0 - Packet Lost
-    *
-    *--------------------------------------------------------------*/
-
-   int main(int argc, char* argv[])
-   {
-
-       /* Runtime statistics */
-
-       float starttime;
-       float runtime;
-       float outtime;
-
-       FILE *ifileid,*efileid,*ofileid, *cfileid;
-       short data[BLOCKL_MAX];
-       short encoded_data[ILBCNOOFWORDS_MAX], decoded_data[BLOCKL_MAX];
-       int len;
-       short pli, mode;
-       int blockcount = 0;
-       int packetlosscount = 0;
-
-       /* Create structs */
-       iLBC_Enc_Inst_t Enc_Inst;
-       iLBC_Dec_Inst_t Dec_Inst;
-
-
-
-
-
-       /* get arguments and open files */
-
-       if ((argc!=5) && (argc!=6)) {
-           fprintf(stderr,
-           "\n*-----------------------------------------------*\n");
-           fprintf(stderr,
-           "   %s <20,30> input encoded decoded (channel)\n\n",
-               argv[0]);
-           fprintf(stderr,
-           "   mode    : Frame size for the encoding/decoding\n");
-           fprintf(stderr,
-           "                 20 - 20 ms\n");
-           fprintf(stderr,
-           "                 30 - 30 ms\n");
-           fprintf(stderr,
-           "   input   : Speech for encoder (16-bit pcm file)\n");
-           fprintf(stderr,
-           "   encoded : Encoded bit stream\n");
-           fprintf(stderr,
-           "   decoded : Decoded speech (16-bit pcm file)\n");
-           fprintf(stderr,
-           "   channel : Packet loss pattern, optional (16-bit)\n");
-           fprintf(stderr,
-           "                  1 - Packet received correctly\n");
-           fprintf(stderr,
-           "                  0 - Packet Lost\n");
-           fprintf(stderr,
-           "*-----------------------------------------------*\n\n");
-           exit(1);
-       }
-       mode=atoi(argv[1]);
-       if (mode != 20 && mode != 30) {
-           fprintf(stderr,"Wrong mode %s, must be 20, or 30\n",
-               argv[1]);
-           exit(2);
-       }
-       if ( (ifileid=fopen(argv[2],"rb")) == NULL) {
-           fprintf(stderr,"Cannot open input file %s\n", argv[2]);
-           exit(2);}
-       if ( (efileid=fopen(argv[3],"wb")) == NULL) {
-           fprintf(stderr, "Cannot open encoded file %s\n",
-               argv[3]); exit(1);}
-       if ( (ofileid=fopen(argv[4],"wb")) == NULL) {
-           fprintf(stderr, "Cannot open decoded file %s\n",
-               argv[4]); exit(1);}
-       if (argc==6) {
-           if( (cfileid=fopen(argv[5],"rb")) == NULL) {
-               fprintf(stderr, "Cannot open channel file %s\n",
-
-
-
-
-
-                   argv[5]);
-               exit(1);
-           }
-       } else {
-           cfileid=NULL;
-       }
-
-       /* print info */
-
-       fprintf(stderr, "\n");
-       fprintf(stderr,
-           "*---------------------------------------------------*\n");
-       fprintf(stderr,
-           "*                                                   *\n");
-       fprintf(stderr,
-           "*      iLBC test program                            *\n");
-       fprintf(stderr,
-           "*                                                   *\n");
-       fprintf(stderr,
-           "*                                                   *\n");
-       fprintf(stderr,
-           "*---------------------------------------------------*\n");
-       fprintf(stderr,"\nMode           : %2d ms\n", mode);
-       fprintf(stderr,"Input file     : %s\n", argv[2]);
-       fprintf(stderr,"Encoded file   : %s\n", argv[3]);
-       fprintf(stderr,"Output file    : %s\n", argv[4]);
-       if (argc==6) {
-           fprintf(stderr,"Channel file   : %s\n", argv[5]);
-       }
-       fprintf(stderr,"\n");
-
-       /* Initialization */
-
-       initEncode(&Enc_Inst, mode);
-       initDecode(&Dec_Inst, mode, 1);
-
-       /* Runtime statistics */
-
-       starttime=clock()/(float)CLOCKS_PER_SEC;
-
-       /* loop over input blocks */
-
-       while (fread(data,sizeof(short),Enc_Inst.blockl,ifileid)==
-               (size_t)Enc_Inst.blockl) {
-
-           blockcount++;
-
-           /* encoding */
-
-
-
-
-
-           fprintf(stderr, "--- Encoding block %i --- ",blockcount);
-           len=encode(&Enc_Inst, encoded_data, data);
-           fprintf(stderr, "\r");
-
-           /* write byte file */
-
-           fwrite(encoded_data, sizeof(unsigned char), len, efileid);
-
-           /* get channel data if provided */
-           if (argc==6) {
-               if (fread(&pli, sizeof(short), 1, cfileid)) {
-                   if ((pli!=0)&&(pli!=1)) {
-                       fprintf(stderr, "Error in channel file\n");
-                       exit(0);
-                   }
-                   if (pli==0) {
-                       /* Packet loss -> remove info from frame */
-                       memset(encoded_data, 0,
-                           sizeof(short)*ILBCNOOFWORDS_MAX);
-                       packetlosscount++;
-                   }
-               } else {
-                   fprintf(stderr, "Error. Channel file too short\n");
-                   exit(0);
-               }
-           } else {
-               pli=1;
-           }
-
-           /* decoding */
-
-           fprintf(stderr, "--- Decoding block %i --- ",blockcount);
-
-           len=decode(&Dec_Inst, decoded_data, encoded_data, pli);
-           fprintf(stderr, "\r");
-
-           /* write output file */
-
-           fwrite(decoded_data,sizeof(short),len,ofileid);
-       }
-
-       /* Runtime statistics */
-
-       runtime = (float)(clock()/(float)CLOCKS_PER_SEC-starttime);
-       outtime = (float)((float)blockcount*(float)mode/1000.0);
-       printf("\n\nLength of speech file: %.1f s\n", outtime);
-       printf("Packet loss          : %.1f%%\n",
-           100.0*(float)packetlosscount/(float)blockcount);
-
-
-
-
-
-       printf("Time to run iLBC     :");
-       printf(" %.1f s (%.1f %% of realtime)\n\n", runtime,
-           (100*runtime/outtime));
-
-       /* close files */
-
-       fclose(ifileid);  fclose(efileid); fclose(ofileid);
-       if (argc==6) {
-           fclose(cfileid);
-       }
-       return(0);
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/lsf.c b/sflphone-common/libs/pjproject/third_party/ilbc/lsf.c
deleted file mode 100644
index b4fe0eda3d..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/lsf.c
+++ /dev/null
@@ -1,283 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       lsf.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <string.h>
-
-
-
-
-
-   #include <math.h>
-
-   #include "iLBC_define.h"
-
-   /*----------------------------------------------------------------*
-    *  conversion from lpc coefficients to lsf coefficients
-    *---------------------------------------------------------------*/
-
-   void a2lsf(
-       float *freq,/* (o) lsf coefficients */
-       float *a    /* (i) lpc coefficients */
-   ){
-       float steps[LSF_NUMBER_OF_STEPS] =
-           {(float)0.00635, (float)0.003175, (float)0.0015875,
-           (float)0.00079375};
-       float step;
-       int step_idx;
-       int lsp_index;
-       float p[LPC_HALFORDER];
-       float q[LPC_HALFORDER];
-       float p_pre[LPC_HALFORDER];
-       float q_pre[LPC_HALFORDER];
-       float old_p, old_q, *old;
-       float *pq_coef;
-       float omega, old_omega;
-       int i;
-       float hlp, hlp1, hlp2, hlp3, hlp4, hlp5;
-
-       for (i=0; i<LPC_HALFORDER; i++) {
-           p[i] = (float)-1.0 * (a[i + 1] + a[LPC_FILTERORDER - i]);
-           q[i] = a[LPC_FILTERORDER - i] - a[i + 1];
-       }
-
-       p_pre[0] = (float)-1.0 - p[0];
-       p_pre[1] = - p_pre[0] - p[1];
-       p_pre[2] = - p_pre[1] - p[2];
-       p_pre[3] = - p_pre[2] - p[3];
-       p_pre[4] = - p_pre[3] - p[4];
-       p_pre[4] = p_pre[4] / 2;
-
-       q_pre[0] = (float)1.0 - q[0];
-       q_pre[1] = q_pre[0] - q[1];
-       q_pre[2] = q_pre[1] - q[2];
-       q_pre[3] = q_pre[2] - q[3];
-       q_pre[4] = q_pre[3] - q[4];
-       q_pre[4] = q_pre[4] / 2;
-
-       omega = 0.0;
-
-
-
-
-
-       old_omega = 0.0;
-
-       old_p = FLOAT_MAX;
-       old_q = FLOAT_MAX;
-
-       /* Here we loop through lsp_index to find all the
-          LPC_FILTERORDER roots for omega. */
-
-       for (lsp_index = 0; lsp_index<LPC_FILTERORDER; lsp_index++) {
-
-           /* Depending on lsp_index being even or odd, we
-           alternatively solve the roots for the two LSP equations. */
-
-
-           if ((lsp_index & 0x1) == 0) {
-               pq_coef = p_pre;
-               old = &old_p;
-           } else {
-               pq_coef = q_pre;
-               old = &old_q;
-           }
-
-           /* Start with low resolution grid */
-
-           for (step_idx = 0, step = steps[step_idx];
-               step_idx < LSF_NUMBER_OF_STEPS;){
-
-               /*  cos(10piw) + pq(0)cos(8piw) + pq(1)cos(6piw) +
-               pq(2)cos(4piw) + pq(3)cod(2piw) + pq(4) */
-
-               hlp = (float)cos(omega * TWO_PI);
-               hlp1 = (float)2.0 * hlp + pq_coef[0];
-               hlp2 = (float)2.0 * hlp * hlp1 - (float)1.0 +
-                   pq_coef[1];
-               hlp3 = (float)2.0 * hlp * hlp2 - hlp1 + pq_coef[2];
-               hlp4 = (float)2.0 * hlp * hlp3 - hlp2 + pq_coef[3];
-               hlp5 = hlp * hlp4 - hlp3 + pq_coef[4];
-
-
-               if (((hlp5 * (*old)) <= 0.0) || (omega >= 0.5)){
-
-                   if (step_idx == (LSF_NUMBER_OF_STEPS - 1)){
-
-                       if (fabs(hlp5) >= fabs(*old)) {
-                           freq[lsp_index] = omega - step;
-                       } else {
-                           freq[lsp_index] = omega;
-                       }
-
-
-
-
-
-
-
-                       if ((*old) >= 0.0){
-                           *old = (float)-1.0 * FLOAT_MAX;
-                       } else {
-                           *old = FLOAT_MAX;
-                       }
-
-                       omega = old_omega;
-                       step_idx = 0;
-
-                       step_idx = LSF_NUMBER_OF_STEPS;
-                   } else {
-
-                       if (step_idx == 0) {
-                           old_omega = omega;
-                       }
-
-                       step_idx++;
-                       omega -= steps[step_idx];
-
-                       /* Go back one grid step */
-
-                       step = steps[step_idx];
-                   }
-               } else {
-
-               /* increment omega until they are of different sign,
-               and we know there is at least one root between omega
-               and old_omega */
-                   *old = hlp5;
-                   omega += step;
-               }
-           }
-       }
-
-       for (i = 0; i<LPC_FILTERORDER; i++) {
-           freq[i] = freq[i] * TWO_PI;
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  conversion from lsf coefficients to lpc coefficients
-    *---------------------------------------------------------------*/
-
-   void lsf2a(
-       float *a_coef,  /* (o) lpc coefficients */
-       float *freq     /* (i) lsf coefficients */
-
-
-
-
-
-   ){
-       int i, j;
-       float hlp;
-       float p[LPC_HALFORDER], q[LPC_HALFORDER];
-       float a[LPC_HALFORDER + 1], a1[LPC_HALFORDER],
-           a2[LPC_HALFORDER];
-       float b[LPC_HALFORDER + 1], b1[LPC_HALFORDER],
-           b2[LPC_HALFORDER];
-
-       for (i=0; i<LPC_FILTERORDER; i++) {
-           freq[i] = freq[i] * PI2;
-       }
-
-       /* Check input for ill-conditioned cases.  This part is not
-       found in the TIA standard.  It involves the following 2 IF
-       blocks.  If "freq" is judged ill-conditioned, then we first
-       modify freq[0] and freq[LPC_HALFORDER-1] (normally
-       LPC_HALFORDER = 10 for LPC applications), then we adjust
-       the other "freq" values slightly */
-
-
-       if ((freq[0] <= 0.0) || (freq[LPC_FILTERORDER - 1] >= 0.5)){
-
-
-           if (freq[0] <= 0.0) {
-               freq[0] = (float)0.022;
-           }
-
-
-           if (freq[LPC_FILTERORDER - 1] >= 0.5) {
-               freq[LPC_FILTERORDER - 1] = (float)0.499;
-           }
-
-           hlp = (freq[LPC_FILTERORDER - 1] - freq[0]) /
-               (float) (LPC_FILTERORDER - 1);
-
-           for (i=1; i<LPC_FILTERORDER; i++) {
-               freq[i] = freq[i - 1] + hlp;
-           }
-       }
-
-       memset(a1, 0, LPC_HALFORDER*sizeof(float));
-       memset(a2, 0, LPC_HALFORDER*sizeof(float));
-       memset(b1, 0, LPC_HALFORDER*sizeof(float));
-       memset(b2, 0, LPC_HALFORDER*sizeof(float));
-       memset(a, 0, (LPC_HALFORDER+1)*sizeof(float));
-       memset(b, 0, (LPC_HALFORDER+1)*sizeof(float));
-
-
-
-
-
-
-       /* p[i] and q[i] compute cos(2*pi*omega_{2j}) and
-       cos(2*pi*omega_{2j-1} in eqs. 4.2.2.2-1 and 4.2.2.2-2.
-       Note that for this code p[i] specifies the coefficients
-       used in .Q_A(z) while q[i] specifies the coefficients used
-       in .P_A(z) */
-
-       for (i=0; i<LPC_HALFORDER; i++) {
-           p[i] = (float)cos(TWO_PI * freq[2 * i]);
-           q[i] = (float)cos(TWO_PI * freq[2 * i + 1]);
-       }
-
-       a[0] = 0.25;
-       b[0] = 0.25;
-
-       for (i= 0; i<LPC_HALFORDER; i++) {
-           a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
-           b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
-           a2[i] = a1[i];
-           a1[i] = a[i];
-           b2[i] = b1[i];
-           b1[i] = b[i];
-       }
-
-       for (j=0; j<LPC_FILTERORDER; j++) {
-
-           if (j == 0) {
-               a[0] = 0.25;
-               b[0] = -0.25;
-           } else {
-               a[0] = b[0] = 0.0;
-           }
-
-           for (i=0; i<LPC_HALFORDER; i++) {
-               a[i + 1] = a[i] - 2 * p[i] * a1[i] + a2[i];
-               b[i + 1] = b[i] - 2 * q[i] * b1[i] + b2[i];
-               a2[i] = a1[i];
-               a1[i] = a[i];
-               b2[i] = b1[i];
-               b1[i] = b[i];
-           }
-
-           a_coef[j + 1] = 2 * (a[LPC_HALFORDER] + b[LPC_HALFORDER]);
-       }
-
-       a_coef[0] = 1.0;
-   }
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/lsf.h b/sflphone-common/libs/pjproject/third_party/ilbc/lsf.h
deleted file mode 100644
index caff77ec0d..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/lsf.h
+++ /dev/null
@@ -1,27 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       lsf.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_LSF_H
-   #define __iLBC_LSF_H
-
-   void a2lsf(
-       float *freq,/* (o) lsf coefficients */
-       float *a    /* (i) lpc coefficients */
-   );
-
-   void lsf2a(
-       float *a_coef,  /* (o) lpc coefficients */
-       float *freq     /* (i) lsf coefficients */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/packing.c b/sflphone-common/libs/pjproject/third_party/ilbc/packing.c
deleted file mode 100644
index b7496a48ea..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/packing.c
+++ /dev/null
@@ -1,182 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       packing.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include <math.h>
-   #include <stdlib.h>
-
-   #include "iLBC_define.h"
-   #include "constants.h"
-   #include "helpfun.h"
-   #include "string.h"
-
-   /*----------------------------------------------------------------*
-    *  splitting an integer into first most significant bits and
-    *  remaining least significant bits
-    *---------------------------------------------------------------*/
-
-   void packsplit(
-       int *index,                 /* (i) the value to split */
-       int *firstpart,             /* (o) the value specified by most
-                                          significant bits */
-       int *rest,                  /* (o) the value specified by least
-                                          significant bits */
-
-
-
-
-
-       int bitno_firstpart,    /* (i) number of bits in most
-                                          significant part */
-       int bitno_total             /* (i) number of bits in full range
-                                          of value */
-   ){
-       int bitno_rest = bitno_total-bitno_firstpart;
-
-       *firstpart = *index>>(bitno_rest);
-       *rest = *index-(*firstpart<<(bitno_rest));
-   }
-
-   /*----------------------------------------------------------------*
-    *  combining a value corresponding to msb's with a value
-    *  corresponding to lsb's
-    *---------------------------------------------------------------*/
-
-   void packcombine(
-       int *index,                 /* (i/o) the msb value in the
-                                          combined value out */
-       int rest,                   /* (i) the lsb value */
-       int bitno_rest              /* (i) the number of bits in the
-                                          lsb part */
-   ){
-       *index = *index<<bitno_rest;
-       *index += rest;
-   }
-
-   /*----------------------------------------------------------------*
-    *  packing of bits into bitstream, i.e., vector of bytes
-    *---------------------------------------------------------------*/
-
-   void dopack(
-       unsigned char **bitstream,  /* (i/o) on entrance pointer to
-                                          place in bitstream to pack
-                                          new data, on exit pointer
-                                          to place in bitstream to
-                                          pack future data */
-       int index,                  /* (i) the value to pack */
-       int bitno,                  /* (i) the number of bits that the
-                                          value will fit within */
-       int *pos                /* (i/o) write position in the
-                                          current byte */
-   ){
-       int posLeft;
-
-       /* Clear the bits before starting in a new byte */
-
-       if ((*pos)==0) {
-
-
-
-
-
-           **bitstream=0;
-       }
-
-       while (bitno>0) {
-
-           /* Jump to the next byte if end of this byte is reached*/
-
-           if (*pos==8) {
-               *pos=0;
-               (*bitstream)++;
-               **bitstream=0;
-           }
-
-           posLeft=8-(*pos);
-
-           /* Insert index into the bitstream */
-
-           if (bitno <= posLeft) {
-               **bitstream |= (unsigned char)(index<<(posLeft-bitno));
-               *pos+=bitno;
-               bitno=0;
-           } else {
-               **bitstream |= (unsigned char)(index>>(bitno-posLeft));
-
-               *pos=8;
-               index-=((index>>(bitno-posLeft))<<(bitno-posLeft));
-
-               bitno-=posLeft;
-           }
-       }
-   }
-
-   /*----------------------------------------------------------------*
-    *  unpacking of bits from bitstream, i.e., vector of bytes
-    *---------------------------------------------------------------*/
-
-   void unpack(
-       unsigned char **bitstream,  /* (i/o) on entrance pointer to
-                                          place in bitstream to
-                                          unpack new data from, on
-                                          exit pointer to place in
-                                          bitstream to unpack future
-                                          data from */
-       int *index,                 /* (o) resulting value */
-       int bitno,                  /* (i) number of bits used to
-                                          represent the value */
-       int *pos                /* (i/o) read position in the
-                                          current byte */
-
-
-
-
-
-   ){
-       int BitsLeft;
-
-       *index=0;
-
-       while (bitno>0) {
-
-           /* move forward in bitstream when the end of the
-              byte is reached */
-
-           if (*pos==8) {
-               *pos=0;
-               (*bitstream)++;
-           }
-
-           BitsLeft=8-(*pos);
-
-           /* Extract bits to index */
-
-           if (BitsLeft>=bitno) {
-               *index+=((((**bitstream)<<(*pos)) & 0xFF)>>(8-bitno));
-
-               *pos+=bitno;
-               bitno=0;
-           } else {
-
-               if ((8-bitno)>0) {
-                   *index+=((((**bitstream)<<(*pos)) & 0xFF)>>
-                       (8-bitno));
-                   *pos=8;
-               } else {
-                   *index+=(((int)(((**bitstream)<<(*pos)) & 0xFF))<<
-                       (bitno-8));
-                   *pos=8;
-               }
-               bitno-=BitsLeft;
-           }
-       }
-   }
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/packing.h b/sflphone-common/libs/pjproject/third_party/ilbc/packing.h
deleted file mode 100644
index cbb9f82dfd..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/packing.h
+++ /dev/null
@@ -1,68 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       packing.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __PACKING_H
-   #define __PACKING_H
-
-   void packsplit(
-       int *index,                 /* (i) the value to split */
-       int *firstpart,             /* (o) the value specified by most
-                                          significant bits */
-       int *rest,                  /* (o) the value specified by least
-                                          significant bits */
-       int bitno_firstpart,    /* (i) number of bits in most
-                                          significant part */
-       int bitno_total             /* (i) number of bits in full range
-                                          of value */
-   );
-
-   void packcombine(
-       int *index,                 /* (i/o) the msb value in the
-                                          combined value out */
-       int rest,                   /* (i) the lsb value */
-       int bitno_rest              /* (i) the number of bits in the
-                                          lsb part */
-   );
-
-   void dopack(
-       unsigned char **bitstream,  /* (i/o) on entrance pointer to
-                                          place in bitstream to pack
-                                          new data, on exit pointer
-                                          to place in bitstream to
-                                          pack future data */
-       int index,                  /* (i) the value to pack */
-       int bitno,                  /* (i) the number of bits that the
-                                          value will fit within */
-       int *pos                /* (i/o) write position in the
-                                          current byte */
-   );
-
-
-
-
-
-   void unpack(
-       unsigned char **bitstream,  /* (i/o) on entrance pointer to
-                                          place in bitstream to
-                                          unpack new data from, on
-                                          exit pointer to place in
-                                          bitstream to unpack future
-                                          data from */
-       int *index,                 /* (o) resulting value */
-       int bitno,                  /* (i) number of bits used to
-                                          represent the value */
-       int *pos                /* (i/o) read position in the
-                                          current byte */
-   );
-
-   #endif
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c b/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c
deleted file mode 100644
index 190eb009db..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.c
+++ /dev/null
@@ -1,80 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       syntFilter.c
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #include "iLBC_define.h"
-
-   /*----------------------------------------------------------------*
-    *  LP synthesis filter.
-    *---------------------------------------------------------------*/
-
-   void syntFilter(
-       float *Out,     /* (i/o) Signal to be filtered */
-       float *a,       /* (i) LP parameters */
-       int len,    /* (i) Length of signal */
-
-
-
-
-
-       float *mem      /* (i/o) Filter state */
-   ){
-       int i, j;
-       float *po, *pi, *pa, *pm;
-
-       po=Out;
-
-       /* Filter first part using memory from past */
-
-       for (i=0; i<LPC_FILTERORDER; i++) {
-           pi=&Out[i-1];
-           pa=&a[1];
-           pm=&mem[LPC_FILTERORDER-1];
-           for (j=1; j<=i; j++) {
-               *po-=(*pa++)*(*pi--);
-           }
-           for (j=i+1; j<LPC_FILTERORDER+1; j++) {
-               *po-=(*pa++)*(*pm--);
-           }
-           po++;
-       }
-
-       /* Filter last part where the state is entirely in
-          the output vector */
-
-       for (i=LPC_FILTERORDER; i<len; i++) {
-           pi=&Out[i-1];
-           pa=&a[1];
-           for (j=1; j<LPC_FILTERORDER+1; j++) {
-               *po-=(*pa++)*(*pi--);
-           }
-           po++;
-       }
-
-       /* Update state vector */
-
-       memcpy(mem, &Out[len-LPC_FILTERORDER],
-           LPC_FILTERORDER*sizeof(float));
-   }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h b/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h
deleted file mode 100644
index 8865b8917f..0000000000
--- a/sflphone-common/libs/pjproject/third_party/ilbc/syntFilter.h
+++ /dev/null
@@ -1,24 +0,0 @@
-
-   /******************************************************************
-
-       iLBC Speech Coder ANSI-C Source Code
-
-       syntFilter.h
-
-       Copyright (C) The Internet Society (2004).
-       All Rights Reserved.
-
-   ******************************************************************/
-
-   #ifndef __iLBC_SYNTFILTER_H
-   #define __iLBC_SYNTFILTER_H
-
-   void syntFilter(
-       float *Out,     /* (i/o) Signal to be filtered */
-       float *a,       /* (i) LP parameters */
-       int len,    /* (i) Length of signal */
-       float *mem      /* (i/o) Filter state */
-   );
-
-   #endif
-
-- 
GitLab


From 86e23be3db067b37231c39dfab3fbc9eef746103 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Tue, 10 Nov 2009 16:41:29 -0500
Subject: [PATCH 035/160] [#1753] Removed remaining milenage lib references

---
 sflphone-common/libs/pjproject/build.mak.in | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/libs/pjproject/build.mak.in b/sflphone-common/libs/pjproject/build.mak.in
index e393eb7174..11e0fbe03d 100644
--- a/sflphone-common/libs/pjproject/build.mak.in
+++ b/sflphone-common/libs/pjproject/build.mak.in
@@ -10,8 +10,8 @@ export LINUX_POLL := @ac_linux_poll@
 LIB_SUFFIX = $(TARGET_NAME).a
 
 # Determine which party libraries to use
-export APP_THIRD_PARTY_LIBS := -lresample-$(TARGET_NAME) -lmilenage-$(TARGET_NAME) -lsrtp-$(TARGET_NAME)
-export APP_THIRD_PARTY_LIB_FILES = $(PJ_DIR)/third_party/lib/libresample-$(LIB_SUFFIX) $(PJ_DIR)/third_party/lib/libmilenage-$(LIB_SUFFIX) $(PJ_DIR)/third_party/lib/libsrtp-$(LIB_SUFFIX)
+export APP_THIRD_PARTY_LIBS := -lresample-$(TARGET_NAME) -lsrtp-$(TARGET_NAME)
+export APP_THIRD_PARTY_LIB_FILES = $(PJ_DIR)/third_party/lib/libresample-$(LIB_SUFFIX) $(PJ_DIR)/third_party/lib/libsrtp-$(LIB_SUFFIX)
 
 ifneq (@ac_no_gsm_codec@,1)
 APP_THIRD_PARTY_LIBS += -lgsmcodec-$(TARGET_NAME)
-- 
GitLab


From f5ce92631a321d3a79961606a5c1c96ff0447012 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 11 Nov 2009 09:49:18 -0500
Subject: [PATCH 036/160] [#2284] Remove redefinition warnings + speex warnings

---
 .../libs/pjproject/pjlib/include/pj/compat/string.h           | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h
index 198fbe9850..e0ceb53f89 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/compat/string.h
@@ -52,8 +52,8 @@
 #   define wcsicmp	_wcsicmp
 #   define wcsnicmp	_wcsnicmp
 #else
-#   define stricmp	strcasecmp
-#   define strnicmp	strncasecmp
+// #   define stricmp	strcasecmp
+// #   define strnicmp	strncasecmp
 
 #   if defined(PJ_NATIVE_STRING_IS_UNICODE) && PJ_NATIVE_STRING_IS_UNICODE!=0
 #	error "Implement Unicode string functions"
-- 
GitLab


From 39ec936a8b77a076d453d2ab42094b14e3f64cb7 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 4 Feb 2010 12:18:05 -0500
Subject: [PATCH 037/160] [#2284] Fix implicit conversion into char*

---
 sflphone-common/src/sip/SdesNegotiator.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sflphone-common/src/sip/SdesNegotiator.h b/sflphone-common/src/sip/SdesNegotiator.h
index f038d012ba..e0de86de10 100644
--- a/sflphone-common/src/sip/SdesNegotiator.h
+++ b/sflphone-common/src/sip/SdesNegotiator.h
@@ -71,9 +71,9 @@ namespace sfl {
     * as defined in RFC4568 (6.2)
     */
     const CryptoSuiteDefinition CryptoSuites[3] = { 
-          {"AES_CM_128_HMAC_SHA1_80", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 80, 80, 160, 160 },
-          {"AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 },
-          {"F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 } };   
+          {(char*)"AES_CM_128_HMAC_SHA1_80", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 80, 80, 160, 160 },
+          {(char*)"AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 },
+          {(char*)"F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 } };   
         
 
     class CryptoAttribute {
-- 
GitLab


From 23b894cb28f659ff8e5863a14bea4bbf55bd428c Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 4 Feb 2010 12:44:12 -0500
Subject: [PATCH 038/160] [#2518] Add a specific status for IP2IP_PROFILE

---
 sflphone-client-gnome/src/accountlist.c |  5 ++++-
 sflphone-client-gnome/src/accountlist.h |  5 +++--
 sflphone-client-gnome/src/actions.c     |  3 +++
 sflphone-common/src/managerimpl.cpp     | 26 +++++++++++++++++--------
 4 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/sflphone-client-gnome/src/accountlist.c b/sflphone-client-gnome/src/accountlist.c
index 3f5dbe4c05..d02e23c5fe 100644
--- a/sflphone-client-gnome/src/accountlist.c
+++ b/sflphone-client-gnome/src/accountlist.c
@@ -161,7 +161,7 @@ void account_list_set_current (account_t *current)
 }
 
 
-const gchar * account_state_name(account_state_t s)
+const gchar * account_state_name (account_state_t s)
 {
 	gchar * state;
 	switch(s)
@@ -193,6 +193,9 @@ const gchar * account_state_name(account_state_t s)
 		case ACCOUNT_STATE_ERROR_EXIST_STUN:
 			state = _("Stun server invalid");
 			break;
+		case IP2IP_PROFILE_STATUS:
+			state = _("Ready");
+			break;
 		default:
 			state = _("Invalid");
 			break;
diff --git a/sflphone-client-gnome/src/accountlist.h b/sflphone-client-gnome/src/accountlist.h
index 1d7cff710a..bb2de67319 100644
--- a/sflphone-client-gnome/src/accountlist.h
+++ b/sflphone-client-gnome/src/accountlist.h
@@ -50,8 +50,9 @@ typedef enum
    /** Stun server configuration error. The account is not registered */
    ACCOUNT_STATE_ERROR_CONF_STUN,
    /** Stun server is not existing. The account is not registered */
-   ACCOUNT_STATE_ERROR_EXIST_STUN
-
+   ACCOUNT_STATE_ERROR_EXIST_STUN,
+   /** IP profile status **/
+   IP2IP_PROFILE_STATUS
 } account_state_t;
 
 /** @struct account_t
diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index a427845ede..ffe115d09b 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -265,6 +265,9 @@ void sflphone_fill_account_list (void) {
         {
             a->state = ACCOUNT_STATE_ERROR_EXIST_STUN;
         }
+		else if (strcmp (status, "READY") == 0) {
+			a->state = IP2IP_PROFILE_STATUS;
+		}
         else
         {
             a->state = ACCOUNT_STATE_INVALID;
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 17d59b27c6..84582f2cac 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -52,6 +52,7 @@
 #include <sys/stat.h>  // mkdir(2)
 #include <pwd.h>       // getpwuid
 
+#define DIRECT_IP_CALL	"IP CALL"
 
 #define fill_config_str(name, value) \
   (_config.addConfigTreeItem(section, Conf::ConfigTreeItem(std::string(name), std::string(value), type_str)))
@@ -3368,7 +3369,9 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
         _debug ("Cannot getAccountDetails on a non-existing accountID %s. Defaults will be used.", accountID.c_str());
     }
 
-    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ALIAS, getConfigString (accountID, CONFIG_ACCOUNT_ALIAS)));
+	// 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, 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)));
@@ -3394,17 +3397,24 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
     std::string registrationStateDescription;
 
     if (account != NULL) {
-        state = account->getRegistrationState();
-        int code = account->getRegistrationStateDetailed().first;
-        std::stringstream out;
-        out << code;
-        registrationStateCode = out.str();
-        registrationStateDescription = account->getRegistrationStateDetailed().second;
+		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;
+		}
     } else {
         state = Unregistered;
     }
 
-    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATUS, mapStateNumberToString (state)));
+    (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));
-- 
GitLab


From 74616804736d516b7ad28cf98040bbabda9788bf Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 4 Feb 2010 13:42:52 -0500
Subject: [PATCH 039/160] [#2518] Work on the treeview that displays the
 account list

---
 .../src/config/accountlistconfigdialog.c      | 57 +++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/sflphone-client-gnome/src/config/accountlistconfigdialog.c b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
index e22c16019e..ee3b71adba 100644
--- a/sflphone-client-gnome/src/config/accountlistconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
@@ -312,6 +312,57 @@ close_dialog_cb (GtkWidget * widget,
 
 }
 
+void highlight_ip_profile (GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) {
+
+	GValue val;
+	account_t *current;
+
+	memset (&val, 0, sizeof(val));
+	gtk_tree_model_get_value(tree_model, iter, COLUMN_ACCOUNT_DATA, &val);
+	current = (account_t*) g_value_get_pointer(&val);
+
+	g_value_unset (&val);
+
+	if (current != NULL) {
+
+		// Make the first line appear differently
+		(g_strcasecmp (current->accountID, IP2IP) == 0) ? g_object_set (G_OBJECT (rend), "weight", PANGO_WEIGHT_THIN, 
+																					 "style", PANGO_STYLE_ITALIC, 
+																					 "stretch", PANGO_STRETCH_ULTRA_EXPANDED,
+																					 "scale", 0.95,
+																					 NULL) : 
+														g_object_set (G_OBJECT (rend), "weight", PANGO_WEIGHT_MEDIUM, 
+																					 "style", PANGO_STYLE_NORMAL, 
+																					 "stretch", PANGO_STRETCH_NORMAL,
+																					 "scale", 1.0,
+																					 NULL) ; 
+	}
+}
+
+void highlight_registration (GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) {
+
+	GValue val;
+	account_t *current;
+	GdkColor green = {0, 255, 0, 0};
+
+	memset (&val, 0, sizeof(val));
+	gtk_tree_model_get_value(tree_model, iter, COLUMN_ACCOUNT_DATA, &val);
+	current = (account_t*) g_value_get_pointer(&val);
+
+	g_value_unset (&val);
+
+	if (current != NULL) {
+		if (g_strcasecmp (current->accountID, IP2IP) != 0) {
+			// Color the account state: green -> registered, otherwise red
+			(current->state == ACCOUNT_STATE_REGISTERED) ? g_object_set (G_OBJECT (rend), "foreground", "Dark Green", NULL) :
+													g_object_set (G_OBJECT (rend), "foreground", "Dark Red", NULL);
+		}
+		else 
+			g_object_set (G_OBJECT (rend), "foreground", "Black", NULL);
+	}
+
+}
+
 /**
  * Account settings tab
  */
@@ -367,6 +418,7 @@ GtkWidget* create_account_list(GtkDialog * dialog) {
 
 	// A double click on the account line opens the window to edit the account
 	g_signal_connect( G_OBJECT( treeView ) , "row-activated" , G_CALLBACK( edit_account_cb ) , NULL );
+	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
 
 	renderer = gtk_cell_renderer_text_new();
 	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Protocol"),
@@ -374,6 +426,7 @@ GtkWidget* create_account_list(GtkDialog * dialog) {
 			"markup", COLUMN_ACCOUNT_TYPE,
 			NULL);
 	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
+	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
 
 	renderer = gtk_cell_renderer_text_new();
 	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Status"),
@@ -381,6 +434,10 @@ GtkWidget* create_account_list(GtkDialog * dialog) {
 			"markup", COLUMN_ACCOUNT_STATUS,
 			NULL);
 	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
+	// Highlight IP profile
+	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
+	// Highlight account registration state 
+	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_registration, NULL, NULL);
 
 	g_object_unref(G_OBJECT(accountStore));
 
-- 
GitLab


From cad9bf10237984015fbb4495018b12345730db44 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Feb 2010 16:38:05 -0500
Subject: [PATCH 040/160] [#1744] Put SRTP call on hold when SDES activated

---
 .../src/audio/audiortp/AudioRtpFactory.cpp           |  2 +-
 sflphone-common/src/sip/sipvoiplink.cpp              | 12 ++++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
index 3cf0fd3583..e532515d60 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
@@ -222,7 +222,7 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession()
 
   void AudioRtpFactory::setRemoteCryptoInfo(sfl::SdesNegotiator& nego)
 {
-    if ( (_rtpSessionType != NULL) && (_rtpSessionType == Sdes)) {
+    if ( _rtpSession && _rtpSessionType && (_rtpSessionType == Sdes)) {
         static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(nego);
     }
     else {
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 5d7e6d8d14..f142322231 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2571,6 +2571,8 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 {
     pj_status_t success;
 
+    _debug("Create TLS transport for account %s\n", accountID.c_str());
+
     // Retrieve the account information
     SIPAccount * account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
@@ -3184,10 +3186,12 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 	    _debug("SDES negociation successfull \n");
 	    nego_success = true;
 
-	    if(call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) {
-	        _debug("Set remote cryptographic context\n");
-	        call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
-	    }
+            _debug("Set remote cryptographic context\n");
+            try {
+		call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
+            }
+            catch(...) {}
+          
 	}
 	else {
 
-- 
GitLab


From 7f1a80d11fd00b3396b62aa2189b4774f150e8ce Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Feb 2010 17:15:27 -0500
Subject: [PATCH 041/160] [#2722] Create tls listener only if required

---
 sflphone-common/src/sip/sipvoiplink.cpp | 23 ++++++++++++++++++++---
 sflphone-common/src/sip/sipvoiplink.h   |  8 +++++++-
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index f142322231..d39542037c 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -79,8 +79,8 @@ struct result {
     pjsip_server_addresses  servers;
 };
 
-pjsip_transport *_localUDPTransport;
-pjsip_tpfactory *_localTlsListener;
+pjsip_transport *_localUDPTransport = NULL;
+pjsip_tpfactory *_localTlsListener = NULL;
 
 const pj_str_t STR_USER_AGENT = { (char*) "User-Agent", 10 };
 
@@ -2122,6 +2122,18 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
 
 void SIPVoIPLink::createDefaultSipTlsListener()
+{
+
+    SIPAccount * account = NULL;
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+
+    if(account->isTlsEnabled()) {
+        createTlsListener(IP2IP_PROFILE);
+    }
+}
+
+
+void SIPVoIPLink::createTlsListener(const AccountID& accountID)
 {
 
     pjsip_tpfactory *tls;
@@ -2130,11 +2142,13 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     pj_status_t status;
     pj_status_t success;
 
+    _debug("Create TLS listener");
+
     /* Grab the tls settings, populated
      * from configuration file.
      */
     SIPAccount * account = NULL;
-    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
     if (account == NULL) {
         _debug ("UserAgent: Account is null while creating TLS default listener. Returning");
@@ -2196,6 +2210,9 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
     if (account->isTlsEnabled()) {
 
+        if(_localTlsListener == NULL)
+	    createTlsListener(id);
+
         // Parse remote address to establish connection 
         std::string remoteSipUri = account->getServerUri();
         int sips = remoteSipUri.find("<sips:") + 6;
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index f7a561adce..b83d6bf36c 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -397,11 +397,17 @@ class SIPVoIPLink : public VoIPLink
 
 
 	/**
-	 * Create the default TLS litener on port 5061
+	 * Create the default TLS litener using IP2IP_PROFILE settings
 	 */
 	void createDefaultSipTlsListener();
 
 
+	/**
+	 * Create the default TLS litener according to account settings.
+	 */
+	void createTlsListener(const AccountID& accountID);
+
+
 	/**
 	 * General Sip transport creation method according to the 
 	 * transport type specified in account settings
-- 
GitLab


From 1f8656d694a7f4f13b7d75aed584c5597086fea4 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Feb 2010 17:43:08 -0500
Subject: [PATCH 042/160] [#1744] Make srtp_state_t ZRTP specific

---
 sflphone-client-gnome/src/actions.c           |  6 +++---
 sflphone-client-gnome/src/callable_obj.h      | 10 +++++-----
 sflphone-client-gnome/src/contacts/calltree.c | 20 ++++++++++---------
 3 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index cbd1bfb95f..638650dd0e 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -1278,7 +1278,7 @@ void sflphone_save_history (void)
    void
 sflphone_srtp_on( callable_obj_t * c)
 {
-    c->_srtp_state = SRTP_STATE_SAS_UNCONFIRMED;
+    c->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
 
     calltree_update_call(current_calls, c, NULL);
     update_actions();
@@ -1300,9 +1300,9 @@ sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean ver
     }
     c->_sas = g_strdup(sas);
     if(verified == TRUE) {
-        c->_srtp_state = SRTP_STATE_SAS_CONFIRMED;
+        c->_srtp_state = SRTP_STATE_ZRTP_SAS_CONFIRMED;
     } else {
-        c->_srtp_state = SRTP_STATE_SAS_UNCONFIRMED;
+        c->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
     }
     calltree_update_call(current_calls, c, NULL);
     update_actions();
diff --git a/sflphone-client-gnome/src/callable_obj.h b/sflphone-client-gnome/src/callable_obj.h
index 21311d8da7..269746867b 100644
--- a/sflphone-client-gnome/src/callable_obj.h
+++ b/sflphone-client-gnome/src/callable_obj.h
@@ -79,9 +79,9 @@ typedef enum
 typedef enum
 {
    SRTP_STATE_UNLOCKED = 0,
-   SRTP_STATE_SAS_CONFIRMED,
-   SRTP_STATE_SAS_UNCONFIRMED,
-   SRTP_STATE_SAS_SIGNED,
+   SRTP_STATE_ZRTP_SAS_CONFIRMED,
+   SRTP_STATE_ZRTP_SAS_UNCONFIRMED,
+   SRTP_STATE_ZRTP_SAS_SIGNED,
 } srtp_state_t;
 
 /** @struct callable_obj_t
@@ -135,8 +135,8 @@ typedef struct  {
      */
     GPtrArray * _error_dialogs;
 
-	/* The audio codec used for this call, if applicable */
-	gchar *_audio_codec;
+    /* The audio codec used for this call, if applicable */
+    gchar *_audio_codec;
 
 } callable_obj_t;
 
diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c
index 536d97a039..fec54bcf59 100644
--- a/sflphone-client-gnome/src/contacts/calltree.c
+++ b/sflphone-client-gnome/src/contacts/calltree.c
@@ -285,16 +285,16 @@ row_single_click(GtkTreeView *tree_view UNUSED, void * data UNUSED)
 
 	  switch(selectedCall->_srtp_state) {
 
-	  case SRTP_STATE_SAS_UNCONFIRMED:
-	      selectedCall->_srtp_state = SRTP_STATE_SAS_CONFIRMED;
+	  case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
+	      selectedCall->_srtp_state = SRTP_STATE_ZRTP_SAS_CONFIRMED;
 	      if(g_strcasecmp(displaySasOnce,"true") == 0) {
 		  selectedCall->_zrtp_confirmed = TRUE;
 	      }
 	      dbus_confirm_sas(selectedCall);
 	      calltree_update_call(current_calls, selectedCall, NULL);
 	      break;
-	  case SRTP_STATE_SAS_CONFIRMED:
-	      selectedCall->_srtp_state = SRTP_STATE_SAS_UNCONFIRMED;
+	  case SRTP_STATE_ZRTP_SAS_CONFIRMED:
+	      selectedCall->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
 	      dbus_reset_sas(selectedCall);
 	      calltree_update_call(current_calls, selectedCall, NULL);
 	      break;
@@ -590,7 +590,7 @@ calltree_create (calltab_t* tab, gboolean searchbar_type)
 			G_CALLBACK (focus_on_calltree_out), NULL);
 
 
-	if(tab != history || tab!=contacts) {
+	if(tab != history && tab!=contacts) {
 
 		DEBUG("SET TREE VIEW REORDABLE");
 		// Make calltree reordable for drag n drop
@@ -761,7 +761,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 	    }
 	    else {
 
-	        if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) {
+	        if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_ZRTP_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) {
 
 		    calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description);
 				  
@@ -805,16 +805,16 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 		}        
 
 		switch(c->_srtp_state) {
-		case SRTP_STATE_SAS_UNCONFIRMED:
+		case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
 	            DEBUG("Secure is ON");
 		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL);
 		    if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); }
 		    break;
-		case SRTP_STATE_SAS_CONFIRMED:
+		case SRTP_STATE_ZRTP_SAS_CONFIRMED:
 		    DEBUG("SAS is confirmed");
 		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL);   
 		    break;
-		case SRTP_STATE_SAS_SIGNED:   
+		case SRTP_STATE_ZRTP_SAS_SIGNED:   
 		    DEBUG("Secure is ON with SAS signed and verified");
 		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL);
 		    break;
@@ -911,6 +911,8 @@ void calltree_add_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 		}
 	} 
 
+	DEBUG("Added call key exchange is %s", key_exchange)
+
 	if( tab == current_calls )
 	{
 		switch(c->_state)
-- 
GitLab


From bbe72fa3ff6a6b878d9a47d8209dbd8f2a24119c Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Fri, 5 Feb 2010 11:14:16 -0500
Subject: [PATCH 043/160] [#2518] Fix some runtime warnings

---
 .../src/config/accountconfigdialog.c          | 128 +++++++++---------
 1 file changed, 65 insertions(+), 63 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 341ebda64c..c9243075a7 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -107,17 +107,16 @@ static void show_password_cb (GtkWidget *widget, gpointer data)
 }
 
 /* Signal to protocolComboBox 'changed' */
-	void
-change_protocol_cb (account_t * currentAccount UNUSED)
-{
-	gchar * protocol = gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
+void change_protocol_cb (account_t *currentAccount UNUSED) {
+
+	gchar *protocol = gtk_combo_box_get_active_text (GTK_COMBO_BOX (protocolComboBox));
 
-	if (g_strcasecmp(protocol, "IAX") == 0) {
-		gtk_widget_hide(security_tab);
-		gtk_widget_hide(advanced_tab);
+	if (g_strcasecmp (protocol, "IAX") == 0) {
+		gtk_widget_hide (security_tab);
+		gtk_widget_hide (advanced_tab);
 	} else {
-		gtk_widget_show(security_tab);
-		gtk_widget_show(advanced_tab);
+		gtk_widget_show (security_tab);
+		gtk_widget_show (advanced_tab);
 	}
 }
 
@@ -195,8 +194,8 @@ static void update_credential_cb(GtkWidget *widget, gpointer data UNUSED)
 	gtk_list_store_set (GTK_LIST_STORE (credentialStore), &iter, column, (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)), -1);
 }
 
-static GtkWidget * create_basic_tab(account_t **a) 
-{
+static GtkWidget* create_basic_tab (account_t **a)  {
+
 	GtkWidget * frame;
 	GtkWidget * table;
 	account_t *currentAccount;
@@ -240,7 +239,7 @@ static GtkWidget * create_basic_tab(account_t **a)
 	table = gtk_table_new (7, 2  ,  FALSE/* homogeneous */);
 	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
 	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_widget_show(table);
+	gtk_widget_show (table);
 	gtk_container_add( GTK_CONTAINER( frame) , table );
 
 	label = gtk_label_new_with_mnemonic (_("_Alias"));
@@ -510,8 +509,8 @@ static void use_sip_tls_cb(GtkWidget *widget, gpointer data)
 		gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), FALSE);
 		gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
 		gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
-		gtk_widget_hide(stunServerLabel);
-		gtk_widget_hide(stunServerEntry);
+		gtk_widget_hide (stunServerLabel);
+		gtk_widget_hide (stunServerEntry);
 
 
 
@@ -583,32 +582,36 @@ static set_published_addr_manually_cb(GtkWidget * widget, gpointer data UNUSED)
 	}
 }
 
-static use_stun_cb(GtkWidget * widget, gpointer data UNUSED)
+static use_stun_cb(GtkWidget *widget, gpointer data UNUSED)
 {
-	gchar * local_interface;
-	gchar * local_address;
+	gchar *local_interface;
+	gchar *local_address;
+
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
 
-	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
 		DEBUG("Showing stun options, hiding Local/Published info");
-		gtk_widget_show(stunServerLabel);
-		gtk_widget_show(stunServerEntry);
-		gtk_widget_set_sensitive(sameAsLocalRadioButton, FALSE);
-		gtk_widget_set_sensitive(publishedAddrRadioButton, FALSE);
+		gtk_widget_show (stunServerLabel);
+		gtk_widget_show (stunServerEntry);
+		gtk_widget_set_sensitive (sameAsLocalRadioButton, FALSE);
+		gtk_widget_set_sensitive (publishedAddrRadioButton, FALSE);
 		DEBUG("Problem occurs here");
-		gtk_widget_hide(publishedAddressLabel);
-		gtk_widget_hide(publishedPortLabel);
-		gtk_widget_hide(publishedAddressEntry);
-		gtk_widget_hide(publishedPortSpinBox);
+		gtk_widget_hide (publishedAddressLabel);
+		gtk_widget_hide (publishedPortLabel);
+		gtk_widget_hide (publishedAddressEntry);
+		gtk_widget_hide (publishedPortSpinBox);
+
 	} else {
-		gtk_widget_hide(stunServerLabel);
-		gtk_widget_hide(stunServerEntry);
-		gtk_widget_set_sensitive(sameAsLocalRadioButton, TRUE);
-		gtk_widget_set_sensitive(publishedAddrRadioButton, TRUE);
-		if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
-			gtk_widget_show(publishedAddressLabel);
-			gtk_widget_show(publishedPortLabel);
-			gtk_widget_show(publishedAddressEntry);
-			gtk_widget_show(publishedPortSpinBox);
+
+		gtk_widget_hide (stunServerLabel);
+		gtk_widget_hide (stunServerEntry);
+		gtk_widget_set_sensitive (sameAsLocalRadioButton, TRUE);
+		gtk_widget_set_sensitive (publishedAddrRadioButton, TRUE);
+
+		if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton))) {
+			gtk_widget_show (publishedAddressLabel);
+			gtk_widget_show (publishedPortLabel);
+			gtk_widget_show (publishedAddressEntry);
+			gtk_widget_show (publishedPortSpinBox);
 
 			// Since stun callback is called at initialization, we cannot reinit published address
 			// TODO: find a way so that if stun is unchecked, reinit published address entry 
@@ -619,7 +622,6 @@ static use_stun_cb(GtkWidget * widget, gpointer data UNUSED)
 			// gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
 		}
 	}
-
 }
 
 
@@ -854,22 +856,22 @@ GtkWidget* create_registration_expire (account_t **a) {
 
 	gnome_main_section_new_with_table (_("Registration"), &frame, &table, 2, 3);
 	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 5);	
+	gtk_table_set_row_spacings (GTK_TABLE (table), 5);	
 
 	label = gtk_label_new_with_mnemonic (_("Registration expire"));
-	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	expireSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget(GTK_LABEL(label), expireSpinBox);
-	gtk_spin_button_set_value(GTK_SPIN_BUTTON(expireSpinBox), g_ascii_strtod(account_expire, NULL));
-	gtk_table_attach_defaults(GTK_TABLE(table), expireSpinBox, 1, 2, 0, 1);
+	gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
+	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+	expireSpinBox = gtk_spin_button_new_with_range (1, 65535, 1);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), expireSpinBox);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (expireSpinBox), g_ascii_strtod (account_expire, NULL));
+	gtk_table_attach_defaults (GTK_TABLE (table), expireSpinBox, 1, 2, 0, 1);
 
 
-	entryResolveNameOnlyOnce = gtk_check_button_new_with_mnemonic(_("_Comply with RFC 3263"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(entryResolveNameOnlyOnce),
-			g_strcasecmp(resolve_once,"false") == 0 ? TRUE: FALSE);
-	gtk_table_attach_defaults( GTK_TABLE( table ), entryResolveNameOnlyOnce, 0, 2, 1, 2);
-	gtk_widget_set_sensitive( GTK_WIDGET( entryResolveNameOnlyOnce ) , TRUE );
+	entryResolveNameOnlyOnce = gtk_check_button_new_with_mnemonic (_("_Comply with RFC 3263"));
+	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (entryResolveNameOnlyOnce),
+			g_strcasecmp (resolve_once,"false") == 0 ? TRUE: FALSE);
+	gtk_table_attach_defaults (GTK_TABLE (table), entryResolveNameOnlyOnce, 0, 2, 1, 2);
+	gtk_widget_set_sensitive (GTK_WIDGET (entryResolveNameOnlyOnce ) , TRUE );
 
 	return frame;
 }
@@ -993,11 +995,11 @@ GtkWidget* create_published_address (account_t **a) {
 	gtk_widget_set_sensitive (GTK_WIDGET(useStunCheckBox),
 			g_strcasecmp(use_tls,"true") == 0 ? FALSE: TRUE);
 
-	label = gtk_label_new_with_mnemonic (_("STUN server URL"));
-	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+	stunServerLabel = gtk_label_new_with_mnemonic (_("STUN server URL"));
+	gtk_table_attach_defaults(GTK_TABLE(table), stunServerLabel, 0, 1, 1, 2);
+	gtk_misc_set_alignment(GTK_MISC (stunServerLabel), 0, 0.5);
 	stunServerEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget(GTK_LABEL(label), stunServerEntry);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (stunServerLabel), stunServerEntry);
 	gtk_entry_set_text(GTK_ENTRY(stunServerEntry), stun_server);
 	gtk_table_attach_defaults(GTK_TABLE(table), stunServerEntry, 1, 2, 1, 2);
 
@@ -1013,20 +1015,20 @@ GtkWidget* create_published_address (account_t **a) {
 		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton), TRUE);
 	}
 
-	label = gtk_label_new_with_mnemonic (_("Published address"));
-	gtk_table_attach_defaults( GTK_TABLE(table), label, 0, 1, 5, 6);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+	publishedAddressLabel = gtk_label_new_with_mnemonic (_("Published address"));
+	gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressLabel, 0, 1, 5, 6);
+	gtk_misc_set_alignment(GTK_MISC (publishedAddressLabel), 0, 0.5);
 	publishedAddressEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), publishedAddressEntry);
+	gtk_label_set_mnemonic_widget (GTK_LABEL (publishedAddressLabel), publishedAddressEntry);
 
 	gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), published_address);
 	gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressEntry, 1, 2, 5, 6);
 
-	label = gtk_label_new_with_mnemonic(_("Published port"));
-	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 6, 7);
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+	publishedPortLabel = gtk_label_new_with_mnemonic(_("Published port"));
+	gtk_table_attach_defaults(GTK_TABLE(table), publishedPortLabel, 0, 1, 6, 7);
+	gtk_misc_set_alignment(GTK_MISC (publishedPortLabel), 0, 0.5);
 	publishedPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget(GTK_LABEL (label), publishedPortSpinBox);
+	gtk_label_set_mnemonic_widget(GTK_LABEL (publishedPortLabel), publishedPortSpinBox);
 	gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(published_port, NULL));
 
 	gtk_table_attach_defaults(GTK_TABLE(table), publishedPortSpinBox, 1, 2, 6, 7);
@@ -1045,14 +1047,14 @@ GtkWidget* create_published_address (account_t **a) {
 	return frame;
 }
 
-GtkWidget * create_advanced_tab(account_t **a) {
+GtkWidget* create_advanced_tab (account_t **a) {
 
 	// Build the advanced tab, to appear on the account configuration panel
 
 	GtkWidget *ret, *frame;
 
-	ret = gtk_vbox_new(FALSE, 10);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+	ret = gtk_vbox_new (FALSE, 10);
+	gtk_container_set_border_width (GTK_CONTAINER(ret), 10);
 
 	frame = create_registration_expire (a);
 	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
-- 
GitLab


From 1447a8ad692c3b062510a7767f49ab0775e1e40d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 5 Feb 2010 12:45:25 -0500
Subject: [PATCH 044/160] [#1744] Add GUI security icons for sdes

---
 sflphone-client-gnome/src/actions.c           | 29 ++++++--
 sflphone-client-gnome/src/actions.h           | 58 ++++++++++++----
 sflphone-client-gnome/src/callable_obj.h      | 20 +++---
 sflphone-client-gnome/src/contacts/calltree.c |  8 ++-
 .../src/dbus/callmanager-introspec.xml        | 14 +++-
 sflphone-client-gnome/src/dbus/dbus.c         | 67 +++++++++++++++----
 .../audio/audiortp/ZrtpSessionCallback.cpp    |  4 +-
 .../src/dbus/callmanager-introspec.xml        | 12 +++-
 sflphone-common/src/sip/sipvoiplink.cpp       | 12 +---
 9 files changed, 166 insertions(+), 58 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index 638650dd0e..9e0f068a71 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -1276,7 +1276,28 @@ void sflphone_save_history (void)
 }
 
    void
-sflphone_srtp_on( callable_obj_t * c)
+sflphone_srtp_sdes_on(callable_obj_t * c)
+{
+    DEBUG("*************** Srtp SDES ON *************");
+
+    c->_srtp_state = SRTP_STATE_SDES_SUCCESS;
+
+    calltree_update_call(current_calls, c, NULL);
+    update_actions();
+}
+
+   void
+sflphone_srtp_sdes_off(callable_obj_t * c)
+{
+    c->_srtp_state = SRTP_STATE_UNLOCKED;
+
+    calltree_update_call(current_calls, c, NULL);
+    update_actions();
+}
+
+
+   void
+sflphone_srtp_zrtp_on( callable_obj_t * c)
 {
     c->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
 
@@ -1285,7 +1306,7 @@ sflphone_srtp_on( callable_obj_t * c)
 }
 
     void
-sflphone_srtp_off( callable_obj_t * c )
+sflphone_srtp_zrtp_off( callable_obj_t * c )
 {
     c->_srtp_state = SRTP_STATE_UNLOCKED;
     calltree_update_call(current_calls, c, NULL);
@@ -1293,7 +1314,7 @@ sflphone_srtp_off( callable_obj_t * c )
 }
 
     void
-sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified)
+sflphone_srtp_zrtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified)
 {
     if(c == NULL) {
         DEBUG("Panic callable obj is NULL in %s at %d", __FILE__, __LINE__);
@@ -1309,7 +1330,7 @@ sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean ver
 }
 
     void 
-sflphone_zrtp_not_supported( callable_obj_t * c )
+sflphone_srtp_zrtp_not_supported( callable_obj_t * c )
 {
     DEBUG("ZRTP not supported");
     main_window_zrtp_not_supported(c);
diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h
index 41e3ab2ef2..c0dbd5da1e 100644
--- a/sflphone-client-gnome/src/actions.h
+++ b/sflphone-client-gnome/src/actions.h
@@ -179,6 +179,7 @@ void sflphone_set_current_account();
  */
 void sflphone_fill_codec_list();
 
+
 void sflphone_add_participant();
 
 void sflphone_record (callable_obj_t *c);
@@ -191,50 +192,82 @@ void sflphone_fill_history (void);
 
 void sflphone_save_history (void);
 
+/**
+ * Action called when two single call are dragged on together to create a new conference
+ */
 void sflphone_join_participant(const gchar* sel_callID, const gchar* drag_callID);
 
+/**
+ * Action called when a new participant is dragged in
+ */
 void sflphone_add_participant(const gchar* callID, const gchar* confID);
 
+/**
+ * Action called when a conference participant is draged out
+ */
 void sflphone_detach_participant(const gchar* callID);
 
+/**
+ * Action called when two conference are merged together
+ */
 void sflphone_join_conference(const gchar* sel_confID, const gchar* drag_confID);
 
-/** Nofity that the communication is 
- *  now secured.
+
+/** 
+ * Nofity that the communication is 
+ * now secured using SRTP/SDES.
  * @param c* The current call
  */
-void sflphone_srtp_on( callable_obj_t * c);
+void sflphone_srtp_sdes_on(callable_obj_t * c);
 
-/** Called when the RTP session goes
+/** 
+ * Notify that the SRTP/SDES session
+ * is not secured
+ */
+
+/** 
+ * Nofity that the communication is 
+ * now secured using ZRTP.
+ * @param c* The current call
+ */
+void sflphone_srtp_zrtp_on( callable_obj_t * c);
+
+/** 
+ * Called when the ZRTP session goes
  * unsecured.
  * @param c* The current call
  */
-void sflphone_srtp_off( callable_obj_t * c );
+void sflphone_srtp_zrtp_off( callable_obj_t * c );
 
-/** Called when the sas has been computed
+/** 
+ * Called when the sas has been computed
  * and is ready to be displayed.
  * @param c* The current call
  * @param sas* The Short Authentication String
  * @param verified* Weather the SAS was confirmed or not.
  */
-void sflphone_srtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified);
+void sflphone_srtp_zrtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified);
 
-/** Called when the remote peer does not support ZRTP
+/** 
+ * Called when the remote peer does not support ZRTP
  * @param c* The current call
  */
-void sflphone_zrtp_not_supported( callable_obj_t * c );
+void sflphone_srtp_zrtp_not_supported( callable_obj_t * c );
 
-/** Called when user wants to confirm go clear request.
+/** 
+ * Called when user wants to confirm go clear request.
  * @param c* The call to confirm the go clear request.
  */
 void sflphone_set_confirm_go_clear( callable_obj_t * c );
 
-/** Called when user wants to confirm go clear request.
+/** 
+ * Called when user wants to confirm go clear request.
  * @param c* The call to confirm the go clear request.
  */
 void sflphone_confirm_go_clear( callable_obj_t * c );
 
-/** Called when user wants to clear.
+/**
+ * Called when user wants to clear.
  * @param c* The call on which to go clear
  */
 void sflphone_request_go_clear(void);
@@ -247,7 +280,6 @@ void sflphone_request_go_clear(void);
  * @param description A textual description of the code
  * @param code The status code as in SIP or IAX
  */
-
 void sflphone_call_state_changed(callable_obj_t * c, const gchar * description, const guint code);
 
 
diff --git a/sflphone-client-gnome/src/callable_obj.h b/sflphone-client-gnome/src/callable_obj.h
index 269746867b..4325b6b345 100644
--- a/sflphone-client-gnome/src/callable_obj.h
+++ b/sflphone-client-gnome/src/callable_obj.h
@@ -62,8 +62,7 @@ typedef enum
 /** @enum call_state_t
   * This enum have all the states a call can take.
   */
-typedef enum
-{
+typedef enum {
    CALL_STATE_INVALID = 0,
    CALL_STATE_INCOMING,
    CALL_STATE_RINGING,
@@ -73,17 +72,18 @@ typedef enum
    CALL_STATE_FAILURE,
    CALL_STATE_BUSY,
    CALL_STATE_TRANSFERT,
-   CALL_STATE_RECORD
+   CALL_STATE_RECORD,
 } call_state_t;
 
-typedef enum
-{
-   SRTP_STATE_UNLOCKED = 0,
-   SRTP_STATE_ZRTP_SAS_CONFIRMED,
-   SRTP_STATE_ZRTP_SAS_UNCONFIRMED,
-   SRTP_STATE_ZRTP_SAS_SIGNED,
+typedef enum {
+    SRTP_STATE_UNLOCKED = 0,
+    SRTP_STATE_SDES_SUCCESS,
+    SRTP_STATE_ZRTP_SAS_CONFIRMED,
+    SRTP_STATE_ZRTP_SAS_UNCONFIRMED,
+    SRTP_STATE_ZRTP_SAS_SIGNED,
 } srtp_state_t;
 
+
 /** @struct callable_obj_t
   * @brief Call information.
   * This struct holds information about a call.
@@ -105,7 +105,7 @@ typedef struct  {
     gchar* _sas;                    // The Short Authentication String that should be displayed
     gboolean _zrtp_confirmed;       // Override real state. Used for hold/unhold 
                                     // since rtp session is killed each time and 
-                                    // libzrtpcpp does not remember state (yet?).
+                                    // libzrtpcpp does not remember state (yet?)
     /**
      * The information about the person we are talking
      */
diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c
index fec54bcf59..c4d7f25f6d 100644
--- a/sflphone-client-gnome/src/contacts/calltree.c
+++ b/sflphone-client-gnome/src/contacts/calltree.c
@@ -707,6 +707,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 
     gchar* srtp_enabled = "";
     gboolean display_sas = TRUE;
+    gboolean sdes_success = TRUE;
     account_t* account_details=NULL;
     gchar *audio_codec = "";
 
@@ -723,6 +724,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 	    GHashTable * properties = NULL;
 	    sflphone_get_ip2ip_properties (&properties);
 	    if(properties != NULL) {
+	        srtp_enabled = g_hash_table_lookup(properties, ACCOUNT_SRTP_ENABLED);
 	        if(g_strcasecmp(g_hash_table_lookup(properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) 
 		  { display_sas = FALSE; }
 	    }
@@ -786,7 +788,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL);
 		    break;
 		case CALL_STATE_DIALING:
-	            pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL);
+      	            pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL);
 		    break;
 		case CALL_STATE_FAILURE:
 		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL);
@@ -805,6 +807,10 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 		}        
 
 		switch(c->_srtp_state) {
+		case SRTP_STATE_SDES_SUCCESS:
+		    DEBUG("SDES negotiation succes");
+		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); 
+		    break;
 		case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
 	            DEBUG("Secure is ON");
 		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL);
diff --git a/sflphone-client-gnome/src/dbus/callmanager-introspec.xml b/sflphone-client-gnome/src/dbus/callmanager-introspec.xml
index ba4e42577b..3d1720ac18 100644
--- a/sflphone-client-gnome/src/dbus/callmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/callmanager-introspec.xml
@@ -202,13 +202,21 @@
     <method name="requestGoClear">
         <arg type="s" name="callID" direction="in"/>
     </method>
-    
-         <signal name="secureOn">
+
+    <signal name="secureSdesOn">
+      <arg type="s" name="callID"  direction="out" />
+    </signal>
+
+    <signal name="secureSdesOff">
+      <arg type="s" name="callID"  direction="out" />
+    </signal>
+
+    <signal name="secureZrtpOn">
       <arg type="s" name="callID"  direction="out" />
       <arg type="s" name="cipher"  direction="out" />
     </signal>
     
-    <signal name="secureOff">
+    <signal name="secureZrtpOff">
       <arg type="s" name="callID"  direction="out" />
     </signal>
     
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 7d4fb6f4e7..a96a478d67 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -347,36 +347,65 @@ transfer_failed_cb (DBusGProxy *proxy UNUSED,
     sflphone_display_transfer_status("Transfer failed");
 }
 
+static void 
+secure_sdes_on_cb(DBusGProxy *proxy UNUSED, 
+		  const gchar *callID,
+		  void *foo UNUSED)
+{
+    DEBUG("SRTP using SDES is on");
+    callable_obj_t *c = calllist_get(current_calls, callID);
+    if(c) {
+        sflphone_srtp_sdes_on(c);
+	notify_secure_on(c);
+    }
+
+}
+
+
+static void
+secure_sdes_off_cb(DBusGProxy *proxy UNUSED,
+		   const gchar *callID,
+		   void *foo UNUSED)
+{
+    DEBUG("SRTP using SDES is off");
+    callable_obj_t *c = calllist_get(current_calls, callID);
+    if(c) {
+        sflphone_srtp_sdes_off(c);
+	notify_secure_off(c);
+    }
+}
+
     static void
-secure_on_cb (DBusGProxy *proxy UNUSED,
+secure_zrtp_on_cb (DBusGProxy *proxy UNUSED,
         const gchar* callID,
         const gchar* cipher,
         void * foo  UNUSED )
 {
-    DEBUG ("SRTP is ON secure_on_cb");
+    DEBUG ("SRTP using ZRTP is ON secure_on_cb");
     callable_obj_t * c = calllist_get(current_calls, callID);
     if(c) {
         c->_srtp_cipher = g_strdup(cipher);
-        sflphone_srtp_on (c);
+	
+        sflphone_srtp_zrtp_on (c);
         notify_secure_on(c);
     }
 }
 
     static void
-secure_off_cb (DBusGProxy *proxy UNUSED,
+secure_zrtp_off_cb (DBusGProxy *proxy UNUSED,
         const gchar* callID,
         void * foo  UNUSED )
 {
-    DEBUG ("SRTP is OFF");
+    DEBUG ("SRTP using ZRTP is OFF");
     callable_obj_t * c = calllist_get(current_calls, callID);
     if(c) {
-        sflphone_srtp_off (c);
+        sflphone_srtp_zrtp_off (c);
         notify_secure_off (c);
     }
 }
 
     static void
-show_sas_cb (DBusGProxy *proxy UNUSED,
+show_zrtp_sas_cb (DBusGProxy *proxy UNUSED,
         const gchar* callID,
         const gchar* sas,
         const gboolean verified,
@@ -385,7 +414,7 @@ show_sas_cb (DBusGProxy *proxy UNUSED,
     DEBUG ("Showing SAS");
     callable_obj_t * c = calllist_get(current_calls, callID);
     if(c) {
-        sflphone_srtp_show_sas (c, sas, verified);
+        sflphone_srtp_zrtp_show_sas (c, sas, verified);
     }
 }
 
@@ -409,7 +438,7 @@ zrtp_not_supported_cb (DBusGProxy *proxy UNUSED,
     DEBUG ("ZRTP not supported on the other end");
     callable_obj_t * c = calllist_get(current_calls, callID);
     if(c) {
-        sflphone_zrtp_not_supported (c);
+        sflphone_srtp_zrtp_not_supported (c);
         notify_zrtp_not_supported(c);
     }
 }
@@ -582,6 +611,16 @@ dbus_connect ()
             "conferenceRemoved", G_CALLBACK(conference_removed_cb), NULL, NULL);
 
     /* Security related callbacks */
+
+    dbus_g_proxy_add_signal (callManagerProxy,
+            "secureSdesOn", G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy,
+            "secureSdesOn", G_CALLBACK(secure_sdes_on_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy,
+            "secureSdesOff", G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy,
+            "secureSdesOff", G_CALLBACK(secure_sdes_off_cb), NULL, NULL);
     
     /* Register a marshaller for STRING,STRING,BOOL */
     dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING_BOOL,
@@ -589,21 +628,21 @@ dbus_connect ()
     dbus_g_proxy_add_signal (callManagerProxy,
             "showSAS", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
     dbus_g_proxy_connect_signal (callManagerProxy,
-            "showSAS", G_CALLBACK(show_sas_cb), NULL, NULL);  
+            "showSAS", G_CALLBACK(show_zrtp_sas_cb), NULL, NULL);  
   
 
     dbus_g_proxy_add_signal (callManagerProxy,
-            "secureOn", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+            "secureZrtpOn", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
     dbus_g_proxy_connect_signal (callManagerProxy,
-            "secureOn", G_CALLBACK(secure_on_cb), NULL, NULL);
+            "secureZrtpOn", G_CALLBACK(secure_zrtp_on_cb), NULL, NULL);
 
     /* Register a marshaller for STRING*/
     dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
             G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
     dbus_g_proxy_add_signal (callManagerProxy,
-            "secureOff", G_TYPE_STRING, G_TYPE_INVALID);
+            "secureZrtpOff", G_TYPE_STRING, G_TYPE_INVALID);
     dbus_g_proxy_connect_signal (callManagerProxy,
-            "secureOff", G_CALLBACK(secure_off_cb), NULL, NULL);
+            "secureZrtpOff", G_CALLBACK(secure_zrtp_off_cb), NULL, NULL);
     dbus_g_proxy_add_signal (callManagerProxy,
             "zrtpNotSuppOther", G_TYPE_STRING, G_TYPE_INVALID);
     dbus_g_proxy_connect_signal (callManagerProxy,
diff --git a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
index ebdcd8f95e..da38f1e0a2 100644
--- a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
+++ b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
@@ -115,14 +115,14 @@ void
 ZrtpSessionCallback::secureOn (std::string cipher)
 {
     _debug ("Secure mode is on with cipher %s", cipher.c_str());
-    DBusManager::instance().getCallManager()->secureOn (_sipcall->getCallId(), cipher);
+    DBusManager::instance().getCallManager()->secureZrtpOn (_sipcall->getCallId(), cipher);
 }
 
 void
 ZrtpSessionCallback::secureOff (void)
 {
     _debug ("Secure mode is off");
-    DBusManager::instance().getCallManager()->secureOff (_sipcall->getCallId());
+    DBusManager::instance().getCallManager()->secureZrtpOff (_sipcall->getCallId());
 }
 
 void
diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml
index 77d48b130c..724eddda89 100644
--- a/sflphone-common/src/dbus/callmanager-introspec.xml
+++ b/sflphone-common/src/dbus/callmanager-introspec.xml
@@ -191,14 +191,22 @@
 
     <signal name="transferFailed">
     </signal>
+
+    <signal name="secureSdesOn">
+      <arg type="s" name="callID"  direction="out" />
+    </signal>
+    
+    <signal name="secureSdesOff">
+      <arg type="s" name="callID"  direction="out" />
+    </signal>
     
     <!-- ZRTP Methods and Signals -->
-    <signal name="secureOn">
+    <signal name="secureZrtpOn">
       <arg type="s" name="callID"  direction="out" />
       <arg type="s" name="cipher"  direction="out" />
     </signal>
     
-    <signal name="secureOff">
+    <signal name="secureZrtpOff">
       <arg type="s" name="callID"  direction="out" />
     </signal>
     
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index d39542037c..bd58638899 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3208,17 +3208,11 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 		call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
             }
             catch(...) {}
-          
+
+	    DBusManager::instance().getCallManager()->secureSdesOn (call->getCallId());
 	}
 	else {
-
-	    //@TODO Handle fallback mechanism here
-	    // - Call may Failed if SrtpOnly
-	    // - Call fallback to RTP (make sure PBX support it, if not ...)
-	    // - Ask (display a pop-up message)
-
-	    call->getAudioRtp()->getAudioRtpType();
-
+	    DBusManager::instance().getCallManager()->secureSdesOff (call->getCallId());
 	}
     }
 
-- 
GitLab


From afe94d79252fce32caade9e02962970e3404527e Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 5 Feb 2010 15:07:38 -0500
Subject: [PATCH 045/160] [#1744] Add Sdes configuration dialog

---
 .../src/config/zrtpadvanceddialog.c           | 58 +++++++++++++++++++
 .../src/config/zrtpadvanceddialog.h           |  2 +
 sflphone-client-gnome/src/sflphone_const.h    |  1 +
 3 files changed, 61 insertions(+)

diff --git a/sflphone-client-gnome/src/config/zrtpadvanceddialog.c b/sflphone-client-gnome/src/config/zrtpadvanceddialog.c
index 02b634d559..3689dc16d0 100644
--- a/sflphone-client-gnome/src/config/zrtpadvanceddialog.c
+++ b/sflphone-client-gnome/src/config/zrtpadvanceddialog.c
@@ -114,3 +114,61 @@ void show_advanced_zrtp_options(GHashTable * properties)
     
     gtk_widget_destroy (GTK_WIDGET(securityDialog));
 }
+
+
+void show_advanced_sdes_options(GHashTable * properties) {
+
+    GtkDialog * securityDialog;
+
+    GtkWidget * sdesTable;
+    GtkWidget * enableRtpFallback;
+    gchar * rtpFallback = "false";
+    
+    if(properties != NULL) {
+        rtpFallback = g_hash_table_lookup(properties, ACCOUNT_SRTP_RTP_FALLBACK);
+    }
+
+    securityDialog = GTK_DIALOG	(gtk_dialog_new_with_buttons (	_("SDES Options"),
+
+			       	GTK_WINDOW (get_main_window()),							
+				GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+
+				GTK_STOCK_CANCEL,
+
+			        GTK_RESPONSE_CANCEL,
+
+				GTK_STOCK_SAVE,
+
+				GTK_RESPONSE_ACCEPT,	       
+				
+				NULL));
+
+    gtk_window_set_policy( GTK_WINDOW(securityDialog), FALSE, FALSE, FALSE );
+    gtk_dialog_set_has_separator(securityDialog, TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER(securityDialog), 0);
+
+    sdesTable = gtk_table_new (1, 2  , FALSE/* homogeneous */);  
+    gtk_table_set_row_spacings( GTK_TABLE(sdesTable), 10);
+    gtk_table_set_col_spacings( GTK_TABLE(sdesTable), 10); 
+    gtk_box_pack_start(GTK_BOX(securityDialog->vbox), sdesTable, FALSE, FALSE, 0);  
+    gtk_widget_show(sdesTable);
+
+    enableRtpFallback = gtk_check_button_new_with_mnemonic(_("Fallback on RTP on SDES failure"));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableRtpFallback),
+				 g_strcasecmp(rtpFallback,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach ( GTK_TABLE(sdesTable), enableRtpFallback, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive( GTK_WIDGET( enableRtpFallback ) , TRUE );
+
+
+    gtk_widget_show_all(sdesTable);
+
+    gtk_container_set_border_width (GTK_CONTAINER(sdesTable), 10);
+        
+    if(gtk_dialog_run(GTK_DIALOG(securityDialog)) == GTK_RESPONSE_ACCEPT) {        
+        g_hash_table_replace(properties,
+                g_strdup(ACCOUNT_SRTP_RTP_FALLBACK),
+	        g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(enableRtpFallback)) ? "true": "false"));                
+    }    
+    
+    gtk_widget_destroy (GTK_WIDGET(securityDialog));
+}
diff --git a/sflphone-client-gnome/src/config/zrtpadvanceddialog.h b/sflphone-client-gnome/src/config/zrtpadvanceddialog.h
index df92bfb09b..23bfdbb8bc 100644
--- a/sflphone-client-gnome/src/config/zrtpadvanceddialog.h
+++ b/sflphone-client-gnome/src/config/zrtpadvanceddialog.h
@@ -31,4 +31,6 @@
 
 void show_advanced_zrtp_options(GHashTable * properties);
 
+void show_advanced_sdes_options(GHashTable * properties);
+
 #endif 
diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h
index 2627179489..2617047fab 100644
--- a/sflphone-client-gnome/src/sflphone_const.h
+++ b/sflphone-client-gnome/src/sflphone_const.h
@@ -68,6 +68,7 @@
 #define ACCOUNT_REALM                      "realm"
 #define ACCOUNT_KEY_EXCHANGE               "SRTP.keyExchange"
 #define ACCOUNT_SRTP_ENABLED               "SRTP.enable"
+#define ACCOUNT_SRTP_RTP_FALLBACK          "SRTP.rtpFallback"
 #define ACCOUNT_ZRTP_DISPLAY_SAS           "ZRTP.displaySAS"
 #define ACCOUNT_ZRTP_NOT_SUPP_WARNING      "ZRTP.notSuppWarning"
 #define ACCOUNT_ZRTP_HELLO_HASH            "ZRTP.helloHashEnable"
-- 
GitLab


From 204b7da31c9a6af54f84efd743de90f19383b6d4 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 5 Feb 2010 15:08:26 -0500
Subject: [PATCH 046/160] [#1744] Add SDES rtp fallback in configuration

---
 .../src/config/accountconfigdialog.c           | 18 ++++++++++++++----
 sflphone-common/src/account.h                  |  1 +
 .../src/dbus/configurationmanager.cpp          |  7 +++++++
 sflphone-common/src/managerimpl.cpp            |  8 ++++++++
 sflphone-common/src/sip/sipvoiplink.cpp        |  7 +++++--
 5 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 0c16fea5c3..9f994d74a0 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -422,10 +422,16 @@ static void editing_started_cb (GtkCellRenderer *cell, GtkCellEditable * editabl
 
 static void show_advanced_zrtp_options_cb(GtkWidget *widget UNUSED, gpointer data)
 {
-    DEBUG("Advanced options for ZRTP");
-    show_advanced_zrtp_options((GHashTable *) data);
+    DEBUG("Advanced options for SRTP");
+    if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP") == 0) {
+        show_advanced_zrtp_options((GHashTable *) data);
+    }
+    else {
+        show_advanced_sdes_options((GHashTable *) data);
+    }
 }
 
+
 static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data)
 {
     DEBUG("Advanced options for TLS");
@@ -434,8 +440,12 @@ static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data
 
 static void key_exchange_changed_cb(GtkWidget *widget, gpointer data)
 {
-    DEBUG("Key exchange changed");
-    if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP") == 0) {
+  DEBUG("Key exchange changed %s", gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)));
+
+    int isSdes = g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "SDES");
+    int isZrtp = g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP");
+
+    if ((isSdes == 0) || (isZrtp == 0)) {
         gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), TRUE);
     } else {
         gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index e1a9705b2f..892c3d2947 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -91,6 +91,7 @@ typedef enum RegistrationState {
 #define SRTP_ENABLE                         "SRTP.enable"
 #define SRTP_KEY_EXCHANGE                   "SRTP.keyExchange"
 #define SRTP_ENCRYPTION_ALGO                "SRTP.encryptionAlgorithm"  // Provided by ccRTP,0=NULL,1=AESCM,2=AESF8 
+#define SRTP_RTP_FALLBACK                   "SRTP.rtpFallback"
 #define ZRTP_HELLO_HASH                     "ZRTP.helloHashEnable"
 #define ZRTP_DISPLAY_SAS                    "ZRTP.displaySAS"
 #define ZRTP_NOT_SUPP_WARNING               "ZRTP.notSuppWarning"
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index e067cb7d6e..2ea657c079 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -72,6 +72,7 @@ ConfigurationManager::getIp2IpDetails (void)
     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)));
@@ -112,6 +113,12 @@ ConfigurationManager::setIp2IpDetails (const std::map< std::string, std::string
         Manager::instance().setConfig (IP2IP_PROFILE, SRTP_ENABLE, it->second);
     }
 
+    it = map_cpy.find (SRTP_RTP_FALLBACK);
+
+    if (it != details.end()) {
+        Manager::instance().setConfig(IP2IP_PROFILE, SRTP_RTP_FALLBACK, it->second);
+    }
+
     it = map_cpy.find (SRTP_KEY_EXCHANGE);
 
     if (it != details.end()) {
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 4146b1620a..d6e56d37bf 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2238,6 +2238,7 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
 
     // 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);
@@ -3516,6 +3517,7 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
     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)));
@@ -3732,6 +3734,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
     std::string stunEnable;
     std::string stunServer;
     std::string srtpEnable;
+    std::string srtpRtpFallback;
     std::string zrtpDisplaySas;
     std::string zrtpDisplaySasOnce;
     std::string zrtpNotSuppWarning;
@@ -3793,6 +3796,10 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
         srtpEnable = iter->second;
     }
 
+    if ( (iter = map_cpy.find (SRTP_RTP_FALLBACK)) != map_cpy.end()) {
+        srtpRtpFallback = iter->second;
+    }
+
     if ( (iter = map_cpy.find (ZRTP_DISPLAY_SAS)) != map_cpy.end()) {
         zrtpDisplaySas = iter->second;
     }
@@ -3903,6 +3910,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
     setConfig (accountID, PUBLISHED_PORT, publishedPort);
     setConfig (accountID, DISPLAY_NAME, displayName);
     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);
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index bd58638899..13342e7f04 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3222,11 +3222,14 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
         // We did not found any crypto context for this media
         // @TODO if SRTPONLY, CallFail
 
-        // if RTPFALLBACK, change RTP session
         _debug("Did not found any crypto or negociation failed but Sdes enabled");
         call->getAudioRtp()->stop();
 	call->getAudioRtp()->setSrtpEnabled(false);
-	call->getAudioRtp()->initAudioRtpSession(call);
+
+	// 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);
     }
 
     if(nego_success && call->getAudioRtp()->getAudioRtpType() != sfl::Sdes) {
-- 
GitLab


From d098359038b3a9f7c6c4726d75bc8e9eaf8c9f95 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 8 Feb 2010 12:18:56 -0500
Subject: [PATCH 047/160] [#2803] Missing header in accountconfigdialog.c

Missing prototype create_codecs_configuration cause
launchad build-system failure
---
 sflphone-client-gnome/src/config/accountconfigdialog.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index ce7f9be455..28f45737ae 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -22,6 +22,7 @@
 #include <actions.h>
 #include <mainwindow.h>
 #include <accountlist.h>
+#include <audioconf.h>
 #include <accountconfigdialog.h>
 #include <zrtpadvanceddialog.h>
 #include <tlsadvanceddialog.h>
-- 
GitLab


From c5a61b1ded92560d417a40d31c21e0562bc2ac1d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 8 Feb 2010 12:22:03 -0500
Subject: [PATCH 048/160] [#2588] Add DBUS method to make call with first
 registered account

---
 sflphone-common/src/dbus/callmanager.cpp      | 29 +++++++++++++++++++
 sflphone-common/src/dbus/callmanager.h        |  2 ++
 .../src/dbus/configurationmanager.cpp         |  8 ++---
 sflphone-common/src/sip/sipvoiplink.cpp       |  2 --
 4 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp
index f3aa16c175..fb41bec4c2 100644
--- a/sflphone-common/src/dbus/callmanager.cpp
+++ b/sflphone-common/src/dbus/callmanager.cpp
@@ -18,6 +18,8 @@
  *  along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
+#include <vector>
+
 #include "global.h"
 #include "callmanager.h"
 
@@ -45,6 +47,33 @@ CallManager::placeCall (const std::string& accountID,
     else            Manager::instance().outgoingCall (accountID, callID, to);
 }
 
+void
+CallManager::placeCallFirstAccount (const std::string& callID,
+				    const std::string& to)
+{
+    if (to == "") {
+        _warn("No number entered - Call stopped");
+	return;
+    }
+
+    std::vector< std::string > accountIdList = Manager::instance().getAccountList();
+    std::vector< std::string >::iterator iter = accountIdList.begin();
+
+    Account *account;
+    while(iter != accountIdList.end()) {
+        account = Manager::instance().getAccount(*iter);
+	if(account->isEnabled()) {
+	    Manager::instance().outgoingCall (*iter, callID, to);
+	    return;
+	}
+
+	iter++;
+    }
+
+    _warn("No enabled account found - Call stopped\n");
+    
+}
+
 void
 CallManager::refuse (const std::string& callID)
 {
diff --git a/sflphone-common/src/dbus/callmanager.h b/sflphone-common/src/dbus/callmanager.h
index 8c3bab14c0..c49f9c9c28 100644
--- a/sflphone-common/src/dbus/callmanager.h
+++ b/sflphone-common/src/dbus/callmanager.h
@@ -53,6 +53,8 @@ class CallManager
 
 	/* Call related methods */
         void placeCall( const std::string& accountID, const std::string& callID, const std::string& to );
+	void placeCallFirstAccount( const std::string& callID, const std::string& to );
+
         void refuse( const std::string& callID );
         void accept( const std::string& callID );
         void hangUp( const std::string& callID );
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 8b19492e8f..7575cc3676 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -439,7 +439,7 @@ std::vector<std::string> ConfigurationManager::getCodecDetails (const int32_t& p
 
 std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::string& accountID) {
 
-    _warn ("Send active codec list for account %s", accountID.c_str ());
+    _debug("Send active codec list for account %s", accountID.c_str ());
 
     std::vector< std::string > v;
 	Account *acc;
@@ -449,11 +449,9 @@ std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::st
 
 	acc = Manager::instance ().getAccount (accountID);
 	if (acc != NULL) {
-		_warn ("Et un compte, un !");
 		active = acc->getActiveCodecs ();
 		size = active.size();
 		while (i<size) {
-			_warn ("Et un codec, un !");
 			std::stringstream ss;
 			ss << active[i];
 			v.push_back ( (ss.str()).data());
@@ -468,11 +466,9 @@ std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::st
 void ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID)
 {
 
-    _debug ("ConfigurationManager::setActiveCodecList received");
+        _debug ("ConfigurationManager::setActiveCodecList received");
 
 	Account *acc;
-    unsigned int i=0;
-	size_t size;
 
 	// Save the codecs list per account
 	acc = Manager::instance ().getAccount (accountID);
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index f49cbc0668..9b2a1e510a 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -380,7 +380,6 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
 
     struct ifreq ifr;
     int fd;
-    int rval = 0;
     int err;
 
     struct sockaddr_in *saddr_in;
@@ -1806,7 +1805,6 @@ bool SIPVoIPLink::pjsip_init()
 {
     pj_status_t status;
     int errPjsip = 0;
-    int port;
     pjsip_inv_callback inv_cb;
     pj_str_t accepted;
     std::string name_mod;
-- 
GitLab


From 454df2e6bfc6e2efd1f47fe18f656d7ce4e2db57 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 8 Feb 2010 14:41:11 -0500
Subject: [PATCH 049/160] [#2588] Use loadAccountOrder in placeCallFirstAccount
 to load account list

---
 sflphone-common/src/dbus/callmanager-introspec.xml |  5 +++++
 sflphone-common/src/dbus/callmanager.cpp           |  9 +++++----
 sflphone-common/src/managerimpl.h                  | 12 ++++++------
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml
index 724eddda89..83e5009c97 100644
--- a/sflphone-common/src/dbus/callmanager-introspec.xml
+++ b/sflphone-common/src/dbus/callmanager-introspec.xml
@@ -7,6 +7,11 @@
       <arg type="s" name="callID" direction="in"/>
       <arg type="s" name="to" direction="in"/>
     </method>
+
+    <method name="placeCallFirstAccount">
+      <arg type="s" name="callID" direction="in"/>
+      <arg type="s" name="to" direction="in"/>
+    </method>
     
     <method name="refuse">
       <arg type="s" name="callID" direction="in"/>
diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp
index fb41bec4c2..3468944497 100644
--- a/sflphone-common/src/dbus/callmanager.cpp
+++ b/sflphone-common/src/dbus/callmanager.cpp
@@ -51,18 +51,19 @@ void
 CallManager::placeCallFirstAccount (const std::string& callID,
 				    const std::string& to)
 {
+
     if (to == "") {
         _warn("No number entered - Call stopped");
 	return;
     }
 
-    std::vector< std::string > accountIdList = Manager::instance().getAccountList();
-    std::vector< std::string >::iterator iter = accountIdList.begin();
+    std::vector< std::string > accountOrder = Manager::instance().loadAccountOrder();
+    std::vector< std::string >::iterator iter = accountOrder.begin();
 
     Account *account;
-    while(iter != accountIdList.end()) {
+    while(iter != accountOrder.end()) {
         account = Manager::instance().getAccount(*iter);
-	if(account->isEnabled()) {
+	if((*iter != IP2IP_PROFILE) && account->isEnabled()) {
 	    Manager::instance().outgoingCall (*iter, callID, to);
 	    return;
 	}
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index 7aaa89a4a6..c2938844f8 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -424,6 +424,12 @@ class ManagerImpl {
      */
     void setAccountsOrder (const std::string& order);
 
+    /**
+     * Load the accounts order set by the user from the sflphonedrc config file
+     * @return std::vector<std::string> A vector containing the account ID's
+     */
+    std::vector<std::string> loadAccountOrder ();
+
     /**
      * Retrieve details about a given account
      * @param accountID	  The account identifier
@@ -1212,12 +1218,6 @@ class ManagerImpl {
      */
     short loadAccountMap();
 
-    /**
-     * Load the accounts order set by the user from the sflphonedrc config file
-     * @return std::vector<std::string> A vector containing the account ID's
-     */
-    std::vector<std::string> loadAccountOrder ();
-
 
     /**
      * Unload the account (delete them)
-- 
GitLab


From 496bd7801c31ee47a8802503e6be842e62ec621d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 9 Feb 2010 11:44:22 -0500
Subject: [PATCH 050/160] [#2559] Use codecFrameSize to increment timestamp,
 add notification counter

Incoming call notification are now scheduled using their own time counter and does not rely on RTP timestamp anymore.
---
 sflphone-common/src/audio/audiolayer.cpp      |  1 -
 .../src/audio/audiortp/AudioRtpSession.h      | 80 ++++++++++---------
 2 files changed, 43 insertions(+), 38 deletions(-)

diff --git a/sflphone-common/src/audio/audiolayer.cpp b/sflphone-common/src/audio/audiolayer.cpp
index e0a84d4848..c6b40d81ef 100644
--- a/sflphone-common/src/audio/audiolayer.cpp
+++ b/sflphone-common/src/audio/audiolayer.cpp
@@ -40,7 +40,6 @@ void AudioLayer::flushUrgent (void)
 
 int AudioLayer::putUrgent (void* buffer, int toCopy)
 {
-    _debug ("------------------- AudioLayer::putUrgent --------------------");
     int a;
 
     ost::MutexLock guard (_mutex);
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index d168cb8d75..7bdfe3c406 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -81,17 +81,17 @@ namespace sfl {
             void setDestinationIpAddress(void);
                 
             int processDataEncode(void);
-            void processDataDecode(unsigned char * spkrData, unsigned int size, int& countTime);
+            void processDataDecode(unsigned char * spkrData, unsigned int size);
             
             inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) {
                 return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
             }          
             int computeNbByteAudioLayer (float codecFrameSize) {
-                return (int) ( ((float) converterSamplingRate * codecFrameSize * sizeof(SFLDataFormat))/ 1000.0);
+                return (int) ( ((float) _converterSamplingRate * codecFrameSize * sizeof(SFLDataFormat))/ 1000.0);
             }
           
-            void sendMicData(int timestamp);
-            void receiveSpeakerData (int& countTime);
+            void sendMicData();
+            void receiveSpeakerData ();
             
             ost::Time * _time;
    
@@ -163,7 +163,20 @@ namespace sfl {
              */
              ManagerImpl * _manager;
 
-	     int converterSamplingRate;
+	     /**
+	      * Sampling rate of audio converter
+	      */
+	     int _converterSamplingRate;
+
+	     /**
+	      * Timestamp for this session
+	      */
+	     int _timestamp;
+
+	     /**
+	      * Time counter used to trigger incoming call notification
+	      */
+	     int _countNotificationTime;
             
         protected:
             SIPCall * _ca;
@@ -186,6 +199,9 @@ namespace sfl {
      _codecSampleRate(0), 
      _layerFrameSize(0),
      _manager(manager),
+     _converterSamplingRate(0),
+     _timestamp(0),
+     _countNotificationTime(0),
      _ca (sipcall)
     {
         setCancel (cancelDefault);
@@ -239,7 +255,7 @@ namespace sfl {
 
 	// may be different than one already setted
 	// converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
-	converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+	_converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
 	// initialize SampleRate converter using AudioLayer's sampling rate
 	// (internal buffers initialized with maximal sampling rate and frame size)
@@ -390,8 +406,7 @@ namespace sfl {
     }
     
     template <typename D>
-    void AudioRtpSession<D>::processDataDecode(unsigned char * spkrData, unsigned int size, int& countTime) 
-    {
+    void AudioRtpSession<D>::processDataDecode(unsigned char * spkrData, unsigned int size) {
 
         if (_audiocodec != NULL) {
 
@@ -429,26 +444,23 @@ namespace sfl {
             }
 
             // Notify (with a beep) an incoming call when there is already a call
-            countTime += _time->getSecond();
-
             if (_manager->incomingCallWaiting() > 0) {
-	        int countTime_modulo = countTime % 4000;
-		// _debug("countTime: %i\n", countTime);
-		// _debug("countTime_modulo: %i\n", countTime_modulo);
-                if ((countTime_modulo - countTime) < 0) {
+	        _countNotificationTime += _time->getSecond();
+	        int countTimeModulo = _countNotificationTime % 5000;
+		// _debug("countNotificationTime: %d\n", countNotificationTime);
+		// _debug("countTimeModulo: %d\n", countTimeModulo);
+                if ((countTimeModulo - _countNotificationTime) < 0) {
                     _manager->notificationIncomingCall();
                 }
 
-		countTime = countTime_modulo;
+		_countNotificationTime = countTimeModulo;
             }
 
-        } else {
-            countTime += _time->getSecond();
-        }
+        } 
     }
     
     template <typename D>
-    void AudioRtpSession<D>::sendMicData(int timestamp)
+    void AudioRtpSession<D>::sendMicData()
     {
         // STEP:
         //   1. get data from mic
@@ -456,7 +468,9 @@ namespace sfl {
         //   3. encode it
         //   4. send it
 
-        timestamp += _time->getSecond();
+        // Increment timestamp for outgoing packet
+        
+        _timestamp += _codecFrameSize;
 
         if (!_audiolayer) {
             _debug ("No audiolayer available for MIC\n");
@@ -471,12 +485,12 @@ namespace sfl {
         int compSize = processDataEncode();
 
         // putData put the data on RTP queue, sendImmediate bypass this queue
-        static_cast<D*>(this)->putData (timestamp, _micDataEncoded, compSize);
+        static_cast<D*>(this)->putData (_timestamp, _micDataEncoded, compSize);
     }
     
     
     template <typename D>
-    void AudioRtpSession<D>::receiveSpeakerData (int& countTime)
+    void AudioRtpSession<D>::receiveSpeakerData ()
     {
         if (!_audiolayer) {
             _debug ("No audiolayer available for speaker\n");
@@ -501,11 +515,9 @@ namespace sfl {
 
         unsigned int size = adu->getSize(); // size in char
 
-	// _debug("RTP size: %i\n", size);
-
-	// Size of DTMF over RTP
+	// DTMF over RTP, size must be over 4 in order to process it as voice data
 	if(size > 4) {
-	    processDataDecode (spkrData, size, countTime);
+	    processDataDecode (spkrData, size);
 	}
     }
     
@@ -526,10 +538,10 @@ namespace sfl {
 
 	initBuffers();
 
+	// Timestamp must be initialized randomly
+	_timestamp = static_cast<D*>(this)->getCurrentTimestamp();
+
         int sessionWaiting;
-        int timestep = _codecFrameSize;
-        int timestamp = static_cast<D*>(this)->getCurrentTimestamp(); // for mic
-        int countTime = 0; // for receive
         int threadSleep = 0;
 
         if (_codecSampleRate != 0)
@@ -551,9 +563,6 @@ namespace sfl {
         _manager->getAudioDriver()->startStream();
         static_cast<D*>(this)->startRunning();
 
-	// Already called in _audiolayer->startStream()
-	// _audiolayer->flushUrgent();
-	// _audiolayer->flushMain();
 
         _debug ("Entering RTP mainloop for callid %s\n",_ca->getCallId().c_str());
 
@@ -569,11 +578,10 @@ namespace sfl {
             // Send session
             sessionWaiting = static_cast<D*>(this)->isWaiting();
 
-            sendMicData (timestamp);
-            timestamp += timestep;
+            sendMicData ();
 
             // Recv session
-            receiveSpeakerData (countTime);
+            receiveSpeakerData ();
 
             // Let's wait for the next transmit cycle
             if (sessionWaiting == 1) {
@@ -589,8 +597,6 @@ namespace sfl {
 
             // Let's wait for the next transmit cycle
             Thread::sleep (TimerPort::getTimer());
-
-            // TimerPort::incTimer(20); // 'frameSize' ms
             TimerPort::incTimer (threadSleep);
         }
         
-- 
GitLab


From ea17dd193dab6b764a65d4d66548f97d49b2855e Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 9 Feb 2010 15:32:38 -0500
Subject: [PATCH 051/160] [#2521] First version of DBUS CallManager interface
 documentation

---
 .../src/dbus/callmanager-introspec.xml        | 243 +++++++++++++++++-
 1 file changed, 236 insertions(+), 7 deletions(-)

diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml
index 83e5009c97..34f4eab3ec 100644
--- a/sflphone-common/src/dbus/callmanager-introspec.xml
+++ b/sflphone-common/src/dbus/callmanager-introspec.xml
@@ -1,11 +1,49 @@
-<?xml version="1.0" ?>
+<?xml version="1.0" encoding="UTF-8" ?>
 <node name="/org/sflphone/SFLphone">
+
+  <!--* The CallManager interface is used to manage any call related
+	actions. 
+
+	Since SFLphone-daemon support multiple incoming/outgoing
+	calls, any actions involving a specific call must address the
+	method by the means of a unique callID. SFLphone-clients is
+	responsible to generate the callID on outgoing call. On the
+	otehr hand, SFLphone-daemon will generate a unique callID on
+	incoming calls.
+
+	Actions are performed asynchronously, SFLphone-client should
+	subscribe to the callStateChanged signal in order to be
+	notified on updates in call status.
+    -->
   <interface name="org.sflphone.SFLphone.CallManager">
-  
+
     <method name="placeCall">
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="s" name="callID" direction="in"/>
-      <arg type="s" name="to" direction="in"/>
+      <!--* This is the main method in order to place a new call. The
+            call is registered to the daemon using this method
+            specified a unique identifier and VoIP Accout to be bound with.
+
+	    The account is specified by its accountID. 
+
+	    If the call is to be placed whithout any account by the
+	    means of a SIP URI (i.e. sip:num@server), the
+	    "IP2IP_PROFILE" is passed as the accountID. For more
+	    details about accounts see the configuration manager interface.
+
+	    The callID is a unique identifier that must be randomly
+	    generated on sflphone-client's side. Any subsequent
+	    actions refering to this call must use this callID.
+
+	    If bound to a VoIP account, the to argument is the phone
+	    number. In case of calls involving "IP2IP_PROFILE", a
+	    complete SIP URI must be specified.
+
+            @param[in] input accountID
+            @param[in] input callID
+	    @param[in] input to
+        -->
+      <arg type="s" name="accountID" direction="in" />
+      <arg type="s" name="callID" direction="in" />
+      <arg type="s" name="to" direction="in" />
     </method>
 
     <method name="placeCallFirstAccount">
@@ -14,84 +52,186 @@
     </method>
     
     <method name="refuse">
+      <!--* Method called to refuse an incoming call.
+
+            @param[in] input callID
+        -->
       <arg type="s" name="callID" direction="in"/>
     </method>
     
     <method name="accept">
+      <!--* Method called to answer an incoming call. Automatically put
+	    the current call on state HOLD.
+
+            @param[in] input callID
+        -->
       <arg type="s" name="callID" direction="in"/>
     </method>
     
     <method name="hangUp">
+      <!--* Method called to hangup a call in state "CURRENT" or "HOLD".
+
+            @param[in] input callID
+        -->
       <arg type="s" name="callID" direction="in"/>
     </method>
 
     <method name="hangUpConference">
+      <!--* This method will hangup a conference in state ""
+	    every call participating to the conference.
+
+            @param[in] input confID
+        -->
       <arg type="s" name="confID" direction="in"/>
     </method>
     
     <method name="hold">
+      <!--* Place this call on state HOLD.
+
+            @param[in] input confID
+        -->
       <arg type="s" name="callID" direction="in"/>
     </method>
     
     <method name="unhold">
+      <!--* Place this call on state CURRENT.
+
+            @param[in] input confID
+        -->
       <arg type="s" name="callID" direction="in"/>
     </method>
     
     <method name="transfert">
+      <!--* Transfer a call to given phone number.
+
+            @param[in] input confID
+	    @param[in] input to
+        -->
       <arg type="s" name="callID" direction="in"/>
       <arg type="s" name="to" direction="in"/>
     </method>
     
     <method name="playDTMF">
+      <!--* Dual-Tone multi-frequency. Tell SFLphone-daemon to play
+	    dial tones. A SIP INFO message is sent to notify the server.
+
+            @param[in] input Unicode charter for pressed key
+        -->
       <arg type="s" name="key" direction="in"/>
     </method>
     
     <method name="startTone">
+      <!--* This method is used to start audio stream and play tone.
+
+            @param[in] input confID
+        -->
       <arg type="i" name="start" direction="in"/>
       <arg type="i" name="type" direction="in"/>
     </method>
 
     <method name="setVolume">
+      <!--* This method sets the volume using a linear scale
+            [0,100]. Pulseaudio has its own mechanism to modify
+            application volume. This method is enabled only if the
+            ALSA API is used. 
+
+            @param[in] input device
+	    @param[in] input value
+        -->
       <arg type="s" name="device" direction="in"/>
       <arg type="d" name="value" direction="in"/>
     </method>
     
     <method name="getVolume">
+      <!--* This method is enabled only if the ALSA API is used, Pulseaudio 
+	    has its own mechanism to modify application volume. Return
+	    a value on a linear scale [0,100].
+
+            @param[in] input device
+	    @param[out] output value
+        -->
       <arg type="s" name="device" direction="in"/>
       <arg type="d" name="value" direction="out"/>
     </method>
 
     <method name="joinParticipant">
+      <!--* Join two participants together to create a 3-way
+            conference including current SFLphone-client.
+	    conferenceCreated signal is emited on success.
+
+            @param[in] input sel_callID
+	    @param[in] input drag_callID
+        -->
       <arg type="s" name="sel_callID" direction="in"/>
       <arg type="s" name="drag_callID" direction="in"/>
     </method>
 
     <method name="addParticipant">
+      <!--* Join a new particiant to an already created conference.
+            conferenceChaged signal is emited on success.
+
+            @param[in] input callID
+	    @param[in] input confID
+        -->
       <arg type="s" name="callID" direction="in"/>
       <arg type="s" name="confID" direction="in"/>
     </method>
 
     <method name="addMainParticipant">
+      <!--* As SFLphone-daemon can handle multiple calls and
+            conferences. It may happen that SFLphone-client's user
+            leave a conference to answer an incoming call or
+            send new ones. This method is used to reintroduce
+            SFLphone-client's user into the conference.
+
+	    It put the current call on state HOLD or detach
+	    SFLphone-client's user from the another conference.
+
+	    @param[in] input confID
+        -->
       <arg type="s" name="confID" direction="in"/>
     </method>
 
     <method name="detachParticipant">
+      <!--* Detach the given call from the conference. If only one
+            participant is left, the conference is deleted and the 
+	    "conferenceRemoved" signal is emited.
+
+            @param[in] input callID
+        -->
       <arg type="s" name="callID" direction="in"/>
     </method>
 
     <method name="joinConference">
+      <!--* Method used to join two conference together.
+
+            @param[in] input sel_confID
+	    @param[in] input drag_confID
+        -->
       <arg type="s" name="sel_confID" direction="in"/>
       <arg type="s" name="drag_confID" direction="in"/>
     </method>
 
     <method name="getConferenceDetails">
+      <!--* Returns a hashtable containing conference details.
+
+	    "CONFID"
+	    "CONF_STATE"
+
+            @param[in] input confID
+	    @param[out] output a infos
+        -->
       <arg type="s" name="callID" direction="in"/>
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
       <arg type="a{ss}" name="infos" direction="out"/>
     </method>
     
     <method name="getConferenceList">
-        <arg type="as" name="list" direction="out"/>
+      <!--* Returns a list containing all active confID in SFLphone-daemon.
+
+	    @param[out] output list
+        -->
+      <arg type="as" name="list" direction="out"/>
     </method>
 
     <method name="setRecording">
@@ -104,16 +244,36 @@
     </method>
     
     <method name="getCallDetails">
+      <!--* Returns a hashtable containing call details.
+
+	    "ACCOUNTID"
+            "PEER_NUMBER"
+            "PEER_NAME"
+            "DISPLAY_NAME"    Name to display
+            "CALL_STATE"      The state of the call
+            "CALL_TYPE"       SIP or IAX
+
+            @param[in] input callID
+	    @param[out] output a infos
+        -->
       <arg type="s" name="callID" direction="in"/>
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
       <arg type="a{ss}" name="infos" direction="out"/>
     </method>
     
     <method name="getCallList">
-        <arg type="as" name="list" direction="out"/>
+      <!--* Returns a list containing all active callID in SFLphone-daemon.
+
+	    @param[out] output list
+        -->
+      <arg type="as" name="list" direction="out"/>
     </method>
 
     <method name="getCurrentCallID">
+      <!--* Returns the CURRENT callID
+
+	    @param[out] output callID
+        -->
       <arg type="s" name="callID" direction="out"/>
     </method>
 
@@ -128,6 +288,16 @@
     </signal>
     
     <signal name="incomingCall">
+      <!--* Signal sent to notify incoming calls.
+
+	    The callID generated by the daemon and must be stored
+	    by SFLphone-client in order to address other action for
+	    this call.
+
+            @param[in] input accountID
+            @param[in] input callID
+	    @param[in] input from
+        -->
       <arg type="s" name="accountID" />
       <arg type="s" name="callID" />
       <arg type="s" name="from" />
@@ -139,33 +309,92 @@
     </signal>
     
     <signal name="callStateChanged">
+      <!--* Signal emited by SFLphone-daemon to notify of a chage in
+	    call state.
+ 
+	    The following is a liste of possible call state:
+
+	    "INCOMING"          Initial state of incoming calls
+	    "RINGING"           Initial state of received outgoing call
+	    "CURRENT"           The normal active state of an answered call
+            "HUNGUP"            Notify that the call has been hungup by peer
+	    "BUSY" 
+            "FAILURE"           Signal emited on failure to answer the call
+            "HOLD"              CAll state is now on hold
+            "UNHOLD_RECORD"     CAll state is now on CURRENT (pursue recording)
+            "UNHOLD_CURRENT"    CAll state is now on CURRENT
+
+            @param[in] input accountID
+            @param[in] input state
+        -->
       <arg type="s" name="callID"  direction="out"/>
       <arg type="s" name="state"  direction="out"/>
     </signal>
 
     <signal name="conferenceChanged">
+      <!--* Signal emited by SFLphone-daemon to notify of a chage in
+	    conference state.
+ 
+	    The following is a liste of possible conference state:
+
+	    "ACTIVE_ATACHED"    Conference state is active
+	    "ACTIVE_DETACHED"   Conference state is active  
+	    "HOLD"              Conference is on hold
+
+            @param[in] input accountID
+            @param[in] input state
+        -->
       <arg type="s" name="confID"  direction="out"/>
       <arg type="s" name="state"  direction="out"/>
     </signal>
 
     <method name="getParticipantList">
+      <!--* Return a vector (or a list) containig the callIP of every
+            participant to a given conference. SFLphone-client should
+            keep and update the list of participant.
+
+            @param[in] input accountID
+            @param[out] output List of callID
+        -->
       <arg type="s" name="confID" direction="in"/>
       <arg type="as" name="list" direction="out"/>
     </method>
 
     <signal name="conferenceCreated">
+      <!--* Emited when a new conference is created. SFLphone-client
+            is reponsible to store the confID and call
+            getParticipantList to update display.
+
+            param[out] output Newly generated confID
+        -->
       <arg type="s" name="confID"  direction="out"/>
     </signal>
 
     <signal name="conferenceRemoved">
+      <!--* Emited when a new conference is removed. SFLphone-client
+            should have kept a list of current participant in order to
+            display modification. 
+
+            @param[out] output confID
+        -->
       <arg type="s" name="confID"  direction="out"/>
     </signal>
 
     <method name="holdConference">
+      <!--* Put the hole conference on hold. Every call participating
+            to this conference will be update to state HOLD. 
+
+            @param[in] input confID
+        -->
       <arg type="s" name="confID" direction="in"/>
     </method>
 
     <method name="unholdConference">
+      <!--* Put the conference on state ACTIVE. Every call participating
+            to this conference will be updated to state UNHOLD.
+
+            @param[in] input confID
+        -->
       <arg type="s" name="confID" direction="in"/>
     </method>
     
-- 
GitLab


From a5da339bf82468c1f7e15272000e757b890d7957 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 9 Feb 2010 16:57:15 -0500
Subject: [PATCH 052/160] [#2623] Add client method to resolve interface
 address from interface name

---
 sflphone-client-gnome/src/actions.c           | 48 ++++++++++++++++++-
 sflphone-client-gnome/src/actions.h           |  7 ++-
 .../src/config/accountconfigdialog.c          |  2 +
 sflphone-common/src/sip/sipvoiplink.cpp       |  2 -
 4 files changed, 55 insertions(+), 4 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index f5d353f063..5239c0d388 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -31,6 +31,17 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <linux/if.h>
+
+
+
 GHashTable * ip2ip_profile=NULL;
 
     void
@@ -1305,7 +1316,6 @@ void sflphone_save_history (void)
    void
 sflphone_srtp_sdes_on(callable_obj_t * c)
 {
-    DEBUG("*************** Srtp SDES ON *************");
 
     c->_srtp_state = SRTP_STATE_SDES_SUCCESS;
 
@@ -1403,3 +1413,39 @@ sflphone_call_state_changed( callable_obj_t * c, const gchar * description, cons
     calltree_update_call(current_calls, c, NULL);
     update_actions();
 }
+
+
+void sflphone_get_interface_addr_from_name(char *iface_name) {
+
+    struct ifreq ifr;
+    int fd;
+    int err;
+    static char iface_addr[18];
+    char *tmp_addr;
+
+    struct sockaddr_in *saddr_in;
+    struct in_addr *addr_in;
+
+    if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
+        DEBUG("getInterfaceAddrFromName error could not open socket\n");
+
+    memset (&ifr, 0, sizeof (struct ifreq));
+
+    strcpy (ifr.ifr_name, iface_name);
+    ifr.ifr_addr.sa_family = AF_INET;
+
+    if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0)
+        DEBUG("getInterfaceAddrFromName use default interface (0.0.0.0)\n");
+
+    
+    saddr_in = (struct sockaddr_in *)&ifr.ifr_addr;
+    addr_in = &(saddr_in->sin_addr);
+
+    tmp_addr = (char *)addr_in;
+
+    snprintf(iface_addr, sizeof(iface_addr), "%d.%d.%d.%d", 
+	     UC(tmp_addr[0]), UC(tmp_addr[1]), UC(tmp_addr[2]), UC(tmp_addr[3]));
+
+    printf("************************************* %s ****************************\n", iface_addr);
+}
+
diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h
index 6cf10d932f..eaca4713fa 100644
--- a/sflphone-client-gnome/src/actions.h
+++ b/sflphone-client-gnome/src/actions.h
@@ -30,6 +30,8 @@
 #include <errors.h>
 #include <conference_obj.h>
 
+#define	UC(b)	(((int)b)&0xff)
+
 /** @file actions.h
   * @brief General functions that change the state of the application.
   * All of these functions are called when dbus signals are triggered.  Exceptions
@@ -284,5 +286,8 @@ void sflphone_request_go_clear(void);
  */
 void sflphone_call_state_changed(callable_obj_t * c, const gchar * description, const guint code);
 
-
+/**
+ * Resolve an interface address given its name
+ */
+void sflphone_get_interface_addr_from_name(char *iface_name);
 #endif
diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 28f45737ae..55512d1879 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -566,6 +566,7 @@ static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED) {
 		gchar *local_address;
 
 		local_interface = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
+		// sflphone_get_interface_addr_from_name((char *)local_interface);
 		local_address = dbus_get_address_from_interface_name (local_interface);
 
 		gtk_entry_set_text (GTK_ENTRY(publishedAddressEntry), local_address);
@@ -646,6 +647,7 @@ static same_as_local_cb(GtkWidget * widget, gpointer data UNUSED)
 		gchar * local_address;
 
 		local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
+		// sflphone_get_interface_addr_from_name((char *)local_interface);
 		local_address = dbus_get_address_from_interface_name(local_interface);
 
 		gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 9b2a1e510a..fcb88cec62 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -395,8 +395,6 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
 
     if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0)
         _debug("getInterfaceAddrFromName use default interface (0.0.0.0)\n");
-
-    // printf("Local address: %s\n", inet_ntos( ((struct sockaddr_in *) &ifr.ifr_ifru.ifru_addr)->sin_addr ));
     
     saddr_in = (struct sockaddr_in *)&ifr.ifr_addr;
     addr_in = &(saddr_in->sin_addr);
-- 
GitLab


From c6e3fdd933084756171e1c03227f1a18ee812b71 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Mon, 16 Nov 2009 12:32:21 -0500
Subject: [PATCH 053/160] [#2434] Force optimization level at 2

---
 sflphone-common/libs/pjproject/pjmedia/build/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/libs/pjproject/pjmedia/build/Makefile b/sflphone-common/libs/pjproject/pjmedia/build/Makefile
index dae6d61bcd..6a73fdefc5 100644
--- a/sflphone-common/libs/pjproject/pjmedia/build/Makefile
+++ b/sflphone-common/libs/pjproject/pjmedia/build/Makefile
@@ -30,7 +30,7 @@ export _CFLAGS 	:= $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
 		   $(CC_INC)../../pjlib-util/include \
 		   $(CC_INC)../../pjnath/include \
 		   $(CC_INC)../.. \
-		   $(SRTP_INC) 
+		   $(SRTP_INC) -O2
 export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
 		   $(HOST_CXXFLAGS) $(CXXFLAGS)
 export _LDFLAGS := $(subst /,$(HOST_PSEP),$(PJMEDIA_LIB)) \
-- 
GitLab


From 6c8e8710aedbb75ecd8a3c93a1e77145401d16a1 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Feb 2010 10:35:40 -0500
Subject: [PATCH 054/160] [#2623] Added text entry to display local IP address
 in configurationmanager

---
 .../src/config/accountconfigdialog.c          | 237 ++++++++++--------
 1 file changed, 130 insertions(+), 107 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 55512d1879..5fd6c4cc7c 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -67,6 +67,7 @@ GtkWidget * advancedZrtpButton;
 GtkWidget * keyExchangeCombo;
 GtkWidget * useSipTlsCheckBox;
 
+GtkWidget * localAddressEntry;
 GtkWidget * publishedAddressEntry;
 GtkWidget * localAddressLabel;
 GtkWidget * localAddressCombo;
@@ -562,17 +563,20 @@ static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED) {
 
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
 
-		gchar *local_interface;
-		gchar *local_address;
+		gchar *local_iface_name;
+		gchar *local_iface_addr;
+		local_iface_addr = g_malloc(36);
 
-		local_interface = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
+		local_iface_name = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
 		// sflphone_get_interface_addr_from_name((char *)local_interface);
-		local_address = dbus_get_address_from_interface_name (local_interface);
+		sflphone_get_interface_addr_from_name(local_iface_name, &local_iface_addr);
 
-		gtk_entry_set_text (GTK_ENTRY(publishedAddressEntry), local_address);
+		gtk_entry_set_text(GTK_ENTRY(localAddressEntry), local_iface_addr);
+		gtk_entry_set_text (GTK_ENTRY(publishedAddressEntry), local_iface_addr);
 
 		// gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
 		// gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
+		g_free(local_iface_addr);
 	}
 
 }
@@ -860,118 +864,137 @@ GtkWidget * create_security_tab (account_t **a)
 
 GtkWidget* create_registration_expire (account_t **a) {
 
-	GtkWidget *table, *frame, *label;
-
-	gchar *resolve_once=NULL, *account_expire=NULL;
-
-	if (*a) {
-		resolve_once = g_hash_table_lookup ((*a)->properties, ACCOUNT_RESOLVE_ONCE);
-		account_expire = g_hash_table_lookup ((*a)->properties, ACCOUNT_REGISTRATION_EXPIRE);
-	}
-
-	gnome_main_section_new_with_table (_("Registration"), &frame, &table, 2, 3);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings (GTK_TABLE (table), 5);	
-
-	label = gtk_label_new_with_mnemonic (_("Registration expire"));
-	gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
-	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-	expireSpinBox = gtk_spin_button_new_with_range (1, 65535, 1);
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), expireSpinBox);
-	gtk_spin_button_set_value (GTK_SPIN_BUTTON (expireSpinBox), g_ascii_strtod (account_expire, NULL));
-	gtk_table_attach_defaults (GTK_TABLE (table), expireSpinBox, 1, 2, 0, 1);
+    GtkWidget *table, *frame, *label;
 
+    gchar *resolve_once=NULL, *account_expire=NULL;
 
-	entryResolveNameOnlyOnce = gtk_check_button_new_with_mnemonic (_("_Comply with RFC 3263"));
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (entryResolveNameOnlyOnce),
-			g_strcasecmp (resolve_once,"false") == 0 ? TRUE: FALSE);
-	gtk_table_attach_defaults (GTK_TABLE (table), entryResolveNameOnlyOnce, 0, 2, 1, 2);
-	gtk_widget_set_sensitive (GTK_WIDGET (entryResolveNameOnlyOnce ) , TRUE );
+    if (*a) {
+        resolve_once = g_hash_table_lookup ((*a)->properties, ACCOUNT_RESOLVE_ONCE);
+	account_expire = g_hash_table_lookup ((*a)->properties, ACCOUNT_REGISTRATION_EXPIRE);
+    }
 
-	return frame;
+    gnome_main_section_new_with_table (_("Registration"), &frame, &table, 2, 3);
+    gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 5);	
+    
+    label = gtk_label_new_with_mnemonic (_("Registration expire"));
+    gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    expireSpinBox = gtk_spin_button_new_with_range (1, 65535, 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), expireSpinBox);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (expireSpinBox), g_ascii_strtod (account_expire, NULL));
+    gtk_table_attach_defaults (GTK_TABLE (table), expireSpinBox, 1, 2, 0, 1);
+	
+
+    entryResolveNameOnlyOnce = gtk_check_button_new_with_mnemonic (_("_Comply with RFC 3263"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (entryResolveNameOnlyOnce),
+				  g_strcasecmp (resolve_once,"false") == 0 ? TRUE: FALSE);
+    gtk_table_attach_defaults (GTK_TABLE (table), entryResolveNameOnlyOnce, 0, 2, 1, 2);
+    gtk_widget_set_sensitive (GTK_WIDGET (entryResolveNameOnlyOnce ) , TRUE );
+
+    return frame;
 }
 
 GtkWidget* create_network (account_t **a) {
+  
+    GtkWidget *table, *frame, *label;
+    gchar *local_interface, *local_port;
 
-	GtkWidget *table, *frame, *label;
-	gchar *local_interface, *local_port;
+    if (*a) {
+        local_interface = g_hash_table_lookup ((*a)->properties, LOCAL_INTERFACE);
+	local_port = g_hash_table_lookup ((*a)->properties, LOCAL_PORT);
+    }
 
-	if (*a) {
-		local_interface = g_hash_table_lookup ((*a)->properties, LOCAL_INTERFACE);
-		local_port = g_hash_table_lookup ((*a)->properties, LOCAL_PORT);
+    gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 3);
+    gtk_container_set_border_width (GTK_CONTAINER(table), 10);
+    gtk_table_set_row_spacings( GTK_TABLE(table), 5);
+
+    /**
+     * Retreive the list of IP interface from the 
+     * the daemon and build the combo box.
+     */
+
+    GtkListStore * ipInterfaceListStore; 
+    GtkTreeIter iter;
+
+    ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
+    label = gtk_label_new_with_mnemonic (_("Local address"));    
+    gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+
+    GtkTreeIter current_local_iface_iter = iter;   
+    gchar ** iface_list = NULL;
+    // iface_list = (gchar**) dbus_get_all_ip_interface();
+    iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
+    gchar ** iface = NULL;
+
+    // flag to determine if local_address is found 
+    gboolean iface_found = FALSE;
+
+    gchar *local_iface_addr;
+    gchar *local_iface_name; 
+
+    local_iface_addr= g_malloc(18);
+    
+    if (iface_list != NULL) {
+
+        // fill the iterface combo box
+        for (iface = iface_list; *iface; iface++) {         
+	    DEBUG("Interface %s", *iface);            
+	    gtk_list_store_append(ipInterfaceListStore, &iter );
+	    gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
+
+	    // set the current local address
+	    if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
+	        DEBUG("Setting active local address combo box");
+		current_local_iface_iter = iter;
+		iface_found = TRUE;
+	  }
 	}
-
-	gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 2);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 5);
-
-	/**
-	 * Retreive the list of IP interface from the 
-	 * the daemon and build the combo box.
-	 */
-
-	GtkListStore * ipInterfaceListStore; 
-	GtkTreeIter iter;
-
-	ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
-	label = gtk_label_new_with_mnemonic (_("Local address"));    
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-
-	GtkTreeIter current_local_address_iter = iter;   
-	gchar ** iface_list = NULL;
-	// iface_list = (gchar**) dbus_get_all_ip_interface();
-	iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
-	gchar ** iface = NULL;
-
-	// flag to determine if local_address is found 
-	gboolean iface_found = FALSE;
-
-	if (iface_list != NULL) {
-
-		// fill the iterface combo box
-		for (iface = iface_list; *iface; iface++) {         
-			DEBUG("Interface %s", *iface);            
-			gtk_list_store_append(ipInterfaceListStore, &iter );
-			gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
-
-			// set the current local address
-			if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
-				DEBUG("Setting active local address combo box");
-				current_local_address_iter = iter;
-				iface_found = TRUE;
-			}
-		}
-
-		if(!iface_found) {
-			DEBUG("Did not find local ip address, take fisrt in the list");
-			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_address_iter);
-		}
-
+	    
+	if(!iface_found) {
+	  DEBUG("Did not find local ip address, take fisrt in the list");
+	  gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_iface_iter);
 	}
-
-	localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), localAddressCombo);
-	gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	g_object_unref(G_OBJECT(ipInterfaceListStore));	
-
-	GtkCellRenderer * ipInterfaceCellRenderer;
-	ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
-	gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_address_iter);
-
-	// Local port widget
-	label = gtk_label_new_with_mnemonic (_("Local port"));
-	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), localPortSpinBox);
-	gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
-
-	gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
-
-	return frame;
+	
+    }
+  
+    
+    localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), localAddressCombo);
+    gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    g_object_unref(G_OBJECT(ipInterfaceListStore));	
+
+ 
+    GtkCellRenderer * ipInterfaceCellRenderer;
+    ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
+
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
+    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
+    gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_iface_iter);
+
+
+    // Fill the text entry with the ip address of local interface selected
+    localAddressEntry = gtk_entry_new();
+    local_iface_name = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
+    sflphone_get_interface_addr_from_name(local_iface_name, &local_iface_addr);
+    gtk_entry_set_text(GTK_ENTRY(localAddressEntry), local_iface_addr);
+    gtk_widget_set_sensitive(localAddressEntry, FALSE); 
+    gtk_table_attach ( GTK_TABLE( table ), localAddressEntry, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    g_free(local_iface_addr);
+    
+    // Local port widget
+    label = gtk_label_new_with_mnemonic (_("Local port"));
+    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+    gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+    localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), localPortSpinBox);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
+
+    gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
+
+    return frame;
 }
 
 GtkWidget* create_published_address (account_t **a) {
-- 
GitLab


From a4471fd7c7b802da27a89e4961cca6d7347ed41b Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Feb 2010 10:37:23 -0500
Subject: [PATCH 055/160] [#2521] Documentation for account related methods in
 configurationmanager

---
 .../dbus/configurationmanager-introspec.xml   | 139 +++++++++++++++++-
 1 file changed, 137 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index e7532d16cb..944cf9f685 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -4,12 +4,78 @@
     
   <!-- Accounts-related methods -->  
     <method name="getAccountDetails">
+      <!--* Method that returns a hashtable containing the current
+            account configuration setting.
+
+	    CONFIG_ACCOUNT_ENABLE
+	    CONFIG_ACCOUNT_RESOLVE_ONCE
+	    CONFIG_ACCOUNT_TYPE
+	    HOSTNAME
+	    USERNAME
+	    PASSWORD
+	    REALM
+	    AUTHENTICATION_USERNAME
+	    CONFIG_ACCOUNT_MAILBOX
+	    CONFIG_ACCOUNT_REGISTRATION_EXPIRE
+	    LOCAL_INTERFACE
+	    PUBLISHED_SAMEAS_LOCAL
+	    PUBLISHED_ADDRESS
+	    LOCAL_PORT
+	    PUBLISHED_PORT
+	    DISPLAY_NAME
+	    STUN_ENABLE
+	    STUN_SERVER
+
+	    REGISTRATION_STATUS
+	    REGISTRATION_STATE_CODE
+	    REGISTRATION_STATE_DESCRIPTION
+	    SRTP_KEY_EXCHANGE
+	    SRTP_ENABLE
+	    
+	    SRTP_RTP_FALLBACK
+	    ZRTP_DISPLAY_SAS
+	    ZRTP_DISPLAY_SAS_ONCE
+	    ZRTP_HELLO_HASH
+	    ZRTP_NOT_SUPP_WARNING
+
+	    TLS_LISTENER_PORT
+	    TLS_ENABLE
+	    TLS_CA_LIST_FILE
+	    TLS_CERTIFICATE_FILE
+	    TLS_PRIVATE_KEY_FILE
+	    
+	    TLS_METHOD
+	    TLS_CIPHERS
+	    TLS_SERVER_NAME
+	    TLS_VERIFY_SERVER
+	    TLS_VERIFY_CLIENT
+	    TLS_REQUIRE_CLIENT_CERTIFICATE
+	    TLS_NEGOTIATION_TIMEOUT_SEC
+	    TLS_NEGOTIATION_TIMEOUT_MSEC
+
+
+            @param[in] input accountID
+            @param[out] output details
+        -->
       <arg type="s" name="accountID" direction="in"/>
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
       <arg type="a{ss}" name="details" direction="out"/>
     </method>
     
     <method name="setAccountDetails">
+      <!--* Modify the current accout parameter settings given an
+            accountID and a hash table containing the parameters to
+            update. The hash table is not required to be complete,
+            only the parameter to change may be specified. Only the
+            running parameters are updated dynamically, configuration
+            settings are stored in the configuration file when
+            SFLphone-daemon quit.
+
+	    For a complete list of account settings refer to getAccountDetails
+
+            @param[in] input accountID
+            @param[in] input details
+        -->
       <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
       <arg type="s" name="accountID" direction="in"/>
       <arg type="a{ss}" name="details" direction="in"/>
@@ -26,15 +92,59 @@
       <arg type="i" name="number" direction="in"/>
     </method>
        
-     <method name="deleteAllCredential">
-      <arg type="s" name="accountID" direction="in"/>
+    <method name="deleteAllCredential">
+       <arg type="s" name="accountID" direction="in"/>
     </method>
   
     <method name="getIp2IpDetails">
+      <!--* Specific call to get configuration settings of the
+	    IP2IP_PROFILE. Which are sligthly different since no VoIP
+	    Account parameters are envolved.
+
+	    ACCOUNT_ID
+	    SRTP_KEY_EXCHANGE
+	    SRTP_ENABLE
+	    SRTP_RTP_FALLBACK
+	    ZRTP_DISPLAY_SAS
+	    ZRTP_HELLO_HASH
+	    ZRTP_NOT_SUPP_WARNING
+	    ZRTP_DISPLAY_SAS_ONCE
+	    LOCAL_INTERFACE
+	    LOCAL_PORT
+
+	    TLS_LISTENER_PORT
+	    TLS_CA_LIST_FILE
+	    TLS_CERTIFICATE_FILE
+	    TLS_PRIVATE_KEY_FILE
+	    TLS_PASSWORD
+	    TLS_METHOD
+	    TLS_CIPHERS
+	    TLS_SERVER_NAME
+	    TLS_VERIFY_SERVER
+	    TLS_VERIFY_CLIENT
+	    TLS_REQUIRE_CLIENT_CERTIFICATE
+	    TLS_NEGOTIATION_TIMEOUT_SEC
+	    TLS_NEGOTIATION_TIMEOUT_MSEC
+
+            @param[in] input accountID
+            @param[out] output details
+        -->
       <arg type="a{ss}" name="details" direction="out"/>
     </method>
     
     <method name="setIp2IpDetails">
+      <!--* Modify the IP2IP_PROFILE parameter settings a hash table 
+	    containing the parameters to update. The hash table is not required to be complete,
+            only the parameters to be modified may be specified. Also,
+	    only the running configuration is updated dynamically, 
+            settings are stored in the configuration file when
+            SFLphone-daemon quit.
+
+	    For a complete list of account settings refer to getAccountDetails
+
+            @param[in] input accountID
+            @param[in] input details
+        -->
       <arg type="a{ss}" name="details" direction="in"/>
     </method>
       
@@ -50,25 +160,50 @@
     </method>
         
     <method name="addAccount">
+      <!--* Add a new account to the SFLphone-daemon list. If no
+	    details are specified, default parameters are used.
+
+            @param[in] input details
+            @param[out] output accountID
+        -->
       <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
       <arg type="a{ss}" name="details" direction="in"/>
       <arg type="s" name="createdAccountId" direction="out"/>
     </method>
     
     <method name="setAccountsOrder">
+      <!--* Update the account list given a new list of accountID. If no account is specified
+	    for a call, the first one in the list will be used.
+
+            @param[in] input order
+        -->
       <arg type="s" name="order" direction="in"/>
     </method>
     
     <method name="removeAccount">
+      <!--* Delete an account from SFLphone-daemon list and erase
+	    account parameters from configuration file. 
+
+            @param[in] input accountID
+        -->
       <arg type="s" name="accoundID" direction="in"/>
     </method>
     
     <method name="getAccountList">
+      <!--* Get teh accountlist as stored in SFLphone-daemon.
+
+            @param[in] input accountID
+        -->
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
       <arg type="as" name="list" direction="out"/>
     </method>
    
     <method name="sendRegister">
+      <!--* Send accout registration request to PBX server. Register
+	    the account if expire=1, unregister if expire=0.
+
+            @param[in] input accountID
+        -->
       <arg type="s" name="accountID" direction="in"/>
       <arg type="i" name="expire" direction="in"/>
     </method>
-- 
GitLab


From 81c14f4d495d4c1239642501449b123855f550d9 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Feb 2010 10:39:56 -0500
Subject: [PATCH 056/160] [#2623] Forgot to commit header file for
 sflphone_get_interface_addr_from_name

---
 sflphone-client-gnome/src/actions.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h
index eaca4713fa..2d956ddb80 100644
--- a/sflphone-client-gnome/src/actions.h
+++ b/sflphone-client-gnome/src/actions.h
@@ -289,5 +289,5 @@ void sflphone_call_state_changed(callable_obj_t * c, const gchar * description,
 /**
  * Resolve an interface address given its name
  */
-void sflphone_get_interface_addr_from_name(char *iface_name);
+void sflphone_get_interface_addr_from_name(char *iface_name, char **iface_addr);
 #endif
-- 
GitLab


From f271911c02bda48c8b960cdd02aacc8e255df60a Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Feb 2010 14:05:52 -0500
Subject: [PATCH 057/160] [#2722] Global TLS options

---
 sflphone-client-gnome/src/actions.c     | 8 +++-----
 sflphone-common/src/sip/sipvoiplink.cpp | 4 ++--
 2 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index 5239c0d388..1d52bcf2a2 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -1415,12 +1415,12 @@ sflphone_call_state_changed( callable_obj_t * c, const gchar * description, cons
 }
 
 
-void sflphone_get_interface_addr_from_name(char *iface_name) {
+void sflphone_get_interface_addr_from_name(char *iface_name, char **iface_addr) {
 
     struct ifreq ifr;
     int fd;
     int err;
-    static char iface_addr[18];
+    // static char iface_addr[18];
     char *tmp_addr;
 
     struct sockaddr_in *saddr_in;
@@ -1443,9 +1443,7 @@ void sflphone_get_interface_addr_from_name(char *iface_name) {
 
     tmp_addr = (char *)addr_in;
 
-    snprintf(iface_addr, sizeof(iface_addr), "%d.%d.%d.%d", 
+    snprintf(*iface_addr, sizeof(*iface_addr), "%d.%d.%d.%d", 
 	     UC(tmp_addr[0]), UC(tmp_addr[1]), UC(tmp_addr[2]), UC(tmp_addr[3]));
 
-    printf("************************************* %s ****************************\n", iface_addr);
 }
-
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index fcb88cec62..b79f05197c 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2609,8 +2609,8 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 
     // Update TLS settings for account registration using the default listeners
     // Pjsip does not allow to create multiple listener
-    pjsip_tpmgr *mgr = pjsip_endpt_get_tpmgr(_endpt);
-    pjsip_tls_listener_update_settings(_endpt, _pool, mgr, _localTlsListener, account->getTlsSetting());
+    // pjsip_tpmgr *mgr = pjsip_endpt_get_tpmgr(_endpt);
+    // pjsip_tls_listener_update_settings(_endpt, _pool, mgr, _localTlsListener, account->getTlsSetting());
 
     // Create a new TLS connection from TLS listener
     pjsip_transport *tls;
-- 
GitLab


From 8164345756b1a246760db876b399e6ca246e6dde Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Feb 2010 16:53:02 -0500
Subject: [PATCH 058/160] [#2445] Update sflphone-handler in order to use
 placeCallFirstAccount method

---
 .../mozilla-telify-sflphone/sflphone-handler  | 40 +++++++------------
 1 file changed, 15 insertions(+), 25 deletions(-)

diff --git a/tools/mozilla-telify-sflphone/sflphone-handler b/tools/mozilla-telify-sflphone/sflphone-handler
index 727ef0f93c..db1cf92d0a 100755
--- a/tools/mozilla-telify-sflphone/sflphone-handler
+++ b/tools/mozilla-telify-sflphone/sflphone-handler
@@ -5,25 +5,12 @@
 # In Firefox use Preferences > Applications and set the callto handler
 # to this script.
 
-# The sflphone daemon config file
-RESFILE=~/.config/sflphone/sflphonedrc
 
-# Parse sflphonedrc and get default account id string
-if [ -f "$RESFILE" ]; then
-
-	# Use first ID
-	ACCOUNTID=`grep Accounts.order $RESFILE | sed -e 's/Accounts.order=//' -e 's/\/.*//'`
-
-	# Accounts.order is not set
-	if [ -z $ACCOUNTID ]; then
-
-		# Use first account declared in sflphone config
-		ACCOUNTID="`grep -m 1 Account: $RESFILE | sed -e 's/\[//' -e 's/\]//'`"
-   	fi 
-
-else
-    echo Fatal: Cant find sflphonedrc config file.
-    exit 1
+# Test if a SFLphone client is already open, if not open a new one
+# Opening a new client will start sflphoned if not already running
+SFLPHONEC=`ps -A | grep sflphone-client`
+if [ "$SFLPHONEC" = "" ]; then
+    /usr/bin/sflphone-client-gnome&
 fi
 
 # Check 1st argument (phone number)
@@ -38,13 +25,16 @@ TO="`echo $1 | sed -e 's/[^0123456789]//g'`"
 # Generate call id.
 CALLID=${RANDOM}$$  
 
-dbus-send                                           \
-    --type="method_call"                            \
-    --dest="org.sflphone.SFLphone"                  \
-    "/org/sflphone/SFLphone/CallManager"            \
-    "org.sflphone.SFLphone.CallManager.placeCall"   \
-    string:"$ACCOUNTID"                             \
-    string:"$CALLID"                                \
+# Dbus placeCallFirstAccount method does not reach sflphoned if starting
+# Should find another way to do this 
+sleep 1
+
+dbus-send                                                       \
+    --type="method_call"                                        \
+    --dest="org.sflphone.SFLphone"                              \
+    "/org/sflphone/SFLphone/CallManager"                        \
+    "org.sflphone.SFLphone.CallManager.placeCallFirstAccount"   \
+    string:"$CALLID"                                            \
     string:"$TO"
 
 exit 0
-- 
GitLab


From e8c9c69906436774abd508f36d3c9292145b2aa5 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Feb 2010 17:49:27 -0500
Subject: [PATCH 059/160] [#2521] Fix pysflphonectrlsimple (Module md5 not
 supported anymore)

---
 tools/pysflphone/sflphonectrlsimple.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index a7d0a5ee2a..bf5ffb75ad 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -29,7 +29,7 @@ from gobject import GObject
 import getopt
 
 import time
-import md5
+import hashlib
 
 from threading import Thread
 
@@ -405,11 +405,12 @@ class SflPhoneCtrlSimple(object):
         if dest is None or dest == "":
             raise SflPhoneError("Invalid call destination")
 
-        # callid = str(random.randrange(2**32-1))
+        # Generate a call ID for this
+	m = hashlib.md5()
         t = long( time.time() * 1000 )
         r = long( random.random()*100000000000000000L )
-        data = str(t) + str(r)
-        callid = md5.md5(data).hexdigest()
+        m.update(str(t) + str(r))
+        callid = m.hexdigest()
 
         # Add the call to the list of active calls and set status to SENT
         self.activeCalls[callid] = {'Account': self.account, 'To': dest, 'State': 'SENT' }
-- 
GitLab


From 87670406634dc9539188e7ccef9aa121f5ee4574 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 11 Feb 2010 15:48:23 -0500
Subject: [PATCH 060/160] [#2521] Update python sample program with tests

---
 .../dbus/configurationmanager-introspec.xml   |  2 +
 tools/pysflphone/pysflphone.py                | 18 +++-
 tools/pysflphone/pysflphone_testdbus.py       | 73 +++++++++++----
 tools/pysflphone/sflphonectrlsimple.py        | 88 ++++++++++++++-----
 4 files changed, 139 insertions(+), 42 deletions(-)

diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 944cf9f685..c2bab07561 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -162,6 +162,8 @@
     <method name="addAccount">
       <!--* Add a new account to the SFLphone-daemon list. If no
 	    details are specified, default parameters are used.
+	    A REGISTER is automatically sent and configuration is
+	    saved if account created successfully.
 
             @param[in] input details
             @param[out] output accountID
diff --git a/tools/pysflphone/pysflphone.py b/tools/pysflphone/pysflphone.py
index d100b6b816..61fde183b0 100644
--- a/tools/pysflphone/pysflphone.py
+++ b/tools/pysflphone/pysflphone.py
@@ -61,7 +61,8 @@ def printHelp():
 	--gaia                             Get all IAX accounts.         \n\
 	--gcc                              Get current callid.           \n\
 	--gacl                             Get active codec list.        \n\
-                                                                     \n\
+        --sac                              Set accout for next call      \n\
+                                                                         \n\
 	--gad        <account>             Get account details .         \n\
 	--enable     <account>             Enable the account.           \n\
 	--disable    <account>             Disable the account.          \n\
@@ -83,9 +84,12 @@ def printHelp():
 
 # Option definition
 try:
-    opts, args =  getopt.getopt(sys.argv[1:],"", [  "help", "gaa", "gal", "gara", "gaea", "gasa", "gaia", "gacl", "gac", "gcc", 
-                                                    "hangup=", "refuse=", "hold", "unhold=", "transfer=","dtmf=", "accept=",
-                                                    "gcd=", "gad=", "register=", "unregister=", "enable=", "disable=", "call=" ])
+    opts, args =  getopt.getopt(sys.argv[1:],"", 
+				[  "help", "gaa", "gal", "gara", "gaea", "gasa", "gaia", 
+				   "gacl", "gac", "gcc", "hangup=", "refuse=", "hold", 
+				   "unhold=", "transfer=","dtmf=", "accept=", "gcd=", 
+				   "gad=", "register=", "unregister=", "enable=", "disable=", 
+				   "call=", "sac=" ])
 except getopt.GetoptError,err:
     print str(err)
     sys.exit(2)
@@ -166,6 +170,12 @@ else:
 				print "Account: " + details['ACCOUNTID']
 				print "Peer: " + details['PEER_NAME'] + "<" + details['PEER_NUMBER'] + ">"
 
+		elif opt == "--sac":
+			if arg is "":
+			    print "Must specifies the accout to be set"
+			else: 
+                            sflphone.setAccount(arg)
+
 
 		#
 		# call options
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 52f58ba132..7ff1383f8b 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+import time
 
 from sflphonectrlsimple import SflPhoneCtrlSimple
 
@@ -7,40 +8,76 @@ class SflPhoneTests(SflPhoneCtrlSimple):
 
     def test_get_allaccounts_methods(self):
 
-        print "--- getAllAccounts() ---"
         for account in self.getAllAccounts():
             print "  " + account
-        print "\n"
-
-        print "--- getAllRegisteredAccounts() ---"
+        
         for account in self.getAllRegisteredAccounts():
             print "  " + account
-        print "\n"
 
-        print "--- getAllSipAccounts() ---"
         for account in self.getAllSipAccounts():
             print "  " + account
-        print "\n"
 
-        print "--- getAllIaxAccounts() ---"
         for account in self.getAllIaxAccounts():
             print "  " + account
-        print "\n"
 
- #   def test_codecs_methods(self):
+    def test_make_iptoip_call(self):
+        """Make a call to a server (sipp) on port 5062"""
+        i = 0
+        while(i < 50):
+
+            callid = self.Call("sip:test@127.0.0.1:5062")
+            time.sleep(0.4)
+            
+            self.HangUp(callid)            
+            time.sleep(0.4)
+
+            i = i+1
+
+    def test_make_account_call(self):
+        """Register an account on a remote server and make several calls"""
+
+        self.setAccount("Account:1258495784");
+        time.sleep(3)
+
+        i = 0
+        while(i < 50):
+
+            callid = self.Call("5000")
+            time.sleep(0.4)
+
+            self.HangUp(callid)
+            time.sleep(0.4)
+
+            i = i+1
+
+
+    def test_create_account(self):
+        """Create a new sip fake account and remove it"""
+
+        CONFIG_ACCOUNT_TYPE = "Account.type"  
+	CONFIG_ACCOUNT_ALIAS = "Account.alias"
+	HOSTNAME = "hostname"
+	USERNAME = "username"
+	PASSWORD = "password"
+	
+        accDetails = {CONFIG_ACCOUNT_TYPE:"SIP", CONFIG_ACCOUNT_ALIAS:"myNewAccount",
+                      HOSTNAME:"192.168.50.3", USERNAME:"431",
+                      PASSWORD:"alexandre"}
 
-#        print "--- getCodecList() ---"
-#        for codec int self.getCodecList():
-#            print "  " + codec
-#        print "\n"
 
+        accountID = self.addAccount(accDetails)
+        print "New Account ID " + accountID
+        time.sleep(3)
 
-sfl = SflPhoneTests()
+        self.removeAccount(accountID)
+        print "Account with ID " + accountID + " removed"
 
-sfl.test_get_allaccounts_methods()
+sflphone = SflPhoneTests()
 
+sflphone.test_get_allaccounts_methods()
 
+sflphone.test_make_iptoip_call()
 
+sflphone.test_make_account_call()
 
-		
-			
+sflphone.test_create_account()
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index bf5ffb75ad..6ed51344a7 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -170,13 +170,40 @@ class SflPhoneCtrlSimple(object):
     #
     # Account management
     #
+    def addAccount(self, details=None):
+        """Add a new account account
+
+	Add a new account to the SFLphone-daemon. Default parameters are \ 
+	used for missing account configuration field.
+
+	Required parameters are type, alias, hostname, username and password
+
+	input details
+	
+	"""
+
+	if details is None:
+            raise SPaccountError("Must specifies type, alias, hostname, \
+                                  username and password in \
+                                  order to create a new account")
+
+	return self.configurationmanager.addAccount(details)
+
+    def removeAccount(self, accountID=None):
+        """Remove an account from internal list"""
+
+	if accountID is None:
+            raise SPaccountError("Account ID must be specified")
+
+        self.configurationmanager.removeAccount(accountID)
+
     def getAllAccounts(self):
-        """ Return a list with all accounts"""
+        """Return a list with all accounts"""
         return self.configurationmanager.getAccountList()
 
 
     def getAllEnabledAccounts(self):
-        """ Return a list with all enabled accounts"""
+        """Return a list with all enabled accounts"""
         accounts = self.getAllAccounts()
         activeaccounts = []
         for testedaccount in accounts:
@@ -222,11 +249,15 @@ class SflPhoneCtrlSimple(object):
         raise SPaccountError("No account matched with alias")
 
     def setAccount(self, account):
-        """Define the active account"""
+        """Define the active account
+
+	The active account will be used when sending a new call
+	"""
 
         if account in self.getAllAccounts():
             self.account = account
         else:
+            print account
             raise SflPhoneError("Not a valid account")
 
     def setFirstRegisteredAccount(self):
@@ -315,7 +346,6 @@ class SflPhoneCtrlSimple(object):
 
     def getAllSipAccounts(self):
         """Return a list of SIP accounts"""
-
         sipAccountsList = []
         for accountName in self.getAllAccounts(): 
             if  self.getAccountDetails(accountName)['Account.type'] == "SIP":
@@ -395,25 +425,36 @@ class SflPhoneCtrlSimple(object):
     # Action
     #
     def Call(self, dest):
-        """Start a call and return a CallID"""
-        if not self.account:
-            self.setFirstRegisteredAccount()
+        """Start a call and return a CallID
 
-        if not self.isAccountRegistered():
-            raise SflPhoneError("Can't place a call without a registered account")
+	Use the current account previously set using setAccount().
+	If no account specified, first registered one in account list is used.
+
+	For phone number prefixed using SIP scheme (i.e. sip: or sips:),
+	IP2IP profile is automatically selected and set as the default account
+
+	return callID Newly generated callidentifier for this call
+	"""
 
-        if dest is None or dest == "":
+	if dest is None or dest == "":
             raise SflPhoneError("Invalid call destination")
+	
+        # Set the account to be used for this call
+	if dest.find('sip:') is 0 or dest.find('sips:') is 0:
+            print "Ip 2 IP call"
+	    self.setAccount("IP2IP")
+	elif not self.account:
+            self.setFirstRegisteredAccount()
 
-        # Generate a call ID for this
-	m = hashlib.md5()
-        t = long( time.time() * 1000 )
-        r = long( random.random()*100000000000000000L )
-        m.update(str(t) + str(r))
-        callid = m.hexdigest()
+        if self.account is "IP2IP" and self.isAccountRegistered():
+            raise SflPhoneError("Can't place a call without a registered account")
+
+        # Generate a call ID for this call
+        callid = self.GenerateCallID()	
 
         # Add the call to the list of active calls and set status to SENT
         self.activeCalls[callid] = {'Account': self.account, 'To': dest, 'State': 'SENT' }
+
         # Send the request to the CallManager
         self.callmanager.placeCall(self.account, callid, dest)
 
@@ -425,14 +466,14 @@ class SflPhoneCtrlSimple(object):
         if not self.account:
             self.setFirstRegisteredAccount()
 
-        if not self.isAccountRegistered():
-            raise SflPhoneError("Can't hangup a call without a registered account")
+        # if not self.isAccountRegistered() and self.accout is not "IP2IP":
+        #    raise SflPhoneError("Can't hangup a call without a registered account")
 
         if callid is None or callid == "":
             pass # just to see
             #raise SflPhoneError("Invalid callID")
 
-            self.callmanager.hangUp(callid)
+	self.callmanager.hangUp(callid)
 
 
     def Transfert(self, callid, to):
@@ -510,4 +551,11 @@ class SflPhoneCtrlSimple(object):
         self.callmanager.playDTMF(key)
 
 
-
+    def GenerateCallID(self):
+        """Generate Call ID"""
+	m = hashlib.md5()
+        t = long( time.time() * 1000 )
+        r = long( random.random()*100000000000000000L )
+        m.update(str(t) + str(r))
+        callid = m.hexdigest()
+	return callid
-- 
GitLab


From 20e75417bff42119088bc0e810c8993a016bfebc Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 11 Feb 2010 17:22:05 -0500
Subject: [PATCH 061/160] [#2558] Added hangup menu item in systray

---
 sflphone-client-gnome/src/statusicon.c   | 39 +++++++++++++++++++++---
 sflphone-client-gnome/src/statusicon.h   | 13 ++++++++
 sflphone-client-gnome/src/uimanager.c    | 12 ++++++--
 sflphone-common/src/dbus/callmanager.cpp |  3 +-
 4 files changed, 58 insertions(+), 9 deletions(-)

diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c
index 47e9d4a855..f017891e3e 100644
--- a/sflphone-client-gnome/src/statusicon.c
+++ b/sflphone-client-gnome/src/statusicon.c
@@ -25,11 +25,10 @@
 #include <statusicon.h>
 
 #if GTK_CHECK_VERSION(2,10,0)
-GtkStatusIcon* status;
-GtkWidget * show_menu_item;
+GtkStatusIcon *status;
+GtkWidget *show_menu_item, *hangup_menu_item;
 gboolean __minimized = MINIMIZED;
 
-
 void popup_main_window (void)
 {
 	if (__POPUP_WINDOW)
@@ -39,18 +38,39 @@ void popup_main_window (void)
 	}
 }
 
+void show_status_hangup_icon() {
+
+    DEBUG("Show Hangup in Systray");
+    gtk_widget_show(GTK_WIDGET(hangup_menu_item));
+
+}
+
+void hide_status_hangup_icon() {
+
+  DEBUG("Hide Hangup in Systray");
+    gtk_widget_hide(GTK_WIDGET(hangup_menu_item));
+}
+
+
 void 
 status_quit ( void * foo UNUSED)
 {
   sflphone_quit();
 }
 
+void
+status_hangup ()
+{
+  sflphone_hang_up();
+}	  
+
 void 
 status_icon_unminimize()
 {
   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE);
 }
 
+
 gboolean main_widget_minimized()
 {
   return __minimized;
@@ -90,6 +110,7 @@ GtkWidget* create_menu()
 {
   GtkWidget * menu;
   GtkWidget * menu_items;
+  GtkWidget * image;
   
   menu      = gtk_menu_new ();
   
@@ -99,10 +120,18 @@ GtkWidget* create_menu()
   g_signal_connect(G_OBJECT (show_menu_item), "toggled",
                   G_CALLBACK (show_hide), 
                   NULL);
-                  
+  
+  hangup_menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
+  image = gtk_image_new_from_file( ICONS_DIR "/hang_up.svg");
+  gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(hangup_menu_item), image);
+  gtk_menu_shell_append(GTK_MENU_SHELL(menu), hangup_menu_item);
+  g_signal_connect(G_OBJECT (hangup_menu_item), "activate",
+		   G_CALLBACK (status_hangup), 
+		   NULL);
+
   menu_items = gtk_separator_menu_item_new ();
   gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-  
+
   menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group());
   g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
                   G_CALLBACK (status_quit), 
diff --git a/sflphone-client-gnome/src/statusicon.h b/sflphone-client-gnome/src/statusicon.h
index 4a841c4ea0..f976c9ad17 100644
--- a/sflphone-client-gnome/src/statusicon.h
+++ b/sflphone-client-gnome/src/statusicon.h
@@ -45,6 +45,19 @@ void show_status_icon();
  */  
 void status_icon_unminimize();
 
+/**
+ * Show hangup icon 
+ */
+void show_status_hangup_icon();
+
+
+/**
+ * Show hangup icon 
+ */
+void hide_status_hangup_icon();
+
+
+
 /**
  * Tells if the main window if minimized or not
  * @return gboolean TRUE if the main window is minimized
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 1a4632c589..966b6311b4 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -27,6 +27,7 @@
 #include <glib/gprintf.h>
 #include <libgnome/gnome-help.h>
 #include <uimanager.h>
+#include <statusicon.h>
 
 static GtkWidget *toolbar;
 static GtkWidget *toolbarWindows;
@@ -147,7 +148,9 @@ void update_actions()
 
 	if (selectedCall)
 	{
-	        // DEBUG("------------------------- selected call ---------------------------\n");
+	        // update icon in systray
+	        show_status_hangup_icon();
+
 		gtk_action_set_sensitive (GTK_ACTION (copyAction), TRUE);
 
 		switch(selectedCall->_state)
@@ -225,7 +228,8 @@ void update_actions()
 	}
 	else if (selectedConf){
 
-	        // DEBUG("------------------------- selected conf ---------------------------\n");
+	        // update icon in systray
+	        show_status_hangup_icon();
 
 	        switch(selectedConf->_state) {
 
@@ -265,6 +269,10 @@ void update_actions()
 	}  
 
 	else {
+
+	        // update icon in systray
+	        hide_status_hangup_icon();
+	      
 		if( account_list_get_size() > 0  && current_account_has_mailbox ())
 		{
 			gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (voicemailToolbar), -2);
diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp
index 3468944497..1c30ef9755 100644
--- a/sflphone-common/src/dbus/callmanager.cpp
+++ b/sflphone-common/src/dbus/callmanager.cpp
@@ -40,8 +40,7 @@ void
 CallManager::placeCall (const std::string& accountID,
                         const std::string& callID,
                         const std::string& to)
-{
-    // Check if a destination number is available
+{    // Check if a destination number is available
 
     if (to == "")   _debug ("No number entered - Call stopped");
     else            Manager::instance().outgoingCall (accountID, callID, to);
-- 
GitLab


From 624b3d1ece3c990054f53188bf8e59366e76222e Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 11 Feb 2010 17:22:37 -0500
Subject: [PATCH 062/160] [#1641] Save window size and position in sflphonedrc

---
 .../dbus/configurationmanager-introspec.xml   | 170 +++++++++++++++++-
 sflphone-client-gnome/src/dbus/dbus.c         | 112 ++++++++++++
 sflphone-client-gnome/src/dbus/dbus.h         |   9 +
 sflphone-client-gnome/src/mainwindow.c        |  32 +++-
 .../dbus/configurationmanager-introspec.xml   |  31 ++++
 .../src/dbus/configurationmanager.cpp         |  42 +++++
 .../src/dbus/configurationmanager.h           |   9 +
 sflphone-common/src/managerimpl.cpp           |   4 +
 sflphone-common/src/user_cfg.h                |   6 +
 9 files changed, 409 insertions(+), 6 deletions(-)

diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index e7532d16cb..fa1433399a 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -4,12 +4,78 @@
     
   <!-- Accounts-related methods -->  
     <method name="getAccountDetails">
+      <!--* Method that returns a hashtable containing the current
+            account configuration setting.
+
+	    CONFIG_ACCOUNT_ENABLE
+	    CONFIG_ACCOUNT_RESOLVE_ONCE
+	    CONFIG_ACCOUNT_TYPE
+	    HOSTNAME
+	    USERNAME
+	    PASSWORD
+	    REALM
+	    AUTHENTICATION_USERNAME
+	    CONFIG_ACCOUNT_MAILBOX
+	    CONFIG_ACCOUNT_REGISTRATION_EXPIRE
+	    LOCAL_INTERFACE
+	    PUBLISHED_SAMEAS_LOCAL
+	    PUBLISHED_ADDRESS
+	    LOCAL_PORT
+	    PUBLISHED_PORT
+	    DISPLAY_NAME
+	    STUN_ENABLE
+	    STUN_SERVER
+
+	    REGISTRATION_STATUS
+	    REGISTRATION_STATE_CODE
+	    REGISTRATION_STATE_DESCRIPTION
+	    SRTP_KEY_EXCHANGE
+	    SRTP_ENABLE
+	    
+	    SRTP_RTP_FALLBACK
+	    ZRTP_DISPLAY_SAS
+	    ZRTP_DISPLAY_SAS_ONCE
+	    ZRTP_HELLO_HASH
+	    ZRTP_NOT_SUPP_WARNING
+
+	    TLS_LISTENER_PORT
+	    TLS_ENABLE
+	    TLS_CA_LIST_FILE
+	    TLS_CERTIFICATE_FILE
+	    TLS_PRIVATE_KEY_FILE
+	    
+	    TLS_METHOD
+	    TLS_CIPHERS
+	    TLS_SERVER_NAME
+	    TLS_VERIFY_SERVER
+	    TLS_VERIFY_CLIENT
+	    TLS_REQUIRE_CLIENT_CERTIFICATE
+	    TLS_NEGOTIATION_TIMEOUT_SEC
+	    TLS_NEGOTIATION_TIMEOUT_MSEC
+
+
+            @param[in] input accountID
+            @param[out] output details
+        -->
       <arg type="s" name="accountID" direction="in"/>
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
       <arg type="a{ss}" name="details" direction="out"/>
     </method>
     
     <method name="setAccountDetails">
+      <!--* Modify the current accout parameter settings given an
+            accountID and a hash table containing the parameters to
+            update. The hash table is not required to be complete,
+            only the parameter to change may be specified. Only the
+            running parameters are updated dynamically, configuration
+            settings are stored in the configuration file when
+            SFLphone-daemon quit.
+
+	    For a complete list of account settings refer to getAccountDetails
+
+            @param[in] input accountID
+            @param[in] input details
+        -->
       <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
       <arg type="s" name="accountID" direction="in"/>
       <arg type="a{ss}" name="details" direction="in"/>
@@ -26,15 +92,59 @@
       <arg type="i" name="number" direction="in"/>
     </method>
        
-     <method name="deleteAllCredential">
-      <arg type="s" name="accountID" direction="in"/>
+    <method name="deleteAllCredential">
+       <arg type="s" name="accountID" direction="in"/>
     </method>
   
     <method name="getIp2IpDetails">
+      <!--* Specific call to get configuration settings of the
+	    IP2IP_PROFILE. Which are sligthly different since no VoIP
+	    Account parameters are envolved.
+
+	    ACCOUNT_ID
+	    SRTP_KEY_EXCHANGE
+	    SRTP_ENABLE
+	    SRTP_RTP_FALLBACK
+	    ZRTP_DISPLAY_SAS
+	    ZRTP_HELLO_HASH
+	    ZRTP_NOT_SUPP_WARNING
+	    ZRTP_DISPLAY_SAS_ONCE
+	    LOCAL_INTERFACE
+	    LOCAL_PORT
+
+	    TLS_LISTENER_PORT
+	    TLS_CA_LIST_FILE
+	    TLS_CERTIFICATE_FILE
+	    TLS_PRIVATE_KEY_FILE
+	    TLS_PASSWORD
+	    TLS_METHOD
+	    TLS_CIPHERS
+	    TLS_SERVER_NAME
+	    TLS_VERIFY_SERVER
+	    TLS_VERIFY_CLIENT
+	    TLS_REQUIRE_CLIENT_CERTIFICATE
+	    TLS_NEGOTIATION_TIMEOUT_SEC
+	    TLS_NEGOTIATION_TIMEOUT_MSEC
+
+            @param[in] input accountID
+            @param[out] output details
+        -->
       <arg type="a{ss}" name="details" direction="out"/>
     </method>
     
     <method name="setIp2IpDetails">
+      <!--* Modify the IP2IP_PROFILE parameter settings a hash table 
+	    containing the parameters to update. The hash table is not required to be complete,
+            only the parameters to be modified may be specified. Also,
+	    only the running configuration is updated dynamically, 
+            settings are stored in the configuration file when
+            SFLphone-daemon quit.
+
+	    For a complete list of account settings refer to getAccountDetails
+
+            @param[in] input accountID
+            @param[in] input details
+        -->
       <arg type="a{ss}" name="details" direction="in"/>
     </method>
       
@@ -50,25 +160,50 @@
     </method>
         
     <method name="addAccount">
+      <!--* Add a new account to the SFLphone-daemon list. If no
+	    details are specified, default parameters are used.
+
+            @param[in] input details
+            @param[out] output accountID
+        -->
       <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
       <arg type="a{ss}" name="details" direction="in"/>
       <arg type="s" name="createdAccountId" direction="out"/>
     </method>
     
     <method name="setAccountsOrder">
+      <!--* Update the account list given a new list of accountID. If no account is specified
+	    for a call, the first one in the list will be used.
+
+            @param[in] input order
+        -->
       <arg type="s" name="order" direction="in"/>
     </method>
     
     <method name="removeAccount">
+      <!--* Delete an account from SFLphone-daemon list and erase
+	    account parameters from configuration file. 
+
+            @param[in] input accountID
+        -->
       <arg type="s" name="accoundID" direction="in"/>
     </method>
     
     <method name="getAccountList">
+      <!--* Get teh accountlist as stored in SFLphone-daemon.
+
+            @param[in] input accountID
+        -->
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
       <arg type="as" name="list" direction="out"/>
     </method>
    
     <method name="sendRegister">
+      <!--* Send accout registration request to PBX server. Register
+	    the account if expire=1, unregister if expire=0.
+
+            @param[in] input accountID
+        -->
       <arg type="s" name="accountID" direction="in"/>
       <arg type="i" name="expire" direction="in"/>
     </method>
@@ -292,7 +427,38 @@
     <method name="switchPopupMode">
     </method>
 
+	<method name="getWindowWidth">
+      <arg type="i" name="width" direction="out"/>
+	</method>
+
+	<method name="getWindowHeight">
+      <arg type="i" name="height" direction="out"/>
+	</method>
 
+	<method name="setWindowWidth">
+      <arg type="i" name="width" direction="in"/>
+	</method>
+
+	<method name="setWindowHeight">
+      <arg type="i" name="height" direction="in"/>
+	</method>
+
+	<method name="getWindowPositionX">
+      <arg type="i" name="posX" direction="out"/>
+	</method>
+		
+	<method name="setWindowPositionX">
+      <arg type="i" name="posX" direction="in"/>
+	</method>
+		
+	<method name="getWindowPositionY">
+      <arg type="i" name="posY" direction="out"/>
+	</method>
+		
+	<method name="setWindowPositionY">
+      <arg type="i" name="posY" direction="in"/>
+	</method>
+		
     <!-- Addressbook configuration -->
     <method name="getAddressbookSettings">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index beb94b54da..3d2c6fe829 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -2464,3 +2464,115 @@ gchar ** dbus_get_all_ip_interface_by_name(void)
     }
 }
 
+guint dbus_get_window_width (void) {
+
+    GError *error = NULL;
+	guint value; 
+
+	org_sflphone_SFLphone_ConfigurationManager_get_window_width (configurationManagerProxy, &value, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call get_window_width() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+    return value;
+}
+
+guint dbus_get_window_height (void) {
+
+    GError *error = NULL;
+	guint value; 
+
+	org_sflphone_SFLphone_ConfigurationManager_get_window_height (configurationManagerProxy, &value, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call get_window_height() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+    return value;
+}
+
+void dbus_set_window_width (const guint width) {
+
+    GError *error = NULL;
+
+	org_sflphone_SFLphone_ConfigurationManager_set_window_width (configurationManagerProxy, width, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call set_window_width() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+}
+
+
+void dbus_set_window_height (const guint height) {
+
+    GError *error = NULL;
+
+	org_sflphone_SFLphone_ConfigurationManager_set_window_height (configurationManagerProxy, height, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call set_window_height() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+}
+
+guint dbus_get_window_position_x (void) {
+
+	GError *error = NULL;
+	guint value; 
+
+	org_sflphone_SFLphone_ConfigurationManager_get_window_position_x (configurationManagerProxy, &value, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call get_window_position_x() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+	return value;
+}
+
+guint dbus_get_window_position_y (void) {
+
+	GError *error = NULL;
+	guint value; 
+
+	org_sflphone_SFLphone_ConfigurationManager_get_window_position_y (configurationManagerProxy, &value, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call get_window_position_y() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+	return value;
+}
+
+void dbus_set_window_position_x (const guint posx) {
+
+	GError *error = NULL;
+
+	org_sflphone_SFLphone_ConfigurationManager_set_window_position_x (configurationManagerProxy, posx, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call set_window_position_x() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+}
+
+void dbus_set_window_position_y (const guint posy) {
+
+	GError *error = NULL;
+
+	org_sflphone_SFLphone_ConfigurationManager_set_window_position_y (configurationManagerProxy, posy, &error);
+
+    if (error != NULL) {
+        ERROR ("Failed to call set_window_position_y() on ConfigurationManager: %s",
+                error->message);
+        g_error_free (error);
+    }
+}
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index d4c7b8a2aa..acc961fba4 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -597,5 +597,14 @@ gchar** dbus_get_supported_tls_method();
 
 gchar** dbus_get_participant_list (const char * confID);
 
+guint dbus_get_window_width (void);
+guint dbus_get_window_height (void);
+void dbus_set_window_height (const guint height);
+void dbus_set_window_width (const guint width);
+guint dbus_get_window_position_x (void);
+guint dbus_get_window_position_y (void);
+void dbus_set_window_position_x (const guint posx);
+void dbus_set_window_position_y (const guint posy);
+
 
 #endif
diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c
index 8218938509..6138e7c637 100644
--- a/sflphone-client-gnome/src/mainwindow.c
+++ b/sflphone-client-gnome/src/mainwindow.c
@@ -47,6 +47,21 @@ GtkWidget * statusBar = NULL;
 GtkWidget * filterEntry = NULL;
 PidginScrollBook *embedded_error_notebook;
 
+static gboolean window_configure_cb (GtkWidget *win, GdkEventConfigure *event) {
+
+	int pos_x, pos_y;
+
+	dbus_set_window_width ( (guint)event->width);
+	dbus_set_window_height ( (guint)event->height);
+
+	gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y);
+	dbus_set_window_position_x ( (guint)pos_x);
+	dbus_set_window_position_y ( (guint)pos_y);
+
+	return FALSE;
+}
+
+
 /**
  * Minimize the main window.
  */
@@ -148,21 +163,25 @@ 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
+	width = dbus_get_window_width ();
+	height =  dbus_get_window_height ();
+	position_x = dbus_get_window_position_x ();
+	position_y = dbus_get_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));
-
 	/* 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
 	 * stop the main GTK loop
@@ -179,6 +198,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 +291,9 @@ create_main_window ()
 		}
 #endif
 	}
+
+	// Move the main window
+	gtk_window_move (GTK_WINDOW (window), position_x, position_y);
 }
 
 	GtkAccelGroup *
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 944cf9f685..fa1433399a 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -427,7 +427,38 @@
     <method name="switchPopupMode">
     </method>
 
+	<method name="getWindowWidth">
+      <arg type="i" name="width" direction="out"/>
+	</method>
 
+	<method name="getWindowHeight">
+      <arg type="i" name="height" direction="out"/>
+	</method>
+
+	<method name="setWindowWidth">
+      <arg type="i" name="width" direction="in"/>
+	</method>
+
+	<method name="setWindowHeight">
+      <arg type="i" name="height" direction="in"/>
+	</method>
+
+	<method name="getWindowPositionX">
+      <arg type="i" name="posX" direction="out"/>
+	</method>
+		
+	<method name="setWindowPositionX">
+      <arg type="i" name="posX" direction="in"/>
+	</method>
+		
+	<method name="getWindowPositionY">
+      <arg type="i" name="posY" direction="out"/>
+	</method>
+		
+	<method name="setWindowPositionY">
+      <arg type="i" name="posY" direction="in"/>
+	</method>
+		
     <!-- Addressbook configuration -->
     <method name="getAddressbookSettings">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 7575cc3676..797dcc7a5b 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -828,3 +828,45 @@ 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);
+}
+
+
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index b4cfbc4dc4..7749fd233a 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -114,6 +114,15 @@ public:
     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);
+
     std::map<std::string, int32_t> getAddressbookSettings (void);
     void setAddressbookSettings (const std::map<std::string, int32_t>& settings);
     std::vector< std::string > getAddressbookList ( void );
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 501e490911..e63a43d0e9 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2317,6 +2317,10 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
     _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);
diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h
index 652027dc74..eb7c3750ee 100644
--- a/sflphone-common/src/user_cfg.h
+++ b/sflphone-common/src/user_cfg.h
@@ -60,6 +60,10 @@
 #define CONFIG_PA_VOLUME_CTRL               "Pulseaudio.volumeCtrl"	    /** Whether or not PA should modify volume of other applications on the same sink */
 #define CONFIG_SIP_PORT                     "SIP.portNum"
 #define CONFIG_ACCOUNTS_ORDER               "Accounts.order"            /** To restore account order */
+#define WINDOW_WIDTH						"Window.width"
+#define WINDOW_HEIGHT						"Window.height"
+#define WINDOW_POSITION_X					"Window.positionX"
+#define WINDOW_POSITION_Y					"Window.positionY"
 
 #define IP2IP_PROFILE                       "IP2IP"    
 #define SIGNALISATION                       "VoIPLink"	                /** Section Signalisation */
@@ -110,5 +114,7 @@
 #define DFT_SIP_PORT                        "5060"
 #define DFT_STUN_ENABLE                     FALSE_STR
 #define DFT_RECORD_PATH                     HOMEDIR
+#define DFT_WINDOW_WIDTH					"240"
+#define DFT_WINDOW_HEIGHT					"320"
 
 #endif // __USER_CFG_H__
-- 
GitLab


From 8f504a8ec22b4f34f1f61bd83d20aae2adb1113d Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 11 Feb 2010 17:25:12 -0500
Subject: [PATCH 063/160] [#1641] Remember position when popping-out from
 systray

---
 sflphone-client-gnome/src/statusicon.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c
index 47e9d4a855..9171326132 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 ()), dbus_get_window_position_x (), dbus_get_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 ()), dbus_get_window_position_x (), dbus_get_window_position_y ());
 		set_minimized( !MINIMIZED );
 	}   
 	else
-- 
GitLab


From c6b34232292b54ee9be683d30896a79dab8d64bd Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 11 Feb 2010 17:26:12 -0500
Subject: [PATCH 064/160] [#2558] Fix systray's hangup icon image

---
 sflphone-client-gnome/src/statusicon.c |  2 +-
 sflphone-client-gnome/src/ui.xml       | 44 +++++++++++++-------------
 2 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c
index f017891e3e..0cfd29644c 100644
--- a/sflphone-client-gnome/src/statusicon.c
+++ b/sflphone-client-gnome/src/statusicon.c
@@ -122,7 +122,7 @@ GtkWidget* create_menu()
                   NULL);
   
   hangup_menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-  image = gtk_image_new_from_file( ICONS_DIR "/hang_up.svg");
+  image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg");
   gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(hangup_menu_item), image);
   gtk_menu_shell_append(GTK_MENU_SHELL(menu), hangup_menu_item);
   g_signal_connect(G_OBJECT (hangup_menu_item), "activate",
diff --git a/sflphone-client-gnome/src/ui.xml b/sflphone-client-gnome/src/ui.xml
index 6d3fe1f77c..449e67b0bf 100644
--- a/sflphone-client-gnome/src/ui.xml
+++ b/sflphone-client-gnome/src/ui.xml
@@ -25,15 +25,15 @@
       <menuitem action="Preferences"/>
     </menu>
 	
-	<menu name="ViewMenu" action="View">
+    <menu name="ViewMenu" action="View">
       <menuitem action="Toolbar"/>
       <separator/>
       <menuitem action="Dialpad"/>
       <!--menuitem name="VolumeControlsToggle" action="VolumeControls"/-->
       <menuitem action="VolumeControls"/>
       <separator/>
-	  <menuitem action="History"/>
-	  <menuitem action="Addressbook"/>
+      <menuitem action="History"/>
+      <menuitem action="Addressbook"/>
     </menu>
 
     <menu name="HelpMenu" action="Help">
@@ -41,25 +41,25 @@
       <menuitem action="About"/>
     </menu>
 
-	</menubar>
+  </menubar>
 
-	<toolbar name="ToolbarActions">
-		<toolitem name="NewCallToolbar" action="NewCall"/>
-		<toolitem name="PickUpToolbar" action="PickUp"/>
-		<toolitem name="HangUpToolbar" action="HangUp"/>
-		<toolitem name="OnHoldToolbar" action="OnHold"/>
-		<toolitem name="OffHoldToolbar" action="OffHold"/>
-		<toolitem name="TransferToolbar" action="Transfer"/>
-		<toolitem name="RecordToolbar" action="Record"/>
-		<separator/>
-		<toolitem name="VoicemailToolbar" action="Voicemail"/>
-		<toolitem name="HistoryToolbar" action="History"/>
-		<toolitem name="AddressbookToolbar" action="Addressbook"/>
-	</toolbar>
+  <toolbar name="ToolbarActions">
+    <toolitem name="NewCallToolbar" action="NewCall"/>
+    <toolitem name="PickUpToolbar" action="PickUp"/>
+    <toolitem name="HangUpToolbar" action="HangUp"/>
+    <toolitem name="OnHoldToolbar" action="OnHold"/>
+    <toolitem name="OffHoldToolbar" action="OffHold"/>
+    <toolitem name="TransferToolbar" action="Transfer"/>
+    <toolitem name="RecordToolbar" action="Record"/>
+    <separator/>
+    <toolitem name="VoicemailToolbar" action="Voicemail"/>
+    <toolitem name="HistoryToolbar" action="History"/>
+    <toolitem name="AddressbookToolbar" action="Addressbook"/>
+  </toolbar>
 
-	<popup name="PopupMenu">
-		<menuitem action="Copy"/>
-		<menuitem action="Paste"/>
-		<separator/>
-	</popup>
+  <popup name="PopupMenu">
+    <menuitem action="Copy"/>
+    <menuitem action="Paste"/>
+    <separator/>
+  </popup>
 </ui>
-- 
GitLab


From 87bc014b7ef450d63ab6934d7c565929a5a820a8 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 11 Feb 2010 17:38:40 -0500
Subject: [PATCH 065/160] [#2469] Fix GNOME desktop entry

---
 sflphone-client-gnome/sflphone.desktop.in | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/sflphone-client-gnome/sflphone.desktop.in b/sflphone-client-gnome/sflphone.desktop.in
index 606bc1f53a..05f5b087f8 100644
--- a/sflphone-client-gnome/sflphone.desktop.in
+++ b/sflphone-client-gnome/sflphone.desktop.in
@@ -1,10 +1,11 @@
 [Desktop Entry]
-Name=VoIP Client SFLphone
-GenericName=Telephone
+Name=SFLphone
+GenericName=VoIP Client
+X-GNOME-FullName=SFLphone VoIP Client
 Comment=Call and receive calls with SIP or IAX protocols
 Exec=sflphone-client-gnome
 Icon=sflphone.svg
 StartupNotify=true
 Terminal=false
 Type=Application
-Categories=Network;Telephony;
+Categories=Network;Gnome;Telephony;
-- 
GitLab


From a0b7eb4c02efccbe27da7a9b91943400ca969cb2 Mon Sep 17 00:00:00 2001
From: Mathieu Leduc-Hamel <mlhamel@arak4.(none)>
Date: Fri, 12 Feb 2010 14:52:56 -0500
Subject: [PATCH 066/160] [#2838] Fix build on QT4.6 of the kde client

---
 sflphone-client-kde/src/AccountWizard.cpp | 1 +
 sflphone-client-kde/src/SFLPhone.cpp      | 2 +-
 sflphone-client-kde/src/main.cpp          | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/sflphone-client-kde/src/AccountWizard.cpp b/sflphone-client-kde/src/AccountWizard.cpp
index 1fdeb85b3a..650b2dd248 100644
--- a/sflphone-client-kde/src/AccountWizard.cpp
+++ b/sflphone-client-kde/src/AccountWizard.cpp
@@ -18,6 +18,7 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
+#include <unistd.h>
 #include "AccountWizard.h"
 #include <QVBoxLayout>
 #include <QFormLayout>
diff --git a/sflphone-client-kde/src/SFLPhone.cpp b/sflphone-client-kde/src/SFLPhone.cpp
index d080f797db..0b6f2a295a 100644
--- a/sflphone-client-kde/src/SFLPhone.cpp
+++ b/sflphone-client-kde/src/SFLPhone.cpp
@@ -18,7 +18,7 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
- 
+#include <unistd.h>
 #include "SFLPhone.h"
 
 #include <KApplication>
diff --git a/sflphone-client-kde/src/main.cpp b/sflphone-client-kde/src/main.cpp
index 6be5f89959..4db174bb07 100644
--- a/sflphone-client-kde/src/main.cpp
+++ b/sflphone-client-kde/src/main.cpp
@@ -1,3 +1,4 @@
+#include <unistd.h>
 #include <QApplication>
 #include <QtCore/QString>
 #include <QtGui/QMenu>
-- 
GitLab


From a45de49dc49db6425ca662b2836596d8fbe02da1 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 18 Feb 2010 09:47:09 -0500
Subject: [PATCH 067/160] [#2598] Make SFLphone's internal sampling rate
 configurable

---
 sflphone-common/src/audio/audiolayer.h        |  2 +-
 .../src/audio/pulseaudio/audiostream.cpp      | 28 +++-----
 .../src/audio/pulseaudio/audiostream.h        |  6 +-
 .../src/audio/pulseaudio/pulselayer.cpp       |  4 +-
 .../src/audio/samplerateconverter.cpp         |  2 +-
 sflphone-common/src/managerimpl.cpp           |  6 +-
 sflphone-common/src/user_cfg.h                | 68 +++++++++----------
 sflphone-common/test/audiolayerTest.cpp       |  4 +-
 8 files changed, 56 insertions(+), 64 deletions(-)

diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h
index 580c064e51..46dc81533f 100644
--- a/sflphone-common/src/audio/audiolayer.h
+++ b/sflphone-common/src/audio/audiolayer.h
@@ -58,7 +58,7 @@ class AudioLayer {
          */
         AudioLayer( ManagerImpl* manager , int type )
             : _defaultVolume(100)
-			  , _layerType( type )
+	      , _layerType( type )
               , _manager(manager)
 	      , _urgentRingBuffer( SIZEBUF, default_id )
               , _indexIn ( 0 )
diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
index 0187585c22..ac51fa0d54 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
@@ -24,20 +24,19 @@ static pa_channel_map channel_map;
 
 
 
-AudioStream::AudioStream (PulseLayerType * driver)
+AudioStream::AudioStream (PulseLayerType * driver, int smplrate)
         : _audiostream (NULL),
         _context (driver->context),
         _streamType (driver->type),
         _streamDescription (driver->description),
         _volume(),
-        flag (PA_STREAM_AUTO_TIMING_UPDATE),
-        sample_spec(),
+        _flag (PA_STREAM_AUTO_TIMING_UPDATE),
+        _sample_spec(),
         _mainloop (driver->mainloop)
 {
-    sample_spec.format = PA_SAMPLE_S16LE;
-    // sample_spec.format = PA_SAMPLE_FLOAT32LE;
-    sample_spec.rate = 44100;
-    sample_spec.channels = 1;
+    _sample_spec.format = PA_SAMPLE_S16LE; // PA_SAMPLE_FLOAT32LE;
+    _sample_spec.rate = smplrate;
+    _sample_spec.channels = 1;
     channel_map.channels = 1;
     pa_cvolume_set (&_volume , 1 , PA_VOLUME_NORM) ;  // * vol / 100 ;
 }
@@ -178,20 +177,13 @@ AudioStream::createStream (pa_context* c)
     ost::MutexLock guard (_mutex);
 
     pa_stream* s;
-    //pa_cvolume cv;
 
-    // pa_sample_spec ss;
-    // ss.format = PA_SAMPLE_S16LE;
-    // ss.rate = 44100;
-    // ss.channels = 1;
-
-
-    assert (pa_sample_spec_valid (&sample_spec));
+    assert (pa_sample_spec_valid (&_sample_spec));
     assert (pa_channel_map_valid (&channel_map));
 
     pa_buffer_attr* attributes = (pa_buffer_attr*) malloc (sizeof (pa_buffer_attr));
 
-    if (! (s = pa_stream_new (c, _streamDescription.c_str() , &sample_spec, &channel_map)))
+    if (! (s = pa_stream_new (c, _streamDescription.c_str() , &_sample_spec, &channel_map)))
         _debug ("%s: pa_stream_new() failed : %s" , _streamDescription.c_str(), pa_strerror (pa_context_errno (c)));
 
     assert (s);
@@ -202,7 +194,7 @@ AudioStream::createStream (pa_context* c)
 
         // 20 ms framesize TODO: take framesize value from config
         attributes->maxlength = (uint32_t) -1;
-        attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &sample_spec);
+        attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec);
         attributes->prebuf = 0;
         attributes->minreq = (uint32_t) -1;
         attributes->fragsize = (uint32_t) -1;
@@ -215,7 +207,7 @@ AudioStream::createStream (pa_context* c)
         attributes->tlength = (uint32_t) -1;
         attributes->prebuf = (uint32_t) -1;
         attributes->minreq = (uint32_t) -1;
-        attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &sample_spec);
+        attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec);
 
 
 
diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.h b/sflphone-common/src/audio/pulseaudio/audiostream.h
index 1d860ebc12..75705f18df 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.h
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.h
@@ -54,7 +54,7 @@ class AudioStream {
      * Constructor
      * @param context The PulseLayerType structure containing various information.
      */ 
-    AudioStream(PulseLayerType * driver);
+    AudioStream(PulseLayerType * driver, int smplrate);
     
     /**
      * Destructor
@@ -175,8 +175,8 @@ class AudioStream {
      * Streams parameters
      */
     pa_cvolume _volume;
-    pa_stream_flags_t flag;
-    pa_sample_spec sample_spec ;
+    pa_stream_flags_t _flag;
+    pa_sample_spec _sample_spec ;
 
     pa_threaded_mainloop * _mainloop;
     
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index 773956df5b..c1db2e2e34 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -243,7 +243,7 @@ bool PulseLayer::createStreams (pa_context* c)
     playbackParam->volume = _manager->getSpkrVolume();
     playbackParam->mainloop = m;
 
-    playback = new AudioStream (playbackParam);
+    playback = new AudioStream (playbackParam, _audioSampleRate);
     playback->connectStream();
     pa_stream_set_write_callback (playback->pulseStream(), playback_callback, this);
     pa_stream_set_overflow_callback (playback->pulseStream(), playback_overflow_callback, this);
@@ -259,7 +259,7 @@ bool PulseLayer::createStreams (pa_context* c)
     recordParam->volume = _manager->getMicVolume();
     recordParam->mainloop = m;
 
-    record = new AudioStream (recordParam);
+    record = new AudioStream (recordParam, _audioSampleRate);
     record->connectStream();
     pa_stream_set_read_callback (record->pulseStream() , capture_callback, this);
     // pa_stream_set_suspended_callback(record->pulseStream(), stream_suspended_callback, this);
diff --git a/sflphone-common/src/audio/samplerateconverter.cpp b/sflphone-common/src/audio/samplerateconverter.cpp
index 8d115a2556..9a2ace32e8 100644
--- a/sflphone-common/src/audio/samplerateconverter.cpp
+++ b/sflphone-common/src/audio/samplerateconverter.cpp
@@ -20,7 +20,7 @@
 #include "manager.h"
 
 SamplerateConverter::SamplerateConverter (void)
-        : _frequence (Manager::instance().getConfigInt (AUDIO , ALSA_SAMPLE_RATE)) //44100
+        : _frequence (Manager::instance().getConfigInt (AUDIO , AUDIO_SAMPLE_RATE)) //44100
         , _framesize (Manager::instance().getConfigInt (AUDIO , ALSA_FRAME_SIZE))
         , _floatBufferDownMic (NULL)
         , _floatBufferUpMic (NULL)
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 501e490911..406c534bb2 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2293,7 +2293,7 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
     // 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_SAMPLE_RATE, DFT_SAMPLE_RATE), 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);
@@ -2954,7 +2954,7 @@ ManagerImpl::selectAudioDriver (void)
     alsaPlugin = getConfigString (AUDIO , ALSA_PLUGIN);
     numCardIn  = getConfigInt (AUDIO , ALSA_CARD_ID_IN);
     numCardOut = getConfigInt (AUDIO , ALSA_CARD_ID_OUT);
-    sampleRate = getConfigInt (AUDIO , ALSA_SAMPLE_RATE);
+    sampleRate = getConfigInt (AUDIO , AUDIO_SAMPLE_RATE);
 
     if (sampleRate <=0 || sampleRate > 48000) {
         sampleRate = 44100;
@@ -3003,7 +3003,7 @@ void ManagerImpl::switchAudioManager (void)
 
     type = _audiodriver->getLayerType();
 
-    samplerate = getConfigInt (AUDIO , ALSA_SAMPLE_RATE);
+    samplerate = getConfigInt (AUDIO , AUDIO_SAMPLE_RATE);
 
     framesize = getConfigInt (AUDIO , ALSA_FRAME_SIZE);
 
diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h
index 652027dc74..f3fae44b21 100644
--- a/sflphone-common/src/user_cfg.h
+++ b/sflphone-common/src/user_cfg.h
@@ -31,31 +31,31 @@
 #define ACCOUNT_IAX0  "IAX0"			                                /** Account type IAX */
 
 /** User configuration file fields */
-#define AUDIO                               "Audio"		                /** Section Audio */
-#define CODECS                              "ActiveCodecs"	            /** List of active codecs */
+#define AUDIO                               "Audio"		        /** Section Audio */
+#define CODECS                              "ActiveCodecs"	        /** List of active codecs */
 #define ALSA_CARD_ID_IN	                    "Alsa.cardID_In"            /** Soundcard index to use for capture */
 #define ALSA_CARD_ID_OUT                    "Alsa.cardID_Out"           /** Soundcard index to use for playback */
 #define ALSA_FRAME_SIZE	                    "Alsa.framesize"            /** Audio layer frame size */
-#define ALSA_PLUGIN	                        "Alsa.plugin"	            /** Alsa plugin */
-#define ALSA_SAMPLE_RATE                    "Alsa.sampleRate"           /** Audio layer sample rate */
-#define RING_CHOICE	                        "Rings.ringChoice"          /** Ringtone */
-#define VOLUME_SPKR	                        "Volume.speakers"           /** Speaker volume */
+#define ALSA_PLUGIN	                    "Alsa.plugin"	        /** Alsa plugin */
+#define AUDIO_SAMPLE_RATE                   "Alsa.sampleRate"          /** Audio layer sample rate */
+#define RING_CHOICE	                    "Rings.ringChoice"          /** Ringtone */
+#define VOLUME_SPKR	                    "Volume.speakers"           /** Speaker volume */
 #define VOLUME_MICRO                        "Volume.micro"	            /** Mic volume */
 #define RECORD_PATH                         "Record.path"               /** Recording path */
 
-#define PREFERENCES		                    "Preferences"		        /** Section Preferences */
+#define PREFERENCES		            "Preferences"		        /** Section Preferences */
 #define CONFIG_MD5HASH                      "md5Hash"                   /** Option to store credential as md5 hash*/
-#define CONFIG_DIALPAD		                "Dialpad.display"	        /** Display dialpad preferences */
+#define CONFIG_DIALPAD		            "Dialpad.display"	        /** Display dialpad preferences */
 #define CONFIG_SEARCHBAR                    "Searchbar.display"	        /** Whether or nor display the search bar */
 #define CONFIG_HISTORY_LIMIT                "History.limit"	            /** Set the maximum number of days kept */
 #define CONFIG_HISTORY_ENABLED              "History.enabled"	        /** Is the history enabled or not */
 #define CONFIG_NOTIFY                       "Notify.all"		        /** Desktop notification level */
 #define CONFIG_MAIL_NOTIFY                  "Notify.mails"		        /** Desktop mail notification level */
-#define ZONE_TONE		                    "Options.zoneToneChoice"    /** Country tone */
-#define CONFIG_RINGTONE		                "Ringtones.enable"	        /** Ringtones preferences */
-#define CONFIG_START		                "Start.hidden"		        /** SFLphone starts in the systm tray or not */
-#define CONFIG_POPUP		                "Window.popup"		        /** SFLphone pops up on incoming calls or not */
-#define CONFIG_VOLUME		                "Volume.display"	        /** Display the mic and speaker volume controls */
+#define ZONE_TONE		            "Options.zoneToneChoice"    /** Country tone */
+#define CONFIG_RINGTONE		            "Ringtones.enable"	        /** Ringtones preferences */
+#define CONFIG_START		            "Start.hidden"		        /** SFLphone starts in the systm tray or not */
+#define CONFIG_POPUP		            "Window.popup"		        /** SFLphone pops up on incoming calls or not */
+#define CONFIG_VOLUME		            "Volume.display"	        /** Display the mic and speaker volume controls */
 #define CONFIG_AUDIO                        "Audio.api"		            /** Audio manager (ALSA or pulseaudio) */
 #define CONFIG_PA_VOLUME_CTRL               "Pulseaudio.volumeCtrl"	    /** Whether or not PA should modify volume of other applications on the same sink */
 #define CONFIG_SIP_PORT                     "SIP.portNum"
@@ -64,11 +64,11 @@
 #define IP2IP_PROFILE                       "IP2IP"    
 #define SIGNALISATION                       "VoIPLink"	                /** Section Signalisation */
 #define ZRTP_ZIDFILE                        "ZRTP.zidFile"              /** The filename used for storing ZIDs */
-#define PLAY_DTMF		                    "DTMF.playDtmf"	            /** Whether or not should play dtmf */
-#define PLAY_TONES		                    "DTMF.playTones"            /** Whether or not should play tones */
+#define PLAY_DTMF		            "DTMF.playDtmf"	            /** Whether or not should play dtmf */
+#define PLAY_TONES		            "DTMF.playTones"            /** Whether or not should play tones */
 #define PULSE_LENGTH                        "DTMF.pulseLength"          /** Length of the DTMF in millisecond */
 #define SEND_DTMF_AS                        "DTMF.sendDTMFas"           /** DTMF send mode */
-#define SYMMETRIC		                    "VoIPLink.symmetric"        /** VoIP link type */
+#define SYMMETRIC		            "VoIPLink.symmetric"        /** VoIP link type */
 
 #define ADDRESSBOOK                         "Addressbook"               /** Address book section */
 #define ADDRESSBOOK_ENABLE                  "Addressbook.enable"        /** Enable address book */
@@ -87,26 +87,26 @@
 #define PHONE_NUMBER_HOOK_ENABLED           "Hooks.phone_number_enabled"    
 #define PHONE_NUMBER_HOOK_ADD_PREFIX        "Hooks.phone_number_add_prefix"
 
-#define EMPTY_FIELD		                    ""			                /** Default value for empty field */
+#define EMPTY_FIELD		            ""		      /** Default value for empty field */
 #define DEFAULT_ACCOUNT_TYPE                "SIP"		
-#define DFT_STUN_SERVER 	                "stun.sflphone.org"	        /** Default STUN server address */
-#define	TRUE_STR			                "true"			            /** Default YES value */
-#define	FALSE_STR			                "false"			            /** Default NO value */
+#define DFT_STUN_SERVER 	            "stun.sflphone.org"	 /** Default STUN server address */
+#define	TRUE_STR			    "true"		 /** Default YES value */
+#define	FALSE_STR			    "false"		 /** Default NO value */
 #define DFT_PULSE_LENGTH_STR                "250"			            /** Default DTMF lenght */
-#define SIP_INFO_STR		                "0"			                /** Default DTMF transport mode */
-#define ALSA_DFT_CARD		                "0"			                /** Default sound card index */
-#define DFT_VOL_SPKR_STR	                "100"			            /** Default speaker volume */
-#define DFT_VOL_MICRO_STR	                "100"			            /** Default mic volume */
-#define DFT_RINGTONE 		                "konga.ul"	                /** Default ringtone */
-#define DFT_ZONE		                    "North America"		        /** Default geographical zone */
-#define DFT_VOICEMAIL 		                "888"			            /** Default voicemail number */
-#define DFT_FRAME_SIZE		                "20"			            /** Default frame size in millisecond */
-#define DFT_SAMPLE_RATE		                "44100"		                /** Default sample rate in HZ */
-#define DFT_NOTIF_LEVEL		                "2"			                /** Default desktop notification level : maximum */
-#define DFT_HISTORY_LIMIT                   "30"			            /** Default maximum days in history */
-#define DFT_EXPIRE_VALUE	                "600"			            /** Default expire value for registration */
-#define DFT_RESOLVE_ONCE	                FALSE_STR
-#define DFT_AUDIO_MANAGER	                "1"			                /** Default audio manager */
+#define SIP_INFO_STR		            "0"			                /** Default DTMF transport mode */
+#define ALSA_DFT_CARD		            "0"			                /** Default sound card index */
+#define DFT_VOL_SPKR_STR	            "100"			            /** Default speaker volume */
+#define DFT_VOL_MICRO_STR	            "100"			            /** Default mic volume */
+#define DFT_RINGTONE 		            "konga.ul"	                /** Default ringtone */
+#define DFT_ZONE		            "North America"		        /** Default geographical zone */
+#define DFT_VOICEMAIL 		            "888"			            /** Default voicemail number */
+#define DFT_FRAME_SIZE		            "20"			            /** Default frame size in millisecond */
+#define DFT_SAMPLE_RATE		            "44100"		                /** Default sample rate in HZ */
+#define DFT_NOTIF_LEVEL		            "2"			                /** Default desktop notification level : maximum */
+#define DFT_HISTORY_LIMIT                   "30"		/** Default maximum days in history */
+#define DFT_EXPIRE_VALUE	            "600"		/** Default expire value for registration */
+#define DFT_RESOLVE_ONCE	            FALSE_STR
+#define DFT_AUDIO_MANAGER	            "1"			/** Default audio manager */
 #define DFT_SIP_PORT                        "5060"
 #define DFT_STUN_ENABLE                     FALSE_STR
 #define DFT_RECORD_PATH                     HOMEDIR
diff --git a/sflphone-common/test/audiolayerTest.cpp b/sflphone-common/test/audiolayerTest.cpp
index 065b396c47..962bb8fc4b 100644
--- a/sflphone-common/test/audiolayerTest.cpp
+++ b/sflphone-common/test/audiolayerTest.cpp
@@ -63,7 +63,7 @@ void AudioLayerTest::setUp()
 
 void AudioLayerTest::testAudioLayerConfig()
 {
-    int sampling_rate = Manager::instance().getConfigInt (AUDIO, ALSA_SAMPLE_RATE);
+    int sampling_rate = Manager::instance().getConfigInt (AUDIO, AUDIO_SAMPLE_RATE);
     int frame_size = Manager::instance().getConfigInt (AUDIO, ALSA_FRAME_SIZE);
     frame_size = 0; // frame size in config not used anymore
 
@@ -122,7 +122,7 @@ void AudioLayerTest::testPulseConnect()
     alsaPlugin = manager->getConfigString (AUDIO , ALSA_PLUGIN);
     numCardIn  = manager->getConfigInt (AUDIO , ALSA_CARD_ID_IN);
     numCardOut = manager->getConfigInt (AUDIO , ALSA_CARD_ID_OUT);
-    sampleRate = manager->getConfigInt (AUDIO , ALSA_SAMPLE_RATE);
+    sampleRate = manager->getConfigInt (AUDIO , AUDIO_SAMPLE_RATE);
     frameSize = manager->getConfigInt (AUDIO, ALSA_FRAME_SIZE);
 
     CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
-- 
GitLab


From 414859e6c880b8a98af199b4a3b46d7fb66ee84a Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 18 Feb 2010 14:03:15 -0500
Subject: [PATCH 068/160] [#2906] Update RTP remote ip address during this
 call_onb_media_update

Was previously updated during handle_reinvite
---
 .../src/audio/audiortp/AudioRtpSession.h      | 45 ++++++++---------
 sflphone-common/src/audio/mainbuffer.cpp      |  4 +-
 .../src/audio/pulseaudio/pulselayer.cpp       | 24 ++++------
 sflphone-common/src/sip/sdp.h                 |  2 +-
 sflphone-common/src/sip/sipvoiplink.cpp       | 48 +++++++------------
 5 files changed, 50 insertions(+), 73 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index 7bdfe3c406..29057bec3e 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -208,7 +208,7 @@ namespace sfl {
 
         assert(_ca);
         
-        _debug ("Local audio port %i will be used\n", _ca->getLocalAudioPort());
+        _debug ("Local audio port %i will be used", _ca->getLocalAudioPort());
 
         //mic, we receive from soundcard in stereo, and we send encoded
         _audiolayer = _manager->getAudioDriver();
@@ -223,7 +223,7 @@ namespace sfl {
     template <typename D>
     AudioRtpSession<D>::~AudioRtpSession()
     {
-        _debug ("Delete AudioRtpSession instance\n");
+        _debug ("Delete AudioRtpSession instance");
 
         try {
             terminate();
@@ -232,7 +232,7 @@ namespace sfl {
             throw;
         }
 
-	_debug("Unbind audio RTP stream for call id %s\n", _ca->getCallId().c_str());
+	_debug("Unbind audio RTP stream for call id %s", _ca->getCallId().c_str());
 	// _audiolayer->getMainBuffer()->unBindAll(_ca->getCallId());
 	_manager->getAudioDriver()->getMainBuffer()->unBindAll(_ca->getCallId());
 
@@ -243,7 +243,7 @@ namespace sfl {
         delete [] _spkrDataConverted;
         delete _time;
         delete _converter;
-        _debug ("AudioRtpSession instance deleted\n");
+        _debug ("AudioRtpSession instance deleted");
     }
     
     template <typename D>
@@ -292,24 +292,24 @@ namespace sfl {
 	_audiocodec = _manager->getCodecDescriptorMap().instantiateCodec(pl);
 
         if (_audiocodec == NULL) {
-            _debug ("No audiocodec, can't init RTP media\n");
+            _debug ("No audiocodec, can't init RTP media");
             throw AudioRtpSessionException();
         }
 
-        _debug ("Init audio RTP session: codec payload %i\n", _audiocodec->getPayload());
+        _debug ("Init audio RTP session: codec payload %i", _audiocodec->getPayload());
 
         _codecSampleRate = _audiocodec->getClockRate();
         _codecFrameSize = _audiocodec->getFrameSize();
 
         //TODO: figure out why this is necessary.
         if (_audiocodec->getPayload() == 9) {
-            _debug ("Setting payload format to G722\n");
+            _debug ("Setting payload format to G722");
             static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
         } else if (_audiocodec->hasDynamicPayload()) {
-            _debug ("Setting a dynamic payload format\n");
+            _debug ("Setting a dynamic payload format");
             static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
         } else if (!_audiocodec->hasDynamicPayload() && _audiocodec->getPayload() != 9) {
-            _debug ("Setting a static payload format\n");
+            _debug ("Setting a static payload format");
             static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
         }
     }
@@ -318,18 +318,18 @@ namespace sfl {
     void AudioRtpSession<D>::setDestinationIpAddress(void)
     {
         if (_ca == NULL) {
-            _debug ("Sipcall is gone.\n");
+            _debug ("Sipcall is gone.");
             throw AudioRtpSessionException();
         }
         
-        _debug ("Setting IP address for the RTP session\n");
+        _debug ("Setting IP address for the RTP session");
 
 	// Store remote ip in case we would need to forget current destination
         _remote_ip = ost::InetHostAddress(_ca->getLocalSDP()->get_remote_ip().c_str());
-        _debug ("Init audio RTP session: remote ip %s\n", _ca->getLocalSDP()->get_remote_ip().data());
+        _debug ("Init audio RTP session: remote ip %s", _ca->getLocalSDP()->get_remote_ip().data());
 
         if (!_remote_ip) {
-            _debug ("Target IP address [%s] is not correct!\n", _ca->getLocalSDP()->get_remote_ip().data());
+            _debug ("Target IP address [%s] is not correct!", _ca->getLocalSDP()->get_remote_ip().data());
             return;
         }
 
@@ -337,7 +337,7 @@ namespace sfl {
 	_remote_port = (unsigned short) _ca->getLocalSDP()->get_remote_audio_port();
 
         if (! static_cast<D*>(this)->addDestination (_remote_ip, _remote_port)) {
-            _debug ("Can't add destination to session!\n");
+            _debug ("Can't add destination to session!");
             return;
         }
     }
@@ -347,6 +347,7 @@ namespace sfl {
     {
         // Destination address are stored in a list in ccrtp
         // This method clear off this entry
+        _debug("updateDestinationIpAddress: remove destination %s", _ca->getLocalSDP()->get_remote_ip().c_str());
         static_cast<D*>(this)->forgetDestination(_remote_ip, _remote_port);
 
 	// new destination is stored in call
@@ -473,12 +474,12 @@ namespace sfl {
         _timestamp += _codecFrameSize;
 
         if (!_audiolayer) {
-            _debug ("No audiolayer available for MIC\n");
+            _debug ("No audiolayer available for MIC");
             return;
         }
 
         if (!_audiocodec) {
-            _debug ("No audiocodec available for MIC\n");
+            _debug ("No audiocodec available for MIC");
             return;
         }
 
@@ -493,12 +494,12 @@ namespace sfl {
     void AudioRtpSession<D>::receiveSpeakerData ()
     {
         if (!_audiolayer) {
-            _debug ("No audiolayer available for speaker\n");
+            _debug ("No audiolayer available for speaker");
             return;
         }
 
         if (!_audiocodec) {
-            _debug ("No audiocodec available for speaker\n");
+            _debug ("No audiocodec available for speaker");
             return;
         }
 
@@ -524,7 +525,7 @@ namespace sfl {
     template <typename D>
     int AudioRtpSession<D>::startRtpThread ()
     {
-        _debug("Starting main thread\n");
+        _debug("Starting main thread");
         return start(_mainloopSemaphore);
     }
     
@@ -553,7 +554,7 @@ namespace sfl {
         
         if (_audiolayer == NULL) {
             _debug("For some unknown reason, audiolayer is null, just as \
-            we were about to start the audio stream\n");
+            we were about to start the audio stream");
             throw AudioRtpSessionException();
         }
 
@@ -564,7 +565,7 @@ namespace sfl {
         static_cast<D*>(this)->startRunning();
 
 
-        _debug ("Entering RTP mainloop for callid %s\n",_ca->getCallId().c_str());
+        _debug ("Entering RTP mainloop for callid %s",_ca->getCallId().c_str());
 
         while (!testCancel()) {
 
@@ -600,7 +601,7 @@ namespace sfl {
             TimerPort::incTimer (threadSleep);
         }
         
-        _debug ("Left RTP main loop for callid %s\n",_ca->getCallId().c_str());
+        _debug ("Left RTP main loop for callid %s",_ca->getCallId().c_str());
     }
     
 }
diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp
index 54be846cc2..f0da142792 100644
--- a/sflphone-common/src/audio/mainbuffer.cpp
+++ b/sflphone-common/src/audio/mainbuffer.cpp
@@ -563,7 +563,7 @@ void MainBuffer::stateInfo()
             iter_call_id++;
         }
 
-        _debug ("%s\n", dbg_str.c_str());
+        _debug ("%s", dbg_str.c_str());
 
         iter_call++;
     }
@@ -597,7 +597,7 @@ void MainBuffer::stateInfo()
             }
         }
 
-        _debug ("%s\n", dbg_str.c_str());
+        _debug ("%s", dbg_str.c_str());
 
         iter_buffer++;
     }
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index c1db2e2e34..8da08d7c72 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -494,8 +494,8 @@ void PulseLayer::writeToSpeaker (void)
     urgentAvailBytes = _urgentRingBuffer.AvailForGet();
 
 
+    // available bytes to be written in pulseaudio internal buffer
     int writeableSize = pa_stream_writable_size (playback->pulseStream());
-    // _debug("PulseLayer writablesize : %i", writeableSize);
 
     if (writeableSize < 0)
         _debug ("PulseLayer playback error : %s", pa_strerror (writeableSize));
@@ -503,15 +503,10 @@ void PulseLayer::writeToSpeaker (void)
 
     if (urgentAvailBytes > writeableSize) {
 
-        // _debug("urgentAvailBytes: %i", urgentAvailBytes);
-
-        // _debug("Play Urgent!");
-
         out = (SFLDataFormat*) pa_xmalloc (writeableSize);
         _urgentRingBuffer.Get (out, writeableSize, 100);
-        // pa_threaded_mainloop_lock (m);
+
         pa_stream_write (playback->pulseStream(), out, writeableSize, NULL, 0, PA_SEEK_RELATIVE);
-        // pa_threaded_mainloop_unlock (m);
 
         pa_xfree (out);
 
@@ -529,17 +524,16 @@ void PulseLayer::writeToSpeaker (void)
 
         if (tone != 0) {
 
-            // _debug("PlayTone writeableSize: %i", writeableSize);
-
             if (playback->getStreamState() == PA_STREAM_READY) {
 
-                // _debug("Play Sine Tone!");
+	        // _debug("writeableSize %d\n", writeableSize);
 
                 out = (SFLDataFormat*) pa_xmalloc (writeableSize);
                 int copied = tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100);
-                // pa_threaded_mainloop_lock (m);
-                pa_stream_write (playback->pulseStream(), out, copied * sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
-                // pa_threaded_mainloop_unlock (m);
+		
+                int returnValue = pa_stream_write (playback->pulseStream(), out, copied * sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
+
+		// _debug("return value %d\n", returnValue);
 
                 pa_xfree (out);
 
@@ -549,15 +543,13 @@ void PulseLayer::writeToSpeaker (void)
         else if (file_tone != 0) {
 
             if (playback->getStreamState() == PA_STREAM_READY) {
-                // _debug("Play File Tone!");
 
                 out = (SFLDataFormat*) pa_xmalloc (writeableSize);
                 int copied = file_tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100);
-                // pa_threaded_mainloop_lock (m);
+
                 pa_stream_write (playback->pulseStream(), out, copied * sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
 
                 pa_xfree (out);
-                // pa_threaded_mainloop_unlock (m);
 
             }
 
diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h
index a4e90d45d6..e3932751aa 100644
--- a/sflphone-common/src/sip/sdp.h
+++ b/sflphone-common/src/sip/sdp.h
@@ -197,7 +197,7 @@ class Sdp {
          * Set remote's IP addr. [not protected]
          * @param ip  The remote IP address
          */
-        void set_remote_ip(const std::string& ip)    { _remote_ip_addr = ip; }
+        void set_remote_ip(const std::string& ip) { _remote_ip_addr = ip; }
         
         /** 
          * Return IP of destination [mutex protected]
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index b79f05197c..b97c20bfb6 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -248,7 +248,7 @@ SIPVoIPLink::SIPVoIPLink (const AccountID& accountID)
 
 SIPVoIPLink::~SIPVoIPLink()
 {
-    _debug("SIPVoIPLink destructor called");
+    _debug("UserAgent: SIPVoIPLink destructor called");
 
     terminate();
 }
@@ -257,7 +257,7 @@ SIPVoIPLink* SIPVoIPLink::instance (const AccountID& id)
 {
 
     if (!_instance) {
-        _debug ("Create new SIPVoIPLink instance");
+        _debug ("UserAgent: Create new SIPVoIPLink instance");
         _instance = new SIPVoIPLink (id);
     }
 
@@ -270,7 +270,7 @@ void SIPVoIPLink::decrementClients (void)
 
     if (_clients == 0) {
 
-        _debug("No SIP account anymore, terminate SIPVoIPLink");
+        _debug("UserAgent: No SIP account anymore, terminate SIPVoIPLink");
         terminate();
         SIPVoIPLink::_instance=NULL;
     }
@@ -299,10 +299,10 @@ bool SIPVoIPLink::init()
 void
 SIPVoIPLink::terminate()
 {
-    _debug ("Terminating SIPVoIPLink");
+    _debug ("UserAgent: Terminating SIPVoIPLink");
 
     if (_evThread) {
-        _debug ("Deleting sip eventThread");
+        _debug ("UserAgent: Deleting sip eventThread");
         delete _evThread;
         _evThread = NULL;
     }
@@ -310,7 +310,7 @@ SIPVoIPLink::terminate()
 
     /* Clean shutdown of pjsip library */
     if (initDone()) {
-        _debug ("Shuting down PJSIP");
+        _debug ("UserAgent: Shuting down PJSIP");
         pjsip_shutdown();
     }
 
@@ -386,7 +386,7 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
     struct in_addr *addr_in;
 
     if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
-        _debug("getInterfaceAddrFromName error could not open socket\n");
+        _debug("UserAgent: getInterfaceAddrFromName error could not open socket\n");
 
     memset (&ifr, 0, sizeof (struct ifreq));
 
@@ -394,7 +394,7 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
     ifr.ifr_addr.sa_family = AF_INET;
 
     if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0)
-        _debug("getInterfaceAddrFromName use default interface (0.0.0.0)\n");
+        _debug("UserAgent: getInterfaceAddrFromName use default interface (0.0.0.0)\n");
     
     saddr_in = (struct sockaddr_in *)&ifr.ifr_addr;
     addr_in = &(saddr_in->sin_addr);
@@ -445,7 +445,7 @@ int SIPVoIPLink::sendRegister (AccountID id)
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id));
 
     if (account == NULL) {
-        _debug ("In sendRegister: account is null");
+        _debug ("UserAgent: In sendRegister: account is null");
         return false;
     }
 
@@ -1021,8 +1021,8 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction)
 	// TODO Restore Re-Invite
     // status = call->getLocalSDP()->create_initial_offer();
 
-    if (status != PJ_SUCCESS)
-        return 1;   // !PJ_SUCCESS
+    // if (status != PJ_SUCCESS)
+    // return 1;   // !PJ_SUCCESS
 
     pjmedia_sdp_media_remove_all_attr (local_sdp->media[0], "sendrecv");
 
@@ -1802,7 +1802,6 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_
 bool SIPVoIPLink::pjsip_init()
 {
     pj_status_t status;
-    int errPjsip = 0;
     pjsip_inv_callback inv_cb;
     pj_str_t accepted;
     std::string name_mod;
@@ -2221,7 +2220,7 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 	int trns = remoteSipUri.find(";transport");
 	std::string remoteAddr = remoteSipUri.substr(sips, trns-sips);
 
-        // Nothing to do, TLS listener already created at pjsip's startup and TLS connection\
+        // Nothing to do, TLS listener already created at pjsip's startup and TLS connection
         // is automatically handled in pjsip when sending registration messages.
         if(createTlsTransport(id, remoteAddr) != PJ_SUCCESS)
 	    return false;
@@ -2749,9 +2748,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
 void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
 {
 
-    _debug("Shutdown Sip Transport");
-
-    pj_status_t status = 0;
+    _debug("UserAgent: Shutdown Sip Transport");
 
     SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
@@ -2915,23 +2912,9 @@ void set_voicemail_info (AccountID account, pjsip_msg_body *body)
 
 void SIPVoIPLink::handle_reinvite (SIPCall *call)
 {
-    /*
-    // Close the previous RTP session
-    call->getAudioRtp()->stop ();
-    call->setAudioStart (false);
 
-    _debug ("Create new rtp session from handle_reinvite : %s:%i", call->getLocalIp().c_str(), call->getLocalAudioPort());
+    _debug ("UserAgent: handle_reinvite");
 
-    try {
-        call->getAudioRtp()->initAudioRtpSession (call);
-    } catch (...) {
-        _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__);
-    }
-    */
-    
-    _debug("Handle reINVITE");
-
-    call->getAudioRtp()->updateDestinationIpAddress();
 }
 
 // This callback is called when the invite session state has changed
@@ -3134,7 +3117,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
 // This callback is called after SDP offer/answer session has completed.
 void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 {
-    _debug ("call_on_media_update");
+    _debug ("UserAgent: call_on_media_update");
 
     const pjmedia_sdp_session *local_sdp;
     const pjmedia_sdp_session *remote_sdp;
@@ -3182,6 +3165,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 
     // Set remote ip / port
     call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp);
+    call->getAudioRtp()->updateDestinationIpAddress();
 
     // Get the crypto attribute containing srtp's cryptographic context (keys, cipher)
     CryptoOffer crypto_offer;
-- 
GitLab


From 6fe99899bb2a8d6764cb3d35813879a706ffd7f7 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Fri, 19 Feb 2010 12:28:51 -0500
Subject: [PATCH 069/160] [#2911] All codecs selected by default

---
 sflphone-client-gnome/src/actions.c               | 12 +++++-------
 sflphone-client-gnome/src/codeclist.c             |  2 +-
 sflphone-common/src/dbus/configurationmanager.cpp |  4 ++--
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index 1d52bcf2a2..b5b21c8791 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -291,9 +291,6 @@ void sflphone_fill_account_list (void) {
         }
         g_free(a->protocol_state_description);
         a->protocol_state_description = g_hash_table_lookup(details, REGISTRATION_STATE_DESCRIPTION);
-
-		// Attach a codec list to each account
-		// account_create_codec_list (&a);
     }
 
 	// Set the current account message number
@@ -330,9 +327,6 @@ gboolean sflphone_init() {
         // Fetch the ip2ip profile 
         sflphone_fill_ip2ip_profile();
         
-        // Fetch the audio codecs at startup.
-        // sflphone_fill_codec_list();
-
 		// Fetch the conference list
 		// sflphone_fill_conference_list();
 
@@ -1132,7 +1126,7 @@ void sflphone_fill_codec_list_per_account (account_t **account) {
     }
 
 	// Test here if we just added some active codec.
-	active = (codeclist->length == 0) ? FALSE : FALSE;
+	active = (codeclist->length == 0) ? TRUE : FALSE;
 
 	guint caps_size = codec_list_get_size (), i=0;
 
@@ -1152,6 +1146,10 @@ void sflphone_fill_codec_list_per_account (account_t **account) {
 	}
 	
 	(*account)->codecs = codeclist; 
+	
+	// call dbus function with array of strings
+	codec_list_update_to_daemon (*account);
+	
 }
 
 void sflphone_fill_call_list (void)
diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index a74f6e41d9..8887452247 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -301,7 +301,7 @@ void codec_list_update_to_daemon (account_t *acc) {
 			// Save only if active
 			if(currentCodec->is_active)
 			{
-		g_print ("Codec %s\n", currentCodec->name);
+				g_print ("Codec %s\n", currentCodec->name);
 				// Reallocate memory each time more than one active codec is found
 				if(c!=0)
 					codecList = (void*)realloc(codecList, (c+1)*sizeof(void*));
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 797dcc7a5b..275800cb54 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -396,7 +396,7 @@ ConfigurationManager::getRingtoneList()
 
 /**
  * Send the list of all codecs loaded to the client through DBus.
- * Can stay global, as only the active codecs will set per account
+ * Can stay global, as only the active codecs will be set per accounts
  */
 std::vector<std::string> ConfigurationManager::getCodecList (void) {
 
@@ -466,7 +466,7 @@ std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::st
 void ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID)
 {
 
-        _debug ("ConfigurationManager::setActiveCodecList received");
+    _debug ("ConfigurationManager::setActiveCodecList received");
 
 	Account *acc;
 
-- 
GitLab


From bd0e8517f89cf20f0e35c81a394fb9596bc9cb2e Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 22 Feb 2010 12:12:43 -0500
Subject: [PATCH 070/160] [#2925] Fix segfault when receiving a SIP call and no
 codec selected

Added other server internal error test and send appropriate error messages.
---
 sflphone-common/src/sip/sipvoiplink.cpp | 105 +++++++++++++-----------
 1 file changed, 55 insertions(+), 50 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index b97c20bfb6..bd075e08e0 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3400,10 +3400,14 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     std::string method_name;
     std::string request;
 
-    // Handle the incoming call invite in this function
-    _debug ("UserAgent: Callback on_rx_request is involved! ");
+    // No need to go any further on incoming ACK
+    if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD) {
+        _debug("UserAgent: received an ACK");
+	return true;
+    }
 
-    _debug("Receiving REQUEST using transport: %s %s (refcnt=%d)",
+    // Handle the incoming call invite in this function
+    _debug("UserAgent: Receiving REQUEST using transport: %s %s (refcnt=%d)",
 	   rdata->tp_info.transport->obj_name,
 	   rdata->tp_info.transport->info,
 	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
@@ -3417,7 +3421,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     userName = std::string (sip_uri->user.ptr, sip_uri->user.slen);
     server = std::string (sip_uri->host.ptr, sip_uri->host.slen);
 
-    _debug ("mod_on_rx_request: %s@%s", userName.c_str(), server.c_str());
+    _debug ("UserAgent: mod_on_rx_request: %s@%s", userName.c_str(), server.c_str());
 
     // Get the account id of callee from username and server
     account_id = Manager::instance().getAccountIdFromNameAndServer (userName, server);
@@ -3425,8 +3429,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     /* If we don't find any account to receive the call */
 
     if (account_id == AccountNULL) {
-        _debug ("UserAgent: Username %s doesn't match any account!",userName.c_str());
-        //return false;
+        _debug ("UserAgent: Username %s doesn't match any account, using IP2IP!",userName.c_str());
     }
 
     /* Get the voip link associated to the incoming call */
@@ -3434,21 +3437,22 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (account_id));
 
     /* If we can't find any voIP link to handle the incoming call */
-    if (link == 0) {
-        _debug ("ERROR: can not retrieve the voiplink from the account ID...");
+    if (!link) {
+        _warn("ERROR: cannot retrieve the voiplink from the account ID...");
+	pj_strdup2 (_pool, &reason, "ERROR: cannot retrieve the voip link from account");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
+				       &reason, NULL, NULL);
+        return true;
         return false;
     }
 
-
+    // Parse the display name from "From" header
     char* from_header = strstr (rdata->msg_info.msg_buf, "From: ");
-
     if (from_header) {
-
         std::string temp (from_header);
         int begin_displayName = temp.find ("\"") + 1;
         int end_displayName = temp.rfind ("\"");
-        // _debug("The display name start at %i, end at %i", begin_displayName, end_displayName);
-        displayName = temp.substr (begin_displayName, end_displayName - begin_displayName);//display_name);
+        displayName = temp.substr (begin_displayName, end_displayName - begin_displayName);
 	if(displayName.size() > 25) {
 	    displayName = std::string ("");
 	}
@@ -3457,17 +3461,11 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     }
 
     _debug ("UserAgent: The receiver is : %s@%s", userName.data(), server.data());
-
     _debug ("UserAgent: The callee account id is %s", account_id.c_str());
 
     /* Now, it is the time to find the information of the caller */
     uri = rdata->msg_info.from->uri;
 
-
-    // display_name = rdata->msg_info.from->name;
-
-    // std::string temp("");///(char*)(&display_name));
-
     sip_uri = (pjsip_sip_uri *) pjsip_uri_get_uri (uri);
 
     // Store the peer number
@@ -3479,7 +3477,6 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     // Get the server voicemail notification
     // Catch the NOTIFY message
-
     if (rdata->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) {
         method_name = "NOTIFY";
         // Retrieve all the message. Should contains only the method name but ...
@@ -3507,19 +3504,29 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     if (rdata->msg_info.msg->line.req.method.id != PJSIP_INVITE_METHOD) {
         if (rdata->msg_info.msg->line.req.method.id != PJSIP_ACK_METHOD) {
             pj_strdup2 (_pool, &reason, "user agent unable to handle this request ");
-            pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED, &reason, NULL,
-                                           NULL);
+            pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED, 
+					   &reason, NULL, NULL);
             return true;
         }
     }
 
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id));
+
+    get_remote_sdp_from_offer (rdata, &r_sdp);
+    if(account->getActiveCodecs().empty()) {
+	_warn ("UserAgent: Error: No active codec");
+	pj_strdup2 (_pool, &reason, "no active codec");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_NOT_ACCEPTABLE_HERE , 
+				       &reason, NULL, NULL);
+        return true;
+    }
+
     // Verify that we can handle the request
     status = pjsip_inv_verify_request (rdata, &options, NULL, NULL, _endpt, NULL);
-
     if (status != PJ_SUCCESS) {
-        pj_strdup2 (_pool, &reason, "user agent unable to handle this INVITE ");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED, &reason, NULL,
-                                       NULL);
+        pj_strdup2 (_pool, &reason, "user agent unable to handle this INVITE");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED, 
+				       &reason, NULL, NULL);
         return true;
     }
 
@@ -3537,33 +3544,31 @@ mod_on_rx_request (pjsip_rx_data *rdata)
                                     Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND));
             }
         } else
-            throw length_error ("Url exceeds std::string max_size");
+            throw length_error ("UserAgent: Url exceeds std::string max_size");
 
     }
 
     /************************************************************************************************/
 
-    _debug ("create a new call");
+    _debug ("UserAgent: Create a new call");
 
     // Generate a new call ID for the incoming call!
     id = Manager::instance().getNewCallID();
 
     call = new SIPCall (id, Call::Incoming, _pool);
-
     /* If an error occured at the call creation */
     if (!call) {
-        _debug ("UserAgent: unable to create an incoming call");
-        return false;
+        _warn("UserAgent: Error: Unable to create an incoming call");
+	pj_strdup2 (_pool, &reason, "unable to create an incoming call");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
+				       &reason, NULL, NULL);
+	return false;
     }
 
-
-
     std::string addrToUse, addrSdp ="0.0.0.0";
 
     pjsip_tpselector *tp;
 
-    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id));
-
     if (account != NULL) {
 
         // May use the published address as well
@@ -3575,7 +3580,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
 	if(account->getAccountTransport()) {
 
-	    _debug("Process INVITE request using transport: %s %s (refcnt=%i)",
+	    _debug("UserAgent: Process INVITE request using transport: %s %s (refcnt=%i)",
 		   account->getAccountTransport()->obj_name,
 		   account->getAccountTransport()->info,
 		   (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
@@ -3609,9 +3614,11 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         Manager::instance().getAccountLink (account_id)->addCall (call);
     } else {
         // Fail to notify UI
-        delete call;
-        call = NULL;
-        _debug ("UserAgent: Fail to notify UI!");
+        delete call; call = NULL;
+        _warn ("UserAgent: Fail to notify UI!");
+	pj_strdup2 (_pool, &reason, "fail to notify ui");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
+				       &reason, NULL, NULL);
         return false;
     }
 
@@ -3626,26 +3633,27 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         call->getAudioRtp()->initAudioRtpConfig (call);
         call->getAudioRtp()->initAudioRtpSession (call);
     } catch (...) {
-        _debug ("Failed to create rtp thread from answer");
+        _warn ("UserAgent: Error: Failed to create rtp thread from answer");
     }
 
-    get_remote_sdp_from_offer (rdata, &r_sdp);
-
     status = call->getLocalSDP()->receiving_initial_offer (r_sdp, account->getActiveCodecs ());
 
     if (status!=PJ_SUCCESS) {
-        delete call;
-        call=0;
+        delete call; call = NULL;
+	pj_strdup2 (_pool, &reason, "fail in receiving local offer");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
+				       &reason, NULL, NULL);
         return false;
     }
 
 
     /* Create the local dialog (UAS) */
     status = pjsip_dlg_create_uas (pjsip_ua_instance(), rdata, NULL, &dialog);
-
     if (status != PJ_SUCCESS) {
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, &reason, NULL,
-                                       NULL);
+        delete call; call = NULL;
+        pj_strdup2 (_pool, &reason, "fail to create uas dialog");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
+				       &reason, NULL, NULL);
         return true;
     }
 
@@ -3655,9 +3663,6 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     // Explicitly set the transport, set_transport methods increment transport's reference counter
     status = pjsip_dlg_set_transport (dialog, tp);
 
-    // decrement transport's reference counter
-    // pjsip_transport_dec_ref(rdata->tp_info.transport);
-
     PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
 
     // Associate the call in the invite session
-- 
GitLab


From df85a6d2b5be93e7f4780387bc6d100423f1e577 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 22 Feb 2010 12:39:02 -0500
Subject: [PATCH 071/160] [#2926] Code Cleanup

---
 sflphone-common/src/account.cpp     | 11 +++++------
 sflphone-common/src/managerimpl.cpp |  6 +++---
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp
index e54a278be7..68c3e732b1 100644
--- a/sflphone-common/src/account.cpp
+++ b/sflphone-common/src/account.cpp
@@ -58,7 +58,7 @@ void Account::loadConfig() {
 void Account::setRegistrationState (RegistrationState state) {
 
 	if (state != _registrationState) {
-		_debug ("Account::setRegistrationState");
+		_debug ("Account: set registration state");
 		_registrationState = state;
 
 		// Notify the client
@@ -70,7 +70,7 @@ 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") == "") {
-		_warn ("use the default order");
+		_info ("Account: use the default order");
 		Manager::instance ().getCodecDescriptorMap ().setDefaultOrder();
 	}
 
@@ -92,12 +92,11 @@ void Account::setActiveCodecs (const std::vector <std::string> &list) {
 	int payload;
 	size_t size = list.size();
 
-	_warn ("set the custom order %i", list.size ());
-	_warn ("Setting active codec list");
+	_info ("Account: Set the custom order %i", list.size ());
 
 	while ( (unsigned int) i < size) {
 		payload = std::atoi (list[i].data());
-		_warn ("Adding codec with RTP payload=%i", payload);
+		_info ("Account: Adding codec with RTP payload=%i", payload);
 		//if (Manager::instance ().getCodecDescriptorMap ().isCodecLoaded (payload)) {
 		_codecOrder.push_back ( (AudioCodecType) payload);
 		//}
@@ -106,7 +105,7 @@ void Account::setActiveCodecs (const std::vector <std::string> &list) {
 
     // setConfig
     std::string s = Manager::instance ().serialize (list);
-    _warn ("Setting codec with payload number %s to the active list", s.c_str());
+    _info ("Account: Setting codec with payload number %s to the active list", s.c_str());
 	// Set the config per account
 	Manager::instance().setConfig (_accountID, "ActiveCodecs", s);
 
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index dce62f7588..4b2c6f8461 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2381,10 +2381,10 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
 void
 ManagerImpl::initAudioCodec (void)
 {
-    _warn ("Init audio codecs");
+    _info("Manager: Init audio codecs");
 
     /* Init list of all supported codecs by the application. 
-	 * This is a global list. Every account will inherit it.
+     * This is a global list. Every account will inherit it.
      */
 	_codecDescriptorMap.init();
 }
@@ -2396,7 +2396,7 @@ std::vector<std::string> ManagerImpl::retrieveActiveCodecs() {
 
 	// This property is now set per account basis
     std::string s = getConfigString (AUDIO, "ActiveCodecs");
-	_warn ("ManagerImpl::retrieveActiveCodecs: %s", s.c_str ());
+    _info("Manager: Retrieve active codecs: %s", s.c_str ());
     return unserialize (s);
 }
 
-- 
GitLab


From 42ae12dde963c3138d44064cec8b33a4cdb1b747 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 23 Feb 2010 14:30:13 -0500
Subject: [PATCH 072/160] [#2598] Use larger value for ALSA's period size and
 frame size

---
 sflphone-common/src/audio/alsa/alsalayer.cpp        |  7 ++++---
 sflphone-common/src/audio/pulseaudio/pulselayer.cpp |  3 ++-
 sflphone-common/src/audio/samplerateconverter.cpp   | 10 +++-------
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp
index 920ab666b3..caa4d7f46c 100644
--- a/sflphone-common/src/audio/alsa/alsalayer.cpp
+++ b/sflphone-common/src/audio/alsa/alsalayer.cpp
@@ -135,7 +135,8 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize,
 
     std::string pcmc = buildDeviceTopo (plugin, indexIn, 0);
 
-    _converter = new SamplerateConverter (_audioSampleRate, _frameSize);
+    // use 1 sec buffer for resampling
+    _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
     // open_device (pcmp, pcmc, stream);
     return true; // open_device (pcmp, pcmc, stream);
@@ -383,12 +384,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     int err;
     int format;
     int periods = 4;
-    int periodsize = 1024;
+    int periodsize = 2048;
 
     /* Allocate the snd_pcm_hw_params_t struct */
     snd_pcm_hw_params_malloc (&hwparams);
 
-    _periodSize = 940;
+    _periodSize = 2048;
     /* Full configuration space */
 
     if ( (err = snd_pcm_hw_params_any (pcm_handle, hwparams)) < 0) {
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index 8da08d7c72..a9c03e2ed2 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -285,7 +285,8 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sample
     // _urgentRingBuffer.flushAll();
     flushUrgent();
 
-    _converter = new SamplerateConverter (_audioSampleRate, _frameSize*4);
+    // use 1 sec buffer for resampling
+    _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
     return true;
 }
diff --git a/sflphone-common/src/audio/samplerateconverter.cpp b/sflphone-common/src/audio/samplerateconverter.cpp
index 9a2ace32e8..ba68515756 100644
--- a/sflphone-common/src/audio/samplerateconverter.cpp
+++ b/sflphone-common/src/audio/samplerateconverter.cpp
@@ -77,8 +77,7 @@ void SamplerateConverter::init (void)
     _src_state_spkr = src_new (SRC_LINEAR, 1, &_src_err);
 
     int nbSamplesMax = (int) (getFrequence() * getFramesize() / 1000);
-    // TODO: fix this hack that make sure we have enought place in buffers to upsample
-    nbSamplesMax = nbSamplesMax*4;
+
     _floatBufferDownMic  = new float32[nbSamplesMax];
     _floatBufferUpMic = new float32[nbSamplesMax];
     _floatBufferDownSpkr  = new float32[nbSamplesMax];
@@ -104,9 +103,8 @@ int SamplerateConverter::upsampleData (SFLDataFormat* dataIn , SFLDataFormat* da
 {
 
     double upsampleFactor = (double) samplerate2 / samplerate1 ;
-    //_debug("factor = %f" , upsampleFactor);
+
     int nbSamplesMax = (int) (samplerate2 * getFramesize() / 1000);
-    nbSamplesMax = nbSamplesMax*4;
 
     if (upsampleFactor != 1 && dataIn != NULL) {
         SRC_DATA src_data;
@@ -136,10 +134,8 @@ int SamplerateConverter::downsampleData (SFLDataFormat* dataIn , SFLDataFormat*
 {
 
     double downsampleFactor = (double) samplerate1 / samplerate2;
-    //_debug("factor = %f" , downsampleFactor);
-    int nbSamplesMax = (int) (samplerate1 * getFramesize() / 1000);
 
-    nbSamplesMax = nbSamplesMax*4;
+    int nbSamplesMax = (int) (samplerate1 * getFramesize() / 1000);
 
     if (downsampleFactor != 1) {
         SRC_DATA src_data;
-- 
GitLab


From 26358efd8a740ee0140ac8fdd597238eb8af73e1 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Feb 2010 10:41:10 -0500
Subject: [PATCH 073/160] [#2944] Fix uncought exception in handle_reinvite

---
 sflphone-common/src/sip/sipvoiplink.cpp | 26 +++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index bd075e08e0..9542ea46e5 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2914,7 +2914,23 @@ void SIPVoIPLink::handle_reinvite (SIPCall *call)
 {
 
     _debug ("UserAgent: handle_reinvite");
-
+    /*
+    // Close the previous RTP session
+    call->getAudioRtp()->stop ();
+    call->setAudioStart (false);
+    
+    _debug ("Create new rtp session from handle_reinvite : %s:%i", call->getLocalIp().c_str(), call->getLocalAudioPort());
+    _debug ("UserAgent: handle_reinvite");
+ 
+    try {
+        call->getAudioRtp()->initAudioRtpSession (call);
+    } catch (...) {
+        _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__);
+    }
+  
+    
+    _debug("Handle reINVITE");
+    */
 }
 
 // This callback is called when the invite session state has changed
@@ -3165,7 +3181,13 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 
     // Set remote ip / port
     call->getLocalSDP()->set_media_transport_info_from_remote_sdp (remote_sdp);
-    call->getAudioRtp()->updateDestinationIpAddress();
+
+    try {
+        call->getAudioRtp()->updateDestinationIpAddress();
+    }
+    catch(...) {
+        
+    }
 
     // Get the crypto attribute containing srtp's cryptographic context (keys, cipher)
     CryptoOffer crypto_offer;
-- 
GitLab


From a151b8620bcb800330a5f38fdb215662f30e373c Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Feb 2010 12:44:59 -0500
Subject: [PATCH 074/160] [#2820] Active account = registered account; update
 status icon tooltip on account_changed_cb

---
 .../src/config/accountlistconfigdialog.c      |  7 ++----
 sflphone-client-gnome/src/dbus/dbus.c         |  3 +++
 sflphone-client-gnome/src/statusicon.c        | 23 +++++++++++++------
 sflphone-client-gnome/src/statusicon.h        |  5 ++++
 4 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountlistconfigdialog.c b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
index ee3b71adba..38d0769301 100644
--- a/sflphone-client-gnome/src/config/accountlistconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
@@ -39,7 +39,6 @@ GtkListStore * accountStore;
 
 GtkDialog * accountListDialog = NULL;
 
-
 account_t * selectedAccount = NULL;      
 // Account properties
 enum {
@@ -54,9 +53,7 @@ enum {
 /**
  * Fills the treelist with accounts
  */
-	void
-account_list_config_dialog_fill()
-{
+void account_list_config_dialog_fill() {
 
 	if (accountListDialog == NULL) {
 		DEBUG("Dialog is not opened");
@@ -536,7 +533,7 @@ show_account_list_config_dialog(void)
 	gtk_widget_show(status_bar);
 	gtk_box_pack_start(GTK_BOX(accountListDialog->vbox ), status_bar, TRUE, TRUE, 0);
 
-	int number_accounts = account_list_get_size();
+	int number_accounts = account_list_get_registered_accounts ();
 	if (number_accounts) {
 		gchar * message = g_strdup_printf(n_("There is %d active account",
 					"There are %d active accounts", number_accounts),
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 3d2c6fe829..b07af3609e 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -327,6 +327,9 @@ accounts_changed_cb (DBusGProxy *proxy UNUSED,
     // Update the status bar in case something happened
     // Should fix ticket #1215
     status_bar_display_account();
+
+	// Update the tooltip on the status icon
+	statusicon_set_tooltip ();
 }
 
 
diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c
index 7d763d7520..984326b2c7 100644
--- a/sflphone-client-gnome/src/statusicon.c
+++ b/sflphone-client-gnome/src/statusicon.c
@@ -156,15 +156,24 @@ show_status_icon()
 			  G_CALLBACK (menu),
 			  create_menu());			  
 
-  // Add a tooltip to the system tray icon
-  int count = account_list_get_size();
-  gchar *tip =  g_markup_printf_escaped ("%s - %s" , 
-                       _("SFLphone"), 
-                       g_markup_printf_escaped(n_("%i account configured", "%i accounts configured", count),count));
-  gtk_status_icon_set_tooltip( status , tip );
-  g_free(tip);
+  statusicon_set_tooltip ();
 }
 
+void statusicon_set_tooltip () {
+
+	int count;
+	gchar *tip;
+
+	// Add a tooltip to the system tray icon
+	count = account_list_get_registered_accounts ();
+	tip =  g_markup_printf_escaped ("%s - %s" ,
+									_("SFLphone"),
+									g_markup_printf_escaped(n_("%i active account", "%i active accounts", count),count));
+	gtk_status_icon_set_tooltip (status, tip);
+	g_free(tip);
+}
+
+
 void status_tray_icon_blink (gboolean active)
 {
 	// Set a different icon to notify of an event
diff --git a/sflphone-client-gnome/src/statusicon.h b/sflphone-client-gnome/src/statusicon.h
index f976c9ad17..29fe256e27 100644
--- a/sflphone-client-gnome/src/statusicon.h
+++ b/sflphone-client-gnome/src/statusicon.h
@@ -85,6 +85,11 @@ void status_tray_icon_blink( gboolean active );
  */
 GtkStatusIcon* get_status_icon( void );
 
+/**
+ * Attach a tooltip to the status icon
+ */
+void statusicon_set_tooltip (void);
+
 #endif // GTK_CHECK_VERSION
 
 #endif
-- 
GitLab


From 5a7163f0ff7afc95a9870348a6f81da7f787c7e5 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Feb 2010 15:45:58 -0500
Subject: [PATCH 075/160] [#2281] Set the useragent per account in the GUI

---
 .../src/config/accountconfigdialog.c          | 33 ++++++++----
 .../dbus/configurationmanager-introspec.xml   |  4 +-
 sflphone-client-gnome/src/dbus/dbus.c         |  1 +
 sflphone-client-gnome/src/dbus/dbus.h         |  1 -
 sflphone-client-gnome/src/sflphone_const.h    |  1 +
 sflphone-common/src/account.h                 |  1 +
 .../src/dbus/callmanager-introspec.xml        | 51 ++++++++++---------
 .../dbus/configurationmanager-introspec.xml   |  2 +-
 .../src/dbus/configurationmanager.cpp         |  2 -
 sflphone-common/src/managerimpl.cpp           | 10 +++-
 sflphone-common/src/sip/sipvoiplink.cpp       | 14 +++--
 sflphone-common/src/sip/sipvoiplink.h         |  2 +-
 sflphone-common/src/user_cfg.h                |  1 +
 13 files changed, 81 insertions(+), 42 deletions(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 5fd6c4cc7c..4f7e34ee3f 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -57,6 +57,7 @@ GtkWidget * entryUsername;
 GtkWidget * entryHostname;
 GtkWidget * entryPassword;
 GtkWidget * entryMailbox;
+GtkWidget * entryUseragent;
 GtkWidget * entryResolveNameOnlyOnce;
 GtkWidget * expireSpinBox;
 GtkListStore * credentialStore;
@@ -208,15 +209,16 @@ static GtkWidget* create_basic_tab (account_t **a)  {
 #endif
 
 	// Default settings
-	gchar * curAccountID = "";
-	gchar * curAccountEnabled = "true";
-	gchar * curAccountType = "SIP";
-	gchar * curAlias = "";
-	gchar * curUsername = "";
-	gchar * curHostname = "";
-	gchar * curPassword = "";
+	gchar *curAccountID = "";
+	gchar *curAccountEnabled = "true";
+	gchar *curAccountType = "SIP";
+	gchar *curAlias = "";
+	gchar *curUsername = "";
+	gchar *curHostname = "";
+	gchar *curPassword = "";
 	/* TODO: add curProxy, and add boxes for Proxy support */
-	gchar * curMailbox = "";
+	gchar *curMailbox = "";
+	gchar *curUseragent = "";
 
 	currentAccount = *a;
 
@@ -232,13 +234,14 @@ static GtkWidget* create_basic_tab (account_t **a)  {
 		curPassword = g_hash_table_lookup(currentAccount->properties, ACCOUNT_PASSWORD);
 		curUsername = g_hash_table_lookup(currentAccount->properties, ACCOUNT_USERNAME);
 		curMailbox = g_hash_table_lookup(currentAccount->properties, ACCOUNT_MAILBOX);
+		curUseragent = g_hash_table_lookup(currentAccount->properties, ACCOUNT_USERAGENT);
 	}
 
 
 	gnome_main_section_new (_("Account Parameters"), &frame);
 	gtk_widget_show(frame);
 
-	table = gtk_table_new (7, 2  ,  FALSE/* homogeneous */);
+	table = gtk_table_new (8, 2  ,  FALSE/* homogeneous */);
 	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
 	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
 	gtk_widget_show (table);
@@ -337,6 +340,15 @@ static GtkWidget* create_basic_tab (account_t **a)  {
 	gtk_entry_set_text(GTK_ENTRY(entryMailbox), curMailbox);
 	gtk_table_attach ( GTK_TABLE( table ), entryMailbox, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
+	label = gtk_label_new_with_mnemonic (_("_User-agent"));
+	gtk_table_attach (GTK_TABLE (table), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+	entryUseragent = gtk_entry_new ();
+	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUseragent);
+	gtk_entry_set_text (GTK_ENTRY (entryUseragent), curUseragent);
+	gtk_table_attach ( GTK_TABLE( table ), entryUseragent, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+
 	gtk_widget_show_all( table );
 	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
 
@@ -1227,6 +1239,9 @@ void show_account_window (account_t * a) {
 
 			if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
 
+				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_USERAGENT), 
+						g_strdup(gtk_entry_get_text (GTK_ENTRY(entryUseragent))));
+
 				g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_ENABLED), 
 						g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox)) ? "true":"false"));
 
diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index fa1433399a..3361c16dd5 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -162,6 +162,8 @@
     <method name="addAccount">
       <!--* Add a new account to the SFLphone-daemon list. If no
 	    details are specified, default parameters are used.
+	    A REGISTER is automatically sent and configuration is
+	    saved if account created successfully.
 
             @param[in] input details
             @param[out] output accountID
@@ -458,7 +460,7 @@
 	<method name="setWindowPositionY">
       <arg type="i" name="posY" direction="in"/>
 	</method>
-		
+	
     <!-- Addressbook configuration -->
     <method name="getAddressbookSettings">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index b07af3609e..e4d0f53bfe 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -2579,3 +2579,4 @@ void dbus_set_window_position_y (const guint posy) {
         g_error_free (error);
     }
 }
+
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index acc961fba4..c8dd014f87 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -606,5 +606,4 @@ guint dbus_get_window_position_y (void);
 void dbus_set_window_position_x (const guint posx);
 void dbus_set_window_position_y (const guint posy);
 
-
 #endif
diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h
index 7df3cc9144..7153a5f543 100644
--- a/sflphone-client-gnome/src/sflphone_const.h
+++ b/sflphone-client-gnome/src/sflphone_const.h
@@ -57,6 +57,7 @@
 #define ACCOUNT_ALIAS		           "Account.alias"
 #define ACCOUNT_ENABLED		           "Account.enable"
 #define ACCOUNT_MAILBOX		           "Account.mailbox"
+#define ACCOUNT_USERAGENT	           "useragent"
 #define ACCOUNT_RESOLVE_ONCE               "Account.resolveOnce"
 #define ACCOUNT_REGISTRATION_EXPIRE        "Account.expire"
 #define ACCOUNT_SIP_STUN_SERVER	           "STUN.server"
diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index f2fa54b810..998330d0c5 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -72,6 +72,7 @@ typedef enum RegistrationState {
 #define PASSWORD                            "password"
 #define REALM                               "realm"
 #define DEFAULT_REALM                       "*"
+#define USERAGENT							"useragent"
 
 #define LOCAL_INTERFACE                     "Account.localInterface"
 #define PUBLISHED_SAMEAS_LOCAL              "Account.publishedSameAsLocal"
diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml
index 34f4eab3ec..83a5c32acf 100644
--- a/sflphone-common/src/dbus/callmanager-introspec.xml
+++ b/sflphone-common/src/dbus/callmanager-introspec.xml
@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<node name="/org/sflphone/SFLphone">
+
+<!-- Comment -->
+<!--*< File comment -->
+
+<node name="/org/sflphone/SFLphone" xmlns:dx="http://psiamp.org/dtd/doxygen_dbusxml.dtd">
 
   <!--* The CallManager interface is used to manage any call related
 	actions. 
@@ -15,36 +19,37 @@
 	subscribe to the callStateChanged signal in order to be
 	notified on updates in call status.
     -->
-  <interface name="org.sflphone.SFLphone.CallManager">
-
-    <method name="placeCall">
-      <!--* This is the main method in order to place a new call. The
+	<interface name="org.sflphone.SFLphone.CallManager">
+	
+	<!--* This is the main method in order to place a new call. The
             call is registered to the daemon using this method
             specified a unique identifier and VoIP Accout to be bound with.
 
-	    The account is specified by its accountID. 
+			The account is specified by its accountID. 
 
-	    If the call is to be placed whithout any account by the
-	    means of a SIP URI (i.e. sip:num@server), the
-	    "IP2IP_PROFILE" is passed as the accountID. For more
-	    details about accounts see the configuration manager interface.
+			If the call is to be placed whithout any account by the
+			means of a SIP URI (i.e. sip:num@server), the
+			"IP2IP_PROFILE" is passed as the accountID. For more
+			details about accounts see the configuration manager interface.
 
-	    The callID is a unique identifier that must be randomly
-	    generated on sflphone-client's side. Any subsequent
-	    actions refering to this call must use this callID.
+			The callID is a unique identifier that must be randomly
+			generated on sflphone-client's side. Any subsequent
+			actions refering to this call must use this callID.
 
-	    If bound to a VoIP account, the to argument is the phone
-	    number. In case of calls involving "IP2IP_PROFILE", a
-	    complete SIP URI must be specified.
+			If bound to a VoIP account, the to argument is the phone
+			number. In case of calls involving "IP2IP_PROFILE", a
+			complete SIP URI must be specified.
 
-            @param[in] input accountID
-            @param[in] input callID
-	    @param[in] input to
+				@param[in] input accountID
+				@param[in] input callID
+			@param[in] input to
         -->
-      <arg type="s" name="accountID" direction="in" />
-      <arg type="s" name="callID" direction="in" />
-      <arg type="s" name="to" direction="in" />
-    </method>
+
+		<method name="placeCall">
+			<arg type="s" name="accountID" direction="in"/>
+			<arg type="s" name="callID" direction="in" />
+			<arg type="s" name="to" direction="in" />
+		</method>
 
     <method name="placeCallFirstAccount">
       <arg type="s" name="callID" direction="in"/>
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 33f0192c2c..3361c16dd5 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -460,7 +460,7 @@
 	<method name="setWindowPositionY">
       <arg type="i" name="posY" direction="in"/>
 	</method>
-		
+	
     <!-- Addressbook configuration -->
     <method name="getAddressbookSettings">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 275800cb54..1eb0c06ff7 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -868,5 +868,3 @@ void ConfigurationManager::setWindowPositionY (const int32_t& posY) {
 
 	Manager::instance ().setConfig (PREFERENCES, WINDOW_POSITION_Y, posY);
 }
-
-
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 4b2c6f8461..fc85025e76 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -2358,6 +2358,8 @@ ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
 
     _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));
@@ -3376,6 +3378,7 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
     a.insert (std::pair<std::string, std::string> (USERNAME, getConfigString (accountID, USERNAME)));
     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)));
@@ -3572,6 +3575,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
     std::string password;
     std::string realm;
     std::string voicemail_count;
+	std::string ua_name;
 
     if ( (iter = map_cpy.find (AUTHENTICATION_USERNAME)) != map_cpy.end()) {
         authenticationName = iter->second;
@@ -3589,8 +3593,12 @@ void ManagerImpl::setAccountDetails (const std::string& accountID, const std::ma
         realm = iter->second;
     }
 
-    setConfig (accountID, REALM, realm);
+    if ( (iter = map_cpy.find (USERAGENT)) != map_cpy.end()) {
+        ua_name = iter->second;
+    }
 
+    setConfig (accountID, REALM, realm);
+	setConfig (accountID, USERAGENT, ua_name);
     setConfig (accountID, USERNAME, username);
     setConfig (accountID, AUTHENTICATION_USERNAME, authenticationName);
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 9542ea46e5..73f6f175bc 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -405,11 +405,19 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
 }
 
 
-std::string SIPVoIPLink::get_useragent_name (void)
+std::string SIPVoIPLink::get_useragent_name (const AccountID& id)
 {
-    std::ostringstream  useragent;
+	/*
     useragent << PROGNAME << "/" << SFLPHONED_VERSION;
     return useragent.str();
+	*/
+    std::ostringstream  useragent;
+	
+	useragent << Manager::instance ().getConfigString (id, USERAGENT);
+	if (useragent.str() == "sflphone" || useragent.str() == "")
+		useragent << "/" << SFLPHONED_VERSION;
+
+	return useragent.str ();
 }
 
 void
@@ -592,7 +600,7 @@ int SIPVoIPLink::sendRegister (AccountID id)
     // Add User-Agent Header
     pj_list_init (&hdr_list);
 
-    useragent = pj_str ( (char*) get_useragent_name ().c_str());
+    useragent = pj_str ( (char*) get_useragent_name (id).c_str());
 
     h = pjsip_generic_string_hdr_create (_pool, &STR_USER_AGENT, &useragent);
 
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 00c8171535..67108a7b93 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -280,7 +280,7 @@ class SIPVoIPLink : public VoIPLink
         
         bool new_ip_to_ip_call (const CallID& id, const std::string& to);
 
-        std::string get_useragent_name (void);
+        std::string get_useragent_name (const AccountID& id);
 
         /** 
          * List all the interfaces on the system and return 
diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h
index 91c4633e7d..096b7f11f1 100644
--- a/sflphone-common/src/user_cfg.h
+++ b/sflphone-common/src/user_cfg.h
@@ -116,5 +116,6 @@
 #define DFT_RECORD_PATH                     HOMEDIR
 #define DFT_WINDOW_WIDTH					"240"
 #define DFT_WINDOW_HEIGHT					"320"
+#define DFT_USERAGENT						"sflphone" //PROGNAME + "/" + SFLPHONED_VERSION	
 
 #endif // __USER_CFG_H__
-- 
GitLab


From 6c1204dbe5e80cebe5a7b36548ad4ab8ddd91934 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Feb 2010 15:56:08 -0500
Subject: [PATCH 076/160] [#2945] Remove sendonly attribute in
 inv_session_reinvite

---
 sflphone-common/src/sip/sipvoiplink.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 9542ea46e5..8f23846453 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1025,6 +1025,7 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction)
     // return 1;   // !PJ_SUCCESS
 
     pjmedia_sdp_media_remove_all_attr (local_sdp->media[0], "sendrecv");
+    pjmedia_sdp_media_remove_all_attr (local_sdp->media[0], "sendonly");
 
     attr = pjmedia_sdp_attr_create (_pool, direction.c_str(), NULL);
 
-- 
GitLab


From 9669f544f2a322406568ae9a1586c7324224786b Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Feb 2010 15:59:53 -0500
Subject: [PATCH 077/160] [#2926] Cleanup Audiorecord debug messages

---
 .../src/plug-in/audiorecorder/audiorecord.cpp | 55 +++++++++----------
 1 file changed, 25 insertions(+), 30 deletions(-)

diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp b/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
index 4ab7c6c970..c5bbfa81d1 100644
--- a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
+++ b/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
@@ -93,12 +93,12 @@ void AudioRecord::initFileName (std::string peerNumber)
 
     if (fileType_ == FILE_RAW) {
         if (strstr (fileName_, ".raw") == NULL) {
-            printf ("AudioRecord::openFile::concatenate .raw file extension: name : %s ", fileName_);
+            _debug("AudioRecord: concatenate .raw file extension: name : %s", fileName_);
             fName.append (".raw");
         }
     } else if (fileType_ == FILE_WAV) {
         if (strstr (fileName_, ".wav") == NULL) {
-            printf ("AudioRecord::openFile::concatenate .wav file extension: name : %s ", fileName_);
+            _debug("AudioRecord: concatenate .wav file extension: name : %s", fileName_);
             fName.append (".wav");
         }
     }
@@ -110,14 +110,14 @@ void AudioRecord::openFile()
 {
 
 
-    _debug ("AudioRecord::openFile()");
+    _debug ("AudioRecord: Open file()");
 
     bool result = false;
 
-    _debug ("AudioRecord::openFile()");
+    _debug ("AudioRecord: Open file()");
 
     if (isFileExist()) {
-        _debug ("AudioRecord::Filename does not exist, creating one ");
+        _debug ("AudioRecord: Filename does not exist, creating one");
         byteCounter_ = 0;
 
         if (fileType_ == FILE_RAW) {
@@ -126,7 +126,7 @@ void AudioRecord::openFile()
             result = setWavFile();
         }
     } else {
-        _debug ("AudioRecord::Filename already exist opening it ");
+        _debug ("AudioRecord: Filename already exist opening it");
 
         if (fileType_ == FILE_RAW) {
             result = openExistingRawFile();
@@ -156,10 +156,8 @@ bool AudioRecord::isOpenFile()
 {
 
     if (fp) {
-        _debug ("AudioRecord::isOpenFile(): file already openend");
         return true;
     } else {
-        _debug ("AudioRecord::isOpenFIle(): file not openend ");
         return false;
     }
 }
@@ -167,7 +165,7 @@ bool AudioRecord::isOpenFile()
 
 bool AudioRecord::isFileExist()
 {
-    _debug ("AudioRecord::isFileExist(): try to open name : %s ", fileName_);
+    _debug ("AudioRecord: Try to open name : %s ", fileName_);
 
     if (fopen (fileName_,"rb") ==0) {
         return true;
@@ -178,8 +176,6 @@ bool AudioRecord::isFileExist()
 
 bool AudioRecord::isRecording()
 {
-    _debug ("AudioRecording::isRecording() %i ", recordingEnabled_);
-
 
     if (recordingEnabled_)
         return true;
@@ -190,19 +186,20 @@ bool AudioRecord::isRecording()
 
 bool AudioRecord::setRecording()
 {
-    _debug ("AudioRecord::setRecording() ");
 
     if (isOpenFile()) {
-        _debug ("AudioRecord::setRecording()::file already opened ");
-
-        if (!recordingEnabled_)
-            recordingEnabled_ = true;
-        else
-            recordingEnabled_ = false;
-    } else {
-        _debug ("AudioRecord::setRecording():Opening the wave file in call during call instantiation ");
+      if (!recordingEnabled_) {
+	  _debug ("AudioRecording: Start recording");
+	  recordingEnabled_ = true;
+      }
+      else {
+	  recordingEnabled_ = false;
+	  _debug ("AudioRecording: Stop recording");
+      }
+    } 
+    else {
         openFile();
-
+	
         recordingEnabled_ = true; // once opend file, start recording
     }
 
@@ -213,7 +210,7 @@ bool AudioRecord::setRecording()
 
 void AudioRecord::stopRecording()
 {
-    _debug ("AudioRecording::stopRecording() ");
+    _debug ("AudioRecording: Stop recording");
 
     if (recordingEnabled_)
         recordingEnabled_ = false;
@@ -270,7 +267,7 @@ void AudioRecord::createFilename()
     // fileName_ = out.str();
     strncpy (fileName_, out.str().c_str(), 8192);
 
-    printf ("AudioRecord::createFilename::filename for this call %s ",fileName_);
+    printf ("AudioRecord: create filename for this call %s ", fileName_);
 }
 
 bool AudioRecord::setRawFile()
@@ -300,7 +297,7 @@ bool AudioRecord::setWavFile()
     fp = fopen (savePath_.c_str(), "wb");
 
     if (!fp) {
-        _debug ("AudioRecord::setWavFile() : could not create WAV file.");
+        _warn("AudioRecord: Error: could not create WAV file.");
         return false;
     }
 
@@ -328,11 +325,11 @@ bool AudioRecord::setWavFile()
 
 
     if (fwrite (&hdr, 4, 11, fp) != 11) {
-        _debug ("AudioRecord::setWavFile() : could not write WAV header for file. ");
+        _debug ("AudioRecord: Error: could not write WAV header for file. ");
         return false;
     }
 
-    _debug ("AudioRecord::setWavFile() : created WAV file. ");
+    _debug ("AudioRecord: created WAV file successfully.");
 
     return true;
 }
@@ -343,7 +340,7 @@ bool AudioRecord::openExistingRawFile()
     fp = fopen (fileName_, "ab+");
 
     if (!fp) {
-        _debug ("AudioRecord::openExistingRawFile() : could not create RAW file!");
+        _warn ("AudioRecord: could not create RAW file!");
         return false;
     }
 
@@ -413,7 +410,6 @@ void AudioRecord::closeWavFile()
 
     if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't write bytes for data length ");
 
-    printf ("AudioRecord::closeWavFile : data bytes: %i ", (int) bytes);
 
     bytes = byteCounter_ * channels_ + 44; // + 44 for the wave header
 
@@ -425,10 +421,9 @@ void AudioRecord::closeWavFile()
 
     if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4");
 
-    printf ("AudioRecord::closeWavFile : bytes : %i ", (int) bytes);
 
     if (fclose (fp) != 0)
-        _debug ("AudioRecord::closeWavFile()::ERROR: can't close file");
+        _debug ("AudioRecord: Error: can't close file");
 
 
 }
-- 
GitLab


From 0d3395887a9332d3e4eac4b5f1472043027be023 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Feb 2010 16:13:53 -0500
Subject: [PATCH 078/160] [#2615] Clean up build system

---
 sflphone-common/configure.ac                  | 39 +++----------------
 sflphone-common/libs/dbus-c++/src/Makefile.am |  8 ++--
 sflphone-common/src/audio/Makefile.am         |  7 ----
 3 files changed, 10 insertions(+), 44 deletions(-)

diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac
index fe7cdfcc92..96434834b6 100644
--- a/sflphone-common/configure.ac
+++ b/sflphone-common/configure.ac
@@ -19,7 +19,7 @@ AM_CONFIG_HEADER([config.h])
 m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
 
 	dnl Use this variable in the program
-	AC_SUBST(PACKAGE_VERSION)
+AC_SUBST(PACKAGE_VERSION)
 
 	AM_PROG_LIBTOOL
 
@@ -254,27 +254,9 @@ AC_SUBST(dbus_LIBS)
 	CXXFLAGS="-g -Wall -O2"
 	fi
 
-
-
-	if test "$enable_glib" = "yes" ; then
-	PKG_CHECK_MODULES([glib], glib-2.0)
-	AC_SUBST(glib_CFLAGS)
-	AC_SUBST(glib_LIBS)
-	AM_CONDITIONAL(ENABLE_GLIB, test 1 = 1)
-PKG_CHECK_MODULES([gtkmm], gtkmm-2.4,
-		AM_CONDITIONAL(HAVE_GTKMM, test 1 = 1),
-		AM_CONDITIONAL(HAVE_GTKMM, test 0 = 1)
-		)
-	AC_SUBST(gtkmm_CFLAGS)
-AC_SUBST(gtkmm_LIBS)
-	else
-	AM_CONDITIONAL(ENABLE_GLIB, test 0 = 1)
-AM_CONDITIONAL(HAVE_GTKMM, test 0 = 1)
-	fi
-
 AC_CHECK_LIB([expat], XML_ParserCreate_MM,
 		[AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false)],
-		have_expat=false)
+	have_expat=false)
 
 if ! $have_expat; then
 AC_MSG_ERROR([You need the eXpat xml parser]
@@ -284,7 +266,7 @@ fi
 xml_CFLAGS=
 xml_LIBS=-lexpat
 
-AC_SUBST(xml_CFLAGS)
+	AC_SUBST(xml_CFLAGS)
 AC_SUBST(xml_LIBS)
 
 AC_CHECK_LIB([pthread], pthread_create,
@@ -304,9 +286,9 @@ AC_CHECK_LIB([pcre], pcre_free,
 AC_MSG_ERROR([You need the Perl-Compatible Regular Expressions library (pcre)])	
 	fi
 
-PCRE_LIBS=-lpcre
-PCRE_CFLAGS=
-AC_SUBST(PCRE_LIBS)
+	PCRE_LIBS=-lpcre
+	PCRE_CFLAGS=
+	AC_SUBST(PCRE_LIBS)
 AC_SUBST(PCRE_CFLAGS)
 
 
@@ -378,15 +360,6 @@ AM_CONDITIONAL(ENABLE_SPEEXDSP, test  $HAVE_SPEEXDSP = yes)
 	LIBCELT_MIN_VERSION=0.5.1
 PKG_CHECK_MODULES(CELT, celt >= ${LIBCELT_MIN_VERSION}, AM_CONDITIONAL(BUILD_CELT, test 1 = 1 ), AM_CONDITIONAL(BUILD_CELT, test 0 = 1 ))
 
-	dnl Check for ilbc support
-AC_ARG_WITH([ilbc],
-		[AS_HELP_STRING([--without-ilbc],
-			[disable support for the ilbc codec])],
-		[],
-		[with_ilbc=no])
-
-AM_CONDITIONAL(BUILD_ILBC, test "x$with_ilbc" = "xyes" )
-
 	dnl Check for IAX
 AC_ARG_WITH([iax2],
 		[AS_HELP_STRING([--without-iax2],
diff --git a/sflphone-common/libs/dbus-c++/src/Makefile.am b/sflphone-common/libs/dbus-c++/src/Makefile.am
index 7bc99b89ca..26520ff252 100644
--- a/sflphone-common/libs/dbus-c++/src/Makefile.am
+++ b/sflphone-common/libs/dbus-c++/src/Makefile.am
@@ -5,10 +5,10 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libs/dbus-c++/include \
 	-I$(top_builddir)/libs/dbus-c++/include
 
-if ENABLE_GLIB
-GLIB_H = $(HEADER_DIR)/glib-integration.h
-GLIB_CPP = glib-integration.cpp
-endif
+#if ENABLE_GLIB
+#GLIB_H = $(HEADER_DIR)/glib-integration.h
+#GLIB_CPP = glib-integration.cpp
+#endif
 
 CONFIG_H = $(top_builddir)/libs/dbus-c++/include/dbus-c++/config.h
 
diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am
index 19e5f45793..4e86ba6f53 100644
--- a/sflphone-common/src/audio/Makefile.am
+++ b/sflphone-common/src/audio/Makefile.am
@@ -2,13 +2,6 @@ include $(top_srcdir)/globals.mak
 
 noinst_LTLIBRARIES = libaudio.la
 
-
-if BUILD_ILBC
-ILBC_FLAG = -DBUILD_ILBC
-else
-ILBC_FLAG = 
-endif
-
 SUBDIRS = codecs audiortp sound alsa pulseaudio 
 
 libaudio_la_SOURCES = \
-- 
GitLab


From 53c9bb6e4a00325ee1734eea69ecf8606a891a03 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Feb 2010 16:47:10 -0500
Subject: [PATCH 079/160] [#2398] Convert the record button in a toggle tool
 button

---
 sflphone-client-gnome/src/uimanager.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 966b6311b4..eeff70c7ef 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -33,6 +33,7 @@ static GtkWidget *toolbar;
 static GtkWidget *toolbarWindows;
 
 guint transfertButtonConnId; //The button toggled signal connection ID
+guint recordButtonConnId; //The button toggled signal connection ID
 
 GtkAction * pickUpAction;
 GtkWidget * pickUpWidget;
@@ -730,7 +731,6 @@ static const GtkActionEntry menu_entries[] = {
 	{ "HangUp", GTK_STOCK_HANGUP, N_("_Hang up"), "<control>S", N_("Finish the call"), G_CALLBACK (call_hang_up) },    
 	{ "OnHold", GTK_STOCK_ONHOLD, N_("O_n hold"), "<control>P", N_("Place the call on hold"), G_CALLBACK (call_hold) },    
 	{ "OffHold", GTK_STOCK_OFFHOLD, N_("O_ff hold"), "<control>P", N_("Place the call off hold"), G_CALLBACK (call_hold) },    
-	{ "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R", N_("Record the current conversation"), G_CALLBACK (call_record) },        
 	{ "AccountAssistant", NULL, N_("Configuration _Assistant"), NULL, N_("Run the configuration assistant"), G_CALLBACK (call_configuration_assistant) },    
 	{ "Voicemail", "mail-read", N_("Voicemail"), NULL, N_("Call your voicemail"), G_CALLBACK (call_mailbox_cb) },    
 	{ "Close", GTK_STOCK_CLOSE, N_("_Close"), "<control>W", N_("Minimize to system tray"), G_CALLBACK (call_minimize) },
@@ -757,6 +757,7 @@ static const GtkActionEntry menu_entries[] = {
 static const GtkToggleActionEntry toggle_menu_entries[] = {
 
 	{ "Transfer", GTK_STOCK_TRANSFER, N_("_Transfer"), "<control>T", N_("Transfer the call"), NULL }, //G_CALLBACK (call_transfer_cb) },        
+	{ "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R", N_("Record the current conversation"), NULL }, // G_CALLBACK (call_record) },        
 	{ "Toolbar", NULL, N_("_Show toolbar"), "<control>T", N_("Show the toolbar"), NULL },
 	{ "Dialpad", NULL, N_("_Dialpad"), "<control>D", N_("Show the dialpad"), G_CALLBACK (dialpad_bar_cb) },
 	{ "VolumeControls",NULL, N_("_Volume controls"), "<control>V", N_("Show the volume controls"), G_CALLBACK (volume_bar_cb) },
@@ -1358,6 +1359,7 @@ void create_toolbar_actions (GtkUIManager *ui_manager, GtkWidget **widget)
 
 	// Set the handler ID for the transfer
     transfertButtonConnId = g_signal_connect (G_OBJECT (transferToolbar), "toggled", G_CALLBACK (call_transfer_cb), NULL);
+	recordButtonConnId = g_signal_connect (G_OBJECT (recordWidget), "toggled", G_CALLBACK (call_record), NULL);
 	active_calltree = current_calls;
 
 	*widget = toolbar;
-- 
GitLab


From da578b54edeb60ce81c1161ed9ccc0d169e1a567 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Feb 2010 17:21:12 -0500
Subject: [PATCH 080/160] [#2569] Make history items more human-readable

---
 sflphone-client-gnome/src/callable_obj.c | 30 ++++++++++++++++++++----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/sflphone-client-gnome/src/callable_obj.c b/sflphone-client-gnome/src/callable_obj.c
index b1b2cea6c5..ea6840bc9b 100644
--- a/sflphone-client-gnome/src/callable_obj.c
+++ b/sflphone-client-gnome/src/callable_obj.c
@@ -22,6 +22,10 @@
 #include <sflphone_const.h>
 #include <time.h>
 
+#define UNIX_DAY			86400
+#define UNIX_WEEK			86400 * 6
+#define UNIX_TWO_DAYS		86400 * 2
+
 gint is_callID_callstruct ( gconstpointer a, gconstpointer b)
 {
     callable_obj_t * c = (callable_obj_t*)a;
@@ -356,19 +360,35 @@ gchar* get_history_id_from_state (history_state_t state)
     }
 }
 
-gchar* get_formatted_start_timestamp (callable_obj_t *obj)
-{ 
+gchar* get_formatted_start_timestamp (callable_obj_t *obj) { 
+	
     struct tm* ptr;
-    time_t lt;
+    time_t lt, now;
     unsigned char str[100];
 
     if (obj)
     {
+		// Fetch the current timestamp
+		(void) time (&now);
         lt = obj->_time_start;
-        ptr = localtime(&lt);
+
+        ptr = localtime (&lt);
+
+		if (now - lt < UNIX_WEEK) {
+			if (now-lt < UNIX_DAY) {
+				strftime((char *)str, 100, N_("today at %R"), (const struct tm *)ptr);
+			} else {
+				if (now - lt < UNIX_TWO_DAYS) {
+					strftime((char *)str, 100, N_("yesterday at %R"), (const struct tm *)ptr);
+				} else {
+					strftime((char *)str, 100, N_("%A at %R"), (const struct tm *)ptr);
+				}
+			}
+		} else {
+			strftime((char *)str, 100, N_("%x at %R"), (const struct tm *)ptr);
+		}
 
         // result function of the current locale
-        strftime((char *)str, 100, "%x %X", (const struct tm *)ptr);
         return g_markup_printf_escaped("\n%s\n" , str);
     }
     return "";
-- 
GitLab


From 4be89ba607e72a3294961631ad828227a06f6234 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 25 Feb 2010 13:02:24 -0500
Subject: [PATCH 081/160] [#2598] Create Pulseaudio Mainloop and Context only
 once at startup

Playback and capture streams can be created/destroyed later
---
 .../src/audio/pulseaudio/audiostream.cpp      |  45 ++-
 .../src/audio/pulseaudio/pulselayer.cpp       | 290 +++++++-----------
 .../src/audio/pulseaudio/pulselayer.h         |   3 +
 3 files changed, 129 insertions(+), 209 deletions(-)

diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
index ac51fa0d54..e743c85286 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
@@ -72,7 +72,7 @@ bool
 AudioStream::drainStream (void)
 {
     if (_audiostream) {
-        _debug ("Draining stream");
+        _info("Audio: Draining stream");
         pa_operation * operation;
 
         pa_threaded_mainloop_lock (_mainloop);
@@ -80,7 +80,7 @@ AudioStream::drainStream (void)
         if ( (operation = pa_stream_drain (_audiostream, success_cb, _mainloop))) {
             while (pa_operation_get_state (operation) != PA_OPERATION_DONE) {
                 if (!_context || pa_context_get_state (_context) != PA_CONTEXT_READY || !_audiostream || pa_stream_get_state (_audiostream) != PA_STREAM_READY) {
-                    _debug ("Connection died: %s", _context ? pa_strerror (pa_context_errno (_context)) : "NULL");
+                    _warn("Audio: Connection died: %s", _context ? pa_strerror (pa_context_errno (_context)) : "NULL");
                     pa_operation_unref (operation);
                     break;
                 } else {
@@ -98,7 +98,7 @@ AudioStream::drainStream (void)
 bool
 AudioStream::disconnectStream (void)
 {
-    _debug ("Destroy audio streams");
+    _info("Audio: Destroy audio streams");
 
     pa_threaded_mainloop_lock (_mainloop);
 
@@ -127,7 +127,7 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data)
 {
     pa_threaded_mainloop *m;
 
-    _debug ("AudioStream::stream_state_callback :: The state of the stream changed");
+    _info("Audio: The state of the stream changed");
     assert (s);
 
     m = (pa_threaded_mainloop*) user_data;
@@ -136,26 +136,25 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data)
     switch (pa_stream_get_state (s)) {
 
         case PA_STREAM_CREATING:
-            _debug ("Stream is creating...");
+            _info("Audio: Stream is creating...");
             break;
 
         case PA_STREAM_TERMINATED:
-            _debug ("Stream is terminating...");
+            _info ("Audio: Stream is terminating...");
             break;
 
         case PA_STREAM_READY:
-            _debug ("Stream successfully created, connected to %s", pa_stream_get_device_name (s));
-            // pa_stream_cork( s, 0, NULL, NULL);
+            _info ("Audio: Stream successfully created, connected to %s", pa_stream_get_device_name (s));
             break;
 
         case PA_STREAM_UNCONNECTED:
-            _debug ("Stream unconnected");
+            _info ("Audio: Stream unconnected");
             break;
 
         case PA_STREAM_FAILED:
 
         default:
-            _debug ("Stream error - Sink/Source doesn't exists: %s" , pa_strerror (pa_context_errno (pa_stream_get_context (s))));
+            _warn("Audio: Error - Sink/Source doesn't exists: %s" , pa_strerror (pa_context_errno (pa_stream_get_context (s))));
             exit (0);
             break;
     }
@@ -181,45 +180,45 @@ AudioStream::createStream (pa_context* c)
     assert (pa_sample_spec_valid (&_sample_spec));
     assert (pa_channel_map_valid (&channel_map));
 
+    _info("Audio: Create pulseaudio stream");
+
     pa_buffer_attr* attributes = (pa_buffer_attr*) malloc (sizeof (pa_buffer_attr));
 
+
     if (! (s = pa_stream_new (c, _streamDescription.c_str() , &_sample_spec, &channel_map)))
-        _debug ("%s: pa_stream_new() failed : %s" , _streamDescription.c_str(), pa_strerror (pa_context_errno (c)));
+        _warn ("Audio: Error: %s: pa_stream_new() failed : %s" , _streamDescription.c_str(), pa_strerror (pa_context_errno (c)));
 
     assert (s);
 
-    // parameters are defined as number of bytes
-    // 2048 bytes (1024 int16) is 20 ms at 44100 Hz
     if (_streamType == PLAYBACK_STREAM) {
 
-        // 20 ms framesize TODO: take framesize value from config
         attributes->maxlength = (uint32_t) -1;
         attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec);
         attributes->prebuf = 0;
         attributes->minreq = (uint32_t) -1;
-        attributes->fragsize = (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), &_volume, NULL);
+		pa_threaded_mainloop_unlock(_mainloop);
+
     } else if (_streamType == CAPTURE_STREAM) {
 
-        // 20 ms framesize TODO: take framesize value from config
         attributes->maxlength = (uint32_t) -1;
-        attributes->tlength = (uint32_t) -1;
-        attributes->prebuf = (uint32_t) -1;
-        attributes->minreq = (uint32_t) -1;
         attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec);
 
-
-
-        pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_PEAK_DETECT|PA_STREAM_ADJUST_LATENCY));
+		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_threaded_mainloop_unlock(_mainloop);
+        
     } else if (_streamType == UPLOAD_STREAM) {
         pa_stream_connect_upload (s , 1024);
     } else {
-        _debug ("Stream type unknown ");
+        _warn ("Audio: Error: Stream type unknown ");
     }
 
     pa_stream_set_state_callback (s , stream_state_callback, _mainloop);
 
+
     free (attributes);
 
     return s;
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index a9c03e2ed2..e0aca6a3fb 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -1,7 +1,7 @@
 /*
  *  Copyright (C) 2008 Savoir-Faire Linux inc.
- *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@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
@@ -25,62 +25,47 @@ int framesPerBuffer = 2048;
 
 static  void playback_callback (pa_stream* s, size_t bytes, void* userdata)
 {
-    // _debug("playback_callback");
 
     assert (s && bytes);
     assert (bytes > 0);
     static_cast<PulseLayer*> (userdata)->processPlaybackData();
-    // static_cast<PulseLayer*> (userdata)->processData();
+
 }
 
 static void capture_callback (pa_stream* s, size_t bytes, void* userdata)
 {
-    // _debug("capture_callback");
 
     assert (s && bytes);
     assert (bytes > 0);
     static_cast<PulseLayer*> (userdata)->processCaptureData();
-    // static_cast<PulseLayer*> (userdata)->processData();
+    
 }
 
 /*
 static void stream_suspended_callback (pa_stream *s UNUSED, void *userdata UNUSED)
 {
-    _debug("PulseLayer::Stream Suspended");
+    _debug("Audio: Stream Suspended");
 }
 */
 
 /*
 static void stream_moved_callback(pa_stream *s UNUSED, void *userdata UNUSED)
 {
-    _debug("PulseLayer::Stream Moved");
+    _debug("Audio: Stream Moved");
 }
 */
 
 static void playback_underflow_callback (pa_stream* s,  void* userdata UNUSED)
 {
-    _debug ("PulseLayer::Buffer Underflow");
-    // const pa_timing_info* info = pa_stream_get_timing_info(s);
-    // _debug("         pa write_index: %l", (long)(info->write_index));
-    // _debug("         pa write_index_corupt (if not 0): %i",  info->write_index_corrupt);
-    // _debug("         pa read_index: %l", (long)(info->read_index));
-    // _debug("         pa read_index_corrupt (if not 0): %i", info->read_index_corrupt);
-
-
-    // fill in audio buffer twice the prebuffering value to restart playback
-    pa_stream_writable_size (s);
-    pa_stream_trigger (s, NULL, NULL);
-
+    _debug ("Audio: Buffer Underflow");
 
 }
 
 
 static void playback_overflow_callback (pa_stream* s UNUSED, void* userdata UNUSED)
 {
-    _debug ("PulseLayer::Buffer OverFlow");
-    //PulseLayer* pulse = (PulseLayer*) userdata;
-    // pa_stream_drop (s);
-    // pa_stream_trigger (s, NULL, NULL);
+    _debug ("Audio: Buffer OverFlow");
+
 }
 
 
@@ -91,11 +76,11 @@ PulseLayer::PulseLayer (ManagerImpl* manager)
         , playback()
         , record()
 {
-    _debug ("PulseLayer::Pulse audio constructor: Create context");
-
     _urgentRingBuffer.createReadPointer();
     dcblocker = new DcBlocker();
     is_started = false;
+    
+    openLayer();
 }
 
 // Destructor
@@ -113,28 +98,59 @@ PulseLayer::~PulseLayer (void)
     dcblocker = NULL;
 }
 
+void
+PulseLayer::openLayer (void)
+{
+	if (!is_started) {
+
+		_info("Audio: Open layer");
+
+		if (!m) {
+
+			_info("Audio: Creating PulseAudio mainloop");
+			if (!(m = pa_threaded_mainloop_new()))
+				_warn ("Audio: Error: while creating pulseaudio mainloop");
+
+			if (pa_threaded_mainloop_start (m) < 0) {
+				_warn("Audio: Error: Failed to start pulseaudio mainloop");
+			}
+			
+			assert(m);
+		}
+
+		if (!context) {
+			
+			_info("Audio: Creating new PulseAudio Context");
+			pa_threaded_mainloop_lock (m);
+
+			// Instanciate a context
+			if (! (context = pa_context_new (pa_threaded_mainloop_get_api (m) , "SFLphone")))
+				_warn ("Audio: Error: while creating pulseaudio context");
+
+			pa_threaded_mainloop_unlock (m);
+
+			assert (context);
+		}
+
+		// Create Streams
+		connectPulseAudioServer();
+
+		is_started = true;
+	}
+
+}
+
 bool
 PulseLayer::closeLayer (void)
 {
-    _debug ("PulseLayer::closeLayer :: Destroy pulselayer");
-
-    // Commenting the line below will make the
-    // PulseLayer to close immediately, not
-    // waiting for the playback buffer to be
-    // emptied. It should not hurt.
-    //playback->drainStream();
+    _info("Audio: Destroy pulselayer");
 
+    disconnectAudioStream();
+	
     if (m) {
         pa_threaded_mainloop_stop (m);
     }
 
-    // playback->disconnectStream();
-    // closePlaybackStream();
-
-    // record->disconnectStream();
-    // closeCaptureStream();
-
-    // disconnectAudioStream();
 
     if (context) {
         pa_context_disconnect (context);
@@ -153,7 +169,7 @@ PulseLayer::closeLayer (void)
 void
 PulseLayer::connectPulseAudioServer (void)
 {
-    _debug ("PulseLayer::connectPulseAudioServer ");
+    _info("Audio: connect to pulseaudio server");
 
     setenv ("PULSE_PROP_media.role", "phone", 1);
 
@@ -161,30 +177,27 @@ PulseLayer::connectPulseAudioServer (void)
 
     pa_threaded_mainloop_lock (m);
 
-    _debug ("Connect the context to the server");
+    _info("Audio: Connect the context to the server");
     pa_context_connect (context, NULL , flag , NULL);
 
     pa_context_set_state_callback (context, context_state_callback, this);
-    pa_threaded_mainloop_wait (m);
-
+    pa_threaded_mainloop_wait(m);
+    
+    
     // Run the main loop
-
     if (pa_context_get_state (context) != PA_CONTEXT_READY) {
-        _debug ("Error connecting to pulse audio server");
-        // pa_threaded_mainloop_unlock (m);
+        _warn("Audio: Error: connecting to pulse audio server");
     }
 
     pa_threaded_mainloop_unlock (m);
 
-    //serverinfo();
-    //muteAudioApps(99);
-    _debug ("Context creation done");
+    _info("Audio: Context creation done");
 
 }
 
 void PulseLayer::context_state_callback (pa_context* c, void* user_data)
 {
-    _debug ("PulseLayer::context_state_callback ::The state of the context changed");
+    _info("Audio: The state of the context changed");
     PulseLayer* pulse = (PulseLayer*) user_data;
     assert (c && pulse->m);
 
@@ -195,46 +208,45 @@ void PulseLayer::context_state_callback (pa_context* c, void* user_data)
         case PA_CONTEXT_AUTHORIZING:
 
         case PA_CONTEXT_SETTING_NAME:
-            _debug ("Waiting....");
+            _debug ("Audio: Waiting....");
             break;
 
         case PA_CONTEXT_READY:
-            pulse->createStreams (c);
-            _debug ("Connection to PulseAudio server established");
+            _debug ("Audio: Connection to PulseAudio server established");
+            pa_threaded_mainloop_signal(pulse->m, 0);
             break;
 
         case PA_CONTEXT_TERMINATED:
-            _debug ("Context terminated");
+            _debug ("Audio: Context terminated");
             break;
 
         case PA_CONTEXT_FAILED:
 
         default:
-            _debug (" Error : %s" , pa_strerror (pa_context_errno (c)));
+            _warn("Audio: Error : %s" , pa_strerror (pa_context_errno (c)));
             pulse->disconnectAudioStream();
             exit (0);
             break;
     }
 }
 
-bool PulseLayer::disconnectAudioStream (void)
+bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sampleRate, int frameSize , int stream UNUSED, std::string plugin UNUSED)
 {
-    _debug (" PulseLayer::disconnectAudioStream( void ) ");
+    _audioSampleRate = sampleRate;
+    _frameSize = frameSize;
 
-    closePlaybackStream();
+    flushUrgent();
 
-    closeCaptureStream();
+    // use 1 sec buffer for resampling
+    _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
-    if (!playback && !record)
-        return true;
-    else
-        return false;
+    return true;
 }
 
 
 bool PulseLayer::createStreams (pa_context* c)
 {
-    _debug ("PulseLayer::createStreams");
+    _info("Audio: Create streams");
 
     PulseLayerType * playbackParam = new PulseLayerType();
     playbackParam->context = c;
@@ -270,27 +282,26 @@ bool PulseLayer::createStreams (pa_context* c)
 
     flushMain();
     flushUrgent();
-    // _urgentRingBuffer.flushAll();
-
 
     return true;
 }
 
 
-bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sampleRate, int frameSize , int stream UNUSED, std::string plugin UNUSED)
+bool PulseLayer::disconnectAudioStream (void)
 {
-    _audioSampleRate = sampleRate;
-    _frameSize = frameSize;
+    _info("Audio: Disconnect audio stream");
 
-    // _urgentRingBuffer.flushAll();
-    flushUrgent();
+    closePlaybackStream();
 
-    // use 1 sec buffer for resampling
-    _converter = new SamplerateConverter (_audioSampleRate, 1000);
+    closeCaptureStream();
 
-    return true;
+    if (!playback && !record)
+        return true;
+    else
+        return false;
 }
 
+
 void PulseLayer::closeCaptureStream (void)
 {
     if (record) {
@@ -300,6 +311,7 @@ void PulseLayer::closeCaptureStream (void)
     }
 }
 
+
 void PulseLayer::closePlaybackStream (void)
 {
     if (playback) {
@@ -309,60 +321,30 @@ void PulseLayer::closePlaybackStream (void)
     }
 }
 
+
 int PulseLayer::canGetMic()
 {
     if (record)
-        return 0; // _micRingBuffer.AvailForGet();
+        return 0;
     else
         return 0;
 }
 
+
 int PulseLayer::getMic (void *buffer, int toCopy)
 {
     if (record) {
-        return 0; // _micRingBuffer.Get (buffer, toCopy, 100);
+        return 0;
     } else
         return 0;
 }
 
+
 void PulseLayer::startStream (void)
 {
-    // connectPulseAudioServer();
-
-    if (!is_started) {
-
-        _debug ("PulseLayer::Start Stream");
-
-        if (!m) {
-
-            _debug ("Creating PulseAudio MainLoop");
-            m = pa_threaded_mainloop_new();
-            assert (m);
-
-            if (pa_threaded_mainloop_start (m) < 0) {
-                _debug ("Failed starting the mainloop");
-            }
-        }
-
-        if (!context) {
-
-            _debug ("Creating new PulseAudio Context");
-            pa_threaded_mainloop_lock (m);
-            // Instanciate a context
-
-            if (! (context = pa_context_new (pa_threaded_mainloop_get_api (m) , "SFLphone")))
-                _debug ("Error while creating the context");
-
-            pa_threaded_mainloop_unlock (m);
-
-            assert (context);
-        }
-
-        // Create Streams
-        connectPulseAudioServer();
-
-        is_started = true;
-    }
+    // Create Streams
+	if(!playback || !record)
+		createStreams(context);
 
     // Flush outside the if statement: every time start stream is
     // called is to notify a new event
@@ -372,71 +354,25 @@ void PulseLayer::startStream (void)
 
 }
 
+
 void
 PulseLayer::stopStream (void)
 {
 
-    if (is_started) {
-
-        _debug ("PulseLayer::Stop Audio Stream");
-        pa_stream_flush (playback->pulseStream(), NULL, NULL);
-        pa_stream_flush (record->pulseStream(), NULL, NULL);
-
-        if (m) {
-            pa_threaded_mainloop_stop (m);
-        }
-
-        disconnectAudioStream();
-
-        _debug ("Disconnecting PulseAudio context");
-
-        if (context) {
-
-            pa_threaded_mainloop_lock (m);
-            pa_context_disconnect (context);
-            pa_context_unref (context);
-            pa_threaded_mainloop_unlock (m);
-            context = NULL;
-        }
-
-        _debug ("Freeing Pulseaudio mainloop");
-
-        if (m) {
-            pa_threaded_mainloop_free (m);
-            m = NULL;
-        }
-
-
-        is_started = false;
-
-    }
+	_info("Audio: Stop audio stream");
+	pa_stream_flush (playback->pulseStream(), NULL, NULL);
+	pa_stream_flush (record->pulseStream(), NULL, NULL);
 
+	disconnectAudioStream();
 }
 
 
 
-// void PulseLayer::underflow (pa_stream* s UNUSED,  void* userdata UNUSED)
-//{
-//    _debug ("PulseLayer::Buffer Underflow");
-//}
-
-/*
-void PulseLayer::overflow (pa_stream* s, void* userdata UNUSED)
-{
-    //PulseLayer* pulse = (PulseLayer*) userdata;
-    pa_stream_drop (s);
-    pa_stream_trigger (s, NULL, NULL);
-}
-*/
-
-
 void PulseLayer::processPlaybackData (void)
 {
     // Handle the data for the speakers
     if (playback && (playback->pulseStream()) && (pa_stream_get_state (playback->pulseStream()) == PA_STREAM_READY)) {
 
-        // _debug("PulseLayer::processPlaybackData()");
-
         // If the playback buffer is full, we don't overflow it; wait for it to have free space
         if (pa_stream_writable_size (playback->pulseStream()) == 0)
             return;
@@ -464,8 +400,6 @@ void PulseLayer::processData (void)
     // Handle the data for the speakers
     if (playback && (playback->pulseStream()) && (pa_stream_get_state (playback->pulseStream()) == PA_STREAM_READY)) {
 
-        // _debug("PulseLayer::processPlaybackData()");
-
         // If the playback buffer is full, we don't overflow it; wait for it to have free space
         if (pa_stream_writable_size (playback->pulseStream()) == 0)
             return;
@@ -499,7 +433,7 @@ void PulseLayer::writeToSpeaker (void)
     int writeableSize = pa_stream_writable_size (playback->pulseStream());
 
     if (writeableSize < 0)
-        _debug ("PulseLayer playback error : %s", pa_strerror (writeableSize));
+        _warn ("Audio: playback error : %s", pa_strerror (writeableSize));
 
 
     if (urgentAvailBytes > writeableSize) {
@@ -527,15 +461,11 @@ void PulseLayer::writeToSpeaker (void)
 
             if (playback->getStreamState() == PA_STREAM_READY) {
 
-	        // _debug("writeableSize %d\n", writeableSize);
-
                 out = (SFLDataFormat*) pa_xmalloc (writeableSize);
                 int copied = tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100);
 		
                 int returnValue = pa_stream_write (playback->pulseStream(), out, copied * sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
 
-		// _debug("return value %d\n", returnValue);
-
                 pa_xfree (out);
 
             }
@@ -580,7 +510,6 @@ void PulseLayer::writeToSpeaker (void)
             normalAvailBytes = getMainBuffer()->availForGet();
 
             byteToGet = (normalAvailBytes < (int) (maxNbBytesToGet)) ? normalAvailBytes : maxNbBytesToGet;
-	    // _debug("byteToGet: %i", byteToGet);
 
             if (byteToGet) {
 
@@ -604,12 +533,10 @@ void PulseLayer::writeToSpeaker (void)
                     int nbSample = _converter->upsampleData ( (SFLDataFormat*) out, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_down);
 
                     if ( (nbSample*sizeof (SFLDataFormat)) > (unsigned int) writeableSize)
-                        _debug ("Error: nbsbyte exceed buffer length");
+                        _warn("Audio: Error: nbsbyte exceed buffer length");
 
-                    // pa_threaded_mainloop_lock (m);
                     pa_stream_write (playback->pulseStream(), rsmpl_out, nbSample*sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
 
-                    // pa_threaded_mainloop_unlock (m);
                     pa_xfree (rsmpl_out);
 
                 } else {
@@ -628,9 +555,7 @@ void PulseLayer::writeToSpeaker (void)
 
                     bzero (zeros, writeableSize);
 
-                    // pa_threaded_mainloop_lock (m);
                     pa_stream_write (playback->pulseStream(), zeros, writeableSize, NULL, 0, PA_SEEK_RELATIVE);
-                    // pa_threaded_mainloop_unlock (m);
 
                     pa_xfree (zeros);
 
@@ -651,14 +576,11 @@ void PulseLayer::readFromMic (void)
     const char* data = NULL;
     size_t r;
 
-    // if (record->getStreamState()
-
     int readableSize = pa_stream_readable_size (record->pulseStream());
 
-    // _debug("readableSize: %i", readableSize);
 
     if (pa_stream_peek (record->pulseStream() , (const void**) &data , &r) < 0 || !data) {
-        _debug ("pa_stream_peek() failed: %s" , pa_strerror (pa_context_errno (context)));
+        _warn("Audio: Error capture stream peek failed: %s" , pa_strerror (pa_context_errno (context)));
     }
 
 
@@ -667,13 +589,10 @@ void PulseLayer::readFromMic (void)
         int _mainBufferSampleRate = getMainBuffer()->getInternalSamplingRate();
 
         // test if resampling is required
-
         if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
-
-
             SFLDataFormat* rsmpl_out = (SFLDataFormat*) pa_xmalloc (readableSize);
-            // _debug("Byte read: %i", r);
+
             int nbSample = r / sizeof (SFLDataFormat);
 
             int nb_sample_up = nbSample;
@@ -699,10 +618,9 @@ void PulseLayer::readFromMic (void)
     }
 
     if (pa_stream_drop (record->pulseStream()) < 0) {
-        //_debug("pa_stream_drop() failed: %s" , pa_strerror( pa_context_errno( context) ));
+        _warn("Audio: Error: capture stream drop failed: %s" , pa_strerror( pa_context_errno( context) ));
     }
 
-    // pa_threaded_mainloop_unlock (m);
 }
 
 static void retrieve_server_info (pa_context *c UNUSED, const pa_server_info *i, void *userdata UNUSED)
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h
index eb25240831..a8248b56be 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.h
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h
@@ -1,6 +1,7 @@
 /*
  *  Copyright (C) 2008 Savoir-Faire Linux inc.
  *  Author: Emmanuel Milou <emmanuel.milou@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
@@ -41,6 +42,8 @@ class PulseLayer : public AudioLayer {
     PulseLayer(ManagerImpl* manager);
     ~PulseLayer(void);
 
+    void openLayer( void );
+    
     bool closeLayer( void );
 
     /**
-- 
GitLab


From 8a58427d15fcb7a83a70607e2db5ef990da22711 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 26 Feb 2010 11:21:11 -0500
Subject: [PATCH 082/160] [#2647] Start zrtp engin when receiving rtp packet
 only

There is a mechanism in libzrtpcpp that start the library as soon as RTP packet are received.
Using this mechanism (i.e. not calling zrtpStart() when initializing the library) fix the issue.
---
 sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp
index cdd2a11821..5b6b67101f 100644
--- a/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp
@@ -38,7 +38,7 @@ AudioZrtpSession::AudioZrtpSession (ManagerImpl * manager, SIPCall * sipcall, co
 {
     _debug ("AudioZrtpSession initialized");
     initializeZid();
-    startZrtp();
+    // startZrtp();
 }
 
 void AudioZrtpSession::initializeZid (void)
-- 
GitLab


From ac817c55b801fee8cf6a43e77b3e3c77614ae040 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 26 Feb 2010 11:22:54 -0500
Subject: [PATCH 083/160] [#2926] Code cleanup

---
 .../audio/audiortp/ZrtpSessionCallback.cpp    | 18 +++---
 .../src/plug-in/audiorecorder/audiorecord.cpp | 58 +++++++++----------
 2 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
index da38f1e0a2..f866b39e00 100644
--- a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
+++ b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
@@ -44,7 +44,7 @@ ZrtpSessionCallback::ZrtpSessionCallback (SIPCall *sipcall) :
         return;
     }
 
-    _debug ("Initialize callbacks");
+    _info("Zrtp: Initialize callbacks");
 
     /**
      * Information Map
@@ -114,31 +114,33 @@ ZrtpSessionCallback::ZrtpSessionCallback (SIPCall *sipcall) :
 void
 ZrtpSessionCallback::secureOn (std::string cipher)
 {
-    _debug ("Secure mode is on with cipher %s", cipher.c_str());
+    _debug ("Zrtp: Secure mode is on with cipher %s", cipher.c_str());
     DBusManager::instance().getCallManager()->secureZrtpOn (_sipcall->getCallId(), cipher);
 }
 
 void
 ZrtpSessionCallback::secureOff (void)
 {
-    _debug ("Secure mode is off");
+    _debug ("Zrtp: Secure mode is off");
     DBusManager::instance().getCallManager()->secureZrtpOff (_sipcall->getCallId());
 }
 
 void
 ZrtpSessionCallback::showSAS (std::string sas, bool verified)
 {
-    _debug ("SAS is: %s", sas.c_str());
+    _debug ("Zrtp: SAS is: %s", sas.c_str());
     DBusManager::instance().getCallManager()->showSAS (_sipcall->getCallId(), sas, verified);
 }
 
+
 void
 ZrtpSessionCallback::zrtpNotSuppOther()
 {
-    _debug ("Callee does not support ZRTP");
+    _debug ("Zrtp: Callee does not support ZRTP");
     DBusManager::instance().getCallManager()->zrtpNotSuppOther (_sipcall->getCallId());
 }
 
+
 void
 ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t subCode)
 {
@@ -192,9 +194,9 @@ ZrtpSessionCallback::zrtpNegotiationFailed (MessageSeverity severity, int subCod
     if (severity == ZrtpError) {
         if (subCode < 0) {  // received an error packet from peer
             subCode *= -1;
-            _debug ("Received error packet: ");
+            _debug ("Zrtp: Received error packet: ");
         } else {
-            _debug ("Sent error packet: ");
+            _debug ("Zrtp: Sent error packet: ");
         }
 
         msg = _zrtpMap[subCode];
@@ -213,7 +215,7 @@ ZrtpSessionCallback::zrtpNegotiationFailed (MessageSeverity severity, int subCod
 void
 ZrtpSessionCallback::confirmGoClear()
 {
-    _debug ("Received go clear message. Until confirmation, ZRTP won't send any data");
+    _debug ("Zrtp: Received go clear message. Until confirmation, ZRTP won't send any data");
     DBusManager::instance().getCallManager()->zrtpNotSuppOther (_sipcall->getCallId());
 }
 
diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp b/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
index c5bbfa81d1..f9c7478eee 100644
--- a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
+++ b/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
@@ -109,8 +109,7 @@ void AudioRecord::initFileName (std::string peerNumber)
 void AudioRecord::openFile()
 {
 
-
-    _debug ("AudioRecord: Open file()");
+    _info ("AudioRecord: Open file()");
 
     bool result = false;
 
@@ -165,7 +164,7 @@ bool AudioRecord::isOpenFile()
 
 bool AudioRecord::isFileExist()
 {
-    _debug ("AudioRecord: Try to open name : %s ", fileName_);
+    _info ("AudioRecord: Try to open name : %s ", fileName_);
 
     if (fopen (fileName_,"rb") ==0) {
         return true;
@@ -189,12 +188,12 @@ bool AudioRecord::setRecording()
 
     if (isOpenFile()) {
       if (!recordingEnabled_) {
-	  _debug ("AudioRecording: Start recording");
+	  _info ("AudioRecording: Start recording");
 	  recordingEnabled_ = true;
       }
       else {
 	  recordingEnabled_ = false;
-	  _debug ("AudioRecording: Stop recording");
+	  _info ("AudioRecording: Stop recording");
       }
     } 
     else {
@@ -210,7 +209,7 @@ bool AudioRecord::setRecording()
 
 void AudioRecord::stopRecording()
 {
-    _debug ("AudioRecording: Stop recording");
+    _info ("AudioRecording: Stop recording");
 
     if (recordingEnabled_)
         recordingEnabled_ = false;
@@ -267,7 +266,7 @@ void AudioRecord::createFilename()
     // fileName_ = out.str();
     strncpy (fileName_, out.str().c_str(), 8192);
 
-    printf ("AudioRecord: create filename for this call %s ", fileName_);
+    _info("AudioRecord: create filename for this call %s ", fileName_);
 }
 
 bool AudioRecord::setRawFile()
@@ -276,7 +275,7 @@ bool AudioRecord::setRawFile()
     fp = fopen (savePath_.c_str(), "wb");
 
     if (!fp) {
-        _debug ("AudioRecord::setRawFile() : could not create RAW file!");
+        _warn ("AudioRecord::setRawFile() : could not create RAW file!");
         return false;
     }
 
@@ -325,7 +324,7 @@ bool AudioRecord::setWavFile()
 
 
     if (fwrite (&hdr, 4, 11, fp) != 11) {
-        _debug ("AudioRecord: Error: could not write WAV header for file. ");
+        _warn("AudioRecord: Error: could not write WAV header for file. ");
         return false;
     }
 
@@ -350,42 +349,41 @@ bool AudioRecord::openExistingRawFile()
 
 bool AudioRecord::openExistingWavFile()
 {
-    _debug ("AudioRecord::openExistingWavFile() ");
+    _info ("AudioRecord: Open existing wave file");
 
     fp = fopen (fileName_, "rb+");
 
     if (!fp) {
-        _debug ("AudioRecord::openExistingWavFile() : could not open WAV file rb+!");
+        _warn("AudioRecord: Error: could not open WAV file!");
         return false;
     }
 
     printf ("AudioRecord::openExistingWavFile()::Tried to open %s ",fileName_);
 
     if (fseek (fp, 40, SEEK_SET) != 0) // jump to data length
-        _debug ("AudioRecord::OpenExistingWavFile: 1.Couldn't seek offset 40 in the file ");
+        _warn ("AudioRecord: Error: Couldn't seek offset 40 in the file ");
 
     if (fread (&byteCounter_, 4, 1, fp))
-        _debug ("AudioRecord::OpenExistingWavFile : bytecounter Read successfully ");
+        _warn("AudioRecord: Error: bytecounter Read successfully ");
 
     if (fseek (fp, 0 , SEEK_END) != 0)
-        _debug ("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file ");
+        _warn ("AudioRecord: Error: Couldn't seek at the en of the file ");
 
-    printf ("AudioRecord::OpenExistingWavFile : Byte counter after oppening : %d ", (int) byteCounter_);
 
     if (fclose (fp) != 0)
-        _debug ("AudioRecord::openExistingWavFile()::ERROR: can't close file r+ ");
+        _warn ("AudioRecord: Error: Can't close file r+ ");
 
 
 
     fp = fopen (fileName_, "ab+");
 
     if (!fp) {
-        _debug ("AudioRecord::openExistingWavFile() : could not createopen WAV file ab+!");
+        _warn ("AudioRecord: Error: Could not createopen WAV file ab+!");
         return false;
     }
 
     if (fseek (fp, 4 , SEEK_END) != 0)
-        _debug ("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file ");
+        _warn ("AudioRecord: Error: Couldn't seek at the en of the file ");
 
     return true;
 
@@ -395,7 +393,7 @@ bool AudioRecord::openExistingWavFile()
 void AudioRecord::closeWavFile()
 {
     if (fp == 0) {
-        _debug ("AudioRecord:: Can't closeWavFile, a file has not yet been opened!");
+        _debug ("AudioRecord: Can't closeWavFile, a file has not yet been opened!");
         return;
     }
 
@@ -403,27 +401,27 @@ void AudioRecord::closeWavFile()
     SINT32 bytes = byteCounter_ * channels_;
 
     fseek (fp, 40, SEEK_SET); // jump to data length
-
-    if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 40");
+    if (ferror (fp)) 
+        _warn ("AudioRecord: Error: can't reach offset 40 while closing");
 
     fwrite (&bytes, sizeof (SINT32), 1, fp);
-
-    if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't write bytes for data length ");
+    if (ferror (fp)) 
+        _warn ("AudioRecord: Error: can't write bytes for data length ");
 
 
     bytes = byteCounter_ * channels_ + 44; // + 44 for the wave header
 
     fseek (fp, 4, SEEK_SET); // jump to file size
-
-    if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4");
+    if (ferror (fp)) 
+        _warn ("AudioRecord: Error: can't reach offset 4");
 
     fwrite (&bytes, 4, 1, fp);
-
-    if (ferror (fp)) perror ("AudioRecord::closeWavFile()::ERROR: can't reach offset 4");
+    if (ferror (fp)) 
+        _warn("AudioRecord: Error: can't reach offset 4");
 
 
     if (fclose (fp) != 0)
-        _debug ("AudioRecord: Error: can't close file");
+        _warn ("AudioRecord: Error: can't close file");
 
 
 }
@@ -473,7 +471,7 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples)
 
         if (sndFormat_ == INT16) {   // TODO change INT16 to SINT16
             if (fwrite (buffer, sizeof (SFLDataFormat), nSamples, fp) != (unsigned int) nSamples)
-                _debug ("AudioRecord: Could not record data! ");
+                _warn ("AudioRecord: Could not record data! ");
             else {
                 fflush (fp);
                 byteCounter_ += (unsigned long) (nSamples*sizeof (SFLDataFormat));
@@ -503,7 +501,7 @@ void AudioRecord::recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int
 
 
                 if (fwrite (&mixBuffer_[k], 2, 1, fp) != 1)
-                    _debug ("AudioRecord: Could not record data!");
+                    _warn ("AudioRecord: Could not record data!");
                 else {
                     fflush (fp);
                 }
-- 
GitLab


From 372a7cc19d2cb4d2a2347e8925dc99857ffd1dc2 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 26 Feb 2010 11:24:16 -0500
Subject: [PATCH 084/160] [#2647] Fix SAS display problem

missing break in switch...
---
 sflphone-client-gnome/src/contacts/calltree.c | 77 ++++++-------------
 1 file changed, 22 insertions(+), 55 deletions(-)

diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c
index c4d7f25f6d..af03022d30 100644
--- a/sflphone-client-gnome/src/contacts/calltree.c
+++ b/sflphone-client-gnome/src/contacts/calltree.c
@@ -376,33 +376,26 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch
 
 	    if(g_strcmp0("", c->_peer_name) == 0) {
 	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>",
-						      display_number, 
-						      c->_peer_name);
+						      display_number, c->_peer_name);
 	    }
 	    else {
 	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>",
-						      c->_peer_name,
-						      display_number);
+						      c->_peer_name, display_number);
 	    }
 
 	}
 	else {
 	    if(g_strcmp0("", c->_peer_name) == 0) {
 	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>",
-						      display_number,
-						      c->_peer_name,
-						      c->_state_code_description,
-						      c->_state_code);
+						      display_number, c->_peer_name,
+						      c->_state_code_description, c->_state_code);
 	    }
 	    else {
 	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>%s (%d)</i>",
-						      c->_peer_name,
-						      display_number,
-						      c->_state_code_description,
-						      c->_state_code);
+						      c->_peer_name, display_number,
+						      c->_state_code_description, c->_state_code);
 	    }
 	}
-
 	break;
 
 
@@ -412,17 +405,12 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch
 
         if(g_strcmp0("",c->_peer_name) == 0){
 	    description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>Transfert to:%s</i> ",
-						  display_number,
-						  c->_peer_name,
-						  c->_trsft_to);
+						  display_number, c->_peer_name, c->_trsft_to);
 	}
 	else {
 	    description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>Transfert to:%s</i> ",
-						  c->_peer_name,
-						  display_number,
-						  c->_trsft_to);
-	}
-	
+						  c->_peer_name, display_number, c->_trsft_to);
+	}	
 	break;
 
 
@@ -435,31 +423,23 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch
 	    if (c->_state_code) {
 
 	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>  <i>%s</i>",
-						      display_number,
-						      c->_peer_name,
-						      c->_state_code_description,
-						      c->_state_code,
+						      display_number, c->_peer_name,
+						      c->_state_code_description, c->_state_code,
 						      audio_codec);
 	    } else {
 	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s</i>",
-						      display_number,
-						      c->_peer_name,
-						      audio_codec);
+						      display_number, c->_peer_name, audio_codec);
 	    }
 	}
 	else {
 	    if (c->_state_code) {
 	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>%s (%d)</i>  <i>%s</i>",
-						      c->_peer_name,
-						      display_number,
-						      c->_state_code_description,
-						      c->_state_code,
+						      c->_peer_name, display_number, 
+						      c->_state_code_description, c->_state_code,
 						      audio_codec);
 	    } else {
 	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>%s</i>",
-						      c->_peer_name,
-						      display_number,
-						      audio_codec);
+						      c->_peer_name, display_number, audio_codec);
 	    }
 	}
 	break;
@@ -468,35 +448,27 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch
 
         DEBUG("display a call with sas");
 
-        if(g_strcmp0("",c->_peer_name) == 0){
+        if(g_strcmp0("", c->_peer_name) == 0){
 	    description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ",
-						  display_number,
-						  c->_peer_name,
-						  c->_sas);
+						  display_number, c->_peer_name, c->_sas);
 	}
 	else {
-
 	  description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ",
-						c->_peer_name,
-						display_number,
-						c->_sas);
+						c->_peer_name, display_number, c->_sas);
 	}
+	break;
 
     case DISPLAY_TYPE_HISTORY :
 
         DEBUG("display history entry");
 
         if(g_strcmp0("", c->_peer_name) == 0) {
-
 	    description = g_markup_printf_escaped("<b>%s</b><i>%s</i>",
-			display_number,
-			c->_peer_name);
+						  display_number, c->_peer_name);
 	}
 	else {
-
 	  description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>",
-			c->_peer_name,
-			display_number);
+						c->_peer_name, display_number);
 	}
 	break;
 
@@ -764,11 +736,8 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 	    else {
 
 	        if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_ZRTP_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) {
-
 		    calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description);
-				  
 		} else {
-
 		    calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description);		    
 		}
 	    }
@@ -839,9 +808,7 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 		}
 	
 	    }
-
-	    if(tab == history) {
-
+	    else if(tab == history) {
 	        switch(c->_history_state) {
 		case INCOMING:
 		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/incoming.svg", NULL);
-- 
GitLab


From 0a99b395a9552c9398d3fee63d1c28e344022153 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Fri, 26 Feb 2010 12:41:42 -0500
Subject: [PATCH 085/160] [#2916] Updated eclipse files

---
 .cproject                                     | 318 ------
 sflphone-client-gnome/.cproject               | 407 +++++++-
 sflphone-client-gnome/.project                |   4 +-
 .../.settings/org.eclipse.cdt.core.prefs      |   6 +-
 sflphone-common/.cproject                     | 934 ++++++++++++++++++
 .project => sflphone-common/.project          |  12 +-
 6 files changed, 1351 insertions(+), 330 deletions(-)
 delete mode 100644 .cproject
 create mode 100644 sflphone-common/.cproject
 rename .project => sflphone-common/.project (91%)

diff --git a/.cproject b/.cproject
deleted file mode 100644
index 173198bb74..0000000000
--- a/.cproject
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?>
-
-<cproject>
-<storageModule moduleId="org.eclipse.cdt.core.settings">
-<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.2028848925">
-<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.2028848925" moduleId="org.eclipse.cdt.core.settings" name="Linux GCC">
-<externalSettings/>
-<extensions>
-<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-</extensions>
-</storageModule>
-<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-<configuration artifactName="sflphone" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.2028848925" name="Linux GCC" parent="org.eclipse.cdt.build.core.emptycfg">
-<folderInfo id="cdt.managedbuild.toolchain.gnu.base.2028848925.1702545013" name="/" resourcePath="">
-<toolChain id="cdt.managedbuild.toolchain.gnu.base.2089599304" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
-<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1774974985" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
-<builder id="cdt.managedbuild.target.gnu.builder.base.466829147" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
-<tool id="cdt.managedbuild.tool.gnu.archiver.base.740005240" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.63410449" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
-<option id="gnu.cpp.compiler.option.include.paths.1295746905" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/list"/>
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/string"/>
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/map"/>
-</option>
-<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1521967404" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.260142907" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
-<option id="gnu.c.compiler.option.include.paths.1990006641" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/list"/>
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/string"/>
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/map"/>
-</option>
-<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.124347870" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.c.linker.base.457097362" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
-<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1227214045" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
-<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.890036182" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
-<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-<additionalInput kind="additionalinput" paths="$(LIBS)"/>
-</inputType>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.assembler.base.157782839" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
-<option id="gnu.both.asm.option.include.paths.1462205363" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/list"/>
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/string"/>
-<listOptionValue builtIn="false" value="/usr/include/c++/4.3/map"/>
-</option>
-<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1762206279" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-</tool>
-</toolChain>
-</folderInfo>
-<sourceEntries>
-<entry excluding="sflphone-gtk" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
-</sourceEntries>
-</configuration>
-</storageModule>
-<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
-<storageModule moduleId="scannerConfiguration">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.2028848925;cdt.managedbuild.toolchain.gnu.base.2028848925.1702545013;cdt.managedbuild.tool.gnu.cpp.compiler.base.63410449;cdt.managedbuild.tool.gnu.cpp.compiler.input.1521967404">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-</scannerConfigBuildInfo>
-<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.2028848925;cdt.managedbuild.toolchain.gnu.base.2028848925.1702545013;cdt.managedbuild.tool.gnu.c.compiler.base.260142907;cdt.managedbuild.tool.gnu.c.compiler.input.124347870">
-<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="makefileGenerator">
-<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<scannerInfoProvider id="specsFile">
-<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-</scannerConfigBuildInfo>
-</storageModule>
-</cconfiguration>
-</storageModule>
-<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-<project id="sflphone.null.1186992360" name="sflphone"/>
-</storageModule>
-</cproject>
diff --git a/sflphone-client-gnome/.cproject b/sflphone-client-gnome/.cproject
index c737a8d2a3..4bd6c53fcc 100644
--- a/sflphone-client-gnome/.cproject
+++ b/sflphone-client-gnome/.cproject
@@ -4,7 +4,7 @@
 <cproject>
 <storageModule moduleId="org.eclipse.cdt.core.settings">
 <cconfiguration id="cdt.managedbuild.toolchain.gnu.base.666814495">
-<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.666814495" moduleId="org.eclipse.cdt.core.settings" name="Linux GCC">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.666814495" moduleId="org.eclipse.cdt.core.settings" name="Release">
 <externalSettings/>
 <extensions>
 <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
@@ -15,20 +15,21 @@
 </extensions>
 </storageModule>
 <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-<configuration artifactName="sflphone-gtk" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.666814495" name="Linux GCC" parent="org.eclipse.cdt.build.core.emptycfg">
+<configuration artifactName="sflphone-gtk" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.666814495" name="Release" parent="org.eclipse.cdt.build.core.emptycfg">
 <folderInfo id="cdt.managedbuild.toolchain.gnu.base.666814495.1839755914" name="/" resourcePath="">
 <toolChain id="cdt.managedbuild.toolchain.gnu.base.1195789621" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
 <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.1493285969" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
-<builder id="cdt.managedbuild.target.gnu.builder.base.421214348" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
+<builder id="cdt.managedbuild.target.gnu.builder.base.421214348" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="-1" superClass="cdt.managedbuild.target.gnu.builder.base"/>
 <tool id="cdt.managedbuild.tool.gnu.archiver.base.1558364998" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
 <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.731757910" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
 <tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1299938473" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
 <option id="gnu.c.compiler.option.include.paths.1303328171" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/sflphone-gtk}&quot;"/>
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/sflphone-gtk/src}&quot;"/>
 <listOptionValue builtIn="false" value="/usr/include/gtk-2.0"/>
 <listOptionValue builtIn="false" value="/usr/include/glib-2.0"/>
 <listOptionValue builtIn="false" value="/usr/include/dbus-1.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnome-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnomeui-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include"/>
 </option>
 <option id="gnu.c.compiler.option.preprocessor.def.symbols.1676995808" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
 <listOptionValue builtIn="false" value="&quot;ICONS_DIR=&quot;/usr/share/sflphone\&quot;"/>
@@ -38,6 +39,14 @@
 <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1938301835" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 </tool>
 <tool id="cdt.managedbuild.tool.gnu.c.linker.base.981882139" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base">
+<option id="gnu.c.link.option.paths.137448498" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
+<listOptionValue builtIn="false" value="/usr/include/gtk-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/glib-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/dbus-1.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnome-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnomeui-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnome-2.0/libgnome"/>
+</option>
 <inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1274984809" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
 <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
 <additionalInput kind="additionalinput" paths="$(LIBS)"/>
@@ -57,6 +66,7 @@
 <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
 
 
+<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
 <storageModule moduleId="scannerConfiguration">
 <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
 <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
@@ -139,6 +149,393 @@
 <parser enabled="true"/>
 </scannerInfoProvider>
 </profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1995189473;cdt.managedbuild.config.gnu.exe.debug.1995189473.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.44474984;cdt.managedbuild.tool.gnu.c.compiler.input.1565605211">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.666814495;cdt.managedbuild.toolchain.gnu.base.666814495.1839755914;cdt.managedbuild.tool.gnu.c.compiler.base.1299938473;cdt.managedbuild.tool.gnu.c.compiler.input.1938301835">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+</cconfiguration>
+<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1995189473">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1995189473" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="sflphone-client-gnome" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1995189473" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1995189473." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1423428378" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.285066138" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+<builder id="cdt.managedbuild.target.gnu.builder.exe.debug.100968868" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="-1" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+<tool id="cdt.managedbuild.tool.gnu.archiver.base.417731669" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.187669799" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1648950260" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.1642920658" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.44474984" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.228151721" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.exe.debug.option.debugging.level.676359726" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+<option id="gnu.c.compiler.option.include.paths.1167204962" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="/usr/include"/>
+<listOptionValue builtIn="false" value="/usr/include/glib-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/gtk-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/dbus-1.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnome-2.0"/>
+<listOptionValue builtIn="false" value="/usr/include/libgnomeui-2.0"/>
+</option>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1565605211" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1289604635" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug">
+<option id="gnu.c.link.option.paths.1262921055" name="Library search path (-L)" superClass="gnu.c.link.option.paths"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.861769146" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.172868928" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug"/>
+<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.210816158" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1667826927" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+</toolChain>
+</folderInfo>
+</configuration>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1995189473;cdt.managedbuild.config.gnu.exe.debug.1995189473.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.44474984;cdt.managedbuild.tool.gnu.c.compiler.input.1565605211">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
 <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.666814495;cdt.managedbuild.toolchain.gnu.base.666814495.1839755914;cdt.managedbuild.tool.gnu.c.compiler.base.1299938473;cdt.managedbuild.tool.gnu.c.compiler.input.1938301835">
 <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
 <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
diff --git a/sflphone-client-gnome/.project b/sflphone-client-gnome/.project
index 8c74f4d116..10b183e3bf 100644
--- a/sflphone-client-gnome/.project
+++ b/sflphone-client-gnome/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>sflphone-gtk</name>
+	<name>sflphone-client-gnome</name>
 	<comment></comment>
 	<projects>
 	</projects>
@@ -23,7 +23,7 @@
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.buildArguments</key>
-					<value></value>
+					<value>-j</value>
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.buildCommand</key>
diff --git a/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs b/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs
index 923efa5204..7c854e89f1 100644
--- a/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs
+++ b/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs
@@ -1,4 +1,4 @@
-#Thu Mar 26 14:05:05 EDT 2009
+#Tue Feb 23 14:32:32 EST 2010
 eclipse.preferences.version=1
 org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
@@ -67,6 +67,7 @@ org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initial
 org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
 org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
@@ -87,6 +88,7 @@ org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initia
 org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
@@ -119,6 +121,7 @@ org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=inser
 org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
@@ -134,6 +137,7 @@ org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not inser
 org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
 org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
+org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
 org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
 org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
 org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
diff --git a/sflphone-common/.cproject b/sflphone-common/.cproject
new file mode 100644
index 0000000000..0a0ee533da
--- /dev/null
+++ b/sflphone-common/.cproject
@@ -0,0 +1,934 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1334434668">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1334434668" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="sflphone-common" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1334434668" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1334434668." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1440064034" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1326164352" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
+<builder buildPath="${workspace_loc:/sflphone-common}" id="cdt.managedbuild.target.gnu.builder.exe.debug.943929430" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="-1" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
+<tool id="cdt.managedbuild.tool.gnu.archiver.base.346381185" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.27143558" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.921724511" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.1752614994" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.548320150" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.8935091" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
+<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1442755176" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.exe.debug.option.debugging.level.768478086" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1769752022" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1740382896" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1001572120" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2023620584" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1753020190" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.384585975" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+</toolChain>
+</folderInfo>
+</configuration>
+</storageModule>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1334434668;cdt.managedbuild.config.gnu.exe.debug.1334434668.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.8935091;cdt.managedbuild.tool.gnu.c.compiler.input.1769752022">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.418162094;cdt.managedbuild.config.gnu.exe.release.418162094.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1870258177;cdt.managedbuild.tool.gnu.c.compiler.input.186132729">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.418162094;cdt.managedbuild.config.gnu.exe.release.418162094.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.270168324;cdt.managedbuild.tool.gnu.cpp.compiler.input.758787020">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1334434668;cdt.managedbuild.config.gnu.exe.debug.1334434668.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.27143558;cdt.managedbuild.tool.gnu.cpp.compiler.input.548320150">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+</cconfiguration>
+<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.418162094">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.418162094" moduleId="org.eclipse.cdt.core.settings" name="Release">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="sflphone-common" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.418162094" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
+<folderInfo id="cdt.managedbuild.config.gnu.exe.release.418162094." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1224261522" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1551176649" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
+<builder buildPath="${workspace_loc:/sflphone-common}" id="cdt.managedbuild.target.gnu.builder.exe.release.821405347" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="-1" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
+<tool id="cdt.managedbuild.tool.gnu.archiver.base.808688542" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.270168324" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+<option id="gnu.cpp.compiler.exe.release.option.optimization.level.324641683" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.exe.release.option.debugging.level.1322686559" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.758787020" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1870258177" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
+<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.1967167078" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.exe.release.option.debugging.level.1326539031" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.186132729" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1339934122" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.1247653269" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2024163167" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.779475213" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1675601061" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+</toolChain>
+</folderInfo>
+</configuration>
+</storageModule>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1334434668;cdt.managedbuild.config.gnu.exe.debug.1334434668.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.8935091;cdt.managedbuild.tool.gnu.c.compiler.input.1769752022">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.418162094;cdt.managedbuild.config.gnu.exe.release.418162094.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1870258177;cdt.managedbuild.tool.gnu.c.compiler.input.186132729">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.418162094;cdt.managedbuild.config.gnu.exe.release.418162094.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.270168324;cdt.managedbuild.tool.gnu.cpp.compiler.input.758787020">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1334434668;cdt.managedbuild.config.gnu.exe.debug.1334434668.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.27143558;cdt.managedbuild.tool.gnu.cpp.compiler.input.548320150">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+</cconfiguration>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<project id="sflphone-common.cdt.managedbuild.target.gnu.exe.246189308" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
+</storageModule>
+</cproject>
diff --git a/.project b/sflphone-common/.project
similarity index 91%
rename from .project
rename to sflphone-common/.project
index f9b0815459..889ad35fbb 100644
--- a/.project
+++ b/sflphone-common/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>sflphone</name>
+	<name>sflphone-common</name>
 	<comment></comment>
 	<projects>
 	</projects>
@@ -23,12 +23,16 @@
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.buildArguments</key>
-					<value></value>
+					<value>-j</value>
 				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.buildCommand</key>
 					<value>make</value>
 				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildLocation</key>
+					<value>${workspace_loc:/sflphone-common}</value>
+				</dictionary>
 				<dictionary>
 					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
 					<value>clean</value>
@@ -70,9 +74,9 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
 		<nature>org.eclipse.cdt.core.ccnature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
 	</natures>
 </projectDescription>
-- 
GitLab


From f2e3ae1654ed064a08fe63f3cd8b3c08be185ce7 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 26 Feb 2010 12:48:49 -0500
Subject: [PATCH 086/160] [#2598] Protect record and playback pointers in stop
 audio streams

---
 sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index e0aca6a3fb..7a1664ec90 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -58,7 +58,7 @@ static void stream_moved_callback(pa_stream *s UNUSED, void *userdata UNUSED)
 static void playback_underflow_callback (pa_stream* s,  void* userdata UNUSED)
 {
     _debug ("Audio: Buffer Underflow");
-
+    pa_stream_trigger (s, NULL, NULL);
 }
 
 
@@ -292,7 +292,6 @@ bool PulseLayer::disconnectAudioStream (void)
     _info("Audio: Disconnect audio stream");
 
     closePlaybackStream();
-
     closeCaptureStream();
 
     if (!playback && !record)
@@ -305,7 +304,6 @@ bool PulseLayer::disconnectAudioStream (void)
 void PulseLayer::closeCaptureStream (void)
 {
     if (record) {
-
         delete record;
         record=NULL;
     }
@@ -315,7 +313,6 @@ void PulseLayer::closeCaptureStream (void)
 void PulseLayer::closePlaybackStream (void)
 {
     if (playback) {
-
         delete playback;
         playback=NULL;
     }
@@ -360,8 +357,11 @@ PulseLayer::stopStream (void)
 {
 
 	_info("Audio: Stop audio stream");
-	pa_stream_flush (playback->pulseStream(), NULL, NULL);
-	pa_stream_flush (record->pulseStream(), NULL, NULL);
+	if(playback)
+	    pa_stream_flush (playback->pulseStream(), NULL, NULL);
+
+	if(record)
+	    pa_stream_flush (record->pulseStream(), NULL, NULL);
 
 	disconnectAudioStream();
 }
-- 
GitLab


From 7589ddf4be9cd45cc96f37ef563fe2659e9762b1 Mon Sep 17 00:00:00 2001
From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com>
Date: Fri, 26 Feb 2010 16:04:55 -0500
Subject: [PATCH 087/160] [#2579] doc: fix manual docbook markup so it
 validates properly

It inserts 'TODO' paragraphs several places, since sections cannot be
empty.
---
 sflphone-client-gnome/doc/C/sflphone.xml | 90 +++++++++++++-----------
 1 file changed, 47 insertions(+), 43 deletions(-)

diff --git a/sflphone-client-gnome/doc/C/sflphone.xml b/sflphone-client-gnome/doc/C/sflphone.xml
index 64861bea86..744f08a897 100644
--- a/sflphone-client-gnome/doc/C/sflphone.xml
+++ b/sflphone-client-gnome/doc/C/sflphone.xml
@@ -239,7 +239,7 @@
 			<title>Registration</title>
 				<para>You may set the expires header for a contact.</para>
 				<para>It basically represents the duration your registration will remain active. If you don't register again within that time, calls will no longer be routed to you. It should not be used as a keepalive mechanism though. The default value is 600 seconds (ten minutes).</para>
-				<note>Some VoIP services requires that you set this value at at least 1600 seconds (e.g. the French VoIP server freephonie.net).
+				<note><para>Some VoIP services requires that you set this value at at least 1600 seconds (e.g. the French VoIP server freephonie.net).</para>
 				</note>
 		</sect3>
 		<sect3 id="accounts_stun">
@@ -258,11 +258,11 @@
 						<term><guilabel>Set published address and port</guilabel></term>
 						<listitem>
 						<itemizedlist>
-							<listitem>Using STUN
+							<listitem><para>Using STUN</para>
 							<para>If enabled, the core will try to initialize an UDP transport on the mapped address/port number that the NAT (Network Address Translator) has allocated to <application>SFLphone</application>.</para></listitem>
-							<listitem>Same as local parameters
+							<listitem><para>Same as local parameters</para>
 							</listitem>
-							<listitem>Manually
+							<listitem><para>Manually</para>
 							</listitem>
 						</itemizedlist>
 						</listitem>
@@ -304,7 +304,7 @@
 
 	<para>The following features are available with both SIP and IAX2 accounts.</para>
 
-	<sect2 label="Dialing a number">
+	<sect2><title>Dialing a number</title>
 	<!-- ==== Figure ==== -->
         <figure id="dial-fig">
             <title>Dial button</title>
@@ -333,11 +333,11 @@
         </figure>
         <!-- ==== End of Figure ==== -->
 
-		<para>Keyboard shortcut to perform this action: <accel>NUMPAD</accel> or almost any keys.</para>	
+		<para>Keyboard shortcut to perform this action: <guimenuitem><accel>NUMPAD</accel></guimenuitem> or almost any keys.</para>	
 
 	</sect2>
 	
-	<sect2 label="Calling a number">
+	<sect2><title>Calling a number</title>
 
 	<!-- ==== Figure ==== -->
         <figure id="call-fig">
@@ -352,11 +352,11 @@
         </figure>
         <!-- ==== End of Figure ==== -->
 
-		<para>Keyboard shortcut to perform this action: <accel>Enter</accel>.</para>	
+		<para>Keyboard shortcut to perform this action: <guimenuitem><accel>Enter</accel></guimenuitem>.</para>	
 
 	</sect2>
 
-	<sect2 label="Answering a call">
+	<sect2><title>Answering a call</title>
 	<!-- ==== Figure ==== -->
         <figure id="answer-fig">
             <title>Answer button</title>
@@ -370,10 +370,10 @@
         </figure>
         <!-- ==== End of Figure ==== -->
 
-		<para>Keyboard shortcut to perform this action: <accel>Enter</accel>.</para>	
+		<para>Keyboard shortcut to perform this action: <guimenuitem><accel>Enter</accel></guimenuitem>.</para>	
 	</sect2>
 
-	<sect2 label="Hanging up a call">
+	<sect2><title>Hanging up a call</title>
 	<!-- ==== Figure ==== -->
         <figure id="hangup-fig">
             <title>Hangup button</title>
@@ -387,10 +387,10 @@
         </figure>
         <!-- ==== End of Figure ==== -->
 
-		<para>Keyboard shortcut to perform this action: <accel>ESC</accel>.</para>	
+		<para>Keyboard shortcut to perform this action: <guimenuitem><accel>ESC</accel></guimenuitem>.</para>	
 	</sect2>
 
-	<sect2 label="Refusing a call">
+	<sect2><title>Refusing a call</title>
 
 	<para>When you refuse a call, your caller is automatically redirected to your voicemail box, if applicable.</para>
 
@@ -407,11 +407,11 @@
         </figure>
         <!-- ==== End of Figure ==== -->
 
-		<para>Keyboard shortcut to perform this action: <accel>ESC</accel>.</para>	
+		<para>Keyboard shortcut to perform this action: <guimenuitem><accel>ESC</accel></guimenuitem>.</para>	
     </sect2>
 
 
-	<sect2 label="Holding on/off a call">
+	<sect2><title>Holding on/off a call</title>
 		<!-- ==== Figure ==== -->
         <figure id="holdon-fig">
             <title>Hold on button</title>
@@ -438,7 +438,7 @@
         <!-- ==== End of Figure ==== -->
 	</sect2>
 
-	<sect2 label="Transfering a call">
+	<sect2><title>Transfering a call</title>
 	<!-- ==== Figure ==== -->
         <figure id="transfer-fig">
             <title>Transfer button</title>
@@ -466,11 +466,11 @@
         </figure>
         <!-- ==== End of Figure ==== -->
 
-	<para>And press <accel>Enter</accel>. Clicking again on the transfer button cancels the transfer.</para>
+	<para>And press <guimenuitem><accel>Enter</accel></guimenuitem>. Clicking again on the transfer button cancels the transfer.</para>
 
 	</sect2>
 
-	<sect2 label="Record a call">
+	<sect2><title>Record a call</title>
 	
 	<para>Go to <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>  <guimenuitem>Audio</guimenuitem></menuchoice> to configure the recordings destination folder.</para>
 
@@ -501,9 +501,9 @@
         <!-- ==== End of Figure ==== -->
     </sect2>
 
-	<sect2 label="Voicemail quick dial">
+	<sect2><title>Voicemail quick dial</title>
 	
-	<caution>This feature is available only if you fill out the voicemail number information for your default account.</caution>
+	<caution><para>This feature is available only if you fill out the voicemail number information for your default account.</para></caution>
 
     <!-- ==== Figure ==== -->
         <figure id="voicemail-fig">
@@ -520,7 +520,7 @@
     </sect2>
 
 
-	<sect2 id="directip" label="Direct IP calls">
+	<sect2 id="directip"><title>Direct IP calls</title>
 		<para>A direct IP call is a call established between two peers without any accounts. When dialing, such a call must prefixed with <guilabel>sip:</guilabel>.</para>
 
 		<para>Direct IP calls use SIP protocol to establish communication and RTP to transport data. It is right now not available with IAX2.</para>
@@ -528,14 +528,14 @@
 		<para>Go to <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>  <guimenuitem>Direct IP calls</guimenuitem></menuchoice> to configure the advanced security features for this kind of calls.</para>
 	</sect2>
 
-	<sect2 id="conferencecall" label="Conference calls">
+	<sect2 id="conferencecall"><title>Conference calls</title>
 	<para>SFLphone now supports conference call hosting
         integrating server like features in a simple GUI.
         </para>
         <para>
           <itemizedlist>
             <listitem>
-              <guilabel>Create a conference</guilabel>
+	      <para><guilabel>Create a conference</guilabel></para>
               <para>To host a conference, simply drag and drop one call
             on another. Additional participants are
             added the same way, dragging a call on the
@@ -567,7 +567,7 @@
                <!-- ==== End of Figure ==== -->
             </listitem>
             <listitem>
-              <guilabel>Leave a conference</guilabel>
+	      <para><guilabel>Leave a conference</guilabel></para>
               <para>
             SFLphone conference model let you leave a conference that
             you are currently hosting to answer any other incoming
@@ -601,7 +601,7 @@
                <!-- ==== End of Figure ==== -->
             </listitem>
             <listitem>
-              <guilabel>Multiple conference</guilabel>
+	      <para><guilabel>Multiple conference</guilabel></para>
               <para>
             SFLphone supports multiple conferences running
             simultaneously. Two conferences can be joined the same way
@@ -610,7 +610,7 @@
               </para>
             </listitem>
             <listitem>
-              <guilabel>Hangup/Hold a conference</guilabel>
+              <para><guilabel>Hangup/Hold a conference</guilabel></para>
               <para>
             Select the conference icon and press hangup/hold button
             on the toolbar. The selected action is applied on every
@@ -720,10 +720,11 @@
 								</varlistentry>
 							</variablelist>
                 </sect3>
-			</sect2>
-            <sect2 id="accounts_tls">
+		</sect2>
+		<sect2 id="accounts_tls">
                         <title>TLS</title>
-            </sect2>
+			<para>TODO</para>
+		</sect2>
 </sect1>
 
 
@@ -734,12 +735,12 @@
 		ALSA and PulseAudio native interfaces are available.
 	</para> 
 
-    <sect2 label="Pulseaudio">
+    <sect2><title>Pulseaudio</title>
         <para>
         </para>
     </sect2>
 
-    <sect2 label="ALSA">
+    <sect2><title>ALSA</title>
         <para>
         </para>
     </sect2>
@@ -751,27 +752,27 @@
         <para>
           <itemizedlist>
             <listitem>
-              <guilabel>PCMU/PCMA</guilabel>
+              <para><guilabel>PCMU/PCMA</guilabel></para>
                 <para>
 		  ITU-T telephony standard PCM formats, 8kHz, 64
 		  kbit/s, using logarithmic byte compression algorithm.
                 </para>
             </listitem>
             <listitem>
-              <guilabel>GSM</guilabel>
+              <para><guilabel>GSM</guilabel></para>
               <para>
 		Global System for Mobile communications (GSM)
 		narrowband 8kHz standard based on linear prediction encoding.
               </para>
             </listitem>
             <listitem>
-              <guilabel>G722</guilabel>
+              <para><guilabel>G722</guilabel></para>
               <para>
 		ITU-T standard wideband 16kHz standard based on linear prediction.
               </para>
             </listitem>
             <listitem>
-              <guilabel>SPEEX</guilabel>
+              <para><guilabel>SPEEX</guilabel></para>
               <para>
 		High quality voice encoding/decoding available
 		in narrowband 8kHz, wideband 16kHz (HD Voice), 
@@ -781,7 +782,7 @@
               </para>
             </listitem>
             <listitem>
-              <guilabel>CELT</guilabel>
+              <para><guilabel>CELT</guilabel></para>
               <para>
 		
               </para>
@@ -827,9 +828,9 @@
 				<listitem><para>
 					You may use one or all of these following information from your contact.</para>
 					<itemizedlist>
-						<listitem>Work phone number</listitem>
-						<listitem>Home phone number</listitem>
-						<listitem>Mobile phone number</listitem>
+						<listitem><para>Work phone number</para></listitem>
+						<listitem><para>Home phone number</para></listitem>
+						<listitem><para>Mobile phone number</para></listitem>
 					</itemizedlist>
 				</listitem>
 			</varlistentry>
@@ -876,7 +877,7 @@
 	<sect2>
 		<title>General</title>
 		<para>This section provides the user general settings regarding the application.</para>
-		<sect3 label="Desktop Notifications">
+		<sect3><title>Desktop Notifications</title>
 			<!-- ==== Figure ==== -->
         <figure id="desktop-notif-settings-fig">
             <title>Desktop notifications options</title>
@@ -931,7 +932,7 @@
 			</variablelist>
 		</sect3>
 
-		<sect3 label="System Tray Icon">
+		<sect3><title>System Tray Icon</title>
 			<!-- ==== Figure ==== -->
         <figure id="systemtray-settings-fig">
             <title>System tray options</title>
@@ -971,7 +972,7 @@
 		</sect3>
 
 
-		<sect3 label="Calls history">
+		<sect3><title>Calls history</title>
 			    <!-- ==== Figure ==== -->
         	<figure id="callshistory-settings-fig">
             	<title>Calls history options</title>
@@ -995,7 +996,7 @@
 			</variablelist>
 		</sect3>
 
-		<sect3 label="Configuration File">
+		<sect3><title>Configuration File</title>
 			   <!-- ==== Figure ==== -->
             <figure id="configfile-settings-fig">
                 <title>Configuration file options</title>
@@ -1024,6 +1025,7 @@
 
 	<sect2>
 		<title>Audio</title>
+		<para>TODO</para>
 	</sect2>
 
 	<sect2>
@@ -1034,10 +1036,12 @@
 
 	<sect2>
 		<title>Hooks</title>	
+		<para>TODO</para>
 	</sect2>
 
 	<sect2>
 		<title>Network</title>	
+		<para>TODO</para>
 	</sect2>
 
 	<sect2>
-- 
GitLab


From fdd614d055b2de32169ae67611dda668b26f645e Mon Sep 17 00:00:00 2001
From: Jonas Fonseca <jonas.fonseca@savoirfairelinux.com>
Date: Fri, 26 Feb 2010 16:39:42 -0500
Subject: [PATCH 088/160] (#2579) doc: correct URLs to the development site

---
 sflphone-client-gnome/README                          | 2 +-
 sflphone-client-gnome/man/sflphone-client-gnome.pod   | 2 +-
 sflphone-client-kde/README                            | 2 +-
 sflphone-client-kde/man/sflphone-client-kde.1.docbook | 2 +-
 sflphone-client-kde/man/sflphone-client-kde.pod       | 2 +-
 sflphone-common/man/sflphoned.pod                     | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/sflphone-client-gnome/README b/sflphone-client-gnome/README
index 368bd98433..cdba125509 100644
--- a/sflphone-client-gnome/README
+++ b/sflphone-client-gnome/README
@@ -1,5 +1,5 @@
 Welcome to SFLphone!
 
-Refer to the development site for further information: http://dev.savoirfairelinux.net/sflphone
+Refer to the development site for further information: https://projects.savoirfairelinux.com/projects/show/sflphone
 
 Thank you
diff --git a/sflphone-client-gnome/man/sflphone-client-gnome.pod b/sflphone-client-gnome/man/sflphone-client-gnome.pod
index eb27a15f4c..0880fd1634 100644
--- a/sflphone-client-gnome/man/sflphone-client-gnome.pod
+++ b/sflphone-client-gnome/man/sflphone-client-gnome.pod
@@ -14,7 +14,7 @@ B<sflphone-client-gnome> is a GTK+ client for SFLphone; it communicates with the
 
 =head1 BUGS
 
-Please report bugs  at http://dev.savoirfairelinux.net/sflphone/newticket.
+Please report bugs at https://projects.savoirfairelinux.com/projects/sflphone/issues/new.
 
 =head1 AUTHORS
 
diff --git a/sflphone-client-kde/README b/sflphone-client-kde/README
index 3db5b30eed..12f57ce7bb 100644
--- a/sflphone-client-kde/README
+++ b/sflphone-client-kde/README
@@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 
-Refer to the development site for further information: http://dev.savoirfairelinux.net/sflphone
+Refer to the development site for further information: https://projects.savoirfairelinux.com/projects/show/sflphone
 
 
 Thank you
diff --git a/sflphone-client-kde/man/sflphone-client-kde.1.docbook b/sflphone-client-kde/man/sflphone-client-kde.1.docbook
index c676275b81..ff0fa5ca50 100644
--- a/sflphone-client-kde/man/sflphone-client-kde.1.docbook
+++ b/sflphone-client-kde/man/sflphone-client-kde.1.docbook
@@ -44,7 +44,7 @@ sflphone-client-kde is a KDE client for SFLphone; it communicates with the core
 
 <refsect1>
 <title>Bugs</title>
-<para>Please report bugs  at http://dev.savoirfairelinux.net/sflphone/newticket.</para>
+<para>Please report bugs at https://projects.savoirfairelinux.com/projects/sflphone/issues/new.</para>
 </refsect1>
 
 
diff --git a/sflphone-client-kde/man/sflphone-client-kde.pod b/sflphone-client-kde/man/sflphone-client-kde.pod
index 9aa07b2e59..559160f429 100644
--- a/sflphone-client-kde/man/sflphone-client-kde.pod
+++ b/sflphone-client-kde/man/sflphone-client-kde.pod
@@ -14,7 +14,7 @@ B<sflphone-client-kde> is a KDE client for SFLphone; it communicates with the co
 
 =head1 BUGS
 
-Please report bugs  at http://dev.savoirfairelinux.net/sflphone/newticket.
+Please report bugs at https://projects.savoirfairelinux.com/projects/show/sflphone.
 
 =head1 AUTHORS
 
diff --git a/sflphone-common/man/sflphoned.pod b/sflphone-common/man/sflphoned.pod
index bd1e40a2db..e860f89827 100644
--- a/sflphone-common/man/sflphoned.pod
+++ b/sflphone-common/man/sflphoned.pod
@@ -14,7 +14,7 @@ B<sflphoned> is the core of SFLphone; it communicates with the client side throu
 
 =head1 BUGS
 
-Please report bugs  at http://dev.savoirfairelinux.net/sflphone/newticket.
+Please report bugs at https://projects.savoirfairelinux.com/projects/sflphone/issues/new.
 
 =head1 AUTHORS
 
-- 
GitLab


From c891cd82f93579c5b405dd58c4df1b70de2f6e1e Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 1 Mar 2010 16:52:53 -0500
Subject: [PATCH 089/160] [#2943] Set destination ip address during
 updateDestinationIpAddress

Was previously called in start rtp session too
---
 .../src/audio/audiortp/AudioRtpSession.h      | 111 +++++++++---------
 1 file changed, 56 insertions(+), 55 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index 29057bec3e..b6d4908445 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -67,10 +67,10 @@ namespace sfl {
             
             int startRtpThread();
 
-	    /**
-	     * Used mostly when receiving a reinvite
-	     */
-	    void updateDestinationIpAddress(void);
+            /**
+             * Used mostly when receiving a reinvite
+             */
+            void updateDestinationIpAddress(void);
 
         private:
         
@@ -104,15 +104,16 @@ namespace sfl {
             // start() with no semaphore at all. 
             ost::Semaphore * _mainloopSemaphore;
 
-	    // Main destination address for this rtp session.
-	    // Stored in case or reINVITE, which may require to forget 
-	    // this destination and update a new one.
-	    ost::InetHostAddress _remote_ip;
+            // Main destination address for this rtp session.
+            // Stored in case or reINVITE, which may require to forget
+            // this destination and update a new one.
+            ost::InetHostAddress _remote_ip;
+
 
-	    // Main destination port for this rtp session.
-	    // Stored in case reINVITE, which may require to forget
-	    // this destination and update a new one
-	    unsigned short _remote_port;
+            // Main destination port for this rtp session.
+            // Stored in case reINVITE, which may require to forget
+            // this destination and update a new one
+            unsigned short _remote_port;
                      
             AudioCodec * _audiocodec;
             
@@ -163,23 +164,23 @@ namespace sfl {
              */
              ManagerImpl * _manager;
 
-	     /**
-	      * Sampling rate of audio converter
-	      */
-	     int _converterSamplingRate;
+             /**
+              * Sampling rate of audio converter
+              */
+             int _converterSamplingRate;
 
-	     /**
-	      * Timestamp for this session
-	      */
-	     int _timestamp;
+             /**
+              * Timestamp for this session
+              */
+             int _timestamp;
 
-	     /**
-	      * Time counter used to trigger incoming call notification
-	      */
-	     int _countNotificationTime;
+             /**
+              * Time counter used to trigger incoming call notification
+              */
+             int _countNotificationTime;
             
         protected:
-            SIPCall * _ca;
+             SIPCall * _ca;
             
     };    
     
@@ -208,7 +209,7 @@ namespace sfl {
 
         assert(_ca);
         
-        _debug ("Local audio port %i will be used", _ca->getLocalAudioPort());
+        _info ("Rtp: Local audio port %i will be used", _ca->getLocalAudioPort());
 
         //mic, we receive from soundcard in stereo, and we send encoded
         _audiolayer = _manager->getAudioDriver();
@@ -223,7 +224,7 @@ namespace sfl {
     template <typename D>
     AudioRtpSession<D>::~AudioRtpSession()
     {
-        _debug ("Delete AudioRtpSession instance");
+        _debug ("Rtp: Delete AudioRtpSession instance");
 
         try {
             terminate();
@@ -232,9 +233,7 @@ namespace sfl {
             throw;
         }
 
-	_debug("Unbind audio RTP stream for call id %s", _ca->getCallId().c_str());
-	// _audiolayer->getMainBuffer()->unBindAll(_ca->getCallId());
-	_manager->getAudioDriver()->getMainBuffer()->unBindAll(_ca->getCallId());
+        _manager->getAudioDriver()->getMainBuffer()->unBindAll(_ca->getCallId());
 
         delete [] _micData;
         delete [] _micDataConverted;
@@ -243,22 +242,21 @@ namespace sfl {
         delete [] _spkrDataConverted;
         delete _time;
         delete _converter;
-        _debug ("AudioRtpSession instance deleted");
     }
     
     template <typename D>
     void AudioRtpSession<D>::initBuffers() 
     {
-	// Set sampling rate, main buffer choose the highest one
-	// _audiolayer->getMainBuffer()->setInternalSamplingRate(_codecSampleRate);
+    	// Set sampling rate, main buffer choose the highest one
+    	// _audiolayer->getMainBuffer()->setInternalSamplingRate(_codecSampleRate);
         _manager->getAudioDriver()->getMainBuffer()->setInternalSamplingRate(_codecSampleRate);
 
-	// may be different than one already setted
-	// converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
-	_converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+        // may be different than one already setted
+        // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
+        _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
-	// initialize SampleRate converter using AudioLayer's sampling rate
-	// (internal buffers initialized with maximal sampling rate and frame size)
+        // initialize SampleRate converter using AudioLayer's sampling rate
+        // (internal buffers initialized with maximal sampling rate and frame size)
         _converter = new SamplerateConverter(_layerSampleRate, _layerFrameSize);
 
         int nbSamplesMax = (int)(_codecSampleRate * _layerFrameSize /1000)*2;
@@ -268,7 +266,7 @@ namespace sfl {
         _spkrDataConverted = new SFLDataFormat[nbSamplesMax];
         _spkrDataDecoded = new SFLDataFormat[nbSamplesMax];
 
-	_manager->addStream(_ca->getCallId());
+        _manager->addStream(_ca->getCallId());
     }
     
     template <typename D>
@@ -288,8 +286,8 @@ namespace sfl {
     {
         assert(_ca);
 
-	AudioCodecType pl = (AudioCodecType)_ca->getLocalSDP()->get_session_media()->getPayload();
-	_audiocodec = _manager->getCodecDescriptorMap().instantiateCodec(pl);
+        AudioCodecType pl = (AudioCodecType)_ca->getLocalSDP()->get_session_media()->getPayload();
+        _audiocodec = _manager->getCodecDescriptorMap().instantiateCodec(pl);
 
         if (_audiocodec == NULL) {
             _debug ("No audiocodec, can't init RTP media");
@@ -318,26 +316,29 @@ namespace sfl {
     void AudioRtpSession<D>::setDestinationIpAddress(void)
     {
         if (_ca == NULL) {
-            _debug ("Sipcall is gone.");
+            _warn ("Rtp: Sipcall is gone.");
             throw AudioRtpSessionException();
         }
         
-        _debug ("Setting IP address for the RTP session");
+        _info ("RTP: Setting IP address for the RTP session");
 
-	// Store remote ip in case we would need to forget current destination
+        // Store remote ip in case we would need to forget current destination
         _remote_ip = ost::InetHostAddress(_ca->getLocalSDP()->get_remote_ip().c_str());
-        _debug ("Init audio RTP session: remote ip %s", _ca->getLocalSDP()->get_remote_ip().data());
 
         if (!_remote_ip) {
-            _debug ("Target IP address [%s] is not correct!", _ca->getLocalSDP()->get_remote_ip().data());
+            _warn("Rtp: Target IP address (%s) is not correct!", 
+						_ca->getLocalSDP()->get_remote_ip().data());
             return;
         }
 
-	// Store remote port in case we would need to forget current destination
-	_remote_port = (unsigned short) _ca->getLocalSDP()->get_remote_audio_port();
+        // Store remote port in case we would need to forget current destination
+        _remote_port = (unsigned short) _ca->getLocalSDP()->get_remote_audio_port();
+
+        _info("RTP: New remote address for session: %s:%d",
+        _ca->getLocalSDP()->get_remote_ip().data(), _remote_port);
 
         if (! static_cast<D*>(this)->addDestination (_remote_ip, _remote_port)) {
-            _debug ("Can't add destination to session!");
+            _warn("Rtp: Can't add new destination to session!");
             return;
         }
     }
@@ -346,12 +347,13 @@ namespace sfl {
     void AudioRtpSession<D>::updateDestinationIpAddress(void)
     {
         // Destination address are stored in a list in ccrtp
-        // This method clear off this entry
-        _debug("updateDestinationIpAddress: remove destination %s", _ca->getLocalSDP()->get_remote_ip().c_str());
-        static_cast<D*>(this)->forgetDestination(_remote_ip, _remote_port);
+        // This method remove the current destination entry
+
+        if(!static_cast<D*>(this)->forgetDestination(_remote_ip, _remote_port, _remote_port+1))
+        	_warn("Rtp: Could not remove previous destination");
 
-	// new destination is stored in call
-	// we just need to recall this method
+        // new destination is stored in call
+        // we just need to recall this method
         setDestinationIpAddress();
     }
     
@@ -534,7 +536,6 @@ namespace sfl {
     {
 
         setSessionTimeouts();
-        setDestinationIpAddress();
         setSessionMedia();
 
 	initBuffers();
-- 
GitLab


From 25369192ac7f861a101efa084c213b4077c984d4 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 1 Mar 2010 16:54:43 -0500
Subject: [PATCH 090/160] [#2926] Code Cleanup

---
 .../src/audio/audiortp/AudioRtpFactory.cpp    | 28 ++++++-------
 .../src/audio/audiortp/AudioRtpFactory.h      | 42 +++++++++----------
 .../src/audio/audiortp/AudioZrtpSession.cpp   |  1 -
 .../src/audio/audiortp/AudioZrtpSession.h     |  4 +-
 .../audio/audiortp/ZrtpSessionCallback.cpp    |  7 ++--
 sflphone-common/src/sip/sdp.cpp               | 11 ++---
 6 files changed, 44 insertions(+), 49 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
index e532515d60..646aa89b95 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
@@ -125,14 +125,14 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca)
 void AudioRtpFactory::start (void)
 {
     if (_rtpSession == NULL) {
-        throw AudioRtpFactoryException ("_rtpSession was null when trying to start audio thread");
+        throw AudioRtpFactoryException ("RTP: Error: _rtpSession was null when trying to start audio thread");
     }
 
     switch (_rtpSessionType) {
 
         case Sdes:
 	    if (static_cast<AudioSrtpSession *> (_rtpSession)->startRtpThread() != 0) {
-                throw AudioRtpFactoryException ("Failed to start AudioSRtpSession thread");
+                throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioSRtpSession thread");
             }
 	    break;
 
@@ -140,7 +140,7 @@ void AudioRtpFactory::start (void)
             _debug ("Starting symmetric rtp thread");
 
             if (static_cast<AudioSymmetricRtpSession *> (_rtpSession)->startRtpThread() != 0) {
-                throw AudioRtpFactoryException ("Failed to start AudioSymmetricRtpSession thread");
+                throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioSymmetricRtpSession thread");
             }
 
             break;
@@ -148,9 +148,8 @@ void AudioRtpFactory::start (void)
         case Zrtp:
 
             if (static_cast<AudioZrtpSession *> (_rtpSession)->startRtpThread() != 0) {
-                throw AudioRtpFactoryException ("Failed to start AudioZrtpSession thread");
+                throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioZrtpSession thread");
             }
-
             break;
     }
 }
@@ -158,10 +157,10 @@ void AudioRtpFactory::start (void)
 void AudioRtpFactory::stop (void)
 {
     ost::MutexLock mutex (_audioRtpThreadMutex);
-    _debug ("Stopping audio rtp session");
+    _info("RTP: Stopping audio rtp session");
 
     if (_rtpSession == NULL) {
-        _debugException ("_rtpSession is null when trying to stop. Returning.");
+        _debugException ("RTP: Error: _rtpSession is null when trying to stop. Returning.");
         return;
     }
 
@@ -183,16 +182,16 @@ void AudioRtpFactory::stop (void)
 
         _rtpSession = NULL;
     } catch (...) {
-        _debugException ("Exception caught when stopping the audio rtp session");
-        throw AudioRtpFactoryException("caught exception in AudioRtpFactory::stop");
+        _debugException ("RTP: Error: Exception caught when stopping the audio rtp session");
+        throw AudioRtpFactoryException("RTP: Error: caught exception in AudioRtpFactory::stop");
     }
 }
 
 void AudioRtpFactory::updateDestinationIpAddress (void)
 {
-    _debug ("Updating IP address");
+    _info ("RTP: Updating IP address");
     if (_rtpSession == NULL) {
-        throw AudioRtpFactoryException ("_rtpSession was null when trying to update IP address");
+        throw AudioRtpFactoryException ("RTP: Error: _rtpSession was null when trying to update IP address");
     }
 
     switch (_rtpSessionType) {
@@ -216,19 +215,20 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession()
     if ( (_rtpSessionType == Zrtp) && (_rtpSessionType != NULL)) {
         return static_cast<AudioZrtpSession *> (_rtpSession);
     } else {
-        throw AudioRtpFactoryException("_rtpSession is NULL in getAudioZrtpSession");
+        throw AudioRtpFactoryException("RTP: Error: _rtpSession is NULL in getAudioZrtpSession");
     }
 }
 
-  void AudioRtpFactory::setRemoteCryptoInfo(sfl::SdesNegotiator& nego)
+void AudioRtpFactory::setRemoteCryptoInfo(sfl::SdesNegotiator& nego)
 {
     if ( _rtpSession && _rtpSessionType && (_rtpSessionType == Sdes)) {
         static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(nego);
     }
     else {
-        throw AudioRtpFactoryException("_rtpSession is NULL in setRemoteCryptoInfo");
+        throw AudioRtpFactoryException("RTP: Error: _rtpSession is NULL in setRemoteCryptoInfo");
     }
 }
+
 }
 
 
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
index cfa14165f1..0076c968c8 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
@@ -63,27 +63,27 @@ namespace sfl {
 
 	void initAudioRtpConfig(SIPCall *ca);
 
-        /**
-         * Lazy instantiation method. Create a new RTP session of a given 
-         * type according to the content of the configuration file. 
-         * @param ca A pointer on a SIP call
-         * @return A new AudioRtpSession object
-         */
-        void initAudioRtpSession(SIPCall *ca);
-        
-        /**
-         * Start the audio rtp thread of the type specified in the configuration
-         * file. initAudioRtpSession must have been called prior to that.
-         * @param None
-         */
-        void start();
-     
-         /**
-         * Stop the audio rtp thread of the type specified in the configuration
-         * file. initAudioRtpSession must have been called prior to that.
-         * @param None
-         */
-        void stop();
+	/**
+	 * 	Lazy instantiation method. Create a new RTP session of a given
+	 * type according to the content of the configuration file.
+	 * @param ca A pointer on a SIP call
+	 * @return A new AudioRtpSession object
+	 */
+	void initAudioRtpSession(SIPCall *ca);
+
+	/**
+	 * Start the audio rtp thread of the type specified in the configuration
+	 * file. initAudioRtpSession must have been called prior to that.
+	 * @param None
+	 */
+	void start();
+
+	/**
+	 * Stop the audio rtp thread of the type specified in the configuration
+	 * file. initAudioRtpSession must have been called prior to that.
+	 * @param None
+	 */
+	void stop();
 
 	/**
          * Update current RTP destination address with one stored in call 
diff --git a/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp
index 5b6b67101f..cb82fe29e2 100644
--- a/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioZrtpSession.cpp
@@ -38,7 +38,6 @@ AudioZrtpSession::AudioZrtpSession (ManagerImpl * manager, SIPCall * sipcall, co
 {
     _debug ("AudioZrtpSession initialized");
     initializeZid();
-    // startZrtp();
 }
 
 void AudioZrtpSession::initializeZid (void)
diff --git a/sflphone-common/src/audio/audiortp/AudioZrtpSession.h b/sflphone-common/src/audio/audiortp/AudioZrtpSession.h
index 2e41e04b45..138bd26847 100644
--- a/sflphone-common/src/audio/audiortp/AudioZrtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioZrtpSession.h
@@ -38,8 +38,8 @@ namespace sfl {
     class AudioZrtpSession : public ost::SymmetricZRTPSession, public AudioRtpSession<AudioZrtpSession> 
     {
         public:
-        AudioZrtpSession(ManagerImpl * manager, SIPCall * sipcall, const std::string& zidFilename);          
-            
+			AudioZrtpSession(ManagerImpl * manager, SIPCall * sipcall, const std::string& zidFilename);
+
         private:
             void initializeZid(void);
             std::string _zidFilename;
diff --git a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
index f866b39e00..145792e0bc 100644
--- a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
+++ b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
@@ -150,7 +150,6 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub
         msg = _infoMap[subCode];
 
         if (msg != NULL) {
-            _debug ("ZRTP Debug:");
         }
     }
 
@@ -158,7 +157,6 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub
         msg = _warningMap[subCode];
 
         if (msg != NULL) {
-            _debug ("ZRTP Debug:");
         }
     }
 
@@ -166,10 +164,11 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub
         msg = _severeMap[subCode];
 
         if (msg != NULL) {
-            _debug ("ZRTP Debug:");
         }
     }
 
+
+
     if (sev == ZrtpError) {
         if (subCode < 0) {  // received an error packet from peer
             subCode *= -1;
@@ -181,7 +180,7 @@ ZrtpSessionCallback::showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t sub
         msg = _zrtpMap[subCode];
 
         if (msg != NULL) {
-            _debug ("ZRTP Debug: %s", msg->c_str());
+
         }
     }
 }
diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index ba4e856b30..886dc1430f 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -489,9 +489,6 @@ void Sdp::set_negotiated_sdp (const pjmedia_sdp_session *sdp)
 
             pjmedia_sdp_attr_to_rtpmap (_pool, attribute, &rtpmap);
 
-            // _debug("================== set_negociated_offer ===================== %i", pj_strtoul(&rtpmap->pt));
-            // _debug("================== set_negociated_offer ===================== %s", current->desc.fmt[j].ptr);
-            // _debug("================== set_negociated_offer ===================== %i", atoi(current->desc.fmt[j].ptr));
             iter = codecs_list.find ( (AudioCodecType) pj_strtoul (&rtpmap->pt));
 
             if (iter==codecs_list.end())
@@ -627,7 +624,7 @@ void Sdp::set_remote_ip_from_sdp (const pjmedia_sdp_session *r_sdp)
 {
 
     std::string remote_ip (r_sdp->conn->addr.ptr, r_sdp->conn->addr.slen);
-    _debug ("            Remote IP from fetching SDP: %s", remote_ip.c_str());
+    _info ("SDP: Remote IP from fetching SDP: %s",  remote_ip.c_str());
     this->set_remote_ip (remote_ip);
 }
 
@@ -637,21 +634,21 @@ void Sdp::set_remote_audio_port_from_sdp (pjmedia_sdp_media *r_media)
     int remote_port;
 
     remote_port = r_media->desc.port;
-    _debug ("            Remote Audio Port from fetching SDP: %d", remote_port);
+    _info ("SDP: Remote Audio Port from fetching SDP: %d", remote_port);
     this->set_remote_audio_port (remote_port);
 }
 
 void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *remote_sdp)
 {
 
-    _debug ("Fetching media from sdp");
+    _info ("SDP: Fetching media from sdp");
 
     pjmedia_sdp_media *r_media;
 
     this->get_remote_sdp_media_from_offer (remote_sdp, &r_media);
 
     if (r_media==NULL) {
-        _debug ("SDP Failure: no remote sdp media found in the remote offer");
+        _warn ("SDP: Error: no remote sdp media found in the remote offer");
         return;
     }
 
-- 
GitLab


From c5d48c278aa9862a3ad3e3327798ac318ea7d15d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 1 Mar 2010 16:59:02 -0500
Subject: [PATCH 091/160] [#2926] Cleanup

---
 sflphone-common/src/sip/sipvoiplink.cpp | 45 +++++++++++++------------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 9e25418377..5c5bed5941 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1020,7 +1020,7 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction)
     local_sdp = call->getLocalSDP()->get_local_sdp_session();
 
     if (local_sdp == NULL) {
-        _debug ("! SIP Failure: unable to find local_sdp");
+        _debug ("SIP: Error: unable to find local sdp");
         return !PJ_SUCCESS;
     }
 
@@ -3142,7 +3142,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
 // This callback is called after SDP offer/answer session has completed.
 void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 {
-    _debug ("UserAgent: call_on_media_update");
+    _debug ("UserAgent: Call on media update");
 
     const pjmedia_sdp_session *local_sdp;
     const pjmedia_sdp_session *remote_sdp;
@@ -3153,19 +3153,19 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
     call = reinterpret_cast<SIPCall *> (inv->mod_data[getModId() ]);
 
     if (!call) {
-        _debug ("Call declined by peer, SDP negociation stopped");
+        _debug ("UserAgent: Call declined by peer, SDP negociation stopped");
         return;
     }
 
     link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (AccountNULL));
 
     if (link == NULL) {
-        _debug ("Failed to get sip link");
+        _warn ("UserAgent: Error: Failed to get sip link");
         return;
     }
 
     if (status != PJ_SUCCESS) {
-        _debug ("Error while negotiating the offer");
+        _warn ("UserAgent: Error: while negotiating the offer");
         link->hangup (call->getCallId());
         Manager::instance().callFailure (call->getCallId());
         return;
@@ -3198,39 +3198,39 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
         
     }
 
+
     // Get the crypto attribute containing srtp's cryptographic context (keys, cipher)
     CryptoOffer crypto_offer;
     call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, crypto_offer);
 
-
     bool nego_success = false;
     if(!crypto_offer.empty()) {
 
-        _debug("Crypto attribute in SDP: init Srtp session");
+    	_debug("Crypto attribute in SDP: init Srtp session");
 
-	// init local cryptografic capabilities for negotiation
-	std::vector<sfl::CryptoSuiteDefinition>localCapabilities;
-	for(int i = 0; i < 3; i++) {
-	    localCapabilities.push_back(sfl::CryptoSuites[i]);
-	}
+    	// init local cryptografic capabilities for negotiation
+    	std::vector<sfl::CryptoSuiteDefinition>localCapabilities;
+    	for(int i = 0; i < 3; i++) {
+    		localCapabilities.push_back(sfl::CryptoSuites[i]);
+		}
 
-	sfl::SdesNegotiator sdesnego(localCapabilities, crypto_offer);
+		sfl::SdesNegotiator sdesnego(localCapabilities, crypto_offer);
 	
-	if(sdesnego.negotiate()) {
-	    _debug("SDES negociation successfull \n");
-	    nego_success = true;
+		if(sdesnego.negotiate()) {
+			_debug("SDES negociation successfull \n");
+			nego_success = true;
 
             _debug("Set remote cryptographic context\n");
             try {
-		call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
+            	  call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
             }
             catch(...) {}
 
-	    DBusManager::instance().getCallManager()->secureSdesOn (call->getCallId());
-	}
-	else {
-	    DBusManager::instance().getCallManager()->secureSdesOff (call->getCallId());
-	}
+            DBusManager::instance().getCallManager()->secureSdesOn (call->getCallId());
+		}
+		else {
+			DBusManager::instance().getCallManager()->secureSdesOff (call->getCallId());
+		}
     }
 
     // We did not found any crypto context for this media
@@ -3256,6 +3256,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
         _debug("Sdes not initialized for this call\n");
     }
 
+
     try {
         call->setAudioStart (true);
         call->getAudioRtp()->start();
-- 
GitLab


From bcdb30a3480e85f8bd8b1e9e598cf2a83c758f61 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Mon, 1 Mar 2010 17:08:28 -0500
Subject: [PATCH 092/160] [#1640] Do not put a system icon tray as default

---
 .../.settings/org.eclipse.cdt.core.prefs      |    6 +-
 .../.settings/org.eclipse.cdt.ui.prefs        |    4 +-
 .../src/config/preferencesdialog.c            |  666 +-
 .../dbus/configurationmanager-introspec.xml   |    9 +
 sflphone-client-gnome/src/dbus/dbus.c         |   29 +
 sflphone-client-gnome/src/dbus/dbus.h         |    4 +
 sflphone-client-gnome/src/main.c              |   89 +-
 sflphone-client-gnome/src/mainwindow.c        |  669 +-
 sflphone-client-gnome/src/statusicon.c        |  205 +-
 sflphone-client-gnome/src/statusicon.h        |   10 +-
 sflphone-client-gnome/src/uimanager.c         | 2448 ++++---
 .../dbus/configurationmanager-introspec.xml   |    9 +
 .../src/dbus/configurationmanager.cpp         |   10 +
 .../src/dbus/configurationmanager.h           |    3 +
 sflphone-common/src/managerimpl.cpp           | 6356 ++++++++---------
 sflphone-common/src/user_cfg.h                |    2 +
 16 files changed, 5279 insertions(+), 5240 deletions(-)

diff --git a/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs b/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs
index 7c854e89f1..ed89bea144 100644
--- a/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs
+++ b/sflphone-client-gnome/.settings/org.eclipse.cdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Feb 23 14:32:32 EST 2010
+#Fri Feb 26 15:32:40 EST 2010
 eclipse.preferences.version=1
 org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
@@ -124,8 +124,8 @@ org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=insert
+org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
 org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
diff --git a/sflphone-client-gnome/.settings/org.eclipse.cdt.ui.prefs b/sflphone-client-gnome/.settings/org.eclipse.cdt.ui.prefs
index 9281ecd41f..c3a02722d1 100644
--- a/sflphone-client-gnome/.settings/org.eclipse.cdt.ui.prefs
+++ b/sflphone-client-gnome/.settings/org.eclipse.cdt.ui.prefs
@@ -1,4 +1,4 @@
-#Thu Mar 26 14:05:05 EDT 2009
+#Fri Feb 26 15:30:12 EST 2010
 eclipse.preferences.version=1
-formatter_profile=org.eclipse.cdt.ui.default.gnu_profile
+formatter_profile=_GNU - SFLphone
 formatter_settings_version=1
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index c5f6db485d..710ff0f640 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -51,483 +51,273 @@ GtkWidget * history_value;
 
 GtkWidget * status;
 
+GtkWidget *showstatusicon;
+GtkWidget *starthidden;
+GtkWidget *popupwindow;
+GtkWidget *neverpopupwindow;
+
 static int history_limit;
 static gboolean history_enabled = TRUE;
 
-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);
+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);
 }
 
-	static void
-start_hidden( void )
+static void
+start_hidden (void)
 {
-	dbus_start_hidden();
+  dbus_start_hidden ();
 }
 
-static void set_popup_mode (GtkWidget *widget, gpointer *userdata)
+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 ();
+  if (dbus_popup_mode () || gtk_toggle_button_get_active (
+      GTK_TOGGLE_BUTTON (widget)))
+    dbus_switch_popup_mode ();
 }
 
-
-	void
-set_notif_level(  )
+void
+set_notif_level ()
 {
-	dbus_set_notify();
+  dbus_set_notify ();
 }
 
-static void history_limit_cb (GtkSpinButton *button, void *ptr)
+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 history_enabled_cb (GtkWidget *widget)
+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
-	dbus_set_history_enabled ();
+  // Toggle it through D-Bus
+  dbus_set_history_enabled ();
 }
 
-	void
-clean_history( void )
+void
+clean_history (void)
 {
-	calllist_clean_history();
+  calllist_clean_history ();
 }
 
+void showstatusicon_cb (GtkWidget *widget, gpointer data) {
 
-/*
-//static void show_advanced_zrtp_options_cb(GtkWidget *widget UNUSED, gpointer data)
-//{
-//	DEBUG("Advanced options for ZRTP");
-//	show_advanced_zrtp_options((GHashTable *) data);
-//}
-//
-//static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data)
-//{
-//	DEBUG("Advanced options for TLS");
-//	show_advanced_tls_options((GHashTable *) data);
-//}
-//
-//static void key_exchange_changed_cb(GtkWidget *widget, gpointer data)
-//{
-//	DEBUG("Key exchange changed");
-//	if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "ZRTP") == 0) {
-//	    gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
-//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
-//	} 
-//	else if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)), (gchar *) "SDES") == 0) {
-//	    gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-//	    g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
-//	}
-//	else {
-//		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-//		DEBUG("Setting key exchange %s to %s\n", ACCOUNT_KEY_EXCHANGE, KEY_EXCHANGE_NONE);
-//		g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
-//		g_hash_table_replace(directIpCallsProperties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(KEY_EXCHANGE_NONE));
-//	}
-//}
-//
-//static void use_sip_tls_cb(GtkWidget *widget, gpointer data)
-//{
-//	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-//		DEBUG("Using sips");
-//		gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);  
-//		g_hash_table_replace(directIpCallsProperties,
-//				g_strdup(TLS_ENABLE), g_strdup("true"));    	          
-//	} else {
-//		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-//		g_hash_table_replace(directIpCallsProperties,
-//				g_strdup(TLS_ENABLE), g_strdup("false"));             
-//	}   
-//}
-//
-//
-//static void ip2ip_local_address_changed_cb(GtkWidget *widget, gpointer data)
-//{
-//	DEBUG("ip2ip_local_address_changed_cb\n");
-//	g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget))));
-//}
-//
-//static void ip2ip_local_port_changed_cb(GtkWidget *widget, gpointer data)
-//{
-//	DEBUG("ip2ip_local_port_changed_cb\n");
-//	gint new_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget));
-//	DEBUG("new_port %i", new_port);
-//	g_hash_table_replace(directIpCallsProperties,
-//			g_strdup(LOCAL_PORT), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(widget)))));
-//}
-//
-//
-//GtkWidget* create_direct_ip_calls_tab()
-//{
-//	GtkWidget * frame;
-//	GtkWidget * table;
-//	GtkWidget * label;
-//	GtkWidget * explanationLabel;
-//
-//	GtkWidget * localPortLabel;
-//	// GtkWidget * localPortSpinBox;
-//	GtkWidget * localAddressLabel;
-//	// GtkWidget * localAddressCombo;
-//
-//	GtkWidget * keyExchangeCombo;
-//	GtkWidget * advancedZrtpButton;
-//	GtkWidget * useSipTlsCheckBox;  
-//
-//	gchar * curSRTPEnabled = "false";
-//	gchar * curTlsEnabled = "false";    
-//	gchar * curKeyExchange = "0";
-//	gchar * description;
-//
-//	gchar * local_interface;
-//	gchar * local_address;
-//	gchar * local_port;
-//
-//	//directIpCallsProperties = sflphone_get_ip2ip_properties();
-//	sflphone_get_ip2ip_properties (&directIpCallsProperties);
-//
-//	if(directIpCallsProperties != NULL) {
-//		DEBUG("got a directIpCallsProperties");
-//		local_interface = g_hash_table_lookup(directIpCallsProperties, LOCAL_INTERFACE);
-//		local_port = g_hash_table_lookup(directIpCallsProperties, LOCAL_PORT);
-//		DEBUG("    local interface = %s", local_interface);
-//		DEBUG("    local port = %s", local_port);
-//		curSRTPEnabled = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_SRTP_ENABLED);
-//		DEBUG("    curSRTPEnabled = %s", curSRTPEnabled);
-//		curKeyExchange = g_hash_table_lookup(directIpCallsProperties, ACCOUNT_KEY_EXCHANGE);
-//		curTlsEnabled = g_hash_table_lookup(directIpCallsProperties, TLS_ENABLE);
-//	}
-//
-//
-//
-//	GtkWidget * vbox = gtk_vbox_new(FALSE, 10);
-//	gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
-//
-//	description = g_markup_printf_escaped(_("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."));
-//	explanationLabel = gtk_label_new(NULL);
-//	gtk_label_set_markup(GTK_LABEL(explanationLabel), description);
-//	gtk_misc_set_alignment(GTK_MISC(explanationLabel), 0, 0.5);    
-//	gtk_box_pack_start(GTK_BOX(vbox), explanationLabel, FALSE, FALSE, 0);
-//
-//	/**
-//	 * Network Interface Section 
-//	 */
-//	gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 3);
-//	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-//	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
-//	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-//	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
-//
-//	/**
-//	 * Retreive the list of IP interface from the 
-//	 * the daemon and build the combo box.
-//	 */
-//
-//	GtkListStore * ipInterfaceListStore; 
-//	GtkTreeIter iter;
-//
-//	ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
-//	localAddressLabel = gtk_label_new_with_mnemonic (_("Local address"));    
-//	gtk_table_attach ( GTK_TABLE( table ), localAddressLabel, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-//	gtk_misc_set_alignment(GTK_MISC (localAddressLabel), 0, 0.5);
-//
-//	GtkTreeIter current_local_address_iter = iter;   
-//	gchar ** iface_list = NULL;
-//	// iface_list = (gchar**) dbus_get_all_ip_interface();
-//	iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
-//	gchar ** iface;
-//
-//	gboolean iface_found = FALSE;
-//
-//	if (iface_list != NULL) {
-//
-//		for (iface = iface_list; *iface; iface++) {         
-//			gtk_list_store_append(ipInterfaceListStore, &iter );
-//			gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
-//
-//			if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
-//				DEBUG("Setting active local address combo box");
-//				current_local_address_iter = iter;
-//				iface_found = TRUE;
-//			}
-//		}
-//
-//		if(!iface_found) {
-//			DEBUG("Did not find local ip address, take fisrt in the list");
-//			gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_address_iter);
-//		}
-//	}
-//
-//
-//
-//
-//	localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
-//	gtk_label_set_mnemonic_widget(GTK_LABEL(localAddressLabel), localAddressCombo);
-//	gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-//	g_object_unref(G_OBJECT(ipInterfaceListStore));	
-//
-//	GtkCellRenderer * ipInterfaceCellRenderer;
-//	ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
-//	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
-//	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
-//	gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_address_iter);
-//	g_signal_connect (G_OBJECT(GTK_COMBO_BOX(localAddressCombo)), "changed", G_CALLBACK (ip2ip_local_address_changed_cb), localAddressCombo);
-//
-//	g_hash_table_replace(directIpCallsProperties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
-//
-//
-//	/**
-//	 * Local port
-//	 */	    
-//	/** SIP port information */
-//	localPortLabel = gtk_label_new_with_mnemonic (_("Local port"));
-//	gtk_table_attach_defaults(GTK_TABLE(table), localPortLabel, 0, 1, 1, 2);
-//
-//	gtk_misc_set_alignment(GTK_MISC (localPortLabel), 0, 0.5);
-//	localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-//	gtk_label_set_mnemonic_widget (GTK_LABEL (localPortLabel), localPortSpinBox); 
-//	gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
-//
-//	gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
-//	g_signal_connect (G_OBJECT(localPortSpinBox), "changed", G_CALLBACK (ip2ip_local_port_changed_cb), localPortSpinBox);
-//
-//
-//	GtkWidget *applyModificationButton = gtk_button_new_from_stock(GTK_STOCK_APPLY);
-//	// g_signal_connect( G_OBJECT(applyModificationButton) , "clicked" , G_CALLBACK( update_ip_address_port_cb ), localPortSpinBox);
-//	gtk_table_attach( GTK_TABLE(table), applyModificationButton, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-//
-//
-//	/**
-//	 * Security Section 
-//	 */
-//	gnome_main_section_new_with_table (_("Security"), &frame, &table, 2, 3);
-//	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-//	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
-//	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-//	gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0);
-//
-//	GtkWidget * sipTlsAdvancedButton;
-//	sipTlsAdvancedButton = gtk_button_new_from_stock(GTK_STOCK_EDIT);
-//	gtk_table_attach_defaults(GTK_TABLE(table), sipTlsAdvancedButton, 2, 3, 0, 1);
-//	gtk_widget_set_sensitive(GTK_WIDGET(sipTlsAdvancedButton), FALSE);    
-//	g_signal_connect(G_OBJECT(sipTlsAdvancedButton), "clicked", G_CALLBACK(show_advanced_tls_options_cb), directIpCallsProperties);
-//
-//	useSipTlsCheckBox = gtk_check_button_new_with_mnemonic(_("Use TLS transport (sips)"));
-//	g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK(use_sip_tls_cb), sipTlsAdvancedButton);
-//	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox), (g_strcmp0(curTlsEnabled, "false") == 0) ? FALSE:TRUE);
-//	gtk_table_attach_defaults(GTK_TABLE(table), useSipTlsCheckBox, 0, 2, 0, 1);
-//
-//	label = gtk_label_new_with_mnemonic (_("SRTP key exchange"));
-//	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-//	keyExchangeCombo = gtk_combo_box_new_text();
-//	gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
-//	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP");
-//	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES");
-//	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled"));      
-//
-//	advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
-//	g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), directIpCallsProperties);
-//
-//	if (g_strcasecmp(curKeyExchange, ZRTP) == 0) {
-//	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0);
-//	}
-//	else if(g_strcasecmp(curKeyExchange, SDES) == 0) {
-//	    gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1);
-//	}
-//	else {
-//		gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
-//		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-//	}
-//
-//	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), advancedZrtpButton);
-//
-//	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-//	gtk_table_attach_defaults(GTK_TABLE(table), keyExchangeCombo, 1, 2, 1, 2);    
-//	gtk_table_attach_defaults(GTK_TABLE(table), advancedZrtpButton, 2, 3, 1, 2);
-//
-//	gtk_widget_show_all(table);
-//
-//	GtkRequisition requisition;
-//	gtk_widget_size_request(GTK_WIDGET(table), &requisition);
-//	gtk_widget_set_size_request(GTK_WIDGET(explanationLabel), requisition.width * 1.5, -1);        
-//	gtk_label_set_line_wrap(GTK_LABEL(explanationLabel), TRUE);
-//
-//	gtk_widget_show_all(vbox);
-//
-//	return vbox;
-//}
-//
-
-GtkWidget* create_general_settings () {
-
-	GtkWidget *ret;
-
-	GtkWidget *notifAll;
-
-	GtkWidget *trayItem;
-	GtkWidget *frame;
-	GtkWidget *checkBoxWidget;
-	GtkWidget *label;
-	GtkWidget *table;
-
-	// 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), dbus_get_notify() ); 
-	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, 3, 1);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-	GtkWidget* trayItem1 = gtk_radio_button_new_with_mnemonic(NULL,  _("_Popup main window on incoming call"));
-	g_signal_connect(G_OBJECT (trayItem1), "toggled", G_CALLBACK (set_popup_mode), NULL);
-	gtk_table_attach( GTK_TABLE(table), trayItem1, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-	trayItem = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON(trayItem1), _("Ne_ver popup main window"));
-	gtk_table_attach( GTK_TABLE(table), trayItem, 0, 1, 1, 2, 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 (trayItem1), TRUE) : gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (trayItem), TRUE);
-
-	trayItem = gtk_check_button_new_with_mnemonic(_("Hide SFLphone window on _startup"));
-	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(trayItem), dbus_is_start_hidden() );
-	g_signal_connect(G_OBJECT( trayItem ) , "clicked" , G_CALLBACK( start_hidden ) , NULL);
-	gtk_table_attach( GTK_TABLE(table), trayItem, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-	// 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);
-
-	// Configuration File
-	// Commented out because not functional yet
-	/*
-	   gnome_main_section_new_with_table (_("Configuration File"), &frame, &table, 1, 1);
-	   gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);    
-	   checkBoxWidget = gtk_check_button_new_with_mnemonic(_("Store SIP credentials as MD5 hash"));
-	   gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(checkBoxWidget), dbus_is_md5_credential_hashing() );
-	   g_signal_connect(G_OBJECT( checkBoxWidget ) , "clicked" , G_CALLBACK(set_md5_hash_cb) , NULL);
-	   gtk_table_attach( GTK_TABLE(table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-	 */
-
-	gtk_widget_show_all(ret);
-
-	return ret;
+  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));
+
+  // 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 ();
+
+  // Update through D-Bus
+  dbus_enable_status_icon (currentstatus ? "true" : "false");
 }
 
-void save_configuration_parameters (void) {
 
-	// Address book config
-	addressbook_config_save_parameters ();
-	hooks_save_parameters ();
+GtkWidget*
+create_general_settings ()
+{
+
+  GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table;
+  gboolean statusicon = FALSE;
+
+  // 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), dbus_get_notify ());
+  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);
+
+  if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0)
+      statusicon = TRUE;
+  else
+    statusicon = FALSE;
+
+  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
+  dbus_popup_mode () ? 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 ());
+  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
+save_configuration_parameters (void)
+{
+
+  // 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 history_load_configuration ()
+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_limit = dbus_get_history_limit ();
+  history_enabled = TRUE;
+  if (g_strcasecmp (dbus_get_history_enabled (), "false") == 0)
+    history_enabled = FALSE;
 }
 
 /**
  * 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);
-		
-	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 * 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);
+
+  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));
 }
 
diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index 3361c16dd5..6be7c8b6d3 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -461,6 +461,15 @@
       <arg type="i" name="posY" direction="in"/>
 	</method>
 	
+	<method name="enableStatusIcon">
+      <arg type="s" name="value" direction="in"/>
+	</method>
+		
+	<method name="isStatusIconEnabled">
+      <arg type="s" name="value" direction="out"/>
+	</method>
+	
+	
     <!-- Addressbook configuration -->
     <method name="getAddressbookSettings">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index e4d0f53bfe..d0de1d908e 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -2580,3 +2580,32 @@ void dbus_set_window_position_y (const guint posy) {
     }
 }
 
+
+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 = TRUE;
+
+       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 c8dd014f87..4aa4af643f 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -606,4 +606,8 @@ guint dbus_get_window_position_y (void);
 void dbus_set_window_position_x (const guint posx);
 void dbus_set_window_position_y (const guint posy);
 
+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 fffd9a831b..33911a7cab 100644
--- a/sflphone-client-gnome/src/main.c
+++ b/sflphone-client-gnome/src/main.c
@@ -33,9 +33,9 @@
  * Stop logging engine
  */
 static void
-shutdown_logging()
+shutdown_logging ()
 {
-  if (log4c_fini())
+  if (log4c_fini ())
     {
       ERROR("log4c_fini() failed");
     }
@@ -45,87 +45,88 @@ shutdown_logging()
  * Start loggin engine
  */
 static void
-startup_logging()
+startup_logging ()
 {
-  log4c_init();
-  if (log4c_load(DATA_DIR "/log4crc") == -1)
-    g_warning("Cannot load log4j configuration file : %s",DATA_DIR "/log4crc");
+  log4c_init ();
+  if (log4c_load (DATA_DIR "/log4crc") == -1)
+    g_warning ("Cannot load log4j configuration file : %s", DATA_DIR "/log4crc");
 
-  log4c_sfl_gtk_category = log4c_category_get("org.sflphone.gtk");
+  log4c_sfl_gtk_category = log4c_category_get ("org.sflphone.gtk");
 }
 
 int
-main(int argc, char *argv[])
+main (int argc, char *argv[])
 {
   // Handle logging
   int i;
+  gboolean statusicon = FALSE;
 
   // Startup logging
-  startup_logging();
+  startup_logging ();
 
   // Check arguments if debug mode is activated
   for (i = 0; i < argc; i++)
-    if (g_strcmp0(argv[i], "--debug") == 0)
-      log4c_category_set_priority(log4c_sfl_gtk_category, LOG4C_PRIORITY_DEBUG);
+    if (g_strcmp0 (argv[i], "--debug") == 0)
+      log4c_category_set_priority (log4c_sfl_gtk_category, LOG4C_PRIORITY_DEBUG);
 
   // Start GTK application
 
-  gtk_init(&argc, &argv);
+  gtk_init (&argc, &argv);
 
-  g_print("%s %s\n", PACKAGE, VERSION);
-  g_print("Copyright (c) 2005 2006 2007 2008 2009 Savoir-faire Linux Inc.\n");
-  g_print(
+  g_print ("%s %s\n", PACKAGE, VERSION);
+  g_print ("Copyright (c) 2005 2006 2007 2008 2009 Savoir-faire Linux Inc.\n");
+  g_print (
       "This is free software.  You may redistribute copies of it under the terms of\n\
 the GNU General Public License Version 3 <http://www.gnu.org/licenses/gpl.html>.\n\
 There is NO WARRANTY, to the extent permitted by law.\n\n");
 
   DEBUG("Logging Started");
 
-  srand(time(NULL));
+  srand (time (NULL));
 
   // Internationalization
-  bindtextdomain("sflphone-client-gnome", LOCALEDIR);
-  textdomain("sflphone-client-gnome");
+  bindtextdomain ("sflphone-client-gnome", LOCALEDIR);
+  textdomain ("sflphone-client-gnome");
 
   // Initialises the GNOME libraries
-  gnome_program_init (	"sflphone", VERSION,
-						LIBGNOMEUI_MODULE, argc, argv,
-						GNOME_PROGRAM_STANDARD_PROPERTIES,
-						NULL);
+  gnome_program_init ("sflphone", VERSION, LIBGNOMEUI_MODULE, argc, argv,
+      GNOME_PROGRAM_STANDARD_PROPERTIES,
+						NULL) ;
 
-  if (sflphone_init())
+  if (sflphone_init ())
     {
-#if GTK_CHECK_VERSION(2,10,0)
-      show_status_icon();
-#endif
-      create_main_window();
 
-#if GTK_CHECK_VERSION(2,10,0)
-      if (dbus_is_start_hidden())
+      if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0)
+          statusicon = TRUE;
+
+      if (statusicon)                   show_status_icon ();
+      create_main_window ();
+
+      if (statusicon && dbus_is_start_hidden ())
         {
-          gtk_widget_hide(GTK_WIDGET( get_main_window() ));
-          set_minimized(TRUE);
+          gtk_widget_hide (GTK_WIDGET( get_main_window() ));
+          set_minimized (TRUE);
         }
-#endif
 
-    status_bar_display_account();
 
-    // Load the history
-    sflphone_fill_history ();
+      status_bar_display_account ();
+
+      // Load the history
+      sflphone_fill_history ();
+
+      // Get the active calls and conferences at startup
+      sflphone_fill_call_list ();
+      sflphone_fill_conference_list ();
 
-    // Get the active calls and conferences at startup    
-    sflphone_fill_call_list ();
-    sflphone_fill_conference_list();
+      // Update the GUI
+      update_actions ();
 
-	// Update the GUI
-	update_actions ();
-        
-    /* start the main loop */
-    gtk_main();
+      /* start the main loop */
+      gtk_main ();
     }
 
   // Cleanly stop logging
-  shutdown_logging();
+  shutdown_logging ();
 
   return 0;
 }
diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c
index 6138e7c637..0f34b5df9b 100644
--- a/sflphone-client-gnome/src/mainwindow.c
+++ b/sflphone-client-gnome/src/mainwindow.c
@@ -37,424 +37,475 @@
 /** Local variables */
 GtkUIManager *ui_manager = NULL;
 GtkAccelGroup * accelGroup = NULL;
-GtkWidget * window    = NULL;
-GtkWidget * subvbox   = NULL;
-GtkWidget * vbox   = NULL;
-GtkWidget * dialpad   = NULL;
+GtkWidget * window = NULL;
+GtkWidget * subvbox = NULL;
+GtkWidget * vbox = NULL;
+GtkWidget * dialpad = NULL;
 GtkWidget * speaker_control = NULL;
 GtkWidget * mic_control = NULL;
 GtkWidget * statusBar = NULL;
 GtkWidget * filterEntry = NULL;
 PidginScrollBook *embedded_error_notebook;
 
-static gboolean window_configure_cb (GtkWidget *win, GdkEventConfigure *event) {
+static gboolean
+window_configure_cb (GtkWidget *win, GdkEventConfigure *event)
+{
 
-	int pos_x, pos_y;
+  int pos_x, pos_y;
 
-	dbus_set_window_width ( (guint)event->width);
-	dbus_set_window_height ( (guint)event->height);
+  dbus_set_window_width ((guint) event->width);
+  dbus_set_window_height ((guint) event->height);
 
-	gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y);
-	dbus_set_window_position_x ( (guint)pos_x);
-	dbus_set_window_position_y ( (guint)pos_y);
+  gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y);
+  dbus_set_window_position_x ((guint) pos_x);
+  dbus_set_window_position_y ((guint) pos_y);
 
-	return FALSE;
+  return FALSE;
 }
 
-
 /**
  * Minimize the main window.
  */
-	static gboolean
+static gboolean
 on_delete (GtkWidget * widget UNUSED, gpointer data UNUSED)
 {
-#if GTK_CHECK_VERSION(2,10,0)
-	gtk_widget_hide(GTK_WIDGET( get_main_window() ));
-	set_minimized( TRUE );
-#endif
-	return TRUE;
+
+    if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) {
+        gtk_widget_hide (GTK_WIDGET( get_main_window() ));
+        set_minimized (TRUE);
+    }
+    else {
+      sflphone_quit ();
+    }
+    return TRUE;
 }
 
 /** Ask the user if he wants to hangup current calls */
 gboolean
-main_window_ask_quit(){
-	guint count = calllist_get_size(current_calls);
-	GtkWidget * dialog;
-	gint response;
-	gchar * question;
-
-	if(count == 1)
-	{
-		question = _("There is one call in progress.");
-	}
-	else
-	{
-		question = _("There are calls in progress.");
-	}
-
-	dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window) ,
-			GTK_DIALOG_MODAL,
-			GTK_MESSAGE_QUESTION,
-			GTK_BUTTONS_YES_NO,
-			"%s\n%s",
-			question,
-			_("Do you still want to quit?") );
-
-
-	response = gtk_dialog_run (GTK_DIALOG (dialog));
-
-	gtk_widget_destroy (dialog);
-	if(response == GTK_RESPONSE_YES)
-	{
-		return TRUE;
-	}
-	else if(response == GTK_RESPONSE_NO)
-	{
-		return FALSE;
-	}
-	return TRUE;
-}
+main_window_ask_quit ()
+{
+  guint count = calllist_get_size (current_calls);
+  GtkWidget * dialog;
+  gint response;
+  gchar * question;
 
+  if (count == 1)
+    {
+      question = _("There is one call in progress.");
+    }
+  else
+    {
+      question = _("There are calls in progress.");
+    }
+
+  dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window),
+      GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s\n%s",
+      question, _("Do you still want to quit?") );
 
+  response = gtk_dialog_run (GTK_DIALOG (dialog));
 
-	static gboolean
+  gtk_widget_destroy (dialog);
+  if (response == GTK_RESPONSE_YES)
+    {
+      return TRUE;
+    }
+  else if (response == GTK_RESPONSE_NO)
+    {
+      return FALSE;
+    }
+  return TRUE;
+}
+
+static gboolean
 on_key_released (GtkWidget *widget, GdkEventKey *event, gpointer user_data UNUSED)
 {
-	DEBUG("On key released from Main Window : %s", gtk_widget_get_name(widget));
-
-	if (focus_is_on_searchbar == FALSE) {
-		// If a modifier key is pressed, it's a shortcut, pass along
-		if(event->state & GDK_CONTROL_MASK ||
-				event->state & GDK_MOD1_MASK    ||
-				event->keyval == 60             || // <
-				event->keyval == 62             || // >
-				event->keyval == 34             || // "
-		                event->keyval == 65289          || // tab
-				event->keyval == 65361          || // left arrow
-				event->keyval == 65363          || // right arrow
-				event->keyval >= 65470          || // F-keys
-				event->keyval == 32                // space
-		  )
-			return FALSE;
-		else
-			sflphone_keypad(event->keyval, event->string);        
-	}
-
-	return TRUE;
+  DEBUG("On key released from Main Window : %s", gtk_widget_get_name(widget));
+
+  if (focus_is_on_searchbar == FALSE)
+    {
+      // If a modifier key is pressed, it's a shortcut, pass along
+      if (event->state & GDK_CONTROL_MASK || event->state & GDK_MOD1_MASK
+          || event->keyval == 60 || // <
+          event->keyval == 62 || // >
+          event->keyval == 34 || // "
+          event->keyval == 65289 || // tab
+          event->keyval == 65361 || // left arrow
+          event->keyval == 65363 || // right arrow
+          event->keyval >= 65470 || // F-keys
+          event->keyval == 32 // space
+      )
+        return FALSE;
+      else
+        sflphone_keypad (event->keyval, event->string);
+    }
+
+  return TRUE;
 }
 
 void
-focus_on_mainwindow_out(){
-	//  gtk_widget_grab_focus(GTK_WIDGET(window));
+focus_on_mainwindow_out ()
+{
+  //  gtk_widget_grab_focus(GTK_WIDGET(window));
 
 }
 
 void
-focus_on_mainwindow_in(){
-	//  gtk_widget_grab_focus(GTK_WIDGET(window));
+focus_on_mainwindow_in ()
+{
+  //  gtk_widget_grab_focus(GTK_WIDGET(window));
 }
 
-
-	void
+void
 create_main_window ()
 {
-	GtkWidget *widget;
-	gchar *path;
-	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
-	width = dbus_get_window_width ();
-	height =  dbus_get_window_height ();
-	position_x = dbus_get_window_position_x ();
-	position_y = dbus_get_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), width, height);
-	gtk_window_set_default_icon_from_file (LOGO,
-			NULL);
-	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
-	 * stop the main GTK loop
-	 */
-	g_signal_connect (G_OBJECT (window), "delete-event",
-			G_CALLBACK (on_delete), NULL);
-
-	g_signal_connect (G_OBJECT (window), "key-release-event",
-			G_CALLBACK (on_key_released), NULL);
-
-	g_signal_connect_after (G_OBJECT (window), "focus-in-event",
-			G_CALLBACK (focus_on_mainwindow_in), NULL);
-
-	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");
-
-	ret = uimanager_new (&ui_manager);
-	if (!ret)
+  GtkWidget *widget;
+  gchar *path;
+  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
+  width = dbus_get_window_width ();
+  height = dbus_get_window_height ();
+  position_x = dbus_get_window_position_x ();
+  position_y = dbus_get_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), width, height);
+  gtk_window_set_default_icon_from_file (LOGO, NULL);
+  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
+   * stop the main GTK loop
+   */
+  g_signal_connect (G_OBJECT (window), "delete-event",
+      G_CALLBACK (on_delete), NULL);
+
+  g_signal_connect (G_OBJECT (window), "key-release-event",
+      G_CALLBACK (on_key_released), NULL);
+
+  g_signal_connect_after (G_OBJECT (window), "focus-in-event",
+      G_CALLBACK (focus_on_mainwindow_in), NULL);
+
+  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");
+
+  ret = uimanager_new (&ui_manager);
+  if (!ret)
     {
-		ERROR ("Could not load xml GUI\n");
-        g_error_free (error);
-        exit (1);
+      ERROR ("Could not load xml GUI\n");
+      g_error_free (error);
+      exit (1);
     }
 
-	/* Create an accel group for window's shortcuts */
-	gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group (ui_manager));
+  /* Create an accel group for window's shortcuts */
+  gtk_window_add_accel_group (GTK_WINDOW(window),
+      gtk_ui_manager_get_accel_group (ui_manager));
+
+  vbox = gtk_vbox_new (FALSE /*homogeneous*/, 0 /*spacing*/);
+  subvbox = gtk_vbox_new (FALSE /*homogeneous*/, 5 /*spacing*/);
 
-	vbox = gtk_vbox_new ( FALSE /*homogeneous*/, 0 /*spacing*/);
-	subvbox = gtk_vbox_new ( FALSE /*homogeneous*/, 5 /*spacing*/);
+  create_menus (ui_manager, &widget);
+  gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/,
+      0 /*padding*/);
 
-	create_menus (ui_manager, &widget);
-	gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
+  create_toolbar_actions (ui_manager, &widget);
+  // Do not override GNOME user settings
+  gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/,
+      0 /*padding*/);
 
-	create_toolbar_actions (ui_manager, &widget);
-	// Do not override GNOME user settings
-	gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-	
-	gtk_box_pack_start (GTK_BOX (vbox), current_calls->tree, TRUE /*expand*/, TRUE /*fill*/,  0 /*padding*/);
-	gtk_box_pack_start (GTK_BOX (vbox), history->tree, TRUE /*expand*/, TRUE /*fill*/,  0 /*padding*/);
-	gtk_box_pack_start (GTK_BOX (vbox), contacts->tree, TRUE /*expand*/, TRUE /*fill*/,  0 /*padding*/);
+  gtk_box_pack_start (GTK_BOX (vbox), current_calls->tree, TRUE /*expand*/,
+      TRUE /*fill*/, 0 /*padding*/);
+  gtk_box_pack_start (GTK_BOX (vbox), history->tree, TRUE /*expand*/,
+      TRUE /*fill*/, 0 /*padding*/);
+  gtk_box_pack_start (GTK_BOX (vbox), contacts->tree, TRUE /*expand*/,
+      TRUE /*fill*/, 0 /*padding*/);
 
-	gtk_box_pack_start (GTK_BOX (vbox), subvbox, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
+  gtk_box_pack_start (GTK_BOX (vbox), subvbox, FALSE /*expand*/,
+      FALSE /*fill*/, 0 /*padding*/);
 
-	embedded_error_notebook = PIDGIN_SCROLL_BOOK(pidgin_scroll_book_new());
-	gtk_box_pack_start(GTK_BOX(subvbox),
-			GTK_WIDGET(embedded_error_notebook), FALSE, FALSE, 0);
+  embedded_error_notebook = PIDGIN_SCROLL_BOOK(pidgin_scroll_book_new());
+  gtk_box_pack_start (GTK_BOX(subvbox), GTK_WIDGET(embedded_error_notebook),
+      FALSE, FALSE, 0);
 
-	if(SHOW_VOLUME){
-		speaker_control = create_slider("speaker");
-		gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-		gtk_widget_show_all (speaker_control);
-		mic_control = create_slider("mic");
-		gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-		gtk_widget_show_all (mic_control);
-	}
+  if (SHOW_VOLUME)
+    {
+      speaker_control = create_slider ("speaker");
+      gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/,
+          TRUE /*fill*/, 0 /*padding*/);
+      gtk_widget_show_all (speaker_control);
+      mic_control = create_slider ("mic");
+      gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/,
+          TRUE /*fill*/, 0 /*padding*/);
+      gtk_widget_show_all (mic_control);
+    }
 
-	if(SHOW_DIALPAD){
-		dialpad = create_dialpad();
-		gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-		gtk_widget_show_all (dialpad);
-	}
+  if (SHOW_DIALPAD)
+    {
+      dialpad = create_dialpad ();
+      gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/,
+          TRUE /*fill*/, 0 /*padding*/);
+      gtk_widget_show_all (dialpad);
+    }
 
-	/* Status bar */
-	statusBar = gtk_statusbar_new();
-	gtk_box_pack_start (GTK_BOX (vbox), statusBar, FALSE /*expand*/, TRUE /*fill*/,  0 /*padding*/);
-	gtk_container_add (GTK_CONTAINER (window), vbox);
+  /* Status bar */
+  statusBar = gtk_statusbar_new ();
+  gtk_box_pack_start (GTK_BOX (vbox), statusBar, FALSE /*expand*/,
+      TRUE /*fill*/, 0 /*padding*/);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
 
-	/* make sure that everything, window and label, are visible */
-	gtk_widget_show_all (window);
+  /* make sure that everything, window and label, are visible */
+  gtk_widget_show_all (window);
 
-	/* dont't show the history */
-	gtk_widget_hide(history->tree);
+  /* dont't show the history */
+  gtk_widget_hide (history->tree);
 
-	/* dont't show the contact list */
-	gtk_widget_hide(contacts->tree);
+  /* dont't show the contact list */
+  gtk_widget_hide (contacts->tree);
 
-	searchbar_init(history);
-	searchbar_init(contacts);
+  searchbar_init (history);
+  searchbar_init (contacts);
 
-	/* don't show waiting layer */
-	gtk_widget_hide(waitingLayer);
+  /* don't show waiting layer */
+  gtk_widget_hide (waitingLayer);
 
-	// Configuration wizard
-	if (account_list_get_size() == 0)
-	{
+  // Configuration wizard
+  if (account_list_get_size () == 0)
+    {
 #if GTK_CHECK_VERSION(2,10,0)
-		build_wizard();
+      build_wizard ();
 #else
-		GtkWidget * dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window),
-				GTK_DIALOG_DESTROY_WITH_PARENT,
-				GTK_MESSAGE_INFO,
-				GTK_BUTTONS_YES_NO,
-				"<b><big>Welcome to SFLphone!</big></b>\n\nThere are no VoIP accounts configured, would you like to edit the preferences now?");
+      GtkWidget * dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window),
+          GTK_DIALOG_DESTROY_WITH_PARENT,
+          GTK_MESSAGE_INFO,
+          GTK_BUTTONS_YES_NO,
+          "<b><big>Welcome to SFLphone!</big></b>\n\nThere are no VoIP accounts configured, would you like to edit the preferences now?");
 
-		int response = gtk_dialog_run (GTK_DIALOG(dialog));
+      int response = gtk_dialog_run (GTK_DIALOG(dialog));
 
-		gtk_widget_destroy (GTK_WIDGET(dialog));
+      gtk_widget_destroy (GTK_WIDGET(dialog));
 
-		if (response == GTK_RESPONSE_YES)
-		{
-			show_preferences_dialog();
-		}
+      if (response == GTK_RESPONSE_YES)
+        {
+          show_preferences_dialog();
+        }
 #endif
-	}
+    }
 
-	// Move the main window
-	gtk_window_move (GTK_WINDOW (window), position_x, position_y);
+  // Move the main window
+  gtk_window_move (GTK_WINDOW (window), position_x, position_y);
 }
 
-	GtkAccelGroup *
-get_accel_group()
+GtkAccelGroup *
+get_accel_group ()
 {
-	return accelGroup;
+  return accelGroup;
 }
 
-	GtkWidget *
-get_main_window()
+GtkWidget *
+get_main_window ()
 {
-	return window;
+  return window;
 }
 
 void
-main_window_message(GtkMessageType type, gchar * markup){
+main_window_message (GtkMessageType type, gchar * markup)
+{
 
-	GtkWidget * dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(get_main_window()),
-			GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-			type,
-			GTK_BUTTONS_CLOSE,
-			NULL);
+  GtkWidget * dialog = gtk_message_dialog_new_with_markup (
+      GTK_WINDOW(get_main_window()), GTK_DIALOG_MODAL
+          | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_CLOSE, NULL);
 
-	gtk_window_set_title(GTK_WINDOW(dialog), _("SFLphone Error"));
-	gtk_message_dialog_set_markup(GTK_MESSAGE_DIALOG(dialog), markup);
+  gtk_window_set_title (GTK_WINDOW(dialog), _("SFLphone Error"));
+  gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG(dialog), markup);
 
-	gtk_dialog_run (GTK_DIALOG(dialog));
-	gtk_widget_destroy (GTK_WIDGET(dialog));
+  gtk_dialog_run (GTK_DIALOG(dialog));
+  gtk_widget_destroy (GTK_WIDGET(dialog));
 }
 
 void
-main_window_error_message(gchar * markup){
-	main_window_message(GTK_MESSAGE_ERROR, markup);
+main_window_error_message (gchar * markup)
+{
+  main_window_message (GTK_MESSAGE_ERROR, markup);
 }
 
 void
-main_window_warning_message(gchar * markup){
-	main_window_message(GTK_MESSAGE_WARNING, markup);
+main_window_warning_message (gchar * markup)
+{
+  main_window_message (GTK_MESSAGE_WARNING, markup);
 }
 
 void
-main_window_info_message(gchar * markup){
-	main_window_message(GTK_MESSAGE_INFO, markup);
+main_window_info_message (gchar * markup)
+{
+  main_window_message (GTK_MESSAGE_INFO, markup);
 }
 
-void main_window_dialpad (gboolean state){
+void
+main_window_dialpad (gboolean state)
+{
 
-	g_print ("main_window_dialpad\n");
+  g_print ("main_window_dialpad\n");
 
-	if(state) {
-		dialpad = create_dialpad();
-		gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-		gtk_widget_show_all (dialpad);
-	} else {
-		gtk_container_remove(GTK_CONTAINER (subvbox), dialpad);
-	}
+  if (state)
+    {
+      dialpad = create_dialpad ();
+      gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/,
+          TRUE /*fill*/, 0 /*padding*/);
+      gtk_widget_show_all (dialpad);
+    }
+  else
+    {
+      gtk_container_remove (GTK_CONTAINER (subvbox), dialpad);
+    }
 }
 
 void
-main_window_volume_controls( gboolean state ){
-	if(state){
-		speaker_control = create_slider("speaker");
-		gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-		gtk_widget_show_all (speaker_control);
-		mic_control = create_slider("mic");
-		gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-		gtk_widget_show_all (mic_control);
-	} else {
-		gtk_container_remove( GTK_CONTAINER(subvbox) , speaker_control );
-		gtk_container_remove( GTK_CONTAINER(subvbox) , mic_control );
-	}
-}
-
-	void
-statusbar_push_message(const gchar * message, guint id)
+main_window_volume_controls (gboolean state)
 {
-	gtk_statusbar_push(GTK_STATUSBAR(statusBar), id, message);
+  if (state)
+    {
+      speaker_control = create_slider ("speaker");
+      gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/,
+          TRUE /*fill*/, 0 /*padding*/);
+      gtk_widget_show_all (speaker_control);
+      mic_control = create_slider ("mic");
+      gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/,
+          TRUE /*fill*/, 0 /*padding*/);
+      gtk_widget_show_all (mic_control);
+    }
+  else
+    {
+      gtk_container_remove (GTK_CONTAINER(subvbox), speaker_control);
+      gtk_container_remove (GTK_CONTAINER(subvbox), mic_control);
+    }
 }
 
-	void
-statusbar_pop_message(guint id)
+void
+statusbar_push_message (const gchar * message, guint id)
 {
-	gtk_statusbar_pop(GTK_STATUSBAR(statusBar), id);
+  gtk_statusbar_push (GTK_STATUSBAR(statusBar), id, message);
 }
 
-	static void
-add_error_dialog(GtkWidget *dialog, callable_obj_t * call)
+void
+statusbar_pop_message (guint id)
 {
-	gtk_container_add(GTK_CONTAINER(embedded_error_notebook), dialog); 
-	call_add_error(call, dialog);
+  gtk_statusbar_pop (GTK_STATUSBAR(statusBar), id);
 }
 
-	static void
-destroy_error_dialog_cb(GtkObject *dialog, callable_obj_t * call)
+static void
+add_error_dialog (GtkWidget *dialog, callable_obj_t * call)
 {
-	call_remove_error(call, dialog);
+  gtk_container_add (GTK_CONTAINER(embedded_error_notebook), dialog);
+  call_add_error (call, dialog);
 }
 
-	void
-main_window_zrtp_not_supported(callable_obj_t * c)
+static void
+destroy_error_dialog_cb (GtkObject *dialog, callable_obj_t * call)
 {
-	account_t* account_details=NULL;
-	gchar* warning_enabled="";
-
-	account_details = account_list_get_by_id(c->_accountID);
-	if(account_details != NULL) {
-		warning_enabled = g_hash_table_lookup(account_details->properties, ACCOUNT_ZRTP_NOT_SUPP_WARNING);
-		DEBUG("Warning Enabled %s", warning_enabled);
-	} else {
-		DEBUG("Account is null callID %s", c->_callID);
-		GHashTable * properties = NULL;
-		sflphone_get_ip2ip_properties (&properties);
-		if(properties != NULL)
-		{ warning_enabled = g_hash_table_lookup(properties, ACCOUNT_ZRTP_NOT_SUPP_WARNING); }
-	}
-
-	if(g_strcasecmp(warning_enabled,"true") == 0) {
-		PidginMiniDialog *mini_dialog;
-		gchar *desc = g_markup_printf_escaped(_("ZRTP is not supported by peer %s\n"), c->_peer_number);
-		mini_dialog = pidgin_mini_dialog_new(_("Secure Communication Unavailable"), desc, GTK_STOCK_DIALOG_WARNING);
-		pidgin_mini_dialog_add_button(mini_dialog, _("Continue"), NULL, NULL);
-		pidgin_mini_dialog_add_button(mini_dialog, _("Stop Call"), sflphone_hang_up, NULL);
-
-		g_signal_connect_after(mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
-
-		add_error_dialog(GTK_WIDGET(mini_dialog), c);
-	}
+  call_remove_error (call, dialog);
 }
 
-	void
-main_window_zrtp_negotiation_failed(const gchar* callID, const gchar* reason, const gchar* severity)
+void
+main_window_zrtp_not_supported (callable_obj_t * c)
 {
-	gchar* peer_number = "(number unknown)";
-	callable_obj_t * c = NULL;
-	c = calllist_get(current_calls, callID);
-	if (c != NULL) {
-		peer_number = c->_peer_number;
-	}
-
-	PidginMiniDialog *mini_dialog;
-	gchar *desc = g_markup_printf_escaped(_("A %s error forced the call with %s to fall under unencrypted mode.\nExact reason: %s\n"), severity, peer_number, reason);
-	mini_dialog = pidgin_mini_dialog_new(_("ZRTP negotiation failed"), desc, GTK_STOCK_DIALOG_WARNING);
-	pidgin_mini_dialog_add_button(mini_dialog, _("Continue"), NULL, NULL);
-	pidgin_mini_dialog_add_button(mini_dialog, _("Stop Call"), sflphone_hang_up, NULL);
-
-	g_signal_connect_after(mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
-
-	add_error_dialog(GTK_WIDGET(mini_dialog), c);
+  account_t* account_details = NULL;
+  gchar* warning_enabled = "";
+
+  account_details = account_list_get_by_id (c->_accountID);
+  if (account_details != NULL)
+    {
+      warning_enabled = g_hash_table_lookup (account_details->properties,
+          ACCOUNT_ZRTP_NOT_SUPP_WARNING);
+      DEBUG("Warning Enabled %s", warning_enabled);
+    }
+  else
+    {
+      DEBUG("Account is null callID %s", c->_callID);
+      GHashTable * properties = NULL;
+      sflphone_get_ip2ip_properties (&properties);
+      if (properties != NULL)
+        {
+          warning_enabled = g_hash_table_lookup (properties,
+              ACCOUNT_ZRTP_NOT_SUPP_WARNING);
+        }
+    }
+
+  if (g_strcasecmp (warning_enabled, "true") == 0)
+    {
+      PidginMiniDialog *mini_dialog;
+      gchar *desc = g_markup_printf_escaped (
+          _("ZRTP is not supported by peer %s\n"), c->_peer_number);
+      mini_dialog = pidgin_mini_dialog_new (
+          _("Secure Communication Unavailable"), desc,
+          GTK_STOCK_DIALOG_WARNING);
+      pidgin_mini_dialog_add_button (mini_dialog, _("Continue"), NULL, NULL);
+      pidgin_mini_dialog_add_button (mini_dialog, _("Stop Call"),
+          sflphone_hang_up, NULL);
+
+      g_signal_connect_after(mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
+
+      add_error_dialog (GTK_WIDGET(mini_dialog), c);
+    }
 }
 
-	void
-main_window_confirm_go_clear(callable_obj_t * c)
+void
+main_window_zrtp_negotiation_failed (const gchar* callID, const gchar* reason,
+    const gchar* severity)
 {
-	PidginMiniDialog *mini_dialog;
-	gchar *desc = g_markup_printf_escaped(_("%s wants to stop using secure communication. Confirm will resume conversation without SRTP.\n"), c->_peer_number);
-	mini_dialog = pidgin_mini_dialog_new(_("Confirm Go Clear"), desc, GTK_STOCK_STOP);
-	pidgin_mini_dialog_add_button(mini_dialog, _("Confirm"), (PidginMiniDialogCallback)sflphone_set_confirm_go_clear, NULL);
-	pidgin_mini_dialog_add_button(mini_dialog, _("Stop Call"), sflphone_hang_up, NULL);
+  gchar* peer_number = "(number unknown)";
+  callable_obj_t * c = NULL;
+  c = calllist_get (current_calls, callID);
+  if (c != NULL)
+    {
+      peer_number = c->_peer_number;
+    }
 
-	add_error_dialog(GTK_WIDGET(mini_dialog), c);
+  PidginMiniDialog *mini_dialog;
+  gchar
+      *desc =
+          g_markup_printf_escaped (
+              _("A %s error forced the call with %s to fall under unencrypted mode.\nExact reason: %s\n"),
+              severity, peer_number, reason);
+  mini_dialog = pidgin_mini_dialog_new (_("ZRTP negotiation failed"), desc,
+      GTK_STOCK_DIALOG_WARNING);
+  pidgin_mini_dialog_add_button (mini_dialog, _("Continue"), NULL, NULL);
+  pidgin_mini_dialog_add_button (mini_dialog, _("Stop Call"), sflphone_hang_up,
+      NULL);
+
+  g_signal_connect_after(mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
+
+  add_error_dialog (GTK_WIDGET(mini_dialog), c);
 }
 
-
+void
+main_window_confirm_go_clear (callable_obj_t * c)
+{
+  PidginMiniDialog *mini_dialog;
+  gchar
+      *desc =
+          g_markup_printf_escaped (
+              _("%s wants to stop using secure communication. Confirm will resume conversation without SRTP.\n"),
+              c->_peer_number);
+  mini_dialog = pidgin_mini_dialog_new (_("Confirm Go Clear"), desc,
+      GTK_STOCK_STOP);
+  pidgin_mini_dialog_add_button (mini_dialog, _("Confirm"),
+      (PidginMiniDialogCallback) sflphone_set_confirm_go_clear, NULL);
+  pidgin_mini_dialog_add_button (mini_dialog, _("Stop Call"), sflphone_hang_up,
+      NULL);
+
+  add_error_dialog (GTK_WIDGET(mini_dialog), c);
+}
 
diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c
index 984326b2c7..7f74f6f066 100644
--- a/sflphone-client-gnome/src/statusicon.c
+++ b/sflphone-client-gnome/src/statusicon.c
@@ -29,119 +29,129 @@ GtkStatusIcon *status;
 GtkWidget *show_menu_item, *hangup_menu_item;
 gboolean __minimized = MINIMIZED;
 
-void popup_main_window (void)
+void
+popup_main_window(void)
 {
-	if (__POPUP_WINDOW)
-	{
-		gtk_widget_show (get_main_window ());
-		gtk_window_move (GTK_WINDOW (get_main_window ()), dbus_get_window_position_x (), dbus_get_window_position_y ());
-		set_minimized (FALSE);
-	}
+  if (__POPUP_WINDOW)
+    {
+      gtk_widget_show(get_main_window());
+      gtk_window_move(GTK_WINDOW (get_main_window ()),
+          dbus_get_window_position_x(), dbus_get_window_position_y());
+      set_minimized(FALSE);
+    }
 }
 
-void show_status_hangup_icon() {
-
+void
+show_status_hangup_icon()
+{
+  if (status) {
     DEBUG("Show Hangup in Systray");
     gtk_widget_show(GTK_WIDGET(hangup_menu_item));
-
+  }
 }
 
-void hide_status_hangup_icon() {
-
-  DEBUG("Hide Hangup in Systray");
+void
+hide_status_hangup_icon()
+{
+  if (status) {
+    DEBUG("Hide Hangup in Systray");
     gtk_widget_hide(GTK_WIDGET(hangup_menu_item));
+  }
 }
 
-
-void 
-status_quit ( void * foo UNUSED)
+void
+status_quit(void * foo UNUSED)
 {
   sflphone_quit();
 }
 
 void
-status_hangup ()
+status_hangup()
 {
   sflphone_hang_up();
-}	  
+}
 
-void 
+void
 status_icon_unminimize()
 {
   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE);
 }
 
-
-gboolean main_widget_minimized()
+gboolean
+main_widget_minimized()
 {
   return __minimized;
 }
 
-void show_hide (void)
+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 ()), dbus_get_window_position_x (), dbus_get_window_position_y ());
-		set_minimized( !MINIMIZED );
-	}   
-	else
-	{
-		gtk_widget_hide(GTK_WIDGET(get_main_window()));
-		set_minimized( MINIMIZED );
-	}
+  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 ()),
+          dbus_get_window_position_x(), dbus_get_window_position_y());
+      set_minimized(!MINIMIZED);
+    }
+  else
+    {
+      gtk_widget_hide(GTK_WIDGET(get_main_window()));
+      set_minimized(MINIMIZED);
+    }
 }
 
-
-void status_click (GtkStatusIcon *status_icon UNUSED, void * foo UNUSED)
+void
+status_click(GtkStatusIcon *status_icon UNUSED, void * foo UNUSED)
 {
-    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), 
-        !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item)));
+  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item),
+      !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item)));
 }
 
-void menu (GtkStatusIcon *status_icon,
-            guint button,
-            guint activate_time,
-            GtkWidget * menu) 
+void
+menu(GtkStatusIcon *status_icon, guint button, guint activate_time,
+    GtkWidget * menu)
 {
-  gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gtk_status_icon_position_menu, 
-    status_icon, button, activate_time);
+  gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gtk_status_icon_position_menu,
+      status_icon, button, activate_time);
 }
 
-GtkWidget* create_menu()
+GtkWidget*
+create_menu()
 {
   GtkWidget * menu;
   GtkWidget * menu_items;
   GtkWidget * image;
-  
-  menu      = gtk_menu_new ();
-  
-  show_menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Show main window"));
+
+  menu = gtk_menu_new();
+
+  show_menu_item
+      = gtk_check_menu_item_new_with_mnemonic(_("_Show main window"));
   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE);
-  gtk_menu_shell_append (GTK_MENU_SHELL (menu), show_menu_item);
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu), show_menu_item);
   g_signal_connect(G_OBJECT (show_menu_item), "toggled",
-                  G_CALLBACK (show_hide), 
-                  NULL);
-  
+      G_CALLBACK (show_hide),
+      NULL);
+
   hangup_menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-  image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg");
+  image = gtk_image_new_from_file(ICONS_DIR "/icon_hangup.svg");
   gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(hangup_menu_item), image);
   gtk_menu_shell_append(GTK_MENU_SHELL(menu), hangup_menu_item);
   g_signal_connect(G_OBJECT (hangup_menu_item), "activate",
-		   G_CALLBACK (status_hangup), 
-		   NULL);
+      G_CALLBACK (status_hangup),
+      NULL);
 
-  menu_items = gtk_separator_menu_item_new ();
-  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+  menu_items = gtk_separator_menu_item_new();
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
 
-  menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_QUIT, get_accel_group());
+  menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT,
+      get_accel_group());
   g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
-                  G_CALLBACK (status_quit), 
-                  NULL);
-  gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-  
-  gtk_widget_show_all (menu);
-  
+      G_CALLBACK (status_quit),
+      NULL);
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+
+  gtk_widget_show_all(menu);
+
   return menu;
 }
 
@@ -150,52 +160,67 @@ show_status_icon()
 {
   status = gtk_status_icon_new_from_file(LOGO);
   g_signal_connect (G_OBJECT (status), "activate",
-			  G_CALLBACK (status_click),
-			  NULL);
+      G_CALLBACK (status_click),
+      NULL);
   g_signal_connect (G_OBJECT (status), "popup-menu",
-			  G_CALLBACK (menu),
-			  create_menu());			  
+      G_CALLBACK (menu),
+      create_menu());
 
-  statusicon_set_tooltip ();
+  statusicon_set_tooltip();
 }
 
-void statusicon_set_tooltip () {
-
-	int count;
-	gchar *tip;
+void hide_status_icon (void) {
 
-	// Add a tooltip to the system tray icon
-	count = account_list_get_registered_accounts ();
-	tip =  g_markup_printf_escaped ("%s - %s" ,
-									_("SFLphone"),
-									g_markup_printf_escaped(n_("%i active account", "%i active accounts", count),count));
-	gtk_status_icon_set_tooltip (status, tip);
-	g_free(tip);
+    g_object_unref (status);
+    status = NULL;
 }
 
 
-void status_tray_icon_blink (gboolean active)
+void
+statusicon_set_tooltip()
 {
-	// Set a different icon to notify of an event
-	active ? gtk_status_icon_set_from_file (status, LOGO_NOTIF) : gtk_status_icon_set_from_file (status, LOGO);
+  int count;
+  gchar *tip;
+
+  // Add a tooltip to the system tray icon
+  count = account_list_get_registered_accounts();
+  tip = g_markup_printf_escaped("%s - %s", _("SFLphone"),
+      g_markup_printf_escaped(
+          n_("%i active account", "%i active accounts", count), count));
+  gtk_status_icon_set_tooltip(status, tip);
+  g_free(tip);
 }
 
-void status_tray_icon_online (gboolean online)
+void
+status_tray_icon_blink(gboolean active)
+{
+  if (status) {
+  // Set a different icon to notify of an event
+  active ? gtk_status_icon_set_from_file(status, LOGO_NOTIF)
+      : gtk_status_icon_set_from_file(status, LOGO);
+  }
+}
+
+void
+status_tray_icon_online(gboolean online)
 {
-	// Set a different icon to notify of an event
-	online ? gtk_status_icon_set_from_file (status, LOGO) : gtk_status_icon_set_from_file (status, LOGO_OFFLINE);
+  if (status) {
+  // Set a different icon to notify of an event
+  online ? gtk_status_icon_set_from_file(status, LOGO)
+      : gtk_status_icon_set_from_file(status, LOGO_OFFLINE);
+  }
 }
 
-GtkStatusIcon* 
-get_status_icon( void )
+GtkStatusIcon*
+get_status_icon(void)
 {
   return status;
 }
 
 void
-set_minimized( gboolean state)
+set_minimized(gboolean state)
 {
-  __minimized = state ;
+  __minimized = state;
   gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), !state);
 }
 
diff --git a/sflphone-client-gnome/src/statusicon.h b/sflphone-client-gnome/src/statusicon.h
index 29fe256e27..fc45eeec5b 100644
--- a/sflphone-client-gnome/src/statusicon.h
+++ b/sflphone-client-gnome/src/statusicon.h
@@ -36,9 +36,15 @@
 void popup_main_window (void);
 
 /**
- * Create the status icon 
+ * Create the system tray icon
  */
-void show_status_icon();
+void show_status_icon ();
+
+
+/**
+ * Hide the system tray icon
+ */
+void hide_status_icon ();
 
 /**
  * Set the menu active 
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index eeff70c7ef..1042bf0c13 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -55,1312 +55,1464 @@ GtkWidget * voicemailToolbar;
 GtkWidget * editable_num;
 GtkDialog * edit_dialog;
 
-
-enum {
-	CALLTREE_CALLS,
-	CALLTREE_HISTORY,
-	CALLTREE_CONTACTS	
+enum
+{
+  CALLTREE_CALLS, CALLTREE_HISTORY, CALLTREE_CONTACTS
 };
 
-
-static gboolean is_inserted (GtkWidget* button, GtkWidget *current_toolbar)
+static gboolean
+is_inserted(GtkWidget* button, GtkWidget *current_toolbar)
 {
-	return (GTK_WIDGET (button)->parent == GTK_WIDGET (current_toolbar));
+  return (GTK_WIDGET (button)->parent == GTK_WIDGET (current_toolbar));
 }
 
-void update_actions()
+void
+update_actions()
 {
 
-       DEBUG("Update action");
-
-	gtk_action_set_sensitive( GTK_ACTION (newCallAction), TRUE);
-	gtk_action_set_sensitive (GTK_ACTION (pickUpAction), FALSE);
-	gtk_action_set_sensitive (GTK_ACTION (hangUpAction), FALSE);
-
-	g_object_ref (hangUpWidget);
-	g_object_ref (recordWidget);
-	g_object_ref (holdToolbar);
-	g_object_ref (offHoldToolbar);
-	g_object_ref (contactButton);
-	g_object_ref (transferToolbar);
-	g_object_ref (voicemailToolbar);
-
-	if (is_inserted (GTK_WIDGET(hangUpWidget), GTK_WIDGET (toolbar)))
-	{
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (hangUpWidget));
-	}
-
-	if (is_inserted (GTK_WIDGET(recordWidget), GTK_WIDGET (toolbar)))
-	{
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (recordWidget));
-	}
-
-	if (is_inserted (GTK_WIDGET(transferToolbar), GTK_WIDGET (toolbar)))
-	{
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (transferToolbar));
-	}
-
-	if (is_inserted (GTK_WIDGET(contactButton), GTK_WIDGET (toolbar)))    
-	{
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton));
-	}
-
-	if (is_inserted (GTK_WIDGET (voicemailToolbar), GTK_WIDGET (toolbar)))    
-	{
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (voicemailToolbar));
-	}
-
-	gtk_widget_set_sensitive (GTK_WIDGET (holdMenu),   FALSE);
-	gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar),   FALSE);
-	gtk_widget_set_sensitive (GTK_WIDGET (offHoldToolbar),   FALSE);
-	gtk_action_set_sensitive (GTK_ACTION (recordAction), FALSE);
-	gtk_action_set_sensitive (GTK_ACTION (copyAction),   FALSE);
-	gtk_widget_set_sensitive( GTK_WIDGET(contactButton), FALSE);
-	gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton), _("No address book selected"));
-
-	if (is_inserted (GTK_WIDGET (holdToolbar), GTK_WIDGET (toolbar)))   
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (holdToolbar));
-	if (is_inserted (GTK_WIDGET (offHoldToolbar), GTK_WIDGET (toolbar))) 
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (offHoldToolbar));
-
-	if (is_inserted (GTK_WIDGET (newCallWidget), GTK_WIDGET (toolbar))) 
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget));
-	if (is_inserted (GTK_WIDGET (pickUpWidget), GTK_WIDGET (toolbar))) 
-		gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (pickUpWidget));
-	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (newCallWidget), 0);
-
-	// If addressbook support has been enabled and all addressbooks are loaded, display the icon
-	if (addressbook_is_enabled () && addressbook_is_ready ()) {  
-		gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (contactButton), -1);
-		// Make the icon clickable only if at least one address book is active
-		if (addressbook_is_active ())
-		{
-			gtk_widget_set_sensitive( GTK_WIDGET(contactButton), TRUE);
-			gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton), _("Address book"));
-		}
-	}
-
-	// g_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
-	// gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE);
-	// g_signal_handler_unblock ( GTK_OBJECT (transferToolbar), transfertButtonConnId);
-
-	callable_obj_t * selectedCall = calltab_get_selected_call(active_calltree);
-	conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
-
-	if (selectedCall)
-	{
-	        // update icon in systray
-	        show_status_hangup_icon();
-
-		gtk_action_set_sensitive (GTK_ACTION (copyAction), TRUE);
-
-		switch(selectedCall->_state)
-		{
-			case CALL_STATE_INCOMING:
-				// Make the button toolbar clickable
-				gtk_action_set_sensitive (GTK_ACTION (pickUpAction), TRUE);
-				gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
-				// Replace the dial button with the hangup button
-				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_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
-				break;
-			case CALL_STATE_HOLD:
-				gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
-				gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), TRUE);
-				gtk_widget_set_sensitive (GTK_WIDGET (offHoldToolbar), TRUE);
-				gtk_widget_set_sensitive (GTK_WIDGET (newCallWidget), TRUE);
-				// Replace the hold button with the off-hold button
-				gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
-				gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM (offHoldToolbar), 2);
-				break;
-			case CALL_STATE_RINGING:
-				gtk_action_set_sensitive (GTK_ACTION (pickUpAction), TRUE);
-				gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
-				gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
-				break;
-			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(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);
-				if (active_calltree == current_calls)	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_widget_set_sensitive (GTK_WIDGET (holdMenu),   TRUE);
-				gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar),   TRUE);
-				//gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (holdMenu), gtk_image_new_from_stock (GTK_STOCK_ONHOLD, GTK_ICON_SIZE_MENU));
-				gtk_widget_set_sensitive (GTK_WIDGET (transferToolbar),   TRUE);
-				//gtk_action_set_sensitive( GTK_ACTION(newCallMenu),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_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
-				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);
-				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_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
-				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);
-				gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
-				gtk_widget_set_sensitive (GTK_WIDGET (transferToolbar), TRUE);
-				break;
-			default:
-				WARN("Should not happen in update_actions()!");
-				break;
-		}
-	}
-	else if (selectedConf){
-
-	        // update icon in systray
-	        show_status_hangup_icon();
-
-	        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);
-		  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);
-		  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);
-		  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);
-		  break;
-
-		default:
-		  WARN("Should not happen in update_action()!");
-		  break;
-		  
-		}
-	}  
-
-	else {
-
-	        // update icon in systray
-	        hide_status_hangup_icon();
-	      
-		if( account_list_get_size() > 0  && current_account_has_mailbox ())
-		{
-			gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (voicemailToolbar), -2);
-			update_voicemail_status ();
-		}
-	}
+  DEBUG("Update action");
+
+  gtk_action_set_sensitive(GTK_ACTION (newCallAction), TRUE);
+  gtk_action_set_sensitive(GTK_ACTION (pickUpAction), FALSE);
+  gtk_action_set_sensitive(GTK_ACTION (hangUpAction), FALSE);
+
+  g_object_ref(hangUpWidget);
+  g_object_ref(recordWidget);
+  g_object_ref(holdToolbar);
+  g_object_ref(offHoldToolbar);
+  g_object_ref(contactButton);
+  g_object_ref(transferToolbar);
+  g_object_ref(voicemailToolbar);
+
+  if (is_inserted(GTK_WIDGET(hangUpWidget), GTK_WIDGET (toolbar)))
+    {
+      gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (hangUpWidget));
+    }
+
+  if (is_inserted(GTK_WIDGET(recordWidget), GTK_WIDGET (toolbar)))
+    {
+      gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (recordWidget));
+    }
+
+  if (is_inserted(GTK_WIDGET(transferToolbar), GTK_WIDGET (toolbar)))
+    {
+      gtk_container_remove(GTK_CONTAINER (toolbar),
+          GTK_WIDGET (transferToolbar));
+    }
+
+  if (is_inserted(GTK_WIDGET(contactButton), GTK_WIDGET (toolbar)))
+    {
+      gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton));
+    }
+
+  if (is_inserted(GTK_WIDGET (voicemailToolbar), GTK_WIDGET (toolbar)))
+    {
+      gtk_container_remove(GTK_CONTAINER (toolbar),
+          GTK_WIDGET (voicemailToolbar));
+    }
+
+  gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), FALSE);
+  gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), FALSE);
+  gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), FALSE);
+  gtk_action_set_sensitive(GTK_ACTION (recordAction), FALSE);
+  gtk_action_set_sensitive(GTK_ACTION (copyAction), FALSE);
+  gtk_widget_set_sensitive(GTK_WIDGET(contactButton), FALSE);
+  gtk_widget_set_tooltip_text(GTK_WIDGET (contactButton),
+      _("No address book selected"));
+
+  if (is_inserted(GTK_WIDGET (holdToolbar), GTK_WIDGET (toolbar)))
+    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (holdToolbar));
+  if (is_inserted(GTK_WIDGET (offHoldToolbar), GTK_WIDGET (toolbar)))
+    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (offHoldToolbar));
+
+  if (is_inserted(GTK_WIDGET (newCallWidget), GTK_WIDGET (toolbar)))
+    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget));
+  if (is_inserted(GTK_WIDGET (pickUpWidget), GTK_WIDGET (toolbar)))
+    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (pickUpWidget));
+  gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (newCallWidget), 0);
+
+  // If addressbook support has been enabled and all addressbooks are loaded, display the icon
+  if (addressbook_is_enabled() && addressbook_is_ready())
+    {
+      gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (contactButton),
+          -1);
+      // Make the icon clickable only if at least one address book is active
+      if (addressbook_is_active())
+        {
+          gtk_widget_set_sensitive(GTK_WIDGET(contactButton), TRUE);
+          gtk_widget_set_tooltip_text(GTK_WIDGET (contactButton),
+              _("Address book"));
+        }
+    }
+
+  // g_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
+  // gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE);
+  // g_signal_handler_unblock ( GTK_OBJECT (transferToolbar), transfertButtonConnId);
+
+  callable_obj_t * selectedCall = calltab_get_selected_call(active_calltree);
+  conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
+
+  if (selectedCall)
+    {
+      // update icon in systray
+      show_status_hangup_icon();
+
+      gtk_action_set_sensitive(GTK_ACTION (copyAction), TRUE);
+
+      switch (selectedCall->_state)
+        {
+      case CALL_STATE_INCOMING:
+        // Make the button toolbar clickable
+        gtk_action_set_sensitive(GTK_ACTION (pickUpAction), TRUE);
+        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
+        // Replace the dial button with the hangup button
+        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_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
+            1);
+        break;
+      case CALL_STATE_HOLD:
+        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET (newCallWidget), TRUE);
+        // Replace the hold button with the off-hold button
+        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
+            1);
+        gtk_toolbar_insert(GTK_TOOLBAR(toolbar),
+            GTK_TOOL_ITEM (offHoldToolbar), 2);
+        break;
+      case CALL_STATE_RINGING:
+        gtk_action_set_sensitive(GTK_ACTION (pickUpAction), TRUE);
+        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
+        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
+            1);
+        break;
+      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(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);
+        if (active_calltree == current_calls)
+          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_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
+        //gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (holdMenu), gtk_image_new_from_stock (GTK_STOCK_ONHOLD, GTK_ICON_SIZE_MENU));
+        gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE);
+        //gtk_action_set_sensitive( GTK_ACTION(newCallMenu),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_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
+        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);
+        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_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
+        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);
+        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
+        gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE);
+        break;
+      default:
+        WARN("Should not happen in update_actions()!")
+        ;
+        break;
+        }
+    }
+  else if (selectedConf)
+    {
+
+      // update icon in systray
+      show_status_hangup_icon();
+
+      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);
+        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);
+        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);
+        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);
+        break;
+
+      default:
+        WARN("Should not happen in update_action()!")
+        ;
+        break;
+
+        }
+    }
+
+  else
+    {
+
+      // update icon in systray
+      hide_status_hangup_icon();
+
+      if (account_list_get_size() > 0 && current_account_has_mailbox())
+        {
+          gtk_toolbar_insert(GTK_TOOLBAR (toolbar),
+              GTK_TOOL_ITEM (voicemailToolbar), -2);
+          update_voicemail_status();
+        }
+    }
 }
 
-void update_voicemail_status (void)
+void
+update_voicemail_status(void)
 {
-	gchar *messages = "";
-	messages = g_markup_printf_escaped (_("Voicemail (%i)"), current_account_get_message_number ());
-	(current_account_has_new_message ()) ?
-				gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (voicemailToolbar), "mail-message-new"):
-				gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (voicemailToolbar), "mail-read");
-	gtk_tool_button_set_label (GTK_TOOL_BUTTON (voicemailToolbar), messages);
-	g_free (messages);
+  gchar *messages = "";
+  messages = g_markup_printf_escaped(_("Voicemail (%i)"),
+      current_account_get_message_number());
+  (current_account_has_new_message()) ? gtk_tool_button_set_icon_name(
+      GTK_TOOL_BUTTON (voicemailToolbar), "mail-message-new")
+      : gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (voicemailToolbar),
+          "mail-read");
+  gtk_tool_button_set_label(GTK_TOOL_BUTTON (voicemailToolbar), messages);
+  g_free(messages);
 }
 
-static void volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data)
+static void
+volume_bar_cb(GtkToggleAction *togglemenuitem, gpointer user_data)
 {
-	gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
-	if (toggled == SHOW_VOLUME)
-		return;
-	main_window_volume_controls(toggled);
-	if (toggled || SHOW_VOLUME)
-		dbus_set_volume_controls(toggled);
+  gboolean toggled = gtk_toggle_action_get_active(togglemenuitem);
+  if (toggled == SHOW_VOLUME)
+    return;
+  main_window_volume_controls(toggled);
+  if (toggled || SHOW_VOLUME)
+    dbus_set_volume_controls(toggled);
 }
 
-static void dialpad_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)
-		return;
-	main_window_dialpad (toggled);
-	if (toggled || SHOW_DIALPAD)
-		dbus_set_dialpad(toggled);
+  gboolean toggled = gtk_toggle_action_get_active(togglemenuitem);
+  if (toggled == SHOW_DIALPAD)
+    return;
+  main_window_dialpad(toggled);
+  if (toggled || SHOW_DIALPAD)
+    dbus_set_dialpad(toggled);
 }
 
-static void help_contents_cb (GtkAction *action)
+static void
+help_contents_cb(GtkAction *action)
 {
-	GError *error = NULL;
-
-	gnome_help_display ("sflphone.xml", NULL, &error);
-	if (error != NULL) {
-		g_warning ("%s", error->message);
-		g_error_free (error);
-	}
+  GError *error = NULL;
+
+  gnome_help_display("sflphone.xml", NULL, &error);
+  if (error != NULL)
+    {
+      g_warning("%s", error->message);
+      g_error_free(error);
+    }
 }
 
-static void help_about ( void * foo UNUSED)
+static void
+help_about(void * foo UNUSED)
 {
-	gchar *authors[] = {
-		"Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com>",
-		"Jean-Philippe Barrette-LaPierre",
-		"Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
-		"Julien Bonjean <julien.bonjean@savoirfairelinux.com>",
-		"Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>",
-		"Laurielle Lea",
-		"Yun Liu <yun.liu@savoirfairelinux.com>",
-		"Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>",
-		"Yan Morin <yan.morin@savoirfairelinux.com>",
-		"Jérôme Oufella <jerome.oufella@savoirfairelinux.com>",
-		"Julien Plissonneau Duquene <julien.plissonneau.duquene@savoirfairelinux.com>",
-		"Alexandre Savard <alexandre.savard@savoirfairelinux.com>",
-		NULL};
-	gchar *artists[] = {
-		"Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
-		"Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>",
-		NULL};
-
-	gtk_show_about_dialog( GTK_WINDOW(get_main_window()),
-			"artists", artists,
-			"authors", authors,
-			"comments", _("SFLphone is a VoIP client compatible with SIP and IAX2 protocols."),
-			"copyright", "Copyright © 2004-2009 Savoir-faire Linux Inc.",
-			"name", PACKAGE,
-			"title", _("About SFLphone"),
-			"version", VERSION,
-			"website", "http://www.sflphone.org",
-			NULL);
+  gchar
+      *authors[] =
+        {
+            "Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com>",
+            "Jean-Philippe Barrette-LaPierre",
+            "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
+            "Julien Bonjean <julien.bonjean@savoirfairelinux.com>",
+            "Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>",
+            "Laurielle Lea",
+            "Yun Liu <yun.liu@savoirfairelinux.com>",
+            "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>",
+            "Yan Morin <yan.morin@savoirfairelinux.com>",
+            "Jérôme Oufella <jerome.oufella@savoirfairelinux.com>",
+            "Julien Plissonneau Duquene <julien.plissonneau.duquene@savoirfairelinux.com>",
+            "Alexandre Savard <alexandre.savard@savoirfairelinux.com>", NULL };
+  gchar *artists[] =
+    { "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
+        "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>", NULL };
+
+  gtk_show_about_dialog(GTK_WINDOW(get_main_window()), "artists", artists,
+      "authors", authors, "comments",
+      _("SFLphone is a VoIP client compatible with SIP and IAX2 protocols."),
+      "copyright", "Copyright © 2004-2009 Savoir-faire Linux Inc.", "name",
+      PACKAGE, "title", _("About SFLphone"), "version", VERSION, "website",
+      "http://www.sflphone.org", NULL);
 
 }
 
 /* ----------------------------------------------------------------- */
 
-	static void
-call_new_call ( void * foo UNUSED)
+static void
+call_new_call(void * foo UNUSED)
 {
-	sflphone_new_call();
+  sflphone_new_call();
 }
 
-	static void
-call_quit ( void * foo UNUSED)
+static void
+call_quit(void * foo UNUSED)
 {
-	sflphone_quit();
+  sflphone_quit();
 }
 
-	static void
-call_minimize ( void * foo UNUSED)
+static void
+call_minimize(void * foo UNUSED)
 {
-#if GTK_CHECK_VERSION(2,10,0)
-	gtk_widget_hide(GTK_WIDGET( get_main_window() ));
-	set_minimized( TRUE );
-#endif
+
+    if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) {
+        gtk_widget_hide(GTK_WIDGET( get_main_window() ));
+        set_minimized(TRUE);
+    }
+    else {
+          sflphone_quit ();
+    }
 }
 
-	static void
-switch_account(  GtkWidget* item , gpointer data UNUSED)
+static void
+switch_account(GtkWidget* item, gpointer data UNUSED)
 {
-	account_t* acc = g_object_get_data( G_OBJECT(item) , "account" );
-	DEBUG("%s" , acc->accountID);
-	account_list_set_current (acc);
-	status_bar_display_account ();
+  account_t* acc = g_object_get_data(G_OBJECT(item), "account");
+  DEBUG("%s" , acc->accountID);
+  account_list_set_current(acc);
+  status_bar_display_account();
 }
 
-	static void
-call_hold  (void* foo UNUSED)
+static void
+call_hold(void* foo UNUSED)
 {
-	callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-	conference_obj_t * selectedConf = calltab_get_selected_conf();
-
-	if(selectedCall)
-	{
-		if(selectedCall->_state == CALL_STATE_HOLD)
-		{
-			sflphone_off_hold();
-		}
-		else
-		{
-			sflphone_on_hold();
-		}
-	}
-	else if (selectedConf) {
-
-	    switch(selectedConf->_state) {
-
-	    case CONFERENCE_STATE_HOLD: 
-	      {
-		selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-		sflphone_conference_off_hold(selectedConf);
-	      }
-	      break;
-	      
-	    case CONFERENCE_STATE_ACTIVE_ATACHED:
-	    case CONFERENCE_STATE_ACTIVE_DETACHED: {
-	      selectedConf->_state = CONFERENCE_STATE_HOLD;
-	      sflphone_conference_on_hold(selectedConf);
-	    }
-	      break;
-	    default:
-	      break;
-	    }
-	    
-	}
+  callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
+  conference_obj_t * selectedConf = calltab_get_selected_conf();
+
+  if (selectedCall)
+    {
+      if (selectedCall->_state == CALL_STATE_HOLD)
+        {
+          sflphone_off_hold();
+        }
+      else
+        {
+          sflphone_on_hold();
+        }
+    }
+  else if (selectedConf)
+    {
+
+      switch (selectedConf->_state)
+        {
+
+      case CONFERENCE_STATE_HOLD:
+        {
+          selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+          sflphone_conference_off_hold(selectedConf);
+        }
+        break;
+
+      case CONFERENCE_STATE_ACTIVE_ATACHED:
+      case CONFERENCE_STATE_ACTIVE_DETACHED:
+        {
+          selectedConf->_state = CONFERENCE_STATE_HOLD;
+          sflphone_conference_on_hold(selectedConf);
+        }
+        break;
+      default:
+        break;
+        }
+
+    }
 }
 
-	static void
-conference_hold  (void* foo UNUSED)
+static void
+conference_hold(void* foo UNUSED)
 {
-	conference_obj_t * selectedConf = calltab_get_selected_conf();
-
-	switch(selectedConf->_state)
-	{
-		case CONFERENCE_STATE_HOLD:
-			{
-				selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-				sflphone_conference_off_hold(selectedConf);
-			}
-			break;
-
-		case CONFERENCE_STATE_ACTIVE_ATACHED:
-		case CONFERENCE_STATE_ACTIVE_DETACHED:
-			{
-				selectedConf->_state = CONFERENCE_STATE_HOLD;
-				sflphone_conference_on_hold(selectedConf);
-			}
-			break;
-		default:
-			break;
-	}
+  conference_obj_t * selectedConf = calltab_get_selected_conf();
+
+  switch (selectedConf->_state)
+    {
+  case CONFERENCE_STATE_HOLD:
+    {
+      selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+      sflphone_conference_off_hold(selectedConf);
+    }
+    break;
+
+  case CONFERENCE_STATE_ACTIVE_ATACHED:
+  case CONFERENCE_STATE_ACTIVE_DETACHED:
+    {
+      selectedConf->_state = CONFERENCE_STATE_HOLD;
+      sflphone_conference_on_hold(selectedConf);
+    }
+    break;
+  default:
+    break;
+    }
 }
 
-	static void
-call_pick_up ( void * foo UNUSED)
+static void
+call_pick_up(void * foo UNUSED)
 {
-	DEBUG("------ call_button -----");
-	callable_obj_t * selectedCall;
-	callable_obj_t* new_call;
-
-	selectedCall = calltab_get_selected_call(active_calltree);
-
-	if(calllist_get_size(current_calls)>0)
-		sflphone_pick_up();
-
-	else if(calllist_get_size(active_calltree) > 0){
-		if( selectedCall)
-		{
-			create_new_call (CALL, CALL_STATE_DIALING, "", "", "", selectedCall->_peer_number, &new_call);
-
-			calllist_add(current_calls, new_call);
-			calltree_add_call(current_calls, new_call, NULL);
-			sflphone_place_call(new_call);
-			calltree_display (current_calls);
-		}
-		else
-		{
-			sflphone_new_call();
-			calltree_display(current_calls);
-		}
-	}
-	else
-	{
-		sflphone_new_call();
-		calltree_display(current_calls);
-	}
+  DEBUG("------ call_button -----");
+  callable_obj_t * selectedCall;
+  callable_obj_t* new_call;
+
+  selectedCall = calltab_get_selected_call(active_calltree);
+
+  if (calllist_get_size(current_calls) > 0)
+    sflphone_pick_up();
+
+  else if (calllist_get_size(active_calltree) > 0)
+    {
+      if (selectedCall)
+        {
+          create_new_call(CALL, CALL_STATE_DIALING, "", "", "",
+              selectedCall->_peer_number, &new_call);
+
+          calllist_add(current_calls, new_call);
+          calltree_add_call(current_calls, new_call, NULL);
+          sflphone_place_call(new_call);
+          calltree_display(current_calls);
+        }
+      else
+        {
+          sflphone_new_call();
+          calltree_display(current_calls);
+        }
+    }
+  else
+    {
+      sflphone_new_call();
+      calltree_display(current_calls);
+    }
 }
 
-static void call_hang_up (void)
+static void
+call_hang_up(void)
 {
-	sflphone_hang_up();
+  sflphone_hang_up();
 }
 
-static void conference_hang_up (void)
+static void
+conference_hang_up(void)
 {
-	sflphone_conference_hang_up();
+  sflphone_conference_hang_up();
 }
 
-static void call_record (void)
+static void
+call_record(void)
 {
-	sflphone_rec_call();
+  sflphone_rec_call();
 }
 
-	static void
-call_configuration_assistant ( void * foo UNUSED)
+static void
+call_configuration_assistant(void * foo UNUSED)
 {
 #if GTK_CHECK_VERSION(2,10,0)
-	build_wizard();
+  build_wizard();
 #endif
 }
 
-	static void
-remove_from_history( void * foo UNUSED)
+static void
+remove_from_history(void * foo UNUSED)
 {
-	callable_obj_t* c = calltab_get_selected_call( history );
-	if(c){
-		DEBUG("Remove the call from the history");
-		calllist_remove_from_history( c );
-	}
+  callable_obj_t* c = calltab_get_selected_call(history);
+  if (c)
+    {
+      DEBUG("Remove the call from the history");
+      calllist_remove_from_history(c);
+    }
 }
 
-	static void
-call_back( void * foo UNUSED)
+static void
+call_back(void * foo UNUSED)
 {
-	callable_obj_t *selected_call, *new_call;
+  callable_obj_t *selected_call, *new_call;
 
-	selected_call = calltab_get_selected_call( active_calltree );
+  selected_call = calltab_get_selected_call(active_calltree);
 
-	if( selected_call )
-	{
-		create_new_call (CALL, CALL_STATE_DIALING, "", "", selected_call->_peer_name, selected_call->_peer_number, &new_call);
+  if (selected_call)
+    {
+      create_new_call(CALL, CALL_STATE_DIALING, "", "",
+          selected_call->_peer_name, selected_call->_peer_number, &new_call);
 
-		calllist_add(current_calls, new_call);
-		calltree_add_call(current_calls, new_call, NULL);
-		sflphone_place_call(new_call);
-		calltree_display (current_calls);
-	}
+      calllist_add(current_calls, new_call);
+      calltree_add_call(current_calls, new_call, NULL);
+      sflphone_place_call(new_call);
+      calltree_display(current_calls);
+    }
 }
 
-	static void
-edit_preferences ( void * foo UNUSED)
+static void
+edit_preferences(void * foo UNUSED)
 {
-	show_preferences_dialog();
+  show_preferences_dialog();
 }
 
-	static void
-edit_accounts ( void * foo UNUSED)
+static void
+edit_accounts(void * foo UNUSED)
 {
-	show_account_list_config_dialog();
+  show_account_list_config_dialog();
 }
 
 // The menu Edit/Copy should copy the current selected call's number
-	static void
-edit_copy ( void * foo UNUSED)
+static void
+edit_copy(void * foo UNUSED)
 {
-	GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
-	callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-	gchar * no = NULL;
-
-	if(selectedCall)
-	{
-		switch(selectedCall->_state)
-		{
-			case CALL_STATE_TRANSFERT:
-			case CALL_STATE_DIALING:
-			case CALL_STATE_RINGING:
-				no = selectedCall->_peer_number;
-				break;
-			case CALL_STATE_CURRENT:
-			case CALL_STATE_HOLD:
-			case CALL_STATE_BUSY:
-			case CALL_STATE_FAILURE:
-			case CALL_STATE_INCOMING:
-			default:
-				no = selectedCall->_peer_number;
-				break;
-		}
-		DEBUG("Clipboard number: %s\n", no);
-		gtk_clipboard_set_text (clip, no, strlen(no) );
-	}
+  GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+  callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
+  gchar * no = NULL;
+
+  if (selectedCall)
+    {
+      switch (selectedCall->_state)
+        {
+      case CALL_STATE_TRANSFERT:
+      case CALL_STATE_DIALING:
+      case CALL_STATE_RINGING:
+        no = selectedCall->_peer_number;
+        break;
+      case CALL_STATE_CURRENT:
+      case CALL_STATE_HOLD:
+      case CALL_STATE_BUSY:
+      case CALL_STATE_FAILURE:
+      case CALL_STATE_INCOMING:
+      default:
+        no = selectedCall->_peer_number;
+        break;
+        }
+      DEBUG("Clipboard number: %s\n", no);
+      gtk_clipboard_set_text(clip, no, strlen(no));
+    }
 
 }
 
 // The menu Edit/Paste should paste the clipboard into the current selected call
-	static void
-edit_paste ( void * foo UNUSED)
+static void
+edit_paste(void * foo UNUSED)
 {
 
-	GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
-	callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-	gchar * no = gtk_clipboard_wait_for_text (clip);
-
-	if(no && selectedCall)
-	{
-		switch(selectedCall->_state)
-		{
-			case CALL_STATE_TRANSFERT:
-			case CALL_STATE_DIALING:
-				// Add the text to the number
-				{
-					gchar * before;
-					before = selectedCall->_peer_number;
-					DEBUG("TO: %s\n", before);
-					selectedCall->_peer_number = g_strconcat(before, no, NULL);
-
-					if(selectedCall->_state == CALL_STATE_DIALING)
-					{
-						selectedCall->_peer_info = g_strconcat("\"\" <", selectedCall->_peer_number, ">", NULL);	        		
-					}
-					calltree_update_call(current_calls, selectedCall, NULL);
-				}
-				break;
-			case CALL_STATE_RINGING:
-			case CALL_STATE_INCOMING:
-			case CALL_STATE_BUSY:
-			case CALL_STATE_FAILURE:
-			case CALL_STATE_HOLD:
-				{ // Create a new call to hold the new text
-					selectedCall = sflphone_new_call();
-
-					gchar * before = selectedCall->_peer_number;
-					selectedCall->_peer_number = g_strconcat(selectedCall->_peer_number, no, NULL);
-					DEBUG("TO: %s", selectedCall->_peer_number);
-
-					selectedCall->_peer_info = g_strconcat("\"\" <", selectedCall->_peer_number, ">", NULL);
-
-					calltree_update_call(current_calls, selectedCall, NULL);
-				}
-				break;
-			case CALL_STATE_CURRENT:
-			default:
-				{
-					unsigned int i;
-					for(i = 0; i < strlen(no); i++)
-					{
-						gchar * oneNo = g_strndup(&no[i], 1);
-						DEBUG("<%s>", oneNo);
-						dbus_play_dtmf(oneNo);
-
-						gchar * temp = g_strconcat(selectedCall->_peer_number, oneNo, NULL);
-						selectedCall->_peer_info = get_peer_info (temp, selectedCall->_peer_name);
-						// g_free(temp);
-						calltree_update_call(current_calls, selectedCall, NULL);
-
-					}
-				}
-				break;
-		}
-
-	}
-	else // There is no current call, create one
-	{
-		selectedCall = sflphone_new_call();
-
-		gchar * before = selectedCall->_peer_number;
-		selectedCall->_peer_number = g_strconcat(selectedCall->_peer_number, no, NULL);
-		g_free(before);
-		DEBUG("TO: %s", selectedCall->_peer_number);
-
-		g_free(selectedCall->_peer_info);
-		selectedCall->_peer_info = g_strconcat("\"\" <", selectedCall->_peer_number, ">", NULL);
-		calltree_update_call(current_calls, selectedCall, NULL);
-	}
+  GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+  callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
+  gchar * no = gtk_clipboard_wait_for_text(clip);
+
+  if (no && selectedCall)
+    {
+      switch (selectedCall->_state)
+        {
+      case CALL_STATE_TRANSFERT:
+      case CALL_STATE_DIALING:
+        // Add the text to the number
+        {
+          gchar * before;
+          before = selectedCall->_peer_number;
+          DEBUG("TO: %s\n", before);
+          selectedCall->_peer_number = g_strconcat(before, no, NULL);
+
+          if (selectedCall->_state == CALL_STATE_DIALING)
+            {
+              selectedCall->_peer_info = g_strconcat("\"\" <",
+                  selectedCall->_peer_number, ">", NULL);
+            }
+          calltree_update_call(current_calls, selectedCall, NULL);
+        }
+        break;
+      case CALL_STATE_RINGING:
+      case CALL_STATE_INCOMING:
+      case CALL_STATE_BUSY:
+      case CALL_STATE_FAILURE:
+      case CALL_STATE_HOLD:
+        { // Create a new call to hold the new text
+          selectedCall = sflphone_new_call();
+
+          gchar * before = selectedCall->_peer_number;
+          selectedCall->_peer_number = g_strconcat(selectedCall->_peer_number,
+              no, NULL);
+          DEBUG("TO: %s", selectedCall->_peer_number);
+
+          selectedCall->_peer_info = g_strconcat("\"\" <",
+              selectedCall->_peer_number, ">", NULL);
+
+          calltree_update_call(current_calls, selectedCall, NULL);
+        }
+        break;
+      case CALL_STATE_CURRENT:
+      default:
+        {
+          unsigned int i;
+          for (i = 0; i < strlen(no); i++)
+            {
+              gchar * oneNo = g_strndup(&no[i], 1);
+              DEBUG("<%s>", oneNo);
+              dbus_play_dtmf(oneNo);
+
+              gchar * temp = g_strconcat(selectedCall->_peer_number, oneNo,
+                  NULL);
+              selectedCall->_peer_info = get_peer_info(temp,
+                  selectedCall->_peer_name);
+              // g_free(temp);
+              calltree_update_call(current_calls, selectedCall, NULL);
+
+            }
+        }
+        break;
+        }
+
+    }
+  else // There is no current call, create one
+    {
+      selectedCall = sflphone_new_call();
+
+      gchar * before = selectedCall->_peer_number;
+      selectedCall->_peer_number = g_strconcat(selectedCall->_peer_number, no,
+          NULL);
+      g_free(before);
+      DEBUG("TO: %s", selectedCall->_peer_number);
+
+      g_free(selectedCall->_peer_info);
+      selectedCall->_peer_info = g_strconcat("\"\" <",
+          selectedCall->_peer_number, ">", NULL);
+      calltree_update_call(current_calls, selectedCall, NULL);
+    }
 
 }
 
-static void clear_history (void)
+static void
+clear_history(void)
 {
-	if( calllist_get_size( history ) != 0 ){
-		calllist_clean_history();
-	}
+  if (calllist_get_size(history) != 0)
+    {
+      calllist_clean_history();
+    }
 }
 
 /**
  * Transfert the line
  */
-static void call_transfer_cb ()
+static void
+call_transfer_cb()
 {
-	gboolean active = gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar)); 
-	active ? sflphone_set_transfert() : sflphone_unset_transfert() ; 
+  gboolean active = gtk_toggle_tool_button_get_active(
+      GTK_TOGGLE_TOOL_BUTTON (transferToolbar));
+  active ? sflphone_set_transfert() : sflphone_unset_transfert();
 }
 
-static void call_mailbox_cb (void)
+static void
+call_mailbox_cb(void)
 {
-	account_t* current;
-	callable_obj_t *mailbox_call;
-	gchar *to, *from, *account_id;
-
-	current = account_list_get_current ();
-	if( current == NULL ) // Should not happens
-		return;
-
-	to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX));
-	account_id = g_strdup (current->accountID);
-
-	create_new_call (CALL, CALL_STATE_DIALING, "", account_id, _("Voicemail"), to, &mailbox_call);
-	DEBUG("TO : %s" , mailbox_call->_peer_number);
-	calllist_add( current_calls , mailbox_call );
-	calltree_add_call( current_calls, mailbox_call, NULL);
-	update_actions();
-	sflphone_place_call( mailbox_call );
-	calltree_display(current_calls);
+  account_t* current;
+  callable_obj_t *mailbox_call;
+  gchar *to, *from, *account_id;
+
+  current = account_list_get_current();
+  if (current == NULL) // Should not happens
+    return;
+
+  to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX));
+  account_id = g_strdup(current->accountID);
+
+  create_new_call(CALL, CALL_STATE_DIALING, "", account_id, _("Voicemail"), to,
+      &mailbox_call);
+  DEBUG("TO : %s" , mailbox_call->_peer_number);
+  calllist_add(current_calls, mailbox_call);
+  calltree_add_call(current_calls, mailbox_call, NULL);
+  update_actions();
+  sflphone_place_call(mailbox_call);
+  calltree_display(current_calls);
 }
 
-static void toggle_history_cb (GtkToggleAction *action, gpointer user_data)
+static void
+toggle_history_cb(GtkToggleAction *action, gpointer user_data)
 {
-    gboolean toggle;
-    toggle = gtk_toggle_action_get_active (action);
-    (toggle)? calltree_display (history) : calltree_display (current_calls);
+  gboolean toggle;
+  toggle = gtk_toggle_action_get_active(action);
+  (toggle) ? calltree_display(history) : calltree_display(current_calls);
 }
 
-static void toggle_addressbook_cb (GtkToggleAction *action, gpointer user_data)
+static void
+toggle_addressbook_cb(GtkToggleAction *action, gpointer user_data)
 {
-    gboolean toggle;
-    toggle = gtk_toggle_action_get_active (action);
-    (toggle)? calltree_display (contacts) : calltree_display (current_calls);
+  gboolean toggle;
+  toggle = gtk_toggle_action_get_active(action);
+  (toggle) ? calltree_display(contacts) : calltree_display(current_calls);
 }
 
-static const GtkActionEntry menu_entries[] = {
-
-	// Call Menu 
-	{ "Call", NULL, N_("Call") },
-	{ "NewCall", GTK_STOCK_DIAL, N_("_New call"), "<control>N", N_("Place a new call"), G_CALLBACK (call_new_call) },
-	{ "PickUp", GTK_STOCK_PICKUP, N_("_Pick up"), NULL, N_("Answer the call"), G_CALLBACK (call_pick_up) },
-	{ "HangUp", GTK_STOCK_HANGUP, N_("_Hang up"), "<control>S", N_("Finish the call"), G_CALLBACK (call_hang_up) },    
-	{ "OnHold", GTK_STOCK_ONHOLD, N_("O_n hold"), "<control>P", N_("Place the call on hold"), G_CALLBACK (call_hold) },    
-	{ "OffHold", GTK_STOCK_OFFHOLD, N_("O_ff hold"), "<control>P", N_("Place the call off hold"), G_CALLBACK (call_hold) },    
-	{ "AccountAssistant", NULL, N_("Configuration _Assistant"), NULL, N_("Run the configuration assistant"), G_CALLBACK (call_configuration_assistant) },    
-	{ "Voicemail", "mail-read", N_("Voicemail"), NULL, N_("Call your voicemail"), G_CALLBACK (call_mailbox_cb) },    
-	{ "Close", GTK_STOCK_CLOSE, N_("_Close"), "<control>W", N_("Minimize to system tray"), G_CALLBACK (call_minimize) },
-	{ "Quit", GTK_STOCK_CLOSE, N_("_Quit"), "<control>Q", N_("Quit the program"), G_CALLBACK (call_quit) },   
-
-	// Edit Menu
-	{ "Edit", NULL, N_("_Edit") },
-	{ "Copy", GTK_STOCK_COPY, N_("_Copy"), "<control>C", N_("Copy the selection"), G_CALLBACK (edit_copy) },
-	{ "Paste", GTK_STOCK_PASTE, N_("_Paste"), "<control>V", N_("Paste the clipboard"), G_CALLBACK (edit_paste) },
-	{ "ClearHistory", GTK_STOCK_CLEAR, N_("Clear _history"), NULL, N_("Clear the call history"), G_CALLBACK (clear_history) },
-	{ "Accounts", NULL, N_("_Accounts"), NULL, N_("Edit your accounts"), G_CALLBACK (edit_accounts) },
-	{ "Preferences", GTK_STOCK_PREFERENCES, N_("_Preferences"), NULL, N_("Change your preferences"), G_CALLBACK (edit_preferences) },   
-
-	// View Menu
-	{ "View", NULL, N_("_View") },
-
-	// Help menu
-	{ "Help", NULL, N_("_Help") },
-	{ "HelpContents", GTK_STOCK_HELP, N_("Contents"), "F1", N_("Open the manual"), G_CALLBACK (help_contents_cb) },
-	{ "About", GTK_STOCK_ABOUT, NULL, NULL,  N_("About this application"), G_CALLBACK (help_about) }
-
-}; 
-
-static const GtkToggleActionEntry toggle_menu_entries[] = {
-
-	{ "Transfer", GTK_STOCK_TRANSFER, N_("_Transfer"), "<control>T", N_("Transfer the call"), NULL }, //G_CALLBACK (call_transfer_cb) },        
-	{ "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R", N_("Record the current conversation"), NULL }, // G_CALLBACK (call_record) },        
-	{ "Toolbar", NULL, N_("_Show toolbar"), "<control>T", N_("Show the toolbar"), NULL },
-	{ "Dialpad", NULL, N_("_Dialpad"), "<control>D", N_("Show the dialpad"), G_CALLBACK (dialpad_bar_cb) },
-	{ "VolumeControls",NULL, N_("_Volume controls"), "<control>V", N_("Show the volume controls"), G_CALLBACK (volume_bar_cb) },
-	{ "History", "appointment-soon", N_("_History"), NULL, N_("Calls history"), G_CALLBACK (toggle_history_cb), FALSE},
-	{ "Addressbook", GTK_STOCK_ADDRESSBOOK, N_("_Address book"), NULL, N_("Address book"), G_CALLBACK (toggle_addressbook_cb), FALSE}
-
-};
+static const GtkActionEntry menu_entries[] =
+  {
+
+  // Call Menu
+        { "Call", NULL, N_("Call") },
+        { "NewCall", GTK_STOCK_DIAL, N_("_New call"), "<control>N",
+            N_("Place a new call"), G_CALLBACK (call_new_call) },
+        { "PickUp", GTK_STOCK_PICKUP, N_("_Pick up"), NULL,
+            N_("Answer the call"), G_CALLBACK (call_pick_up) },
+        { "HangUp", GTK_STOCK_HANGUP, N_("_Hang up"), "<control>S",
+            N_("Finish the call"), G_CALLBACK (call_hang_up) },
+        { "OnHold", GTK_STOCK_ONHOLD, N_("O_n hold"), "<control>P",
+            N_("Place the call on hold"), G_CALLBACK (call_hold) },
+        { "OffHold", GTK_STOCK_OFFHOLD, N_("O_ff hold"), "<control>P",
+            N_("Place the call off hold"), G_CALLBACK (call_hold) },
+        { "AccountAssistant", NULL, N_("Configuration _Assistant"), NULL,
+            N_("Run the configuration assistant"),
+            G_CALLBACK (call_configuration_assistant) },
+        { "Voicemail", "mail-read", N_("Voicemail"), NULL,
+            N_("Call your voicemail"), G_CALLBACK (call_mailbox_cb) },
+        { "Close", GTK_STOCK_CLOSE, N_("_Close"), "<control>W",
+            N_("Minimize to system tray"), G_CALLBACK (call_minimize) },
+        { "Quit", GTK_STOCK_CLOSE, N_("_Quit"), "<control>Q",
+            N_("Quit the program"), G_CALLBACK (call_quit) },
+
+      // Edit Menu
+        { "Edit", NULL, N_("_Edit") },
+        { "Copy", GTK_STOCK_COPY, N_("_Copy"), "<control>C",
+            N_("Copy the selection"), G_CALLBACK (edit_copy) },
+        { "Paste", GTK_STOCK_PASTE, N_("_Paste"), "<control>V",
+            N_("Paste the clipboard"), G_CALLBACK (edit_paste) },
+        { "ClearHistory", GTK_STOCK_CLEAR, N_("Clear _history"), NULL,
+            N_("Clear the call history"), G_CALLBACK (clear_history) },
+        { "Accounts", NULL, N_("_Accounts"), NULL, N_("Edit your accounts"),
+            G_CALLBACK (edit_accounts) },
+        { "Preferences", GTK_STOCK_PREFERENCES, N_("_Preferences"), NULL,
+            N_("Change your preferences"), G_CALLBACK (edit_preferences) },
+
+      // View Menu
+        { "View", NULL, N_("_View") },
+
+      // Help menu
+        { "Help", NULL, N_("_Help") },
+        { "HelpContents", GTK_STOCK_HELP, N_("Contents"), "F1",
+            N_("Open the manual"), G_CALLBACK (help_contents_cb) },
+        { "About", GTK_STOCK_ABOUT, NULL, NULL, N_("About this application"),
+            G_CALLBACK (help_about) }
+
+  };
+
+static const GtkToggleActionEntry toggle_menu_entries[] =
+  {
+
+    { "Transfer", GTK_STOCK_TRANSFER, N_("_Transfer"), "<control>T",
+        N_("Transfer the call"), NULL }, //G_CALLBACK (call_transfer_cb) },
+        { "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R",
+            N_("Record the current conversation"), NULL }, // G_CALLBACK (call_record) },
+        { "Toolbar", NULL, N_("_Show toolbar"), "<control>T",
+            N_("Show the toolbar"), NULL },
+        { "Dialpad", NULL, N_("_Dialpad"), "<control>D",
+            N_("Show the dialpad"), G_CALLBACK (dialpad_bar_cb) },
+        { "VolumeControls", NULL, N_("_Volume controls"), "<control>V",
+            N_("Show the volume controls"), G_CALLBACK (volume_bar_cb) },
+        { "History", "appointment-soon", N_("_History"), NULL,
+            N_("Calls history"), G_CALLBACK (toggle_history_cb), FALSE },
+        { "Addressbook", GTK_STOCK_ADDRESSBOOK, N_("_Address book"), NULL,
+            N_("Address book"), G_CALLBACK (toggle_addressbook_cb), FALSE }
+
+  };
+
+gboolean
+uimanager_new(GtkUIManager **_ui_manager)
+{
 
-gboolean uimanager_new (GtkUIManager **_ui_manager) {
-
-	GtkUIManager *ui_manager;
-	GtkActionGroup *action_group;
-	GtkWidget *window;
-	gchar *path;
-	GError *error = NULL;
-
-	window = get_main_window ();
-	ui_manager = gtk_ui_manager_new ();
-
-	/* Create an accel group for window's shortcuts */
-	path = g_build_filename (SFLPHONE_UIDIR_UNINSTALLED, "./ui.xml", NULL);
-	if (g_file_test (path, G_FILE_TEST_EXISTS)) {
-		gtk_ui_manager_add_ui_from_file (ui_manager, path, &error);
-
-		if (error != NULL)
-		{
-			g_error_free (error);
-			return FALSE;
-		}
-		g_free (path);
-	}
-	else {
-		path = g_build_filename (SFLPHONE_UIDIR, "./ui.xml", NULL);
-		if (g_file_test (path, G_FILE_TEST_EXISTS)) {
-			gtk_ui_manager_add_ui_from_file (ui_manager, path, &error);
-
-			if (error != NULL)
-			{
-				g_error_free (error);
-				return FALSE;
-			}
-			g_free (path);
-		}
-		else
-			return FALSE;
-	}
-	action_group = gtk_action_group_new ("SFLphoneWindowActions");
-	// To translate label and tooltip entries
-	gtk_action_group_set_translation_domain (action_group, "sflphone-client-gnome");
-	gtk_action_group_add_actions (action_group, menu_entries, G_N_ELEMENTS (menu_entries), window);
-	gtk_action_group_add_toggle_actions (action_group, toggle_menu_entries, G_N_ELEMENTS (toggle_menu_entries), window);
-	//gtk_action_group_add_radio_actions (action_group, radio_menu_entries, G_N_ELEMENTS (radio_menu_entries), CALLTREE_CALLS, G_CALLBACK (calltree_switch_cb), window);
-	gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
-
-	*_ui_manager = ui_manager;
-
-	return TRUE;
+  GtkUIManager *ui_manager;
+  GtkActionGroup *action_group;
+  GtkWidget *window;
+  gchar *path;
+  GError *error = NULL;
+
+  window = get_main_window();
+  ui_manager = gtk_ui_manager_new();
+
+  /* Create an accel group for window's shortcuts */
+  path = g_build_filename(SFLPHONE_UIDIR_UNINSTALLED, "./ui.xml", NULL);
+  if (g_file_test(path, G_FILE_TEST_EXISTS))
+    {
+      gtk_ui_manager_add_ui_from_file(ui_manager, path, &error);
+
+      if (error != NULL)
+        {
+          g_error_free(error);
+          return FALSE;
+        }
+      g_free(path);
+    }
+  else
+    {
+      path = g_build_filename(SFLPHONE_UIDIR, "./ui.xml", NULL);
+      if (g_file_test(path, G_FILE_TEST_EXISTS))
+        {
+          gtk_ui_manager_add_ui_from_file(ui_manager, path, &error);
+
+          if (error != NULL)
+            {
+              g_error_free(error);
+              return FALSE;
+            }
+          g_free(path);
+        }
+      else
+        return FALSE;
+    }
+  action_group = gtk_action_group_new("SFLphoneWindowActions");
+  // To translate label and tooltip entries
+  gtk_action_group_set_translation_domain(action_group, "sflphone-client-gnome");
+  gtk_action_group_add_actions(action_group, menu_entries,
+      G_N_ELEMENTS (menu_entries), window);
+  gtk_action_group_add_toggle_actions(action_group, toggle_menu_entries,
+      G_N_ELEMENTS (toggle_menu_entries), window);
+  //gtk_action_group_add_radio_actions (action_group, radio_menu_entries, G_N_ELEMENTS (radio_menu_entries), CALLTREE_CALLS, G_CALLBACK (calltree_switch_cb), window);
+  gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
+
+  *_ui_manager = ui_manager;
+
+  return TRUE;
 }
 
-static void edit_number_cb (GtkWidget *widget UNUSED, gpointer user_data) {
-
+static void
+edit_number_cb(GtkWidget *widget UNUSED, gpointer user_data)
+{
 
-	show_edit_number ((callable_obj_t*)user_data);
+  show_edit_number((callable_obj_t*) user_data);
 }
 
-void add_registered_accounts_to_menu (GtkWidget *menu) {
-
-	GtkWidget *menu_items;
-	unsigned int i;
-	account_t* acc, *current;
-	gchar* alias;
-
-	menu_items = gtk_separator_menu_item_new ();
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-	gtk_widget_show (menu_items);
-
-	for( i = 0 ; i < account_list_get_size() ; i++ ){
-		acc = account_list_get_nth(i);
-		// Display only the registered accounts
-		if( g_strcasecmp( account_state_name(acc->state) , account_state_name(ACCOUNT_STATE_REGISTERED) ) == 0 ){
-			alias = g_strconcat( g_hash_table_lookup(acc->properties , ACCOUNT_ALIAS) , " - ",g_hash_table_lookup(acc->properties , ACCOUNT_TYPE), NULL);
-			menu_items = gtk_check_menu_item_new_with_mnemonic(alias);
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			g_object_set_data( G_OBJECT( menu_items ) , "account" , acc );
-			g_free( alias );
-			current = account_list_get_current();
-			if(current){
-				gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
-						(g_strcasecmp( acc->accountID , current->accountID) == 0)? TRUE : FALSE);
-			}
-			g_signal_connect (G_OBJECT (menu_items), "activate",
-					G_CALLBACK (switch_account),
-					NULL);
-			gtk_widget_show (menu_items);
-		} // fi
-	}
+void
+add_registered_accounts_to_menu(GtkWidget *menu)
+{
 
-}
+  GtkWidget *menu_items;
+  unsigned int i;
+  account_t* acc, *current;
+  gchar* alias;
+
+  menu_items = gtk_separator_menu_item_new();
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+  gtk_widget_show(menu_items);
+
+  for (i = 0; i < account_list_get_size(); i++)
+    {
+      acc = account_list_get_nth(i);
+      // Display only the registered accounts
+      if (g_strcasecmp(account_state_name(acc->state), account_state_name(
+          ACCOUNT_STATE_REGISTERED)) == 0)
+        {
+          alias = g_strconcat(g_hash_table_lookup(acc->properties,
+              ACCOUNT_ALIAS), " - ", g_hash_table_lookup(acc->properties,
+              ACCOUNT_TYPE), NULL);
+          menu_items = gtk_check_menu_item_new_with_mnemonic(alias);
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          g_object_set_data(G_OBJECT( menu_items ), "account", acc);
+          g_free(alias);
+          current = account_list_get_current();
+          if (current)
+            {
+              gtk_check_menu_item_set_active(
+                  GTK_CHECK_MENU_ITEM(menu_items),
+                  (g_strcasecmp(acc->accountID, current->accountID) == 0) ? TRUE
+                      : FALSE);
+            }
+          g_signal_connect (G_OBJECT (menu_items), "activate",
+              G_CALLBACK (switch_account),
+              NULL);
+          gtk_widget_show(menu_items);
+        } // fi
+    }
 
+}
 
-	void
-show_popup_menu (GtkWidget *my_widget, GdkEventButton *event)
+void
+show_popup_menu(GtkWidget *my_widget, GdkEventButton *event)
 {
-	// TODO update the selection to make sure the call under the mouse is the call selected
-
-	// call type boolean
-	gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record = FALSE, detach = FALSE;
-	gboolean accounts = FALSE;
-
-	// conference type boolean
-	gboolean hangup_conf = FALSE, hold_conf = FALSE; 
-
-	callable_obj_t * selectedCall;
-	conference_obj_t * selectedConf;
-
-	if (calltab_get_selected_type(current_calls) == A_CALL)
-	{
-		DEBUG("MENUS: SELECTED A CALL");
-		selectedCall = calltab_get_selected_call(current_calls);
-
-		if (selectedCall)
-		{
-			copy = TRUE;
-			switch(selectedCall->_state)
-			{
-				case CALL_STATE_INCOMING:
-					pickup = TRUE;
-					hangup = TRUE;
-					detach = TRUE;
-					break;
-				case CALL_STATE_HOLD:
-					hangup = TRUE;
-					hold   = TRUE;
-					detach = TRUE;
-					break;
-				case CALL_STATE_RINGING:
-					hangup = TRUE;
-					detach = TRUE;
-					break;
-				case CALL_STATE_DIALING:
-					pickup = TRUE;
-					hangup = TRUE;
-					accounts = TRUE;
-					break;
-				case CALL_STATE_RECORD:
-				case CALL_STATE_CURRENT:
-					hangup = TRUE;
-					hold   = TRUE;
-					record = TRUE;
-					detach = TRUE;
-					break;
-				case CALL_STATE_BUSY:
-				case CALL_STATE_FAILURE:
-					hangup = TRUE;
-					break;
-				default:
-					WARN("Should not happen in show_popup_menu for calls!");
-					break;
-			}
-		}
-	}
-	else
-	{
-		DEBUG("MENUS: SELECTED A CONF");	
-		selectedConf = calltab_get_selected_conf();
-
-		if (selectedConf)
-		{
-			switch(selectedConf->_state)
-			{
-				case CONFERENCE_STATE_ACTIVE_ATACHED:
-					hangup_conf = TRUE;
-					hold_conf = TRUE;
-					break;
-				case CONFERENCE_STATE_ACTIVE_DETACHED:
-					break;
-				case CONFERENCE_STATE_HOLD:
-					hangup_conf = TRUE;
-					hold_conf = TRUE;
-					break;
-				default:
-					WARN("Should not happen in show_popup_menu for conferences!");
-					break;
-			}
-		}
-
-	}
-
-	GtkWidget *menu;
-	GtkWidget *image;
-	int button, event_time;
-	GtkWidget * menu_items;
-
-	menu = gtk_menu_new ();
-	//g_signal_connect (menu, "deactivate",
-	//       G_CALLBACK (gtk_widget_destroy), NULL);
-	if (calltab_get_selected_type(current_calls) == A_CALL)
-	{
-		DEBUG("BUILD CALL MENU");
-
-		if(copy)
-		{
-			menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_COPY, get_accel_group());
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			g_signal_connect (G_OBJECT (menu_items), "activate",
-					G_CALLBACK (edit_copy),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-
-		menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_PASTE, get_accel_group());
-		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-		g_signal_connect (G_OBJECT (menu_items), "activate",
-				G_CALLBACK (edit_paste),
-				NULL);
-		gtk_widget_show (menu_items);
-
-		if(pickup || hangup || hold)
-		{
-			menu_items = gtk_separator_menu_item_new ();
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			gtk_widget_show (menu_items);
-		}
-
-		if(pickup)
-		{
-
-			menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Pick up"));
-			image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg");
-			gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			g_signal_connect (G_OBJECT (menu_items), "activate",
-					G_CALLBACK (call_pick_up),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-
-		if(hangup)
-		{
-			menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-			image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg");
-			gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			g_signal_connect (G_OBJECT (menu_items), "activate",
-					G_CALLBACK (call_hang_up),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-
-		if(hold)
-		{
-			menu_items = gtk_check_menu_item_new_with_mnemonic (_("On _Hold"));
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
-					(selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
-			g_signal_connect(G_OBJECT (menu_items), "activate",
-					G_CALLBACK (call_hold),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-
-		if(record)
-		{
-			menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Record"));
-			image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_MENU);
-			gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			g_signal_connect (G_OBJECT (menu_items), "activate",
-					G_CALLBACK (call_record),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-
-	}
-	else
-	{
-		DEBUG("BUILD CONFERENCE MENU");
-
-		if(hangup_conf)
-		{
-			menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-			image = gtk_image_new_from_file( ICONS_DIR "/icon_hangup.svg");
-			gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			g_signal_connect (G_OBJECT (menu_items), "activate",
-					G_CALLBACK (conference_hang_up),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-
-		if(hold_conf)
-		{
-			menu_items = gtk_check_menu_item_new_with_mnemonic (_("On _Hold"));
-			gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-			gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
-					(selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
-			g_signal_connect(G_OBJECT (menu_items), "activate",
-					G_CALLBACK (conference_hold),
-					NULL);
-			gtk_widget_show (menu_items);
-		}
-	}
-
-	if(accounts)
-	{
-		add_registered_accounts_to_menu (menu);
-	}
-
-	if (event)
-	{
-		button = event->button;
-		event_time = event->time;
-	}
-	else
-	{
-		button = 0;
-		event_time = gtk_get_current_event_time ();
-	}
-
-	gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
-	gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
-			button, event_time);
+  // TODO update the selection to make sure the call under the mouse is the call selected
+
+  // call type boolean
+  gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record =
+      FALSE, detach = FALSE;
+  gboolean accounts = FALSE;
+
+  // conference type boolean
+  gboolean hangup_conf = FALSE, hold_conf = FALSE;
+
+  callable_obj_t * selectedCall;
+  conference_obj_t * selectedConf;
+
+  if (calltab_get_selected_type(current_calls) == A_CALL)
+    {
+      DEBUG("MENUS: SELECTED A CALL");
+      selectedCall = calltab_get_selected_call(current_calls);
+
+      if (selectedCall)
+        {
+          copy = TRUE;
+          switch (selectedCall->_state)
+            {
+          case CALL_STATE_INCOMING:
+            pickup = TRUE;
+            hangup = TRUE;
+            detach = TRUE;
+            break;
+          case CALL_STATE_HOLD:
+            hangup = TRUE;
+            hold = TRUE;
+            detach = TRUE;
+            break;
+          case CALL_STATE_RINGING:
+            hangup = TRUE;
+            detach = TRUE;
+            break;
+          case CALL_STATE_DIALING:
+            pickup = TRUE;
+            hangup = TRUE;
+            accounts = TRUE;
+            break;
+          case CALL_STATE_RECORD:
+          case CALL_STATE_CURRENT:
+            hangup = TRUE;
+            hold = TRUE;
+            record = TRUE;
+            detach = TRUE;
+            break;
+          case CALL_STATE_BUSY:
+          case CALL_STATE_FAILURE:
+            hangup = TRUE;
+            break;
+          default:
+            WARN("Should not happen in show_popup_menu for calls!")
+            ;
+            break;
+            }
+        }
+    }
+  else
+    {
+      DEBUG("MENUS: SELECTED A CONF");
+      selectedConf = calltab_get_selected_conf();
+
+      if (selectedConf)
+        {
+          switch (selectedConf->_state)
+            {
+          case CONFERENCE_STATE_ACTIVE_ATACHED:
+            hangup_conf = TRUE;
+            hold_conf = TRUE;
+            break;
+          case CONFERENCE_STATE_ACTIVE_DETACHED:
+            break;
+          case CONFERENCE_STATE_HOLD:
+            hangup_conf = TRUE;
+            hold_conf = TRUE;
+            break;
+          default:
+            WARN("Should not happen in show_popup_menu for conferences!")
+            ;
+            break;
+            }
+        }
+
+    }
+
+  GtkWidget *menu;
+  GtkWidget *image;
+  int button, event_time;
+  GtkWidget * menu_items;
+
+  menu = gtk_menu_new();
+  //g_signal_connect (menu, "deactivate",
+  //       G_CALLBACK (gtk_widget_destroy), NULL);
+  if (calltab_get_selected_type(current_calls) == A_CALL)
+    {
+      DEBUG("BUILD CALL MENU");
+
+      if (copy)
+        {
+          menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY,
+              get_accel_group());
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          g_signal_connect (G_OBJECT (menu_items), "activate",
+              G_CALLBACK (edit_copy),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+
+      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_PASTE,
+          get_accel_group());
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+      g_signal_connect (G_OBJECT (menu_items), "activate",
+          G_CALLBACK (edit_paste),
+          NULL);
+      gtk_widget_show(menu_items);
+
+      if (pickup || hangup || hold)
+        {
+          menu_items = gtk_separator_menu_item_new();
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          gtk_widget_show(menu_items);
+        }
+
+      if (pickup)
+        {
+
+          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Pick up"));
+          image = gtk_image_new_from_file(ICONS_DIR "/icon_accept.svg");
+          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          g_signal_connect (G_OBJECT (menu_items), "activate",
+              G_CALLBACK (call_pick_up),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+
+      if (hangup)
+        {
+          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
+          image = gtk_image_new_from_file(ICONS_DIR "/icon_hangup.svg");
+          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          g_signal_connect (G_OBJECT (menu_items), "activate",
+              G_CALLBACK (call_hang_up),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+
+      if (hold)
+        {
+          menu_items = gtk_check_menu_item_new_with_mnemonic(_("On _Hold"));
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
+              (selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
+          g_signal_connect(G_OBJECT (menu_items), "activate",
+              G_CALLBACK (call_hold),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+
+      if (record)
+        {
+          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Record"));
+          image = gtk_image_new_from_stock(GTK_STOCK_MEDIA_RECORD,
+              GTK_ICON_SIZE_MENU);
+          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          g_signal_connect (G_OBJECT (menu_items), "activate",
+              G_CALLBACK (call_record),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+
+    }
+  else
+    {
+      DEBUG("BUILD CONFERENCE MENU");
+
+      if (hangup_conf)
+        {
+          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
+          image = gtk_image_new_from_file(ICONS_DIR "/icon_hangup.svg");
+          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          g_signal_connect (G_OBJECT (menu_items), "activate",
+              G_CALLBACK (conference_hang_up),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+
+      if (hold_conf)
+        {
+          menu_items = gtk_check_menu_item_new_with_mnemonic(_("On _Hold"));
+          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+          gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
+              (selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
+          g_signal_connect(G_OBJECT (menu_items), "activate",
+              G_CALLBACK (conference_hold),
+              NULL);
+          gtk_widget_show(menu_items);
+        }
+    }
+
+  if (accounts)
+    {
+      add_registered_accounts_to_menu(menu);
+    }
+
+  if (event)
+    {
+      button = event->button;
+      event_time = event->time;
+    }
+  else
+    {
+      button = 0;
+      event_time = gtk_get_current_event_time();
+    }
+
+  gtk_menu_attach_to_widget(GTK_MENU (menu), my_widget, NULL);
+  gtk_menu_popup(GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 }
 
-
-	void
+void
 show_popup_menu_history(GtkWidget *my_widget, GdkEventButton *event)
 {
 
-	gboolean pickup = FALSE;
-	gboolean remove = FALSE;
-	gboolean edit = FALSE;
-	gboolean accounts = FALSE;
-
-	callable_obj_t * selectedCall = calltab_get_selected_call( history );
-	if (selectedCall)
-	{
-		remove = TRUE;
-		pickup = TRUE;
-		edit = TRUE;
-		accounts = TRUE;
-	}
-
-	GtkWidget *menu;
-	GtkWidget *image;
-	int button, event_time;
-	GtkWidget * menu_items;
-
-	menu = gtk_menu_new ();
-	//g_signal_connect (menu, "deactivate",
-	//       G_CALLBACK (gtk_widget_destroy), NULL);
-
-	if(pickup)
-	{
-
-		menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Call back"));
-		image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg");
-		gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image );
-		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-		g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
-		gtk_widget_show (menu_items);
-	}
-
-	menu_items = gtk_separator_menu_item_new ();
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-	gtk_widget_show (menu_items);
-
-	if (edit)
-	{
-		menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_EDIT, get_accel_group());
-		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-		g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
-		gtk_widget_show (menu_items);
-	}
-
-
-	if(remove)
-	{
-		menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_DELETE, get_accel_group());
-		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-		g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history),  NULL);
-		gtk_widget_show (menu_items);
-	}
-
-	if(accounts)
-	{
-		add_registered_accounts_to_menu (menu);
-	}
-
-	if (event)
-	{
-		button = event->button;
-		event_time = event->time;
-	}
-	else
-	{
-		button = 0;
-		event_time = gtk_get_current_event_time ();
-	}
-
-	gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
-	gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
-			button, event_time);
+  gboolean pickup = FALSE;
+  gboolean remove = FALSE;
+  gboolean edit = FALSE;
+  gboolean accounts = FALSE;
+
+  callable_obj_t * selectedCall = calltab_get_selected_call(history);
+  if (selectedCall)
+    {
+      remove = TRUE;
+      pickup = TRUE;
+      edit = TRUE;
+      accounts = TRUE;
+    }
+
+  GtkWidget *menu;
+  GtkWidget *image;
+  int button, event_time;
+  GtkWidget * menu_items;
+
+  menu = gtk_menu_new();
+  //g_signal_connect (menu, "deactivate",
+  //       G_CALLBACK (gtk_widget_destroy), NULL);
+
+  if (pickup)
+    {
+
+      menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Call back"));
+      image = gtk_image_new_from_file(ICONS_DIR "/icon_accept.svg");
+      gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM ( menu_items ), image);
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
+      gtk_widget_show(menu_items);
+    }
+
+  menu_items = gtk_separator_menu_item_new();
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+  gtk_widget_show(menu_items);
+
+  if (edit)
+    {
+      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT,
+          get_accel_group());
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
+      gtk_widget_show(menu_items);
+    }
+
+  if (remove)
+    {
+      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_DELETE,
+          get_accel_group());
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+      g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history), NULL);
+      gtk_widget_show(menu_items);
+    }
+
+  if (accounts)
+    {
+      add_registered_accounts_to_menu(menu);
+    }
+
+  if (event)
+    {
+      button = event->button;
+      event_time = event->time;
+    }
+  else
+    {
+      button = 0;
+      event_time = gtk_get_current_event_time();
+    }
+
+  gtk_menu_attach_to_widget(GTK_MENU (menu), my_widget, NULL);
+  gtk_menu_popup(GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 }
-	void
+void
 show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event)
 {
 
-	gboolean pickup = FALSE;
-	gboolean accounts = FALSE;
-	gboolean edit = FALSE;
-
-	callable_obj_t * selectedCall = calltab_get_selected_call( contacts );
-	if (selectedCall)
-	{
-		pickup = TRUE;
-		accounts = TRUE;
-		edit = TRUE;
-	}
-
-	GtkWidget *menu;
-	GtkWidget *image;
-	int button, event_time;
-	GtkWidget * menu_items;
-
-	menu = gtk_menu_new ();
-	//g_signal_connect (menu, "deactivate",
-	//       G_CALLBACK (gtk_widget_destroy), NULL);
-
-	if(pickup)
-	{
-
-		menu_items = gtk_image_menu_item_new_with_mnemonic(_("_New call"));
-		image = gtk_image_new_from_file( ICONS_DIR "/icon_accept.svg");
-		gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM ( menu_items ), image );
-		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-		g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
-		gtk_widget_show (menu_items);
-	}
-
-	if (edit)
-	{
-		menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_EDIT, get_accel_group());
-		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
-		g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
-		gtk_widget_show (menu_items);
-	}
-
-	if(accounts)
-	{
-		add_registered_accounts_to_menu (menu);
-	}
-
-	if (event)
-	{
-		button = event->button;
-		event_time = event->time;
-	}
-	else
-	{
-		button = 0;
-		event_time = gtk_get_current_event_time ();
-	}
-
-	gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
-	gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
-			button, event_time);
+  gboolean pickup = FALSE;
+  gboolean accounts = FALSE;
+  gboolean edit = FALSE;
+
+  callable_obj_t * selectedCall = calltab_get_selected_call(contacts);
+  if (selectedCall)
+    {
+      pickup = TRUE;
+      accounts = TRUE;
+      edit = TRUE;
+    }
+
+  GtkWidget *menu;
+  GtkWidget *image;
+  int button, event_time;
+  GtkWidget * menu_items;
+
+  menu = gtk_menu_new();
+  //g_signal_connect (menu, "deactivate",
+  //       G_CALLBACK (gtk_widget_destroy), NULL);
+
+  if (pickup)
+    {
+
+      menu_items = gtk_image_menu_item_new_with_mnemonic(_("_New call"));
+      image = gtk_image_new_from_file(ICONS_DIR "/icon_accept.svg");
+      gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM ( menu_items ), image);
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
+      gtk_widget_show(menu_items);
+    }
+
+  if (edit)
+    {
+      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT,
+          get_accel_group());
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
+      gtk_widget_show(menu_items);
+    }
+
+  if (accounts)
+    {
+      add_registered_accounts_to_menu(menu);
+    }
+
+  if (event)
+    {
+      button = event->button;
+      event_time = event->time;
+    }
+  else
+    {
+      button = 0;
+      event_time = gtk_get_current_event_time();
+    }
+
+  gtk_menu_attach_to_widget(GTK_MENU (menu), my_widget, NULL);
+  gtk_menu_popup(GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 }
 
+static void
+ok_cb(GtkWidget *widget UNUSED, gpointer userdata)
+{
 
-static void ok_cb (GtkWidget *widget UNUSED, gpointer userdata) {
-
-	gchar *new_number;
-	callable_obj_t *modified_call, *original;
+  gchar *new_number;
+  callable_obj_t *modified_call, *original;
 
-	// Change the number of the selected call before calling
-	new_number = (gchar*) gtk_entry_get_text (GTK_ENTRY (editable_num));
-	original = (callable_obj_t*)userdata;
+  // Change the number of the selected call before calling
+  new_number = (gchar*) gtk_entry_get_text(GTK_ENTRY (editable_num));
+  original = (callable_obj_t*) userdata;
 
-	// Create the new call
-	create_new_call (CALL, CALL_STATE_DIALING, "", g_strdup (original->_accountID), original->_peer_name, g_strdup (new_number), &modified_call);
+  // Create the new call
+  create_new_call(CALL, CALL_STATE_DIALING, "", g_strdup(original->_accountID),
+      original->_peer_name, g_strdup(new_number), &modified_call);
 
-	// Update the internal data structure and the GUI
-	calllist_add(current_calls, modified_call);
-	calltree_add_call(current_calls, modified_call, NULL);
-	sflphone_place_call(modified_call);
-	calltree_display (current_calls);
+  // Update the internal data structure and the GUI
+  calllist_add(current_calls, modified_call);
+  calltree_add_call(current_calls, modified_call, NULL);
+  sflphone_place_call(modified_call);
+  calltree_display(current_calls);
 
-	// Close the contextual menu
-	gtk_widget_destroy (GTK_WIDGET (edit_dialog));
+  // Close the contextual menu
+  gtk_widget_destroy(GTK_WIDGET (edit_dialog));
 }
 
-static void on_delete (GtkWidget * widget)
+static void
+on_delete(GtkWidget * widget)
 {
-	gtk_widget_destroy (widget);
+  gtk_widget_destroy(widget);
 }
 
-void show_edit_number (callable_obj_t *call) {
+void
+show_edit_number(callable_obj_t *call)
+{
 
-	GtkWidget *ok, *hbox, *image;
-	GdkPixbuf *pixbuf;
+  GtkWidget *ok, *hbox, *image;
+  GdkPixbuf *pixbuf;
 
-	edit_dialog = GTK_DIALOG (gtk_dialog_new());
+  edit_dialog = GTK_DIALOG (gtk_dialog_new());
 
-	// Set window properties
-	gtk_window_set_default_size(GTK_WINDOW(edit_dialog), 300, 20);
-	gtk_window_set_title(GTK_WINDOW(edit_dialog), _("Edit phone number"));
-	gtk_window_set_resizable (GTK_WINDOW (edit_dialog), FALSE);
+  // Set window properties
+  gtk_window_set_default_size(GTK_WINDOW(edit_dialog), 300, 20);
+  gtk_window_set_title(GTK_WINDOW(edit_dialog), _("Edit phone number"));
+  gtk_window_set_resizable(GTK_WINDOW (edit_dialog), FALSE);
 
-	g_signal_connect (G_OBJECT (edit_dialog), "delete-event", G_CALLBACK (on_delete), NULL);
+  g_signal_connect (G_OBJECT (edit_dialog), "delete-event", G_CALLBACK (on_delete), NULL);
 
-	hbox = gtk_hbox_new (FALSE, 0);
-	gtk_box_pack_start(GTK_BOX (edit_dialog->vbox), hbox, TRUE, TRUE, 0);
+  hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX (edit_dialog->vbox), hbox, TRUE, TRUE, 0);
 
-	// Set the number to be edited
-	editable_num = gtk_entry_new ();
+  // Set the number to be edited
+  editable_num = gtk_entry_new();
 #if GTK_CHECK_VERSION(2,12,0)
-	gtk_widget_set_tooltip_text(GTK_WIDGET(editable_num), _("Edit the phone number before making a call"));
+  gtk_widget_set_tooltip_text(GTK_WIDGET(editable_num),
+      _("Edit the phone number before making a call"));
 #endif
-	if (call)
-		gtk_entry_set_text(GTK_ENTRY(editable_num), g_strdup (call->_peer_number));
-	else
-		ERROR ("This a bug, the call should be defined. menus.c line 1051");
+  if (call)
+    gtk_entry_set_text(GTK_ENTRY(editable_num), g_strdup(call->_peer_number));
+  else
+    ERROR ("This a bug, the call should be defined. menus.c line 1051");
 
-	gtk_box_pack_start(GTK_BOX (hbox), editable_num, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX (hbox), editable_num, TRUE, TRUE, 0);
 
-	// Set a custom image for the button
-	pixbuf = gdk_pixbuf_new_from_file_at_scale (ICONS_DIR "/outgoing.svg", 32, 32, TRUE, NULL);
-	image = gtk_image_new_from_pixbuf (pixbuf);
-	ok = gtk_button_new ();
-	gtk_button_set_image (GTK_BUTTON (ok), image);
-	gtk_box_pack_start(GTK_BOX (hbox), ok, TRUE, TRUE, 0);
-	g_signal_connect(G_OBJECT (ok), "clicked", G_CALLBACK (ok_cb), call);
+  // Set a custom image for the button
+  pixbuf = gdk_pixbuf_new_from_file_at_scale(ICONS_DIR "/outgoing.svg", 32, 32,
+      TRUE, NULL);
+  image = gtk_image_new_from_pixbuf(pixbuf);
+  ok = gtk_button_new();
+  gtk_button_set_image(GTK_BUTTON (ok), image);
+  gtk_box_pack_start(GTK_BOX (hbox), ok, TRUE, TRUE, 0);
+  g_signal_connect(G_OBJECT (ok), "clicked", G_CALLBACK (ok_cb), call);
 
-	gtk_widget_show_all (edit_dialog->vbox);
+  gtk_widget_show_all(edit_dialog->vbox);
 
-	gtk_dialog_run(edit_dialog);
+  gtk_dialog_run(edit_dialog);
 
 }
 
-GtkWidget* create_waiting_icon()
+GtkWidget*
+create_waiting_icon()
 {
-	GtkWidget * waiting_icon;
-	waiting_icon = gtk_image_menu_item_new_with_label("");
-	gtk_image_menu_item_set_image (
-			GTK_IMAGE_MENU_ITEM(waiting_icon),
-			gtk_image_new_from_animation(
-				gdk_pixbuf_animation_new_from_file(ICONS_DIR "/wait-on.gif", NULL)));
-	gtk_menu_item_set_right_justified(GTK_MENU_ITEM(waiting_icon),TRUE);
-
-	return waiting_icon;
+  GtkWidget * waiting_icon;
+  waiting_icon = gtk_image_menu_item_new_with_label("");
+  gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(waiting_icon),
+      gtk_image_new_from_animation(gdk_pixbuf_animation_new_from_file(
+          ICONS_DIR "/wait-on.gif", NULL)));
+  gtk_menu_item_set_right_justified(GTK_MENU_ITEM(waiting_icon), TRUE);
+
+  return waiting_icon;
 }
 
-void create_menus (GtkUIManager *ui_manager, GtkWidget **widget)
+void
+create_menus(GtkUIManager *ui_manager, GtkWidget **widget)
 {
 
-	GtkWidget * menu_bar;
-
-	menu_bar = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
-	pickUpAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/PickUp");
-	newCallAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/NewCall");
-	hangUpAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/HangUp");
-	holdMenu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar/CallMenu/OnHoldMenu");
-	recordAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/Record");
-	copyAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/EditMenu/Copy");
-	pasteAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/EditMenu/Paste");
-	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 (volumeToggle), (gboolean) SHOW_VOLUME);
-
-	gtk_action_set_sensitive (GTK_ACTION (volumeToggle), SHOW_ALSA_CONF);
-
-	// Disable it right now
-	gtk_action_set_sensitive (GTK_ACTION (gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/Toolbar")), FALSE);
-
-	waitingLayer = create_waiting_icon ();
-	gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), waitingLayer);
-
-	*widget = menu_bar;
+  GtkWidget * menu_bar;
+
+  menu_bar = gtk_ui_manager_get_widget(ui_manager, "/MenuBar");
+  pickUpAction = gtk_ui_manager_get_action(ui_manager,
+      "/MenuBar/CallMenu/PickUp");
+  newCallAction = gtk_ui_manager_get_action(ui_manager,
+      "/MenuBar/CallMenu/NewCall");
+  hangUpAction = gtk_ui_manager_get_action(ui_manager,
+      "/MenuBar/CallMenu/HangUp");
+  holdMenu = gtk_ui_manager_get_widget(ui_manager,
+      "/MenuBar/CallMenu/OnHoldMenu");
+  recordAction = gtk_ui_manager_get_action(ui_manager,
+      "/MenuBar/CallMenu/Record");
+  copyAction = gtk_ui_manager_get_action(ui_manager, "/MenuBar/EditMenu/Copy");
+  pasteAction
+      = gtk_ui_manager_get_action(ui_manager, "/MenuBar/EditMenu/Paste");
+  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 (volumeToggle),
+      (gboolean) SHOW_VOLUME);
+
+  gtk_action_set_sensitive(GTK_ACTION (volumeToggle), SHOW_ALSA_CONF);
+
+  // Disable it right now
+  gtk_action_set_sensitive(
+      GTK_ACTION (gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/Toolbar")),
+      FALSE);
+
+  waitingLayer = create_waiting_icon();
+  gtk_menu_shell_append(GTK_MENU_SHELL (menu_bar), waitingLayer);
+
+  *widget = menu_bar;
 }
 
-void create_toolbar_actions (GtkUIManager *ui_manager, GtkWidget **widget)
+void
+create_toolbar_actions(GtkUIManager *ui_manager, GtkWidget **widget)
 {
-	toolbar = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions");
-
-	holdToolbar = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/OnHoldToolbar");
-	offHoldToolbar = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/OffHoldToolbar");
-	transferToolbar = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/TransferToolbar");
-	voicemailAction = gtk_ui_manager_get_action (ui_manager, "/ToolbarActions/Voicemail");
-	voicemailToolbar = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/VoicemailToolbar");
-	newCallWidget = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/NewCallToolbar");
-	pickUpWidget = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/PickUpToolbar");
-	hangUpWidget = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/HangUpToolbar");
-	recordWidget = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/RecordToolbar");
-	historyButton = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/HistoryToolbar");
-	contactButton = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions/AddressbookToolbar");
-
-	// Set the handler ID for the transfer
-    transfertButtonConnId = g_signal_connect (G_OBJECT (transferToolbar), "toggled", G_CALLBACK (call_transfer_cb), NULL);
-	recordButtonConnId = g_signal_connect (G_OBJECT (recordWidget), "toggled", G_CALLBACK (call_record), NULL);
-	active_calltree = current_calls;
-
-	*widget = toolbar;
+  toolbar = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions");
+
+  holdToolbar = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/OnHoldToolbar");
+  offHoldToolbar = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/OffHoldToolbar");
+  transferToolbar = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/TransferToolbar");
+  voicemailAction = gtk_ui_manager_get_action(ui_manager,
+      "/ToolbarActions/Voicemail");
+  voicemailToolbar = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/VoicemailToolbar");
+  newCallWidget = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/NewCallToolbar");
+  pickUpWidget = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/PickUpToolbar");
+  hangUpWidget = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/HangUpToolbar");
+  recordWidget = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/RecordToolbar");
+  historyButton = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/HistoryToolbar");
+  contactButton = gtk_ui_manager_get_widget(ui_manager,
+      "/ToolbarActions/AddressbookToolbar");
+
+  // Set the handler ID for the transfer
+  transfertButtonConnId
+      = g_signal_connect (G_OBJECT (transferToolbar), "toggled", G_CALLBACK (call_transfer_cb), NULL);
+  recordButtonConnId
+      = g_signal_connect (G_OBJECT (recordWidget), "toggled", G_CALLBACK (call_record), NULL);
+  active_calltree = current_calls;
+
+  *widget = toolbar;
 }
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 3361c16dd5..6be7c8b6d3 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -461,6 +461,15 @@
       <arg type="i" name="posY" direction="in"/>
 	</method>
 	
+	<method name="enableStatusIcon">
+      <arg type="s" name="value" direction="in"/>
+	</method>
+		
+	<method name="isStatusIconEnabled">
+      <arg type="s" name="value" direction="out"/>
+	</method>
+	
+	
     <!-- Addressbook configuration -->
     <method name="getAddressbookSettings">
       <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 1eb0c06ff7..84588ea011 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -868,3 +868,13 @@ void ConfigurationManager::setWindowPositionY (const int32_t& posY) {
 
 	Manager::instance ().setConfig (PREFERENCES, WINDOW_POSITION_Y, posY);
 }
+
+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
index 7749fd233a..eb1f631072 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -123,6 +123,9 @@ public:
 	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);
     std::vector< std::string > getAddressbookList ( void );
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index fc85025e76..f4e3f899eb 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -51,7 +51,6 @@
 #include <sys/types.h> // mkdir(2)
 #include <sys/stat.h>  // mkdir(2)
 #include <pwd.h>       // getpwuid
-
 #define DIRECT_IP_CALL	"IP CALL"
 
 #define fill_config_str(name, value) \
@@ -61,2132 +60,2007 @@
 
 #define MD5_APPEND(pms,buf,len) pj_md5_update(pms, (const pj_uint8_t*)buf, len)
 
-ManagerImpl::ManagerImpl (void)
-        : _hasTriedToRegister (false)
-        , _config()
-        , _currentCallId2()
-        , _currentCallMutex()
-        , _codecBuilder (NULL)
-        , _audiodriver (NULL)
-        , _dtmfKey (NULL)
-        , _codecDescriptorMap()
-        , _toneMutex()
-        , _telephoneTone (NULL)
-        , _audiofile()
-        , _spkr_volume (0)
-        , _mic_volume (0)
-        , _mutex()
-        , _dbus (NULL)
-        , _waitingCall()
-        , _waitingCallMutex()
-        , _nbIncomingWaitingCall (0)
-        , _path ("")
-        , _exist (0)
-        , _setupLoaded (false)
-        , _callAccountMap()
-        , _callAccountMapMutex()
-        , _callConfigMap()
-        , _accountMap()
-        , _directIpAccount (NULL)
-        , _cleaner (NULL)
-        , _history (NULL)
-{
-
-    // initialize random generator for call id
-    srand (time (NULL));
-
-    _cleaner = new NumberCleaner ();
-    _history = new HistoryManager ();
+ManagerImpl::ManagerImpl (void) :
+	_hasTriedToRegister(false), _config(), _currentCallId2(),
+			_currentCallMutex(), _codecBuilder(NULL), _audiodriver(NULL),
+			_dtmfKey(NULL), _codecDescriptorMap(), _toneMutex(),
+			_telephoneTone(NULL), _audiofile(), _spkr_volume(0),
+			_mic_volume(0), _mutex(), _dbus(NULL), _waitingCall(),
+			_waitingCallMutex(), _nbIncomingWaitingCall(0), _path(""),
+			_exist(0), _setupLoaded(false), _callAccountMap(),
+			_callAccountMapMutex(), _callConfigMap(), _accountMap(),
+			_directIpAccount(NULL), _cleaner(NULL), _history(NULL) {
+
+	// initialize random generator for call id
+	srand(time(NULL));
+
+	_cleaner = new NumberCleaner();
+	_history = new HistoryManager();
 
 #ifdef TEST
-    testAccountMap();
-    loadAccountMap();
-    testCallAccountMap();
-    unloadAccountMap();
+	testAccountMap();
+	loadAccountMap();
+	testCallAccountMap();
+	unloadAccountMap();
 #endif
 
-    // should be call before initConfigFile
-    // loadAccountMap();, called in init() now.
+	// should be call before initConfigFile
+	// loadAccountMap();, called in init() now.
 }
 
 // never call if we use only the singleton...
-ManagerImpl::~ManagerImpl (void)
-{
-    // terminate();
-    delete _cleaner;
-    _cleaner=0;
-    _debug ("%s stop correctly.", PROGNAME);
+ManagerImpl::~ManagerImpl (void) {
+	// terminate();
+	delete _cleaner;
+	_cleaner = 0;
+	_debug ("%s stop correctly.", PROGNAME);
 }
 
-void
-ManagerImpl::init()
-{
-
-    // Load accounts, init map
-    loadAccountMap();
+void ManagerImpl::init () {
 
-    initVolume();
+	// Load accounts, init map
+	loadAccountMap();
 
-    if (_exist == 0) {
-        _debug ("Cannot create config file in your home directory");
-    }
+	initVolume();
 
-    initAudioDriver();
+	if (_exist == 0) {
+		_debug ("Cannot create config file in your home directory");
+	}
 
-    selectAudioDriver();
+	initAudioDriver();
 
-    // Initialize the list of supported audio codecs
-    initAudioCodec();
+	selectAudioDriver();
 
-    AudioLayer *audiolayer = getAudioDriver();
+	// Initialize the list of supported audio codecs
+	initAudioCodec();
 
-    if (audiolayer != 0) {
-        unsigned int sampleRate = audiolayer->getSampleRate();
+	AudioLayer *audiolayer = getAudioDriver();
 
-        _debugInit ("Load Telephone Tone");
-        std::string country = getConfigString (PREFERENCES, ZONE_TONE);
-        _telephoneTone = new TelephoneTone (country, sampleRate);
+	if (audiolayer != 0) {
+		unsigned int sampleRate = audiolayer->getSampleRate();
 
-        _debugInit ("Loading DTMF key");
-        _dtmfKey = new DTMF (sampleRate);
-    }
+		_debugInit ("Load Telephone Tone");
+		std::string country = getConfigString(PREFERENCES, ZONE_TONE);
+		_telephoneTone = new TelephoneTone(country, sampleRate);
 
-    if (audiolayer == 0)
-        audiolayer->stopStream();
+		_debugInit ("Loading DTMF key");
+		_dtmfKey = new DTMF(sampleRate);
+	}
 
+	if (audiolayer == 0)
+		audiolayer->stopStream();
 
-    // Load the history
-    _history->load_history (getConfigInt (PREFERENCES, CONFIG_HISTORY_LIMIT));
+	// Load the history
+	_history->load_history(getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT));
 }
 
-void ManagerImpl::terminate()
-{
-    _debug ("ManagerImpl::terminate ");
-    saveConfig();
+void ManagerImpl::terminate () {
+	_debug ("ManagerImpl::terminate ");
+	saveConfig();
 
-    unloadAccountMap();
+	unloadAccountMap();
 
-    _debug ("Unload DTMF Key ");
-    delete _dtmfKey;
+	_debug ("Unload DTMF Key ");
+	delete _dtmfKey;
 
-    _debug ("Unload Audio Driver ");
-    delete _audiodriver;
-    _audiodriver = NULL;
+	_debug ("Unload Audio Driver ");
+	delete _audiodriver;
+	_audiodriver = NULL;
 
-    _debug ("Unload Telephone Tone ");
-    delete _telephoneTone;
-    _telephoneTone = NULL;
+	_debug ("Unload Telephone Tone ");
+	delete _telephoneTone;
+	_telephoneTone = NULL;
 
-    _debug ("Unload Audio Codecs ");
-    _codecDescriptorMap.deleteHandlePointer();
+	_debug ("Unload Audio Codecs ");
+	_codecDescriptorMap.deleteHandlePointer();
 
 }
 
-bool
-ManagerImpl::isCurrentCall (const CallID& callId)
-{
-    return (_currentCallId2 == callId ? true : false);
+bool ManagerImpl::isCurrentCall (const CallID& callId) {
+	return (_currentCallId2 == callId ? true : false);
 }
 
-bool
-ManagerImpl::hasCurrentCall()
-{
-    // _debug ("ManagerImpl::hasCurrentCall current call ID = %s", _currentCallId2.c_str());
+bool ManagerImpl::hasCurrentCall () {
+	// _debug ("ManagerImpl::hasCurrentCall current call ID = %s", _currentCallId2.c_str());
 
-    if (_currentCallId2 != "") {
-        return true;
-    }
+	if (_currentCallId2 != "") {
+		return true;
+	}
 
-    return false;
+	return false;
 }
 
 const CallID&
-ManagerImpl::getCurrentCallId()
-{
-    return _currentCallId2;
+ManagerImpl::getCurrentCallId () {
+	return _currentCallId2;
 }
 
-void
-ManagerImpl::switchCall (const CallID& id)
-{
-    ost::MutexLock m (_currentCallMutex);
-    _debug ("----- Switch current call id to %s -----", id.c_str());
-    _currentCallId2 = id;
+void ManagerImpl::switchCall (const CallID& id) {
+	ost::MutexLock m(_currentCallMutex);
+	_debug ("----- Switch current call id to %s -----", id.c_str());
+	_currentCallId2 = id;
 
-    /*
-    AudioLayer *al = getAudioDriver();
+	/*
+	 AudioLayer *al = getAudioDriver();
 
-    if (id != "") {
+	 if (id != "") {
 
-    if(isConference(id)) {
+	 if(isConference(id)) {
 
-        Conference *conf;
+	 Conference *conf;
 
-        ConferenceMap::iterator iter = _conferencemap.find(id);
-        if(iter != _conferencemap.end())
-        {
-    	_debug("    set call recordable in audio layer");
-    	conf = iter->second;
-    	al->setRecorderInstance((Recordable*)conf);
-        }
-    }
-    else {
+	 ConferenceMap::iterator iter = _conferencemap.find(id);
+	 if(iter != _conferencemap.end())
+	 {
+	 _debug("    set call recordable in audio layer");
+	 conf = iter->second;
+	 al->setRecorderInstance((Recordable*)conf);
+	 }
+	 }
+	 else {
 
-        // set the recordable instance in audiolayer
-        AccountID account_id = getAccountFromCall(id);
+	 // set the recordable instance in audiolayer
+	 AccountID account_id = getAccountFromCall(id);
 
 
-        Call *call = NULL;
-        call = getAccountLink (account_id)->getCall(id);
+	 Call *call = NULL;
+	 call = getAccountLink (account_id)->getCall(id);
 
-        _debug("    set call recordable in audio layer");
-        al->setRecorderInstance((Recordable*)call);
-    }
-    }
-    */
+	 _debug("    set call recordable in audio layer");
+	 al->setRecorderInstance((Recordable*)call);
+	 }
+	 }
+	 */
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////
 // Management of events' IP-phone user
 ///////////////////////////////////////////////////////////////////////////////
 /* Main Thread */
 
-bool
-ManagerImpl::outgoingCall (const std::string& account_id, const CallID& call_id, const std::string& to)
-{
-    std::string pattern, to_cleaned;
-    Call::CallConfiguration callConfig;
-    SIPVoIPLink *siplink;
-
-    _debug ("ManagerImpl::outgoingCall(%s)", call_id.c_str());
+bool ManagerImpl::outgoingCall (const std::string& account_id,
+		const CallID& call_id, const std::string& to) {
+	std::string pattern, to_cleaned;
+	Call::CallConfiguration callConfig;
+	SIPVoIPLink *siplink;
 
-    CallID current_call_id = getCurrentCallId();
+	_debug ("ManagerImpl::outgoingCall(%s)", call_id.c_str());
 
-    if (getConfigString (HOOKS, PHONE_NUMBER_HOOK_ENABLED) ==  "1")
-        _cleaner->set_phone_number_prefix (getConfigString (HOOKS, PHONE_NUMBER_HOOK_ADD_PREFIX));
-    else
-        _cleaner->set_phone_number_prefix ("");
+	CallID current_call_id = getCurrentCallId();
 
-    to_cleaned = _cleaner->clean (to);
+	if (getConfigString(HOOKS, PHONE_NUMBER_HOOK_ENABLED) == "1")
+		_cleaner->set_phone_number_prefix(getConfigString(HOOKS,
+				PHONE_NUMBER_HOOK_ADD_PREFIX));
+	else
+		_cleaner->set_phone_number_prefix("");
 
-    /* Check what kind of call we are dealing with */
-    check_call_configuration (call_id, to_cleaned, &callConfig);
+	to_cleaned = _cleaner->clean(to);
 
-    // in any cases we have to detach from current communication
-    if (hasCurrentCall()) {
+	/* Check what kind of call we are dealing with */
+	check_call_configuration(call_id, to_cleaned, &callConfig);
 
-        _debug ("    outgoingCall: Has current call (%s) put it onhold", current_call_id.c_str());
+	// in any cases we have to detach from current communication
+	if (hasCurrentCall()) {
 
-        // if this is not a conferenceand this and is not a conference participant
+		_debug ("    outgoingCall: Has current call (%s) put it onhold", current_call_id.c_str());
 
-        if (!isConference (current_call_id) && !participToConference (current_call_id)) {
-            _debug ("    outgoingCall: Put the current call (%s) on hold", current_call_id.c_str());
-            onHoldCall (current_call_id);
-        } else if (isConference (current_call_id) && !participToConference (call_id)) {
-            _debug ("    outgoingCall: detach main participant from conference");
-            detachParticipant (default_id, current_call_id);
-        }
-    }
+		// if this is not a conferenceand this and is not a conference participant
 
-    if (callConfig == Call::IPtoIP) {
-        _debug ("    outgoingCall: Start IP to IP call");
-        /* We need to retrieve the sip voiplink instance */
-        siplink = SIPVoIPLink::instance ("");
+		if (!isConference(current_call_id) && !participToConference(
+				current_call_id)) {
+			_debug ("    outgoingCall: Put the current call (%s) on hold", current_call_id.c_str());
+			onHoldCall(current_call_id);
+		} else if (isConference(current_call_id) && !participToConference(
+				call_id)) {
+			_debug ("    outgoingCall: detach main participant from conference");
+			detachParticipant(default_id, current_call_id);
+		}
+	}
 
-        if (siplink->new_ip_to_ip_call (call_id, to_cleaned)) {
-            switchCall (call_id);
-            return true;
-        } else {
-            callFailure (call_id);
-        }
+	if (callConfig == Call::IPtoIP) {
+		_debug ("    outgoingCall: Start IP to IP call");
+		/* We need to retrieve the sip voiplink instance */
+		siplink = SIPVoIPLink::instance("");
 
-        return false;
-    }
+		if (siplink->new_ip_to_ip_call(call_id, to_cleaned)) {
+			switchCall(call_id);
+			return true;
+		} else {
+			callFailure(call_id);
+		}
 
-    if (!accountExists (account_id)) {
-        _debug ("! Manager Error: Outgoing Call: account doesn't exist");
-        return false;
-    }
+		return false;
+	}
 
-    if (getAccountFromCall (call_id) != AccountNULL) {
-        _debug ("! Manager Error: Outgoing Call: call id already exists");
-        return false;
-    }
+	if (!accountExists(account_id)) {
+		_debug ("! Manager Error: Outgoing Call: account doesn't exist");
+		return false;
+	}
 
+	if (getAccountFromCall(call_id) != AccountNULL) {
+		_debug ("! Manager Error: Outgoing Call: call id already exists");
+		return false;
+	}
 
-    _debug ("- Manager Action: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data());
+	_debug ("- Manager Action: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data());
 
-    associateCallToAccount (call_id, account_id);
+	associateCallToAccount(call_id, account_id);
 
-    if (getAccountLink (account_id)->newOutgoingCall (call_id, to_cleaned)) {
-        switchCall (call_id);
-        return true;
-    } else {
-        callFailure (call_id);
-        _debug ("! Manager Error: An error occur, the call was not created");
-    }
+	if (getAccountLink(account_id)->newOutgoingCall(call_id, to_cleaned)) {
+		switchCall(call_id);
+		return true;
+	} else {
+		callFailure(call_id);
+		_debug ("! Manager Error: An error occur, the call was not created");
+	}
 
-    return false;
+	return false;
 }
 
 //THREAD=Main : for outgoing Call
-bool
-ManagerImpl::answerCall (const CallID& call_id)
-{
+bool ManagerImpl::answerCall (const CallID& call_id) {
 
-    _debug ("ManagerImpl::answerCall(%s)", call_id.c_str());
+	_debug ("ManagerImpl::answerCall(%s)", call_id.c_str());
 
-    stopTone ();
+	stopTone();
 
-    // store the current call id
-    CallID current_call_id = getCurrentCallId();
+	// store the current call id
+	CallID current_call_id = getCurrentCallId();
 
-    AccountID account_id = getAccountFromCall (call_id);
+	AccountID account_id = getAccountFromCall(call_id);
 
-    if (account_id == AccountNULL) {
-        _debug ("    answerCall: AccountId is null");
-    }
-
-    Call* call = NULL;
+	if (account_id == AccountNULL) {
+		_debug ("    answerCall: AccountId is null");
+	}
 
-    call = getAccountLink (account_id)->getCall (call_id);
+	Call* call = NULL;
 
-    if (call == NULL) {
-        _debug ("    answerCall: Call is null");
-    }
+	call = getAccountLink(account_id)->getCall(call_id);
 
-    // in any cases we have to detach from current communication
-    if (hasCurrentCall()) {
+	if (call == NULL) {
+		_debug ("    answerCall: Call is null");
+	}
 
-        _debug ("    answerCall: Currently conversing with %s", current_call_id.c_str());
-        // if it is not a conference and is not a conference participant
+	// in any cases we have to detach from current communication
+	if (hasCurrentCall()) {
 
-        if (!isConference (current_call_id) && !participToConference (current_call_id)) {
-            _debug ("    answerCall: Put the current call (%s) on hold", current_call_id.c_str());
-            onHoldCall (current_call_id);
-        }
+		_debug ("    answerCall: Currently conversing with %s", current_call_id.c_str());
+		// if it is not a conference and is not a conference participant
 
-        // if we are talking to a conference and we are answering an incoming call
-        else if (isConference (current_call_id) && !participToConference (call_id)) {
-            _debug ("    answerCall: Detach main participant from conference");
-            detachParticipant (default_id, current_call_id);
-        }
+		if (!isConference(current_call_id) && !participToConference(
+				current_call_id)) {
+			_debug ("    answerCall: Put the current call (%s) on hold", current_call_id.c_str());
+			onHoldCall(current_call_id);
+		}
 
-    }
+		// if we are talking to a conference and we are answering an incoming call
+		else if (isConference(current_call_id)
+				&& !participToConference(call_id)) {
+			_debug ("    answerCall: Detach main participant from conference");
+			detachParticipant(default_id, current_call_id);
+		}
 
+	}
 
-    if (!getAccountLink (account_id)->answer (call_id)) {
-        // error when receiving...
-        removeCallAccount (call_id);
-        return false;
-    }
+	if (!getAccountLink(account_id)->answer(call_id)) {
+		// error when receiving...
+		removeCallAccount(call_id);
+		return false;
+	}
 
-    // if it was waiting, it's waiting no more
-    if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "CURRENT");
+	// if it was waiting, it's waiting no more
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(call_id, "CURRENT");
 
-    // std::string codecName = Manager::instance().getCurrentCodecName (call_id);
-    // if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id, codecName.c_str());
+	// std::string codecName = Manager::instance().getCurrentCodecName (call_id);
+	// if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id, codecName.c_str());
 
-    removeWaitingCall (call_id);
+	removeWaitingCall(call_id);
 
-    // if we dragged this call into a conference already
-    if (participToConference (call_id)) {
+	// if we dragged this call into a conference already
+	if (participToConference(call_id)) {
 
-        // AccountID currentAccountId;
-        // Call* call = NULL;
+		// AccountID currentAccountId;
+		// Call* call = NULL;
 
-        // currentAccountId = getAccountFromCall (call_id);
-        // call = getAccountLink (currentAccountId)->getCall (call_id);
+		// currentAccountId = getAccountFromCall (call_id);
+		// call = getAccountLink (currentAccountId)->getCall (call_id);
 
-        switchCall (call->getConfId());
-    } else {
-        switchCall (call_id);
-    }
+		switchCall(call->getConfId());
+	} else {
+		switchCall(call_id);
+	}
 
-    return true;
+	return true;
 }
 
 //THREAD=Main
-bool
-ManagerImpl::hangupCall (const CallID& call_id)
-{
-    _debug ("ManagerImpl::hangupCall(%s)", call_id.c_str());
-    PulseLayer *pulselayer;
-    AccountID account_id;
-    bool returnValue = true;
+bool ManagerImpl::hangupCall (const CallID& call_id) {
+	_debug ("ManagerImpl::hangupCall(%s)", call_id.c_str());
+	PulseLayer *pulselayer;
+	AccountID account_id;
+	bool returnValue = true;
 
-    // store the current call id
-    CallID current_call_id = getCurrentCallId();
+	// store the current call id
+	CallID current_call_id = getCurrentCallId();
 
-    stopTone ();
+	stopTone();
 
-    /* Broadcast a signal over DBus */
-    _debug ("    hangupCall: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str());
+	/* Broadcast a signal over DBus */
+	_debug ("    hangupCall: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str());
 
-    if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP");
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
 
-    if (participToConference (call_id)) {
+	if (participToConference(call_id)) {
 
-        Conference *conf = getConferenceFromCallID (call_id);
+		Conference *conf = getConferenceFromCallID(call_id);
 
-        if (conf != NULL) {
-            // remove this participant
-            removeParticipant (call_id);
+		if (conf != NULL) {
+			// remove this participant
+			removeParticipant(call_id);
 
-            processRemainingParticipant (current_call_id, conf);
-        }
+			processRemainingParticipant(current_call_id, conf);
+		}
 
-    } else {
-        // we are not participating to a conference, current call switched to ""
-        if (!isConference (current_call_id))
-            switchCall ("");
-    }
+	} else {
+		// we are not participating to a conference, current call switched to ""
+		if (!isConference(current_call_id))
+			switchCall("");
+	}
 
-    /* Direct IP to IP call */
-    if (getConfigFromCall (call_id) == Call::IPtoIP) {
-        returnValue = SIPVoIPLink::instance (AccountNULL)->hangup (call_id);
-    }
-    /* Classic call, attached to an account */
-    else {
-        account_id = getAccountFromCall (call_id);
+	/* Direct IP to IP call */
+	if (getConfigFromCall(call_id) == Call::IPtoIP) {
+		returnValue = SIPVoIPLink::instance(AccountNULL)->hangup(call_id);
+	}
+	/* Classic call, attached to an account */
+	else {
+		account_id = getAccountFromCall(call_id);
 
-        if (account_id == AccountNULL) {
+		if (account_id == AccountNULL) {
 
-            _debug ("! Manager Hangup Call: Call doesn't exists");
-            returnValue = false;
-        }
-	else {
+			_debug ("! Manager Hangup Call: Call doesn't exists");
+			returnValue = false;
+		} else {
 
-	    returnValue = getAccountLink (account_id)->hangup (call_id);
-	    removeCallAccount (call_id);
+			returnValue = getAccountLink(account_id)->hangup(call_id);
+			removeCallAccount(call_id);
+		}
 	}
-    }
 
-    int nbCalls = getCallList().size();
+	int nbCalls = getCallList().size();
 
-    AudioLayer *audiolayer = getAudioDriver();
+	AudioLayer *audiolayer = getAudioDriver();
 
-    // stop streams
-    if (audiolayer && (nbCalls <= 0)) {
-        _debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
-        audiolayer->stopStream();
-    }
+	// stop streams
+	if (audiolayer && (nbCalls <= 0)) {
+		_debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+		audiolayer->stopStream();
+	}
 
-    if (_audiodriver->getLayerType() == PULSEAUDIO) {
-        pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-    }
+	if (_audiodriver->getLayerType() == PULSEAUDIO) {
+		pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
+	}
 
-    return returnValue;
+	return returnValue;
 }
 
+bool ManagerImpl::hangupConference (const ConfID& id) {
+	_debug ("ManagerImpl::hangupConference()");
 
-bool
-ManagerImpl::hangupConference (const ConfID& id)
-{
-    _debug ("ManagerImpl::hangupConference()");
-
-    Conference *conf;
-    ConferenceMap::iterator iter_conf = _conferencemap.find (id);
+	Conference *conf;
+	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
 
-    AccountID currentAccountId;
+	AccountID currentAccountId;
 
-    // Call* call = NULL;
+	// Call* call = NULL;
 
 
-    if (iter_conf != _conferencemap.end()) {
-        conf = iter_conf->second;
+	if (iter_conf != _conferencemap.end()) {
+		conf = iter_conf->second;
 
-        ParticipantSet participants = conf->getParticipantList();
-        ParticipantSet::iterator iter_participant = participants.begin();
+		ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-        while (iter_participant != participants.end()) {
-            _debug ("ManagerImpl::hangupConference participant %s", (*iter_participant).c_str());
+		while (iter_participant != participants.end()) {
+			_debug ("ManagerImpl::hangupConference participant %s", (*iter_participant).c_str());
 
-            hangupCall (*iter_participant);
+			hangupCall(*iter_participant);
 
-            iter_participant++;
+			iter_participant++;
 
-        }
+		}
 
-    }
+	}
 
-    switchCall ("");
+	switchCall("");
 
-    return true;
+	return true;
 }
 
-
 //THREAD=Main
-bool
-ManagerImpl::cancelCall (const CallID& id)
-{
-    AccountID accountid;
-    bool returnValue;
+bool ManagerImpl::cancelCall (const CallID& id) {
+	AccountID accountid;
+	bool returnValue;
 
-    stopTone ();
+	stopTone();
 
-    /* Direct IP to IP call */
+	/* Direct IP to IP call */
 
-    if (getConfigFromCall (id) == Call::IPtoIP) {
-        returnValue = SIPVoIPLink::instance (AccountNULL)->cancel (id);
-    }
+	if (getConfigFromCall(id) == Call::IPtoIP) {
+		returnValue = SIPVoIPLink::instance(AccountNULL)->cancel(id);
+	}
 
-    /* Classic call, attached to an account */
-    else {
-        accountid = getAccountFromCall (id);
+	/* Classic call, attached to an account */
+	else {
+		accountid = getAccountFromCall(id);
 
-        if (accountid == AccountNULL) {
-            _debug ("! Manager Cancel Call: Call doesn't exists");
-            return false;
-        }
+		if (accountid == AccountNULL) {
+			_debug ("! Manager Cancel Call: Call doesn't exists");
+			return false;
+		}
 
-        returnValue = getAccountLink (accountid)->cancel (id);
+		returnValue = getAccountLink(accountid)->cancel(id);
 
-        removeCallAccount (id);
-    }
+		removeCallAccount(id);
+	}
 
-    // it could be a waiting call?
-    removeWaitingCall (id);
+	// it could be a waiting call?
+	removeWaitingCall(id);
 
-    switchCall ("");
+	switchCall("");
 
-    return returnValue;
+	return returnValue;
 }
 
 //THREAD=Main
-bool
-ManagerImpl::onHoldCall (const CallID& call_id)
-{
-    AccountID account_id;
-    bool returnValue;
+bool ManagerImpl::onHoldCall (const CallID& call_id) {
+	AccountID account_id;
+	bool returnValue;
 
-    _debug ("ManagerImpl::onHoldCall(%s)", call_id.c_str());
+	_debug ("ManagerImpl::onHoldCall(%s)", call_id.c_str());
 
-    stopTone ();
+	stopTone();
 
-    CallID current_call_id = getCurrentCallId();
+	CallID current_call_id = getCurrentCallId();
 
-    _debug ("    onHoldCall: try to put call %s on hold", call_id.c_str());
+	_debug ("    onHoldCall: try to put call %s on hold", call_id.c_str());
 
-    /* Direct IP to IP call */
+	/* Direct IP to IP call */
 
-    if (getConfigFromCall (call_id) == Call::IPtoIP) {
-        returnValue = SIPVoIPLink::instance (AccountNULL)-> onhold (call_id);
-    }
+	if (getConfigFromCall(call_id) == Call::IPtoIP) {
+		returnValue = SIPVoIPLink::instance(AccountNULL)-> onhold(call_id);
+	}
 
-    /* Classic call, attached to an account */
-    else {
-        account_id = getAccountFromCall (call_id);
+	/* Classic call, attached to an account */
+	else {
+		account_id = getAccountFromCall(call_id);
 
-        if (account_id == AccountNULL) {
-            _debug ("    onHoldCall: Account ID %s or callid %s doesn't exists", account_id.c_str(), call_id.c_str());
-            return false;
-        }
+		if (account_id == AccountNULL) {
+			_debug ("    onHoldCall: Account ID %s or callid %s doesn't exists", account_id.c_str(), call_id.c_str());
+			return false;
+		}
 
-        returnValue = getAccountLink (account_id)->onhold (call_id);
-    }
+		returnValue = getAccountLink(account_id)->onhold(call_id);
+	}
 
-    removeWaitingCall (call_id);
+	removeWaitingCall(call_id);
 
-    // keeps current call id if the action is not holding this call or a new outgoing call
+	// keeps current call id if the action is not holding this call or a new outgoing call
 
-    if (current_call_id == call_id) {
+	if (current_call_id == call_id) {
 
-        switchCall ("");
-    }
+		switchCall("");
+	}
 
-    if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HOLD");
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(call_id, "HOLD");
 
-    return returnValue;
+	return returnValue;
 }
 
 //THREAD=Main
-bool
-ManagerImpl::offHoldCall (const CallID& call_id)
-{
-
-    AccountID account_id;
-    bool returnValue, is_rec;
-    std::string codecName;
-
-    is_rec = false;
+bool ManagerImpl::offHoldCall (const CallID& call_id) {
 
-    _debug ("ManagerImpl::offHoldCall(%s)", call_id.c_str());
+	AccountID account_id;
+	bool returnValue, is_rec;
+	std::string codecName;
 
-    stopTone ();
+	is_rec = false;
 
-    CallID current_call_id = getCurrentCallId();
+	_debug ("ManagerImpl::offHoldCall(%s)", call_id.c_str());
 
-    //Place current call on hold if it isn't
+	stopTone();
 
-    if (hasCurrentCall()) {
-        // if this is not a conferenceand this and is not a conference participant
-        if (!isConference (current_call_id) && !participToConference (current_call_id)) {
-            _debug ("    offHoldCall: put current call (%s) on hold", current_call_id.c_str());
-            onHoldCall (current_call_id);
-        } else if (isConference (current_call_id) && !participToConference (call_id)) {
-            _debug ("    offHoldCall Put current conference (%s) on hold", current_call_id.c_str());
-            detachParticipant (default_id, current_call_id);
-        }
-    }
+	CallID current_call_id = getCurrentCallId();
 
-    // switch current call id to id since sipvoip link need it to amke a call
-    // switchCall(id);
+	//Place current call on hold if it isn't
 
-    /* Direct IP to IP call */
-    if (getConfigFromCall (call_id) == Call::IPtoIP) {
-        // is_rec = SIPVoIPLink::instance (AccountNULL)-> isRecording (call_id);
-        returnValue = SIPVoIPLink::instance (AccountNULL)-> offhold (call_id);
-    }
+	if (hasCurrentCall()) {
+		// if this is not a conferenceand this and is not a conference participant
+		if (!isConference(current_call_id) && !participToConference(
+				current_call_id)) {
+			_debug ("    offHoldCall: put current call (%s) on hold", current_call_id.c_str());
+			onHoldCall(current_call_id);
+		} else if (isConference(current_call_id) && !participToConference(
+				call_id)) {
+			_debug ("    offHoldCall Put current conference (%s) on hold", current_call_id.c_str());
+			detachParticipant(default_id, current_call_id);
+		}
+	}
 
-    /* Classic call, attached to an account */
-    else {
-        account_id = getAccountFromCall (call_id);
+	// switch current call id to id since sipvoip link need it to amke a call
+	// switchCall(id);
 
-        if (account_id == AccountNULL) {
-            _debug ("Manager OffHold Call: Call doesn't exists");
-            return false;
-        }
+	/* Direct IP to IP call */
+	if (getConfigFromCall(call_id) == Call::IPtoIP) {
+		// is_rec = SIPVoIPLink::instance (AccountNULL)-> isRecording (call_id);
+		returnValue = SIPVoIPLink::instance(AccountNULL)-> offhold(call_id);
+	}
 
-        _debug ("Setting OFFHOLD, Account %s, callid %s", account_id.c_str(), call_id.c_str());
+	/* Classic call, attached to an account */
+	else {
+		account_id = getAccountFromCall(call_id);
 
-        is_rec = getAccountLink (account_id)->getCall (call_id)->isRecording();
-        returnValue = getAccountLink (account_id)->offhold (call_id);
-    }
+		if (account_id == AccountNULL) {
+			_debug ("Manager OffHold Call: Call doesn't exists");
+			return false;
+		}
 
+		_debug ("Setting OFFHOLD, Account %s, callid %s", account_id.c_str(), call_id.c_str());
 
-    if (_dbus) {
-        if (is_rec)
-            _dbus->getCallManager()->callStateChanged (call_id, "UNHOLD_RECORD");
-        else
-            _dbus->getCallManager()->callStateChanged (call_id, "UNHOLD_CURRENT");
+		is_rec = getAccountLink(account_id)->getCall(call_id)->isRecording();
+		returnValue = getAccountLink(account_id)->offhold(call_id);
+	}
 
-    }
+	if (_dbus) {
+		if (is_rec)
+			_dbus->getCallManager()->callStateChanged(call_id, "UNHOLD_RECORD");
+		else
+			_dbus->getCallManager()->callStateChanged(call_id, "UNHOLD_CURRENT");
 
-    if (participToConference (call_id)) {
+	}
 
-        AccountID currentAccountId;
-        Call* call = NULL;
+	if (participToConference(call_id)) {
 
-        currentAccountId = getAccountFromCall (call_id);
-        call = getAccountLink (currentAccountId)->getCall (call_id);
+		AccountID currentAccountId;
+		Call* call = NULL;
 
-        switchCall (call->getConfId());
+		currentAccountId = getAccountFromCall(call_id);
+		call = getAccountLink(currentAccountId)->getCall(call_id);
 
-    } else {
-        switchCall (call_id);
-        _audiodriver->flushMain();
-    }
+		switchCall(call->getConfId());
 
+	} else {
+		switchCall(call_id);
+		_audiodriver->flushMain();
+	}
 
-    // codecName = getCurrentCodecName (call_id);
-    // _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str());
+	// codecName = getCurrentCodecName (call_id);
+	// _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str());
 
-    // if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id,codecName.c_str());
+	// if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id,codecName.c_str());
 
 
-    return returnValue;
+	return returnValue;
 }
 
 //THREAD=Main
-bool
-ManagerImpl::transferCall (const CallID& call_id, const std::string& to)
-{
-    AccountID accountid;
-    bool returnValue;
+bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
+	AccountID accountid;
+	bool returnValue;
 
-    stopTone ();
+	stopTone();
 
-    CallID current_call_id = getCurrentCallId();
+	CallID current_call_id = getCurrentCallId();
 
-    if (participToConference (call_id)) {
+	if (participToConference(call_id)) {
 
-        _debug("Particip to a conference\n");
+		_debug("Particip to a conference\n");
 
-        Conference *conf = getConferenceFromCallID (call_id);
+		Conference *conf = getConferenceFromCallID(call_id);
 
-        if (conf != NULL) {
-            // remove this participant
-            removeParticipant (call_id);
+		if (conf != NULL) {
+			// remove this participant
+			removeParticipant(call_id);
 
-            processRemainingParticipant (current_call_id, conf);
-        }
-    } else {
+			processRemainingParticipant(current_call_id, conf);
+		}
+	} else {
 
-        _debug("Do not Particip to a conference\n");
+		_debug("Do not Particip to a conference\n");
 
-        // we are not participating to a conference, current call switched to ""
-        if (!isConference (current_call_id))
-            switchCall ("");
-    }
+		// we are not participating to a conference, current call switched to ""
+		if (!isConference(current_call_id))
+			switchCall("");
+	}
 
-    /* Direct IP to IP call */
-    if (getConfigFromCall (call_id) == Call::IPtoIP) {
-        returnValue = SIPVoIPLink::instance (AccountNULL)-> transfer (call_id, to);
-    }
-    /* Classic call, attached to an account */
-    else {
-        accountid = getAccountFromCall (call_id);
+	/* Direct IP to IP call */
+	if (getConfigFromCall(call_id) == Call::IPtoIP) {
+		returnValue
+				= SIPVoIPLink::instance(AccountNULL)-> transfer(call_id, to);
+	}
+	/* Classic call, attached to an account */
+	else {
+		accountid = getAccountFromCall(call_id);
 
-        if (accountid == AccountNULL) {
-            _debug ("! Manager Transfer Call: Call doesn't exists");
-            return false;
-        }
+		if (accountid == AccountNULL) {
+			_debug ("! Manager Transfer Call: Call doesn't exists");
+			return false;
+		}
 
-        returnValue = getAccountLink (accountid)->transfer (call_id, to);
+		returnValue = getAccountLink(accountid)->transfer(call_id, to);
 
-        removeCallAccount (call_id);
-    }
+		removeCallAccount(call_id);
+	}
 
-    removeWaitingCall (call_id);
+	removeWaitingCall(call_id);
 
-    if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP");
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
 
-    return returnValue;
+	return returnValue;
 }
 
-void ManagerImpl::transferFailed()
-{
-    if (_dbus) _dbus->getCallManager()->transferFailed();
+void ManagerImpl::transferFailed () {
+	if (_dbus)
+		_dbus->getCallManager()->transferFailed();
 }
 
-void ManagerImpl::transferSucceded()
-{
-    if (_dbus) _dbus->getCallManager()->transferSucceded();
+void ManagerImpl::transferSucceded () {
+	if (_dbus)
+		_dbus->getCallManager()->transferSucceded();
 
 }
 
-
 //THREAD=Main : Call:Incoming
-bool
-ManagerImpl::refuseCall (const CallID& id)
-{
-    AccountID accountid;
-    bool returnValue;
-
-    CallID current_call_id = getCurrentCallId();
+bool ManagerImpl::refuseCall (const CallID& id) {
+	AccountID accountid;
+	bool returnValue;
 
-    stopTone ();
+	CallID current_call_id = getCurrentCallId();
 
+	stopTone();
 
-    int nbCalls = getCallList().size();
+	int nbCalls = getCallList().size();
 
-    // AudioLayer* audiolayer = getAudioDriver();
+	// AudioLayer* audiolayer = getAudioDriver();
 
-    if (nbCalls <= 1) {
-        _debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+	if (nbCalls <= 1) {
+		_debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
 
-        AudioLayer* audiolayer = getAudioDriver();
-        audiolayer->stopStream();
-    }
-
-    /* Direct IP to IP call */
-
-    if (getConfigFromCall (id) == Call::IPtoIP) {
-        returnValue = SIPVoIPLink::instance (AccountNULL)-> refuse (id);
-    }
+		AudioLayer* audiolayer = getAudioDriver();
+		audiolayer->stopStream();
+	}
 
-    /* Classic call, attached to an account */
-    else {
-        accountid = getAccountFromCall (id);
+	/* Direct IP to IP call */
 
-        if (accountid == AccountNULL) {
-            _debug ("! Manager OffHold Call: Call doesn't exists");
-            return false;
-        }
+	if (getConfigFromCall(id) == Call::IPtoIP) {
+		returnValue = SIPVoIPLink::instance(AccountNULL)-> refuse(id);
+	}
 
-        returnValue = getAccountLink (accountid)->refuse (id);
+	/* Classic call, attached to an account */
+	else {
+		accountid = getAccountFromCall(id);
 
-        removeCallAccount (id);
-    }
+		if (accountid == AccountNULL) {
+			_debug ("! Manager OffHold Call: Call doesn't exists");
+			return false;
+		}
 
-    // if the call was outgoing or established, we didn't refuse it
-    // so the method did nothing
-    if (returnValue) {
-        removeWaitingCall (id);
+		returnValue = getAccountLink(accountid)->refuse(id);
 
-        if (_dbus) _dbus->getCallManager()->callStateChanged (id, "HUNGUP");
+		removeCallAccount(id);
+	}
 
-        // if(current_call_id.compare("") != 0)
-        // switchCall ("");
-    }
+	// if the call was outgoing or established, we didn't refuse it
+	// so the method did nothing
+	if (returnValue) {
+		removeWaitingCall(id);
 
+		if (_dbus)
+			_dbus->getCallManager()->callStateChanged(id, "HUNGUP");
 
+		// if(current_call_id.compare("") != 0)
+		// switchCall ("");
+	}
 
-    return returnValue;
+	return returnValue;
 }
 
-
 Conference*
-ManagerImpl::createConference (const CallID& id1, const CallID& id2)
-{
-    _debug ("ManagerImpl::createConference()");
+ManagerImpl::createConference (const CallID& id1, const CallID& id2) {
+	_debug ("ManagerImpl::createConference()");
 
-    Conference* conf = new Conference();
+	Conference* conf = new Conference();
 
-    // _conferencecall.insert(pair<CallID, Conference*>(id1, conf));
-    // _conferencecall.insert(pair<CallID, Conference*>(id2, conf));
-    _conferencemap.insert (pair<CallID, Conference*> (conf->getConfID(), conf));
+	// _conferencecall.insert(pair<CallID, Conference*>(id1, conf));
+	// _conferencecall.insert(pair<CallID, Conference*>(id2, conf));
+	_conferencemap.insert(pair<CallID, Conference*> (conf->getConfID(), conf));
 
-    conf->add (id1);
-    conf->add (id2);
+	conf->add(id1);
+	conf->add(id2);
 
-    // broadcast a signal over dbus
-    _dbus->getCallManager()->conferenceCreated (conf->getConfID());
+	// broadcast a signal over dbus
+	_dbus->getCallManager()->conferenceCreated(conf->getConfID());
 
-    return conf;
+	return conf;
 }
 
-void
-ManagerImpl::removeConference (const ConfID& conference_id)
-{
-
-    _debug ("ManagerImpl::removeConference(%s)", conference_id.c_str());
+void ManagerImpl::removeConference (const ConfID& conference_id) {
 
-    Conference* conf = NULL;
+	_debug ("ManagerImpl::removeConference(%s)", conference_id.c_str());
 
-    _debug ("    removeConference: _conferencemap.size: %i", (int) _conferencemap.size());
-    ConferenceMap::iterator iter = _conferencemap.find (conference_id);
+	Conference* conf = NULL;
 
-    if (iter != _conferencemap.end()) {
-        _debug ("    removeConference: Found conference id %s in conferencemap", conference_id.c_str());
-        conf = iter->second;
-    }
+	_debug ("    removeConference: _conferencemap.size: %i", (int) _conferencemap.size());
+	ConferenceMap::iterator iter = _conferencemap.find(conference_id);
 
-    if (conf == NULL) {
+	if (iter != _conferencemap.end()) {
+		_debug ("    removeConference: Found conference id %s in conferencemap", conference_id.c_str());
+		conf = iter->second;
+	}
 
-        _debug ("    removeConference: Error conference not found");
-        return;
-    }
+	if (conf == NULL) {
 
+		_debug ("    removeConference: Error conference not found");
+		return;
+	}
 
-    // We now need to bind the audio to the remain participant
+	// We now need to bind the audio to the remain participant
 
-    // unbind main participant from conference (just to be sure)
-    _audiodriver->getMainBuffer()->unBindAll (default_id);
+	// unbind main participant from conference (just to be sure)
+	_audiodriver->getMainBuffer()->unBindAll(default_id);
 
-    ParticipantSet participants = conf->getParticipantList();
+	ParticipantSet participants = conf->getParticipantList();
 
-    // bind main participant to remaining conference call
-    ParticipantSet::iterator iter_p = participants.begin();
+	// bind main participant to remaining conference call
+	ParticipantSet::iterator iter_p = participants.begin();
 
-    if (iter_p != participants.end()) {
+	if (iter_p != participants.end()) {
 
-        // to avoid puting onhold the call
-        // switchCall("");
-        _audiodriver->getMainBuffer()->bindCallID (*iter_p, default_id);
-    }
+		// to avoid puting onhold the call
+		// switchCall("");
+		_audiodriver->getMainBuffer()->bindCallID(*iter_p, default_id);
+	}
 
-    // Then remove the conference from the conference map
-    _debug ("ManagerImpl:: remove conference %s", conference_id.c_str());
+	// Then remove the conference from the conference map
+	_debug ("ManagerImpl:: remove conference %s", conference_id.c_str());
 
-    if (_conferencemap.erase (conference_id) == 1)
-        _debug ("ManagerImpl:: conference %s removed succesfully", conference_id.c_str());
-    else
-        _debug ("ManagerImpl:: error cannot remove conference id: %s", conference_id.c_str());
+	if (_conferencemap.erase(conference_id) == 1)
+		_debug ("ManagerImpl:: conference %s removed succesfully", conference_id.c_str());
+	else
+		_debug ("ManagerImpl:: error cannot remove conference id: %s", conference_id.c_str());
 
-    // broadcast a signal over dbus
-    _debug ("ManagerImpl::removeConference broadcast call removed on dbus: %s", conference_id.c_str());
+	// broadcast a signal over dbus
+	_debug ("ManagerImpl::removeConference broadcast call removed on dbus: %s", conference_id.c_str());
 
-    _dbus->getCallManager()->conferenceRemoved (conference_id);
+	_dbus->getCallManager()->conferenceRemoved(conference_id);
 
 }
 
-
 Conference*
-ManagerImpl::getConferenceFromCallID (const CallID& call_id)
-{
-    AccountID account_id;
-    Call* call = NULL;
+ManagerImpl::getConferenceFromCallID (const CallID& call_id) {
+	AccountID account_id;
+	Call* call = NULL;
 
-    account_id = getAccountFromCall (call_id);
-    call = getAccountLink (account_id)->getCall (call_id);
+	account_id = getAccountFromCall(call_id);
+	call = getAccountLink(account_id)->getCall(call_id);
 
-    ConferenceMap::iterator iter = _conferencemap.find (call->getConfId());
+	ConferenceMap::iterator iter = _conferencemap.find(call->getConfId());
 
-    if (iter != _conferencemap.end()) {
-        return iter->second;
-    } else {
-        return NULL;
-    }
+	if (iter != _conferencemap.end()) {
+		return iter->second;
+	} else {
+		return NULL;
+	}
 }
 
-void
-ManagerImpl::holdConference (const CallID& id)
-{
-    _debug ("ManagerImpl::holdConference()");
-
-    Conference *conf;
-    ConferenceMap::iterator iter_conf = _conferencemap.find (id);
+void ManagerImpl::holdConference (const CallID& id) {
+	_debug ("ManagerImpl::holdConference()");
 
-    AccountID currentAccountId;
+	Conference *conf;
+	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
 
-    Call* call = NULL;
+	AccountID currentAccountId;
 
-    if (iter_conf != _conferencemap.end()) {
-        conf = iter_conf->second;
+	Call* call = NULL;
 
-        ParticipantSet participants = conf->getParticipantList();
-        ParticipantSet::iterator iter_participant = participants.begin();
+	if (iter_conf != _conferencemap.end()) {
+		conf = iter_conf->second;
 
-        while (iter_participant != participants.end()) {
-            _debug ("    holdConference: participant %s", (*iter_participant).c_str());
-            currentAccountId = getAccountFromCall (*iter_participant);
-            call = getAccountLink (currentAccountId)->getCall (*iter_participant);
+		ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-            switchCall (*iter_participant);
-            onHoldCall (*iter_participant);
+		while (iter_participant != participants.end()) {
+			_debug ("    holdConference: participant %s", (*iter_participant).c_str());
+			currentAccountId = getAccountFromCall(*iter_participant);
+			call = getAccountLink(currentAccountId)->getCall(*iter_participant);
 
-            iter_participant++;
+			switchCall(*iter_participant);
+			onHoldCall(*iter_participant);
 
-        }
+			iter_participant++;
 
-        conf->setState (Conference::Hold);
-
-        _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
-
-    }
+		}
 
+		conf->setState(Conference::Hold);
 
+		_dbus->getCallManager()->conferenceChanged(conf->getConfID(),
+				conf->getStateStr());
 
+	}
 
 }
 
+void ManagerImpl::unHoldConference (const CallID& id) {
 
-void
-ManagerImpl::unHoldConference (const CallID& id)
-{
+	_debug ("ManagerImpl::unHoldConference()");
 
-    _debug ("ManagerImpl::unHoldConference()");
+	Conference *conf;
+	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
 
-    Conference *conf;
-    ConferenceMap::iterator iter_conf = _conferencemap.find (id);
+	AccountID currentAccountId;
 
-    AccountID currentAccountId;
+	Call* call = NULL;
 
-    Call* call = NULL;
+	if (iter_conf != _conferencemap.end()) {
+		conf = iter_conf->second;
 
-    if (iter_conf != _conferencemap.end()) {
-        conf = iter_conf->second;
+		ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-        ParticipantSet participants = conf->getParticipantList();
-        ParticipantSet::iterator iter_participant = participants.begin();
+		while (iter_participant != participants.end()) {
+			_debug ("    unholdConference: participant %s", (*iter_participant).c_str());
+			currentAccountId = getAccountFromCall(*iter_participant);
+			call = getAccountLink(currentAccountId)->getCall(*iter_participant);
 
-        while (iter_participant != participants.end()) {
-            _debug ("    unholdConference: participant %s", (*iter_participant).c_str());
-            currentAccountId = getAccountFromCall (*iter_participant);
-            call = getAccountLink (currentAccountId)->getCall (*iter_participant);
+			offHoldCall(*iter_participant);
 
-            offHoldCall (*iter_participant);
+			iter_participant++;
 
-            iter_participant++;
-
-        }
+		}
 
-        conf->setState (Conference::Active_Atached);
+		conf->setState(Conference::Active_Atached);
 
-        _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
+		_dbus->getCallManager()->conferenceChanged(conf->getConfID(),
+				conf->getStateStr());
 
-    }
+	}
 
 }
 
-bool
-ManagerImpl::isConference (const CallID& id)
-{
-    ConferenceMap::iterator iter = _conferencemap.find (id);
+bool ManagerImpl::isConference (const CallID& id) {
+	ConferenceMap::iterator iter = _conferencemap.find(id);
 
-    if (iter == _conferencemap.end()) {
-        return false;
-    } else {
-        return true;
-    }
+	if (iter == _conferencemap.end()) {
+		return false;
+	} else {
+		return true;
+	}
 }
 
-bool
-ManagerImpl::participToConference (const CallID& call_id)
-{
+bool ManagerImpl::participToConference (const CallID& call_id) {
 
-    AccountID accountId;
+	AccountID accountId;
 
-    Call* call = NULL;
+	Call* call = NULL;
 
-    accountId = getAccountFromCall (call_id);
-    call = getAccountLink (accountId)->getCall (call_id);
+	accountId = getAccountFromCall(call_id);
+	call = getAccountLink(accountId)->getCall(call_id);
 
-    if (call == NULL) {
-        return false;
+	if (call == NULL) {
+		return false;
 
-    }
+	}
 
-    if (call->getConfId() == "") {
-        return false;
-    } else {
-        
-        return true;
-    }
-}
+	if (call->getConfId() == "") {
+		return false;
+	} else {
 
+		return true;
+	}
+}
 
-void
-ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id)
-{
-    _debug ("ManagerImpl::addParticipant(%s, %s)", call_id.c_str(), conference_id.c_str());
+void ManagerImpl::addParticipant (const CallID& call_id,
+		const CallID& conference_id) {
+	_debug ("ManagerImpl::addParticipant(%s, %s)", call_id.c_str(), conference_id.c_str());
 
-    std::map<std::string, std::string> call_details = getCallDetails (call_id);
+	std::map<std::string, std::string> call_details = getCallDetails(call_id);
 
-    ConferenceMap::iterator iter = _conferencemap.find (conference_id);
-    std::map<std::string, std::string>::iterator iter_details;
+	ConferenceMap::iterator iter = _conferencemap.find(conference_id);
+	std::map<std::string, std::string>::iterator iter_details;
 
-    // store the current call id (it will change in offHoldCall or in answerCall)
-    CallID current_call_id = getCurrentCallId();
+	// store the current call id (it will change in offHoldCall or in answerCall)
+	CallID current_call_id = getCurrentCallId();
 
-    // detach from the conference and switch to this conference
+	// detach from the conference and switch to this conference
 
-    if (current_call_id != call_id) {
-        if (isConference (current_call_id)) {
-            detachParticipant (default_id, current_call_id);
-        } else
-            onHoldCall (current_call_id);
-    }
+	if (current_call_id != call_id) {
+		if (isConference(current_call_id)) {
+			detachParticipant(default_id, current_call_id);
+		} else
+			onHoldCall(current_call_id);
+	}
 
-    // TODO: remove this ugly hack => There should be different calls when double clicking
-    // a conference to add main participant to it, or (in this case) adding a participant
-    // toconference
-    switchCall ("");
+	// TODO: remove this ugly hack => There should be different calls when double clicking
+	// a conference to add main participant to it, or (in this case) adding a participant
+	// toconference
+	switchCall("");
 
-    addMainParticipant (conference_id);
+	addMainParticipant(conference_id);
 
-    _debug ("    addParticipant: enter main process");
+	_debug ("    addParticipant: enter main process");
 
-    if (iter != _conferencemap.end()) {
+	if (iter != _conferencemap.end()) {
 
-        Conference* conf = iter->second;
-        switchCall (conf->getConfID());
+		Conference* conf = iter->second;
+		switchCall(conf->getConfID());
 
-        AccountID currentAccountId;
-        Call* call = NULL;
+		AccountID currentAccountId;
+		Call* call = NULL;
 
-        currentAccountId = getAccountFromCall (call_id);
-        call = getAccountLink (currentAccountId)->getCall (call_id);
-        call->setConfId (conf->getConfID());
+		currentAccountId = getAccountFromCall(call_id);
+		call = getAccountLink(currentAccountId)->getCall(call_id);
+		call->setConfId(conf->getConfID());
 
-        conf->add (call_id);
+		conf->add(call_id);
 
-        iter_details = call_details.find ("CALL_STATE");
+		iter_details = call_details.find("CALL_STATE");
 
-        _debug ("    addParticipant: call state: %s", iter_details->second.c_str());
+		_debug ("    addParticipant: call state: %s", iter_details->second.c_str());
 
-        if (iter_details->second == "HOLD") {
-            _debug ("    OFFHOLD %s", call_id.c_str());
+		if (iter_details->second == "HOLD") {
+			_debug ("    OFFHOLD %s", call_id.c_str());
 
-            // offHoldCall create a new rtp session which use addStream to bind participant
-            offHoldCall (call_id);
-        } else if (iter_details->second == "INCOMING") {
-            _debug ("    ANSWER %s", call_id.c_str());
-            // answerCall create a new rtp session which use addStream to bind participant
-            answerCall (call_id);
-        } else if (iter_details->second == "CURRENT") {
-            // Already a curent call, so we beed to reset audio stream bindings manually
-            _audiodriver->getMainBuffer()->unBindAll (call_id);
-            conf->bindParticipant (call_id);
-        }
+			// offHoldCall create a new rtp session which use addStream to bind participant
+			offHoldCall(call_id);
+		} else if (iter_details->second == "INCOMING") {
+			_debug ("    ANSWER %s", call_id.c_str());
+			// answerCall create a new rtp session which use addStream to bind participant
+			answerCall(call_id);
+		} else if (iter_details->second == "CURRENT") {
+			// Already a curent call, so we beed to reset audio stream bindings manually
+			_audiodriver->getMainBuffer()->unBindAll(call_id);
+			conf->bindParticipant(call_id);
+		}
 
-        // _dbus->getCallManager()->conferenceChanged(conference_id, conf->getStateStr());
+		// _dbus->getCallManager()->conferenceChanged(conference_id, conf->getStateStr());
 
-        ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet participants = conf->getParticipantList();
 
-        // reset ring buffer for all conference participant
-        ParticipantSet::iterator iter_p = participants.begin();
+		// reset ring buffer for all conference participant
+		ParticipantSet::iterator iter_p = participants.begin();
 
-        while (iter_p != participants.end()) {
+		while (iter_p != participants.end()) {
 
-            // flush conference participants only
-            _audiodriver->getMainBuffer()->flush (*iter_p);
+			// flush conference participants only
+			_audiodriver->getMainBuffer()->flush(*iter_p);
 
-            iter_p++;
-        }
+			iter_p++;
+		}
 
-        _audiodriver->getMainBuffer()->flush (default_id);
-    } else {
-        _debug ("    addParticipant: Error, conference %s conference_id not found!", conference_id.c_str());
-    }
+		_audiodriver->getMainBuffer()->flush(default_id);
+	} else {
+		_debug ("    addParticipant: Error, conference %s conference_id not found!", conference_id.c_str());
+	}
 
 }
 
-void
-ManagerImpl::addMainParticipant (const CallID& conference_id)
-{
-    if (hasCurrentCall()) {
-        CallID current_call_id = getCurrentCallId();
+void ManagerImpl::addMainParticipant (const CallID& conference_id) {
+	if (hasCurrentCall()) {
+		CallID current_call_id = getCurrentCallId();
 
-        if (isConference (current_call_id)) {
-            detachParticipant (default_id, current_call_id);
-        } else {
-            onHoldCall (current_call_id);
-        }
-    }
+		if (isConference(current_call_id)) {
+			detachParticipant(default_id, current_call_id);
+		} else {
+			onHoldCall(current_call_id);
+		}
+	}
 
-    ConferenceMap::iterator iter = _conferencemap.find (conference_id);
+	ConferenceMap::iterator iter = _conferencemap.find(conference_id);
 
-    Conference *conf = NULL;
+	Conference *conf = NULL;
 
-    if (iter != _conferencemap.end()) {
-        conf = iter->second;
+	if (iter != _conferencemap.end()) {
+		conf = iter->second;
 
-        ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet participants = conf->getParticipantList();
 
-        ParticipantSet::iterator iter_participant = participants.begin();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-        while (iter_participant != participants.end()) {
-            _audiodriver->getMainBuffer()->bindCallID (*iter_participant, default_id);
+		while (iter_participant != participants.end()) {
+			_audiodriver->getMainBuffer()->bindCallID(*iter_participant,
+					default_id);
 
-            iter_participant++;
-        }
+			iter_participant++;
+		}
 
-        // Reset ringbuffer's readpointers
-        iter_participant = participants.begin();
+		// Reset ringbuffer's readpointers
+		iter_participant = participants.begin();
 
-        while (iter_participant != participants.end()) {
-            _audiodriver->getMainBuffer()->flush (*iter_participant);
+		while (iter_participant != participants.end()) {
+			_audiodriver->getMainBuffer()->flush(*iter_participant);
 
-            iter_participant++;
-        }
+			iter_participant++;
+		}
 
-        _audiodriver->getMainBuffer()->flush (default_id);
+		_audiodriver->getMainBuffer()->flush(default_id);
 
-        conf->setState (Conference::Active_Atached);
+		conf->setState(Conference::Active_Atached);
 
-        _dbus->getCallManager()->conferenceChanged (conference_id, conf->getStateStr());
+		_dbus->getCallManager()->conferenceChanged(conference_id,
+				conf->getStateStr());
 
-    }
+	}
 
-    switchCall (conference_id);
+	switchCall(conference_id);
 }
 
+void ManagerImpl::joinParticipant (const CallID& call_id1,
+		const CallID& call_id2) {
+	_debug ("ManagerImpl::joinParticipant(%s, %s)", call_id1.c_str(), call_id2.c_str());
+	// _debug("    Current call ID %s", getCurrentCallId().c_str());
 
-void
-ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2)
-{
-    _debug ("ManagerImpl::joinParticipant(%s, %s)", call_id1.c_str(), call_id2.c_str());
-    // _debug("    Current call ID %s", getCurrentCallId().c_str());
-
-    std::map<std::string, std::string> call1_details = getCallDetails (call_id1);
-    std::map<std::string, std::string> call2_details = getCallDetails (call_id2);
-
-    std::map<std::string, std::string>::iterator iter_details;
-
-    AccountID currentAccountId;
-    Call* call = NULL;
-
-    CallID current_call_id = getCurrentCallId();
-    _debug ("    joinParticipant: current_call_id %s", current_call_id.c_str());
-
+	std::map<std::string, std::string> call1_details = getCallDetails(call_id1);
+	std::map<std::string, std::string> call2_details = getCallDetails(call_id2);
 
-    // detach from the conference and switch to this conference
+	std::map<std::string, std::string>::iterator iter_details;
 
-    if ( (current_call_id != call_id1) && (current_call_id != call_id2)) {
-        if (isConference (current_call_id))
-            detachParticipant (default_id, current_call_id);
-        else
-            onHoldCall (current_call_id);
-    }
+	AccountID currentAccountId;
+	Call* call = NULL;
 
-    _debug ("    joinParticipant: create a conference");
+	CallID current_call_id = getCurrentCallId();
+	_debug ("    joinParticipant: current_call_id %s", current_call_id.c_str());
 
-    Conference *conf = createConference (call_id1, call_id2);
-    switchCall (conf->getConfID());
+	// detach from the conference and switch to this conference
 
-    currentAccountId = getAccountFromCall (call_id1);
-    call = getAccountLink (currentAccountId)->getCall (call_id1);
-    call->setConfId (conf->getConfID());
-
-    iter_details = call1_details.find ("CALL_STATE");
-    _debug ("    joinParticipant: call1 %s state: %s", call_id1.c_str(), iter_details->second.c_str());
-
-    if (iter_details->second == "HOLD") {
-        _debug ("    OFFHOLD %s", call_id1.c_str());
-        offHoldCall (call_id1);
-    } else if (iter_details->second == "INCOMING") {
-        _debug ("    ANSWER %s", call_id1.c_str());
-        answerCall (call_id1);
-    } else if (iter_details->second == "CURRENT") {
-        _debug ("    CURRENT %s", call_id1.c_str());
-        _audiodriver->getMainBuffer()->unBindAll (call_id1);
-        conf->bindParticipant (call_id1);
-    } else if (iter_details->second == "INACTIVE") {
-        _debug ("    INACTIVE %s", call_id1.c_str());
-        answerCall (call_id1);
-    } else {
-        _debug ("    CAll State not recognized");
-    }
-
-    currentAccountId = getAccountFromCall (call_id2);
-
-    call = getAccountLink (currentAccountId)->getCall (call_id2);
-    call->setConfId (conf->getConfID());
+	if ((current_call_id != call_id1) && (current_call_id != call_id2)) {
+		if (isConference(current_call_id))
+			detachParticipant(default_id, current_call_id);
+		else
+			onHoldCall(current_call_id);
+	}
 
-    iter_details = call2_details.find ("CALL_STATE");
-    _debug ("    joinParticipant: call2 %s state: %s", call_id2.c_str(), iter_details->second.c_str());
+	_debug ("    joinParticipant: create a conference");
+
+	Conference *conf = createConference(call_id1, call_id2);
+	switchCall(conf->getConfID());
+
+	currentAccountId = getAccountFromCall(call_id1);
+	call = getAccountLink(currentAccountId)->getCall(call_id1);
+	call->setConfId(conf->getConfID());
+
+	iter_details = call1_details.find("CALL_STATE");
+	_debug ("    joinParticipant: call1 %s state: %s", call_id1.c_str(), iter_details->second.c_str());
+
+	if (iter_details->second == "HOLD") {
+		_debug ("    OFFHOLD %s", call_id1.c_str());
+		offHoldCall(call_id1);
+	} else if (iter_details->second == "INCOMING") {
+		_debug ("    ANSWER %s", call_id1.c_str());
+		answerCall(call_id1);
+	} else if (iter_details->second == "CURRENT") {
+		_debug ("    CURRENT %s", call_id1.c_str());
+		_audiodriver->getMainBuffer()->unBindAll(call_id1);
+		conf->bindParticipant(call_id1);
+	} else if (iter_details->second == "INACTIVE") {
+		_debug ("    INACTIVE %s", call_id1.c_str());
+		answerCall(call_id1);
+	} else {
+		_debug ("    CAll State not recognized");
+	}
 
-    if (iter_details->second == "HOLD") {
-        _debug ("    OFFHOLD %s", call_id2.c_str());
-        offHoldCall (call_id2);
-    } else if (iter_details->second == "INCOMING") {
-        _debug ("    ANSWER %s", call_id2.c_str());
-        answerCall (call_id2);
-    } else if (iter_details->second == "CURRENT") {
-        _debug ("    CURRENT %s", call_id2.c_str());
-        _audiodriver->getMainBuffer()->unBindAll (call_id2);
-        conf->bindParticipant (call_id2);
-    } else if (iter_details->second == "INACTIVE") {
-        _debug ("    INACTIVE %s", call_id2.c_str());
-        answerCall (call_id2);
-    } else {
-        _debug ("    CAll State not recognized");
-    }
+	currentAccountId = getAccountFromCall(call_id2);
+
+	call = getAccountLink(currentAccountId)->getCall(call_id2);
+	call->setConfId(conf->getConfID());
+
+	iter_details = call2_details.find("CALL_STATE");
+	_debug ("    joinParticipant: call2 %s state: %s", call_id2.c_str(), iter_details->second.c_str());
+
+	if (iter_details->second == "HOLD") {
+		_debug ("    OFFHOLD %s", call_id2.c_str());
+		offHoldCall(call_id2);
+	} else if (iter_details->second == "INCOMING") {
+		_debug ("    ANSWER %s", call_id2.c_str());
+		answerCall(call_id2);
+	} else if (iter_details->second == "CURRENT") {
+		_debug ("    CURRENT %s", call_id2.c_str());
+		_audiodriver->getMainBuffer()->unBindAll(call_id2);
+		conf->bindParticipant(call_id2);
+	} else if (iter_details->second == "INACTIVE") {
+		_debug ("    INACTIVE %s", call_id2.c_str());
+		answerCall(call_id2);
+	} else {
+		_debug ("    CAll State not recognized");
+	}
 
-    // finally bind main participant to conference
-    // addMainParticipant(default_conf);
+	// finally bind main participant to conference
+	// addMainParticipant(default_conf);
 
 
-    // switchCall(conf->getConfID());
+	// switchCall(conf->getConfID());
 
-    if (_audiodriver)
-        _audiodriver->getMainBuffer()->stateInfo();
+	if (_audiodriver)
+		_audiodriver->getMainBuffer()->stateInfo();
 
 }
 
+void ManagerImpl::detachParticipant (const CallID& call_id,
+		const CallID& current_id) {
+	_debug ("ManagerImpl::detachParticipant(%s)", call_id.c_str());
 
-void
-ManagerImpl::detachParticipant (const CallID& call_id, const CallID& current_id)
-{
-    _debug ("ManagerImpl::detachParticipant(%s)", call_id.c_str());
+	CallID current_call_id = current_id;
 
-    CallID current_call_id = current_id;
+	current_call_id = getCurrentCallId();
 
-    current_call_id = getCurrentCallId();
+	if (call_id != default_id) {
+		AccountID currentAccountId;
+		Call* call = NULL;
 
-    if (call_id != default_id) {
-        AccountID currentAccountId;
-        Call* call = NULL;
+		currentAccountId = getAccountFromCall(call_id);
+		call = getAccountLink(currentAccountId)->getCall(call_id);
 
-        currentAccountId = getAccountFromCall (call_id);
-        call = getAccountLink (currentAccountId)->getCall (call_id);
+		// TODO: add conference_id as a second parameter
+		ConferenceMap::iterator iter = _conferencemap.find(call->getConfId());
 
-        // TODO: add conference_id as a second parameter
-        ConferenceMap::iterator iter = _conferencemap.find (call->getConfId());
+		Conference *conf = getConferenceFromCallID(call_id);
 
-        Conference *conf = getConferenceFromCallID (call_id);
+		if (conf != NULL) {
 
-        if (conf != NULL) {
+			_debug ("    detachParticipant: detaching participant %s", call_id.c_str());
 
-            _debug ("    detachParticipant: detaching participant %s", call_id.c_str());
+			std::map<std::string, std::string> call_details = getCallDetails(
+					call_id);
+			std::map<std::string, std::string>::iterator iter_details;
 
-            std::map<std::string, std::string> call_details = getCallDetails (call_id);
-            std::map<std::string, std::string>::iterator iter_details;
+			iter_details = call_details.find("CALL_STATE");
 
-            iter_details = call_details.find ("CALL_STATE");
+			if (iter_details->second == "RINGING") {
+				removeParticipant(call_id);
+			} else {
+				_debug ("    ONHOLD %s", call_id.c_str());
+				onHoldCall(call_id);
 
-            if (iter_details->second == "RINGING") {
-                removeParticipant (call_id);
-            } else {
-                _debug ("    ONHOLD %s", call_id.c_str());
-                onHoldCall (call_id);
+				removeParticipant(call_id);
 
-                removeParticipant (call_id);
+				processRemainingParticipant(current_call_id, conf);
+			}
+		} else {
 
-                processRemainingParticipant (current_call_id, conf);
-            }
-        } else {
+			_debug ("    detachParticipant: call is not conferencing, cannot detach");
 
+		}
+	} else {
+		_debug ("    detachParticipant: unbind main participant from all");
+		_audiodriver->getMainBuffer()->unBindAll(default_id);
 
-            _debug ("    detachParticipant: call is not conferencing, cannot detach");
-
-        }
-    } else {
-        _debug ("    detachParticipant: unbind main participant from all");
-        _audiodriver->getMainBuffer()->unBindAll (default_id);
-
-        if (isConference (current_call_id)) {
+		if (isConference(current_call_id)) {
 
-            ConferenceMap::iterator iter = _conferencemap.find (current_call_id);
-            Conference *conf = iter->second;
+			ConferenceMap::iterator iter = _conferencemap.find(current_call_id);
+			Conference *conf = iter->second;
 
-            conf->setState (Conference::Active_Detached);
+			conf->setState(Conference::Active_Detached);
 
-            _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
-        }
+			_dbus->getCallManager()->conferenceChanged(conf->getConfID(),
+					conf->getStateStr());
+		}
 
-        switchCall ("");
+		switchCall("");
 
-    }
+	}
 
 }
 
+void ManagerImpl::removeParticipant (const CallID& call_id) {
+	_debug ("ManagerImpl::removeParticipant(%s)", call_id.c_str());
 
-void
-ManagerImpl::removeParticipant (const CallID& call_id)
-{
-    _debug ("ManagerImpl::removeParticipant(%s)", call_id.c_str());
-
-    // TODO: add conference_id as a second parameter
-    Conference* conf;
+	// TODO: add conference_id as a second parameter
+	Conference* conf;
 
-    AccountID currentAccountId;
-    Call* call = NULL;
+	AccountID currentAccountId;
+	Call* call = NULL;
 
-    // this call is no more a conference participant
-    currentAccountId = getAccountFromCall (call_id);
-    call = getAccountLink (currentAccountId)->getCall (call_id);
+	// this call is no more a conference participant
+	currentAccountId = getAccountFromCall(call_id);
+	call = getAccountLink(currentAccountId)->getCall(call_id);
 
-    ConferenceMap conf_map = _conferencemap;
-    ConferenceMap::iterator iter = conf_map.find (call->getConfId());
+	ConferenceMap conf_map = _conferencemap;
+	ConferenceMap::iterator iter = conf_map.find(call->getConfId());
 
-    if (iter == conf_map.end()) {
-        _debug ("    no conference created, cannot remove participant ");
-    } else {
+	if (iter == conf_map.end()) {
+		_debug ("    no conference created, cannot remove participant ");
+	} else {
 
-        conf = iter->second;
+		conf = iter->second;
 
-        _debug ("    removeParticipant %s", call_id.c_str());
-        conf->remove (call_id);
-        call->setConfId ("");
+		_debug ("    removeParticipant %s", call_id.c_str());
+		conf->remove(call_id);
+		call->setConfId("");
 
-    }
+	}
 
-    if (_audiodriver)
-        _audiodriver->getMainBuffer()->stateInfo();
+	if (_audiodriver)
+		_audiodriver->getMainBuffer()->stateInfo();
 
 }
 
+void ManagerImpl::processRemainingParticipant (CallID current_call_id,
+		Conference *conf) {
 
-void
-ManagerImpl::processRemainingParticipant (CallID current_call_id, Conference *conf)
-{
+	_debug ("ManagerImpl::processRemainingParticipant()");
 
-    _debug ("ManagerImpl::processRemainingParticipant()");
+	if (conf->getNbParticipants() > 1) {
 
-    if (conf->getNbParticipants() > 1) {
+		ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-        ParticipantSet participants = conf->getParticipantList();
-        ParticipantSet::iterator iter_participant = participants.begin();
+		// Reset ringbuffer's readpointers
+		iter_participant = participants.begin();
 
-        // Reset ringbuffer's readpointers
-        iter_participant = participants.begin();
+		while (iter_participant != participants.end()) {
+			_audiodriver->getMainBuffer()->flush(*iter_participant);
 
-        while (iter_participant != participants.end()) {
-            _audiodriver->getMainBuffer()->flush (*iter_participant);
-
-            iter_participant++;
-        }
+			iter_participant++;
+		}
 
-        _audiodriver->getMainBuffer()->flush (default_id);
+		_audiodriver->getMainBuffer()->flush(default_id);
 
-    } else if (conf->getNbParticipants() == 1) {
-        AccountID currentAccountId;
-        Call* call = NULL;
+	} else if (conf->getNbParticipants() == 1) {
+		AccountID currentAccountId;
+		Call* call = NULL;
 
-        ParticipantSet participants = conf->getParticipantList();
-        ParticipantSet::iterator iter_participant = participants.begin();
+		ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-        // bind main participant to remaining conference call
+		// bind main participant to remaining conference call
 
-        if (iter_participant != participants.end()) {
+		if (iter_participant != participants.end()) {
 
-            // this call is no more a conference participant
-            currentAccountId = getAccountFromCall (*iter_participant);
-            call = getAccountLink (currentAccountId)->getCall (*iter_participant);
-            call->setConfId ("");
+			// this call is no more a conference participant
+			currentAccountId = getAccountFromCall(*iter_participant);
+			call = getAccountLink(currentAccountId)->getCall(*iter_participant);
+			call->setConfId("");
 
-            // if we are not listening to this conference
+			// if we are not listening to this conference
 
-            if (current_call_id != conf->getConfID()) {
-                onHoldCall (call->getCallId());
-            } else {
-                switchCall (*iter_participant);
-            }
-        }
+			if (current_call_id != conf->getConfID()) {
+				onHoldCall(call->getCallId());
+			} else {
+				switchCall(*iter_participant);
+			}
+		}
 
-        removeConference (conf->getConfID());
-    } else {
-        removeConference (conf->getConfID());
+		removeConference(conf->getConfID());
+	} else {
+		removeConference(conf->getConfID());
 
-        switchCall ("");
-    }
+		switchCall("");
+	}
 
 }
 
-void
-ManagerImpl::joinConference (const CallID& conf_id1, const CallID& conf_id2)
-{
-    _debug ("ManagerImpl::joinConference(%s, %s)", conf_id1.c_str(), conf_id2.c_str());
+void ManagerImpl::joinConference (const CallID& conf_id1,
+		const CallID& conf_id2) {
+	_debug ("ManagerImpl::joinConference(%s, %s)", conf_id1.c_str(), conf_id2.c_str());
 
-    ConferenceMap::iterator iter;
+	ConferenceMap::iterator iter;
 
-    Conference *conf1 = NULL;
-    Conference *conf2 = NULL;
+	Conference *conf1 = NULL;
+	Conference *conf2 = NULL;
 
-    iter = _conferencemap.find (conf_id1);
+	iter = _conferencemap.find(conf_id1);
 
-    if (iter != _conferencemap.end())
-        conf1 = iter->second;
+	if (iter != _conferencemap.end())
+		conf1 = iter->second;
 
-    iter = _conferencemap.find (conf_id2);
+	iter = _conferencemap.find(conf_id2);
 
-    if (iter != _conferencemap.end())
-        conf2 = iter->second;
+	if (iter != _conferencemap.end())
+		conf2 = iter->second;
 
-    ParticipantSet participants = conf1->getParticipantList();
+	ParticipantSet participants = conf1->getParticipantList();
 
-    ParticipantSet::iterator iter_participant = participants.begin();
+	ParticipantSet::iterator iter_participant = participants.begin();
 
-    while (iter_participant != participants.end()) {
-        detachParticipant (*iter_participant, "");
-        addParticipant (*iter_participant, conf_id2);
+	while (iter_participant != participants.end()) {
+		detachParticipant(*iter_participant, "");
+		addParticipant(*iter_participant, conf_id2);
 
-        iter_participant++;
-    }
+		iter_participant++;
+	}
 
-    // detachParticipant(default_id, "");
+	// detachParticipant(default_id, "");
 
 }
 
-void
-ManagerImpl::addStream (const CallID& call_id)
-{
-    _debug ("ManagerImpl::addStream %s", call_id.c_str());
-
-    AccountID currentAccountId;
-    Call* call = NULL;
-
-    currentAccountId = getAccountFromCall (call_id);
-    call = getAccountLink (currentAccountId)->getCall (call_id);
+void ManagerImpl::addStream (const CallID& call_id) {
+	_debug ("ManagerImpl::addStream %s", call_id.c_str());
 
-    if (participToConference (call_id)) {
+	AccountID currentAccountId;
+	Call* call = NULL;
 
-        // bind to conference participant
-        ConferenceMap::iterator iter = _conferencemap.find (call->getConfId());
+	currentAccountId = getAccountFromCall(call_id);
+	call = getAccountLink(currentAccountId)->getCall(call_id);
 
-        if (iter != _conferencemap.end()) {
-            Conference* conf = iter->second;
+	if (participToConference(call_id)) {
 
+		// 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);
 
-            _audiodriver->getMainBuffer()->flush (default_id);
-        }
+				iter_p++;
+			}
 
-    } else {
+			_audiodriver->getMainBuffer()->flush(default_id);
+		}
 
+	} else {
 
-        // bind to main
-        getAudioDriver()->getMainBuffer()->bindCallID (call_id);
+		// bind to main
+		getAudioDriver()->getMainBuffer()->bindCallID(call_id);
 
-        // _audiodriver->getMainBuffer()->flush(default_id);
-        _audiodriver->flushUrgent();
-        _audiodriver->flushMain();
+		// _audiodriver->getMainBuffer()->flush(default_id);
+		_audiodriver->flushUrgent();
+		_audiodriver->flushMain();
 
-    }
+	}
 
-    if (_audiodriver)
-        _audiodriver->getMainBuffer()->stateInfo();
+	if (_audiodriver)
+		_audiodriver->getMainBuffer()->stateInfo();
 }
 
-void
-ManagerImpl::removeStream (const CallID& call_id)
-{
-    _debug ("ManagerImpl::removeStream %s", call_id.c_str());
+void ManagerImpl::removeStream (const CallID& call_id) {
+	_debug ("ManagerImpl::removeStream %s", call_id.c_str());
 
-    getAudioDriver()->getMainBuffer()->unBindAll (call_id);
+	getAudioDriver()->getMainBuffer()->unBindAll(call_id);
 
-    if (participToConference (call_id)) {
-        removeParticipant (call_id);
-    }
+	if (participToConference(call_id)) {
+		removeParticipant(call_id);
+	}
 
-    if (_audiodriver)
-        _audiodriver->getMainBuffer()->stateInfo();
+	if (_audiodriver)
+		_audiodriver->getMainBuffer()->stateInfo();
 }
 
 //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());
+bool ManagerImpl::saveConfig (void) {
+	_debug ("Saving Configuration to XDG directory %s ... ", _path.c_str());
+	setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume());
+	setConfig(AUDIO, VOLUME_MICRO, getMicVolume());
 
-    _setupLoaded = _config.saveConfigTree (_path.data());
-    return _setupLoaded;
+	_setupLoaded = _config.saveConfigTree(_path.data());
+	return _setupLoaded;
 }
 
-
 //THREAD=Main
-bool
-ManagerImpl::sendDtmf (const CallID& id, char code)
-{
-    AccountID accountid = getAccountFromCall (id);
+bool ManagerImpl::sendDtmf (const CallID& id, char code) {
+	AccountID accountid = getAccountFromCall(id);
 
-    if (accountid == AccountNULL) {
-        playDtmf (code);
-        return false;
-    }
+	if (accountid == AccountNULL) {
+		playDtmf(code);
+		return false;
+	}
 
-    int sendType = getConfigInt (SIGNALISATION, SEND_DTMF_AS);
+	int sendType = getConfigInt(SIGNALISATION, SEND_DTMF_AS);
 
-    bool returnValue = false;
+	bool returnValue = false;
 
-    switch (sendType) {
+	switch (sendType) {
 
-        case 0: // SIP INFO
-            playDtmf (code);
-            returnValue = getAccountLink (accountid)->carryingDTMFdigits (id, code);
-            break;
+	case 0: // SIP INFO
+		playDtmf(code);
+		returnValue = getAccountLink(accountid)->carryingDTMFdigits(id, code);
+		break;
 
-        case 1: // Audio way
-            break;
+	case 1: // Audio way
+		break;
 
-        case 2: // rfc 2833
-            break;
+	case 2: // rfc 2833
+		break;
 
-        default: // unknown - error config?
-            break;
-    }
+	default: // unknown - error config?
+		break;
+	}
 
-    return returnValue;
+	return returnValue;
 }
 
 //THREAD=Main | VoIPLink
-bool
-ManagerImpl::playDtmf (char code)
-{
-    int pulselen, layer, size;
-    bool ret = false;
-    AudioLayer *audiolayer;
-    SFLDataFormat *buf;
+bool ManagerImpl::playDtmf (char code) {
+	int pulselen, layer, size;
+	bool ret = false;
+	AudioLayer *audiolayer;
+	SFLDataFormat *buf;
 
-    stopTone ();
+	stopTone();
 
-    bool hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_DTMF);
+	bool hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_DTMF);
 
-    if (!hasToPlayTone) {
-        _debug ("    playDtmf: Do not have to play a tone...");
-        return false;
-    }
-
-    // length in milliseconds
-    pulselen = getConfigInt (SIGNALISATION, PULSE_LENGTH);
-
-    if (!pulselen) {
-        _debug ("    playDtmf: Pulse length is not set...");
-        return false;
-    }
-
-    // numbers of int = length in milliseconds / 1000 (number of seconds)
-    //                = number of seconds * SAMPLING_RATE by SECONDS
-    audiolayer = getAudioDriver();
+	if (!hasToPlayTone) {
+		_debug ("    playDtmf: Do not have to play a tone...");
+		return false;
+	}
 
-    layer = audiolayer->getLayerType();
+	// length in milliseconds
+	pulselen = getConfigInt(SIGNALISATION, PULSE_LENGTH);
 
-    // fast return, no sound, so no dtmf
-    if (audiolayer==0 || _dtmfKey == 0) {
-        _debug ("    playDtmf: Error no audio layer...");
-        return false;
-    }
+	if (!pulselen) {
+		_debug ("    playDtmf: Pulse length is not set...");
+		return false;
+	}
 
-    // number of data sampling in one pulselen depends on samplerate
-    // size (n sampling) = time_ms * sampling/s
-    //                     ---------------------
-    //                            ms/s
-    size = (int) ( (pulselen * (float) audiolayer->getSampleRate()) / 1000);
+	// numbers of int = length in milliseconds / 1000 (number of seconds)
+	//                = number of seconds * SAMPLING_RATE by SECONDS
+	audiolayer = getAudioDriver();
 
-    // this buffer is for mono
-    // TODO <-- this should be global and hide if same size
-    buf = new SFLDataFormat[size];
+	layer = audiolayer->getLayerType();
 
-    // Handle dtmf
-    _dtmfKey->startTone (code);
+	// fast return, no sound, so no dtmf
+	if (audiolayer == 0 || _dtmfKey == 0) {
+		_debug ("    playDtmf: Error no audio layer...");
+		return false;
+	}
 
-    // copy the sound
-    if (_dtmfKey->generateDTMF (buf, size)) {
-        // Put buffer to urgentRingBuffer
-        // put the size in bytes...
-        // so size * 1 channel (mono) * sizeof (bytes for the data)
-        // audiolayer->flushUrgent();
-        audiolayer->startStream();
-        audiolayer->putUrgent (buf, size * sizeof (SFLDataFormat));
-    }
+	// number of data sampling in one pulselen depends on samplerate
+	// size (n sampling) = time_ms * sampling/s
+	//                     ---------------------
+	//                            ms/s
+	size = (int) ((pulselen * (float) audiolayer->getSampleRate()) / 1000);
+
+	// this buffer is for mono
+	// TODO <-- this should be global and hide if same size
+	buf = new SFLDataFormat[size];
+
+	// Handle dtmf
+	_dtmfKey->startTone(code);
+
+	// copy the sound
+	if (_dtmfKey->generateDTMF(buf, size)) {
+		// Put buffer to urgentRingBuffer
+		// put the size in bytes...
+		// so size * 1 channel (mono) * sizeof (bytes for the data)
+		// audiolayer->flushUrgent();
+		audiolayer->startStream();
+		audiolayer->putUrgent(buf, size * sizeof(SFLDataFormat));
+	}
 
-    ret = true;
+	ret = true;
 
-    // TODO Cache the DTMF
+	// TODO Cache the DTMF
 
-    delete[] buf;
-    buf = 0;
+	delete[] buf;
+	buf = 0;
 
-    return ret;
+	return ret;
 }
 
 // Multi-thread
-bool
-ManagerImpl::incomingCallWaiting()
-{
-    return (_nbIncomingWaitingCall > 0) ? true : false;
+bool ManagerImpl::incomingCallWaiting () {
+	return (_nbIncomingWaitingCall > 0) ? true : false;
 }
 
-void
-ManagerImpl::addWaitingCall (const CallID& id)
-{
-    ost::MutexLock m (_waitingCallMutex);
-    _waitingCall.insert (id);
-    _nbIncomingWaitingCall++;
+void ManagerImpl::addWaitingCall (const CallID& id) {
+	ost::MutexLock m(_waitingCallMutex);
+	_waitingCall.insert(id);
+	_nbIncomingWaitingCall++;
 }
 
-void
-ManagerImpl::removeWaitingCall (const CallID& id)
-{
-    ost::MutexLock m (_waitingCallMutex);
-    // should return more than 1 if it erase a call
+void ManagerImpl::removeWaitingCall (const CallID& id) {
+	ost::MutexLock m(_waitingCallMutex);
+	// should return more than 1 if it erase a call
 
-    if (_waitingCall.erase (id)) {
-        _nbIncomingWaitingCall--;
-    }
+	if (_waitingCall.erase(id)) {
+		_nbIncomingWaitingCall--;
+	}
 }
 
-bool
-ManagerImpl::isWaitingCall (const CallID& id)
-{
-    CallIDSet::iterator iter = _waitingCall.find (id);
+bool ManagerImpl::isWaitingCall (const CallID& id) {
+	CallIDSet::iterator iter = _waitingCall.find(id);
 
-    if (iter != _waitingCall.end()) {
-        return false;
-    }
+	if (iter != _waitingCall.end()) {
+		return false;
+	}
 
-    return true;
+	return true;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // Management of event peer IP-phone
 ////////////////////////////////////////////////////////////////////////////////
 // SipEvent Thread
-bool
-ManagerImpl::incomingCall (Call* call, const AccountID& accountId)
-{
-    PulseLayer *pulselayer;
-    std::string from, number, display_name, display;
-
-    stopTone ();
+bool ManagerImpl::incomingCall (Call* call, const AccountID& accountId) {
+	PulseLayer *pulselayer;
+	std::string from, number, display_name, display;
 
-    _debug ("Incoming call %s for account %s", call->getCallId().data(), accountId.c_str());
+	stopTone();
 
-    associateCallToAccount (call->getCallId(), accountId);
+	_debug ("Incoming call %s for account %s", call->getCallId().data(), accountId.c_str());
 
-    // If account is null it is an ip to ip call
+	associateCallToAccount(call->getCallId(), accountId);
 
-    if (accountId==AccountNULL) {
+	// If account is null it is an ip to ip call
 
-        associateConfigToCall (call->getCallId(), Call::IPtoIP);
-    } else {
-        // strip sip: which is not required and bring confusion with ip to ip calls
-        // when placing new call from history (if call is IAX, do nothing)
-        std::string peerNumber = call->getPeerNumber();
+	if (accountId == AccountNULL) {
 
-        int startIndex = peerNumber.find ("sip:");
+		associateConfigToCall(call->getCallId(), Call::IPtoIP);
+	} else {
+		// strip sip: which is not required and bring confusion with ip to ip calls
+		// when placing new call from history (if call is IAX, do nothing)
+		std::string peerNumber = call->getPeerNumber();
 
-        // if "sip:" is found => it is not an IAX call
+		int startIndex = peerNumber.find("sip:");
 
-        if (startIndex != (int) string::npos) {
-            std::string strippedPeerNumber = peerNumber.substr (startIndex+4);
-            call->setPeerNumber (strippedPeerNumber);
-        }
+		// if "sip:" is found => it is not an IAX call
 
-    }
+		if (startIndex != (int) string::npos) {
+			std::string strippedPeerNumber = peerNumber.substr(startIndex + 4);
+			call->setPeerNumber(strippedPeerNumber);
+		}
 
-    _debug ("ManagerImpl::incomingCall :: hasCurrentCall() %i ", hasCurrentCall());
+	}
 
-    if (!hasCurrentCall()) {
+	_debug ("ManagerImpl::incomingCall :: hasCurrentCall() %i ", hasCurrentCall());
 
-        call->setConnectionState (Call::Ringing);
-        ringtone();
-        // switchCall (call->getCallId());
+	if (!hasCurrentCall()) {
 
-    }
+		call->setConnectionState(Call::Ringing);
+		ringtone();
+		// switchCall (call->getCallId());
 
-    /*
-    else {
-        addWaitingCall(call->getCallId());
-    }
-    */
+	}
 
-    addWaitingCall (call->getCallId());
+	/*
+	 else {
+	 addWaitingCall(call->getCallId());
+	 }
+	 */
 
-    from = call->getPeerName();
+	addWaitingCall(call->getCallId());
 
-    number = call->getPeerNumber();
+	from = call->getPeerName();
 
-    display_name = call->getDisplayName();
+	number = call->getPeerNumber();
 
-    // _debug(    "incomingCall from: %s, number: %s, display_name: %s", from.c_str(), number.c_str(), display_name.c_str());
+	display_name = call->getDisplayName();
 
-    if (from != "" && number != "") {
-        from.append (" <");
-        from.append (number);
-        from.append (">");
-    } else if (from.empty()) {
-        from.append ("<");
-        from.append (number);
-        from.append (">");
-    }
+	// _debug(    "incomingCall from: %s, number: %s, display_name: %s", from.c_str(), number.c_str(), display_name.c_str());
 
-    /*
-    CallIDSet::iterator iter = _waitingCall.begin();
-    while (iter != _waitingCall.end()) {
-        CallID ident = *iter;
-        _debug("ManagerImpl::incomingCall :: CALL iteration: %s ",ident.c_str());
-        ++iter;
-    }
-    */
+	if (from != "" && number != "") {
+		from.append(" <");
+		from.append(number);
+		from.append(">");
+	} else if (from.empty()) {
+		from.append("<");
+		from.append(number);
+		from.append(">");
+	}
 
-    /* Broadcast a signal over DBus */
-    _debug ("From: %s, Number: %s, DisplayName: %s", from.c_str(), number.c_str(), display_name.c_str());
+	/*
+	 CallIDSet::iterator iter = _waitingCall.begin();
+	 while (iter != _waitingCall.end()) {
+	 CallID ident = *iter;
+	 _debug("ManagerImpl::incomingCall :: CALL iteration: %s ",ident.c_str());
+	 ++iter;
+	 }
+	 */
 
-    display = display_name;
+	/* Broadcast a signal over DBus */
+	_debug ("From: %s, Number: %s, DisplayName: %s", from.c_str(), number.c_str(), display_name.c_str());
 
-    display.append (" ");
+	display = display_name;
 
-    display.append (from);
+	display.append(" ");
 
+	display.append(from);
 
-    if (_dbus) _dbus->getCallManager()->incomingCall (accountId, call->getCallId(), display.c_str());
+	if (_dbus)
+		_dbus->getCallManager()->incomingCall(accountId, call->getCallId(),
+				display.c_str());
 
-    //if (_dbus) _dbus->getCallManager()->callStateChanged(call->getCallId(), "INCOMING");
+	//if (_dbus) _dbus->getCallManager()->callStateChanged(call->getCallId(), "INCOMING");
 
-    if (_audiodriver->getLayerType() == PULSEAUDIO)  {
-        pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-    }
+	if (_audiodriver->getLayerType() == PULSEAUDIO) {
+		pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
+	}
 
-    return true;
+	return true;
 }
 
 //THREAD=VoIP
-void
-ManagerImpl::incomingMessage (const AccountID& accountId, const std::string& message)
-{
-    if (_dbus) {
-        _dbus->getCallManager()->incomingMessage (accountId, message);
-    }
+void ManagerImpl::incomingMessage (const AccountID& accountId,
+		const std::string& message) {
+	if (_dbus) {
+		_dbus->getCallManager()->incomingMessage(accountId, message);
+	}
 }
 
 //THREAD=VoIP CALL=Outgoing
-void
-ManagerImpl::peerAnsweredCall (const CallID& id)
-{
-    // The if statement is usefull only if we sent two calls at the same time.
-    if (isCurrentCall (id)) {
-        stopTone ();
-    }
+void ManagerImpl::peerAnsweredCall (const CallID& id) {
+	// The if statement is usefull only if we sent two calls at the same time.
+	if (isCurrentCall(id)) {
+		stopTone();
+	}
 
-    if (_dbus) _dbus->getCallManager()->callStateChanged (id, "CURRENT");
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(id, "CURRENT");
 
-    // std::string codecName = getCurrentCodecName (id);
+	// std::string codecName = getCurrentCodecName (id);
 
-    // _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str());
-    // if (_dbus) _dbus->getCallManager()->currentSelectedCodec (id,codecName.c_str());
+	// _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str());
+	// if (_dbus) _dbus->getCallManager()->currentSelectedCodec (id,codecName.c_str());
 
-    // Required if there have been no sip reinvite, in this case we must reinit buffers since the
-    _audiodriver->flushMain();
+	// Required if there have been no sip reinvite, in this case we must reinit buffers since the
+	_audiodriver->flushMain();
 
-    _audiodriver->flushUrgent();
+	_audiodriver->flushUrgent();
 }
 
 //THREAD=VoIP Call=Outgoing
-void
-ManagerImpl::peerRingingCall (const CallID& id)
-{
-    if (isCurrentCall (id)) {
-        ringback();
-    }
+void ManagerImpl::peerRingingCall (const CallID& id) {
+	if (isCurrentCall(id)) {
+		ringback();
+	}
 
-    if (_dbus) _dbus->getCallManager()->callStateChanged (id, "RINGING");
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(id, "RINGING");
 }
 
 //THREAD=VoIP Call=Outgoing/Ingoing
-void
-ManagerImpl::peerHungupCall (const CallID& call_id)
-{
-    PulseLayer *pulselayer;
-    AccountID account_id;
-    bool returnValue;
-
-    _debug ("ManagerImpl::peerHungupCall(%s)", call_id.c_str());
-
-    // store the current call id
-    CallID current_call_id = getCurrentCallId();
+void ManagerImpl::peerHungupCall (const CallID& call_id) {
+	PulseLayer *pulselayer;
+	AccountID account_id;
+	bool returnValue;
 
+	_debug ("ManagerImpl::peerHungupCall(%s)", call_id.c_str());
 
-    if (participToConference (call_id)) {
+	// store the current call id
+	CallID current_call_id = getCurrentCallId();
 
-        Conference *conf = getConferenceFromCallID (call_id);
+	if (participToConference(call_id)) {
 
-        if (conf != NULL) {
+		Conference *conf = getConferenceFromCallID(call_id);
 
-            removeParticipant (call_id);
+		if (conf != NULL) {
 
-            processRemainingParticipant (current_call_id, conf);
-        }
-    } else {
-        if (isCurrentCall (call_id)) {
-            stopTone ();
+			removeParticipant(call_id);
 
-            switchCall ("");
-        }
-    }
+			processRemainingParticipant(current_call_id, conf);
+		}
+	} else {
+		if (isCurrentCall(call_id)) {
+			stopTone();
 
-   /* Direct IP to IP call */
-    if (getConfigFromCall (call_id) == Call::IPtoIP) {
-        SIPVoIPLink::instance (AccountNULL)->hangup (call_id);
-    }
+			switchCall("");
+		}
+	}
 
-    else {
+	/* Direct IP to IP call */
+	if (getConfigFromCall(call_id) == Call::IPtoIP) {
+		SIPVoIPLink::instance(AccountNULL)->hangup(call_id);
+	}
 
-        account_id = getAccountFromCall (call_id);
+	else {
 
-        if (account_id == AccountNULL) {
-            _debug ("peerHungupCall: Call doesn't exists");
-            return;
-        }
+		account_id = getAccountFromCall(call_id);
 
-        returnValue = getAccountLink (account_id)->peerHungup (call_id);
-    }
+		if (account_id == AccountNULL) {
+			_debug ("peerHungupCall: Call doesn't exists");
+			return;
+		}
 
-    /* Broadcast a signal over DBus */
-    if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP");
+		returnValue = getAccountLink(account_id)->peerHungup(call_id);
+	}
 
-    removeWaitingCall (call_id);
+	/* Broadcast a signal over DBus */
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
 
-    removeCallAccount (call_id);
+	removeWaitingCall(call_id);
 
-     int nbCalls = getCallList().size();
+	removeCallAccount(call_id);
 
-    // stop streams
+	int nbCalls = getCallList().size();
 
-    if (nbCalls <= 0) {
-        _debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+	// stop streams
 
-        AudioLayer* audiolayer = getAudioDriver();
-        audiolayer->stopStream();
-    }
+	if (nbCalls <= 0) {
+		_debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
 
+		AudioLayer* audiolayer = getAudioDriver();
+		audiolayer->stopStream();
+	}
 
-    if (_audiodriver->getLayerType() == PULSEAUDIO) {
-        pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-    }
+	if (_audiodriver->getLayerType() == PULSEAUDIO) {
+		pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
+	}
 }
 
 //THREAD=VoIP
-void
-ManagerImpl::callBusy (const CallID& id)
-{
-    _debug ("Call busy");
+void ManagerImpl::callBusy (const CallID& id) {
+	_debug ("Call busy");
 
-    if (_dbus) _dbus->getCallManager()->callStateChanged (id, "BUSY");
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(id, "BUSY");
 
-    if (isCurrentCall (id)) {
-        playATone (Tone::TONE_BUSY);
-        switchCall ("");
-    }
+	if (isCurrentCall(id)) {
+		playATone(Tone::TONE_BUSY);
+		switchCall("");
+	}
 
-    removeCallAccount (id);
+	removeCallAccount(id);
 
-    removeWaitingCall (id);
+	removeWaitingCall(id);
 }
 
 //THREAD=VoIP
-void
-ManagerImpl::callFailure (const CallID& call_id)
-{
-    if (_dbus) _dbus->getCallManager()->callStateChanged (call_id, "FAILURE");
+void ManagerImpl::callFailure (const CallID& call_id) {
+	if (_dbus)
+		_dbus->getCallManager()->callStateChanged(call_id, "FAILURE");
 
-    if (isCurrentCall (call_id)) {
-        playATone (Tone::TONE_BUSY);
-        switchCall ("");
-    }
+	if (isCurrentCall(call_id)) {
+		playATone(Tone::TONE_BUSY);
+		switchCall("");
+	}
 
-    CallID current_call_id = getCurrentCallId();
+	CallID current_call_id = getCurrentCallId();
 
-    if (participToConference (call_id)) {
+	if (participToConference(call_id)) {
 
-        _debug ("Call %s participating to a conference failed\n", call_id.c_str());
+		_debug ("Call %s participating to a conference failed\n", call_id.c_str());
 
-        Conference *conf = getConferenceFromCallID (call_id);
+		Conference *conf = getConferenceFromCallID(call_id);
 
-        if (conf != NULL) {
-            // remove this participant
-            removeParticipant (call_id);
+		if (conf != NULL) {
+			// remove this participant
+			removeParticipant(call_id);
 
-            processRemainingParticipant (current_call_id, conf);
-        }
+			processRemainingParticipant(current_call_id, conf);
+		}
 
-    }
+	}
 
-    removeCallAccount (call_id);
+	removeCallAccount(call_id);
 
-    removeWaitingCall (call_id);
+	removeWaitingCall(call_id);
 
 }
 
 //THREAD=VoIP
-void
-ManagerImpl::startVoiceMessageNotification (const AccountID& accountId, int nb_msg)
-{
-    if (_dbus) _dbus->getCallManager()->voiceMailNotify (accountId, nb_msg) ;
+void ManagerImpl::startVoiceMessageNotification (const AccountID& accountId,
+		int nb_msg) {
+	if (_dbus)
+		_dbus->getCallManager()->voiceMailNotify(accountId, nb_msg);
 }
 
-void ManagerImpl::connectionStatusNotification()
-{
-    if (_dbus != NULL) {
-        _dbus->getConfigurationManager()->accountsChanged();
-    }
+void ManagerImpl::connectionStatusNotification () {
+	if (_dbus != NULL) {
+		_dbus->getConfigurationManager()->accountsChanged();
+	}
 }
 
 /**
  * Multi Thread
  */
-bool ManagerImpl::playATone (Tone::TONEID toneId)
-{
-    bool hasToPlayTone;
-    // AudioLoop *audioloop;
-    AudioLayer *audiolayer;
-    // unsigned int nbSamples;
-
-    _debug ("ManagerImpl::playATone");
-
-    hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_TONES);
+bool ManagerImpl::playATone (Tone::TONEID toneId) {
+	bool hasToPlayTone;
+	// AudioLoop *audioloop;
+	AudioLayer *audiolayer;
+	// unsigned int nbSamples;
 
-    if (!hasToPlayTone)
-        return false;
+	_debug ("ManagerImpl::playATone");
 
-    audiolayer = getAudioDriver();
+	hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_TONES);
 
+	if (!hasToPlayTone)
+		return false;
 
-    if (audiolayer) {
+	audiolayer = getAudioDriver();
 
-        audiolayer->flushUrgent();
-        audiolayer->startStream();
-    }
-
-    if (_telephoneTone != 0) {
-        _toneMutex.enterMutex();
-        _telephoneTone->setCurrentTone (toneId);
-        _toneMutex.leaveMutex();
-        /*
-            audioloop = getTelephoneTone();
-            nbSamples = audioloop->getSize();
-            SFLDataFormat buf[nbSamples];
+	if (audiolayer) {
 
+		audiolayer->flushUrgent();
+		audiolayer->startStream();
+	}
 
-            if (audiolayer) {
-                audiolayer->putUrgent (buf, nbSamples);
-            } else
-                return false;
-        */
-    }
+	if (_telephoneTone != 0) {
+		_toneMutex.enterMutex();
+		_telephoneTone->setCurrentTone(toneId);
+		_toneMutex.leaveMutex();
+		/*
+		 audioloop = getTelephoneTone();
+		 nbSamples = audioloop->getSize();
+		 SFLDataFormat buf[nbSamples];
+
+
+		 if (audiolayer) {
+		 audiolayer->putUrgent (buf, nbSamples);
+		 } else
+		 return false;
+		 */
+	}
 
-    return true;
+	return true;
 }
 
 /**
  * Multi Thread
  */
-void ManagerImpl::stopTone ()
-{
-    bool hasToPlayTone;
+void ManagerImpl::stopTone () {
+	bool hasToPlayTone;
 
-    hasToPlayTone = getConfigBool (SIGNALISATION, PLAY_TONES);
+	hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_TONES);
 
-    if (!hasToPlayTone)
-        return;
+	if (!hasToPlayTone)
+		return;
 
-    _toneMutex.enterMutex();
+	_toneMutex.enterMutex();
 
-    if (_telephoneTone != 0) {
-        _telephoneTone->setCurrentTone (Tone::TONE_NULL);
-    }
+	if (_telephoneTone != 0) {
+		_telephoneTone->setCurrentTone(Tone::TONE_NULL);
+	}
 
-    _toneMutex.leaveMutex();
+	_toneMutex.leaveMutex();
 
-    // for ringing tone..
-    _toneMutex.enterMutex();
-    _audiofile.stop();
-    _toneMutex.leaveMutex();
+	// for ringing tone..
+	_toneMutex.enterMutex();
+	_audiofile.stop();
+	_toneMutex.leaveMutex();
 }
 
 /**
  * Multi Thread
  */
-bool
-ManagerImpl::playTone()
-{
-    playATone (Tone::TONE_DIALTONE);
-    return true;
+bool ManagerImpl::playTone () {
+	playATone(Tone::TONE_DIALTONE);
+	return true;
 }
 
 /**
  * Multi Thread
  */
-bool
-ManagerImpl::playToneWithMessage()
-{
-    playATone (Tone::TONE_CONGESTION);
-    return true;
+bool ManagerImpl::playToneWithMessage () {
+	playATone(Tone::TONE_CONGESTION);
+	return true;
 }
 
 /**
  * Multi Thread
  */
-void
-ManagerImpl::congestion ()
-{
-    playATone (Tone::TONE_CONGESTION);
+void ManagerImpl::congestion () {
+	playATone(Tone::TONE_CONGESTION);
 }
 
 /**
  * Multi Thread
  */
-void
-ManagerImpl::ringback ()
-{
-    _debug ("ManagerImpl::ringback");
+void ManagerImpl::ringback () {
+	_debug ("ManagerImpl::ringback");
 
-    playATone (Tone::TONE_RINGTONE);
+	playATone(Tone::TONE_RINGTONE);
 }
 
 /**
  * Multi Thread
  */
-void
-ManagerImpl::ringtone()
-{
-    _debug ("ManagerImpl::ringtone");
-    std::string ringchoice;
-    AudioLayer *audiolayer;
-    AudioCodec *codecForTone;
-    int layer, samplerate;
-    bool loadFile;
-
-    if (isRingtoneEnabled()) {
-
-        _debug ("  Tone is enabled");
-        //TODO Comment this because it makes the daemon crashes since the main thread
-        //synchronizes the ringtone thread.
-
-        ringchoice = getConfigString (AUDIO, RING_CHOICE);
-        //if there is no / inside the path
-
-        if (ringchoice.find (DIR_SEPARATOR_CH) == std::string::npos) {
-            // check inside global share directory
-            ringchoice = std::string (PROGSHAREDIR) + DIR_SEPARATOR_STR + RINGDIR + DIR_SEPARATOR_STR + ringchoice;
-        }
-
-        audiolayer = getAudioDriver();
+void ManagerImpl::ringtone () {
+	_debug ("ManagerImpl::ringtone");
+	std::string ringchoice;
+	AudioLayer *audiolayer;
+	AudioCodec *codecForTone;
+	int layer, samplerate;
+	bool loadFile;
+
+	if (isRingtoneEnabled()) {
+
+		_debug ("  Tone is enabled");
+		//TODO Comment this because it makes the daemon crashes since the main thread
+		//synchronizes the ringtone thread.
+
+		ringchoice = getConfigString(AUDIO, RING_CHOICE);
+		//if there is no / inside the path
+
+		if (ringchoice.find(DIR_SEPARATOR_CH) == std::string::npos) {
+			// check inside global share directory
+			ringchoice = std::string(PROGSHAREDIR) + DIR_SEPARATOR_STR
+					+ RINGDIR + DIR_SEPARATOR_STR + ringchoice;
+		}
 
-        layer = audiolayer->getLayerType();
+		audiolayer = getAudioDriver();
 
-        if (audiolayer == 0)
-            return;
+		layer = audiolayer->getLayerType();
 
+		if (audiolayer == 0)
+			return;
 
-        samplerate  = audiolayer->getSampleRate();
+		samplerate = audiolayer->getSampleRate();
 
-        codecForTone = _codecDescriptorMap.getFirstCodecAvailable();
+		codecForTone = _codecDescriptorMap.getFirstCodecAvailable();
 
-        _toneMutex.enterMutex();
+		_toneMutex.enterMutex();
 
-        loadFile = _audiofile.loadFile (ringchoice, codecForTone , samplerate);
+		loadFile = _audiofile.loadFile(ringchoice, codecForTone, samplerate);
 
-        _toneMutex.leaveMutex();
+		_toneMutex.leaveMutex();
 
-        if (loadFile) {
+		if (loadFile) {
 
-            _toneMutex.enterMutex();
-            _audiofile.start();
-            _toneMutex.leaveMutex();
+			_toneMutex.enterMutex();
+			_audiofile.start();
+			_toneMutex.leaveMutex();
 
-            // start audio if not started AND flush all buffers (main and urgent)
-            audiolayer->startStream();
+			// start audio if not started AND flush all buffers (main and urgent)
+			audiolayer->startStream();
 
-        } else {
-            ringback();
-        }
+		} else {
+			ringback();
+		}
 
-    } else {
-        ringback();
-    }
+	} else {
+		ringback();
+	}
 }
 
 AudioLoop*
-ManagerImpl::getTelephoneTone()
-{
-    // _debug("ManagerImpl::getTelephoneTone()");
-    if (_telephoneTone != 0) {
-        ost::MutexLock m (_toneMutex);
-        return _telephoneTone->getCurrentTone();
-    } else {
-        return 0;
-    }
+ManagerImpl::getTelephoneTone () {
+	// _debug("ManagerImpl::getTelephoneTone()");
+	if (_telephoneTone != 0) {
+		ost::MutexLock m(_toneMutex);
+		return _telephoneTone->getCurrentTone();
+	} else {
+		return 0;
+	}
 }
 
 AudioLoop*
-ManagerImpl::getTelephoneFile()
-{
-    // _debug("ManagerImpl::getTelephoneFile()");
-    ost::MutexLock m (_toneMutex);
-
-    if (_audiofile.isStarted()) {
-        return &_audiofile;
-    } else {
-        return 0;
-    }
+ManagerImpl::getTelephoneFile () {
+	// _debug("ManagerImpl::getTelephoneFile()");
+	ost::MutexLock m(_toneMutex);
+
+	if (_audiofile.isStarted()) {
+		return &_audiofile;
+	} else {
+		return 0;
+	}
 }
 
-void ManagerImpl::notificationIncomingCall (void)
-{
-    AudioLayer *audiolayer;
-    std::ostringstream frequency;
-    unsigned int samplerate, nbSampling;
+void ManagerImpl::notificationIncomingCall (void) {
+	AudioLayer *audiolayer;
+	std::ostringstream frequency;
+	unsigned int samplerate, nbSampling;
 
-    audiolayer = getAudioDriver();
+	audiolayer = getAudioDriver();
 
-    _debug ("ManagerImpl::notificationIncomingCall");
+	_debug ("ManagerImpl::notificationIncomingCall");
 
-    if (audiolayer != 0) {
-        samplerate = audiolayer->getSampleRate();
-        frequency << "440/" << FRAME_PER_BUFFER;
-        Tone tone (frequency.str(), samplerate);
-        nbSampling = tone.getSize();
-        SFLDataFormat buf[nbSampling];
-        tone.getNext (buf, tone.getSize());
-        /* Put the data in the urgent ring buffer */
-        audiolayer->flushUrgent();
-        audiolayer->putUrgent (buf, sizeof (SFLDataFormat) *nbSampling);
-    }
+	if (audiolayer != 0) {
+		samplerate = audiolayer->getSampleRate();
+		frequency << "440/" << FRAME_PER_BUFFER;
+		Tone tone(frequency.str(), samplerate);
+		nbSampling = tone.getSize();
+		SFLDataFormat buf[nbSampling];
+		tone.getNext(buf, tone.getSize());
+		/* Put the data in the urgent ring buffer */
+		audiolayer->flushUrgent();
+		audiolayer->putUrgent(buf, sizeof(SFLDataFormat) * nbSampling);
+	}
 }
 
-
 ///////////////////////////////////////////////////////////////////////////////
 // Private functions
 ///////////////////////////////////////////////////////////////////////////////
@@ -2195,1254 +2069,1314 @@ void ManagerImpl::notificationIncomingCall (void)
  * @return 1: ok
  -1: error directory
  */
-int
-ManagerImpl::createSettingsPath (void)
-{
+int ManagerImpl::createSettingsPath (void) {
 
-    std::string xdg_config, xdg_env;
+	std::string xdg_config, xdg_env;
 
-    _debug ("XDG_CONFIG_HOME: %s", XDG_CONFIG_HOME);
+	_debug ("XDG_CONFIG_HOME: %s", XDG_CONFIG_HOME);
 
-    xdg_config = std::string (HOMEDIR) + DIR_SEPARATOR_STR + ".config" + DIR_SEPARATOR_STR + PROGDIR;
+	xdg_config = std::string(HOMEDIR) + DIR_SEPARATOR_STR + ".config"
+			+ DIR_SEPARATOR_STR + PROGDIR;
 
-    if (XDG_CONFIG_HOME != NULL) {
-        xdg_env = std::string (XDG_CONFIG_HOME);
-        (xdg_env.length() > 0) ? _path = xdg_env
-                                         :	 _path = xdg_config;
-    } else
-        _path = xdg_config;
+	if (XDG_CONFIG_HOME != NULL) {
+		xdg_env = std::string(XDG_CONFIG_HOME);
+		(xdg_env.length() > 0) ? _path = xdg_env : _path = xdg_config;
+	} else
+		_path = xdg_config;
 
-    if (mkdir (_path.data(), 0700) != 0) {
-        // If directory	creation failed
-        if (errno != EEXIST) {
-            _debug ("Cannot create directory: %s", strerror (errno));
-            return -1;
-        }
-    }
+	if (mkdir(_path.data(), 0700) != 0) {
+		// If directory	creation failed
+		if (errno != EEXIST) {
+			_debug ("Cannot create directory: %s", strerror (errno));
+			return -1;
+		}
+	}
 
-    // Load user's configuration
-    _path = _path + DIR_SEPARATOR_STR + PROGNAME + "rc";
+	// Load user's configuration
+	_path = _path + DIR_SEPARATOR_STR + PROGNAME + "rc";
 
-    return 1;
+	return 1;
 }
 
 /**
  * Initialization: Main Thread
  */
-void
-ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
-{
-    _debug ("ManagerImpl::InitConfigFile");
-
-    // 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> (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);
-
-    // 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;
-    // 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);
-    }
-
-    // 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));
+void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) {
+	_debug ("ManagerImpl::InitConfigFile");
+
+	// 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>(
+			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);
+
+	// 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;
+	// 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);
+	}
+
+	// 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_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_RESOLVE_ONCE, FALSE_STR));
 
-    _config.addDefaultValue (std::pair<std::string, std::string> (CONFIG_ACCOUNT_TYPE, DEFAULT_ACCOUNT_TYPE));
-
-    _setupLoaded = (_exist == 2) ? false : true;
+	_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 = (_exist == 2) ? false : true;
 }
 
 /**
  * Initialization: Main Thread
  */
-void
-ManagerImpl::initAudioCodec (void)
-{
-    _info("Manager: Init audio codecs");
-
-    /* Init list of all supported codecs by the application. 
-     * This is a global list. Every account will inherit it.
-     */
+void ManagerImpl::initAudioCodec (void) {
+	_info("Manager: Init audio codecs");
+
+	/* Init list of all supported codecs by the application.
+	 * This is a global list. Every account will inherit it.
+	 */
 	_codecDescriptorMap.init();
 }
 
 /*
  * TODO Retrieve the active codec list per account
  */
-std::vector<std::string> ManagerImpl::retrieveActiveCodecs() {
+std::vector<std::string> ManagerImpl::retrieveActiveCodecs () {
 
 	// This property is now set per account basis
-    std::string s = getConfigString (AUDIO, "ActiveCodecs");
-    _info("Manager: Retrieve active codecs: %s", s.c_str ());
-    return unserialize (s);
+	std::string s = getConfigString(AUDIO, "ActiveCodecs");
+	_info("Manager: Retrieve active codecs: %s", s.c_str ());
+	return unserialize(s);
 }
 
 std::vector<std::string> ManagerImpl::unserialize (std::string s) {
 
-    std::vector<std::string> list;
-    std::string  temp;
+	std::vector<std::string> list;
+	std::string temp;
 
-    while (s.find ("/", 0) != std::string::npos) {
-        size_t  pos = s.find ("/", 0);
-        temp = s.substr (0, pos);
-        s.erase (0, pos + 1);
-        list.push_back (temp);
-    }
+	while (s.find("/", 0) != std::string::npos) {
+		size_t pos = s.find("/", 0);
+		temp = s.substr(0, pos);
+		s.erase(0, pos + 1);
+		list.push_back(temp);
+	}
 
-    return list;
+	return list;
 }
 
 std::string ManagerImpl::serialize (std::vector<std::string> v) {
 
-    unsigned int i;
-    std::string res;
+	unsigned int i;
+	std::string res;
 
-    for (i=0;i<v.size();i++) {
-        res += v[i] + "/";
-    }
+	for (i = 0; i < v.size(); i++) {
+		res += v[i] + "/";
+	}
 
-    return res;
+	return res;
 }
 
 std::string ManagerImpl::getCurrentCodecName (const CallID& id) {
 
-    AccountID accountid = getAccountFromCall (id);
-    VoIPLink* link = getAccountLink (accountid);
-    Call* call = link->getCall (id);
+	AccountID accountid = getAccountFromCall(id);
+	VoIPLink* link = getAccountLink(accountid);
+	Call* call = link->getCall(id);
 
-    if (!call)
-        return "";
+	if (!call)
+		return "";
 
-    if (call->getState() != Call::Active)
-        return "";
-    else
-        return link->getCurrentCodecName();
+	if (call->getState() != Call::Active)
+		return "";
+	else
+		return link->getCurrentCodecName();
 }
 
 /**
  * Set input audio plugin
  */
-void
-ManagerImpl::setInputAudioPlugin (const std::string& audioPlugin)
-{
-    int layer = _audiodriver -> getLayerType();
-
-    if (CHECK_INTERFACE (layer , ALSA)) {
-        _debug ("Set input audio plugin");
-        _audiodriver -> setErrorMessage (-1);
-        _audiodriver -> openDevice (_audiodriver -> getIndexIn(),
-                                    _audiodriver -> getIndexOut(),
-                                    _audiodriver -> getSampleRate(),
-                                    _audiodriver -> getFrameSize(),
-                                    SFL_PCM_CAPTURE,
-                                    audioPlugin);
-
-        if (_audiodriver -> getErrorMessage() != -1)
-            notifyErrClient (_audiodriver -> getErrorMessage());
-    } else {}
+void ManagerImpl::setInputAudioPlugin (const std::string& audioPlugin) {
+	int layer = _audiodriver -> getLayerType();
+
+	if (CHECK_INTERFACE (layer , ALSA)) {
+		_debug ("Set input audio plugin");
+		_audiodriver -> setErrorMessage(-1);
+		_audiodriver -> openDevice(_audiodriver -> getIndexIn(),
+				_audiodriver -> getIndexOut(), _audiodriver -> getSampleRate(),
+				_audiodriver -> getFrameSize(), SFL_PCM_CAPTURE, audioPlugin);
+
+		if (_audiodriver -> getErrorMessage() != -1)
+			notifyErrClient(_audiodriver -> getErrorMessage());
+	} else {
+	}
 
 }
 
 /**
  * Set output audio plugin
  */
-void
-ManagerImpl::setOutputAudioPlugin (const std::string& audioPlugin)
-{
+void ManagerImpl::setOutputAudioPlugin (const std::string& audioPlugin) {
 
-    int res;
+	int res;
 
-    _debug ("Set output audio plugin");
-    _audiodriver -> setErrorMessage (-1);
-    res = _audiodriver -> openDevice (_audiodriver -> getIndexIn(),
-                                      _audiodriver -> getIndexOut(),
-                                      _audiodriver -> getSampleRate(),
-                                      _audiodriver -> getFrameSize(),
-                                      SFL_PCM_BOTH,
-                                      audioPlugin);
+	_debug ("Set output audio plugin");
+	_audiodriver -> setErrorMessage(-1);
+	res = _audiodriver -> openDevice(_audiodriver -> getIndexIn(),
+			_audiodriver -> getIndexOut(), _audiodriver -> getSampleRate(),
+			_audiodriver -> getFrameSize(), SFL_PCM_BOTH, audioPlugin);
 
-    if (_audiodriver -> getErrorMessage() != -1)
-        notifyErrClient (_audiodriver -> getErrorMessage());
+	if (_audiodriver -> getErrorMessage() != -1)
+		notifyErrClient(_audiodriver -> getErrorMessage());
 
-    // set config
-    if (res)   setConfig (AUDIO , ALSA_PLUGIN , audioPlugin);
+	// set config
+	if (res)
+		setConfig(AUDIO, ALSA_PLUGIN, audioPlugin);
 }
 
 /**
  * Get list of supported audio output device
  */
-std::vector<std::string>
-ManagerImpl::getAudioOutputDeviceList (void)
-{
-    _debug ("Get audio output device list");
-    AlsaLayer *layer;
-    std::vector <std::string> devices;
+std::vector<std::string> ManagerImpl::getAudioOutputDeviceList (void) {
+	_debug ("Get audio output device list");
+	AlsaLayer *layer;
+	std::vector<std::string> devices;
 
-    layer = dynamic_cast<AlsaLayer*> (getAudioDriver ());
+	layer = dynamic_cast<AlsaLayer*> (getAudioDriver());
 
-    if (layer)
-        devices = layer -> getSoundCardsInfo (SFL_PCM_PLAYBACK);
+	if (layer)
+		devices = layer -> getSoundCardsInfo(SFL_PCM_PLAYBACK);
 
-    return devices;
+	return devices;
 }
 
 /**
  * Set audio output device
  */
-void
-ManagerImpl::setAudioOutputDevice (const int index)
-{
-    AlsaLayer *alsalayer;
-    std::string alsaplugin;
-    _debug ("Set audio output device: %i", index);
+void ManagerImpl::setAudioOutputDevice (const int index) {
+	AlsaLayer *alsalayer;
+	std::string alsaplugin;
+	_debug ("Set audio output device: %i", index);
 
-    _audiodriver -> setErrorMessage (-1);
+	_audiodriver -> setErrorMessage(-1);
 
-    alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver ());
-    alsaplugin = alsalayer->getAudioPlugin ();
+	alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
+	alsaplugin = alsalayer->getAudioPlugin();
 
-    _debug ("  set output plugin: %s", alsaplugin.c_str());
+	_debug ("  set output plugin: %s", alsaplugin.c_str());
 
-    _audiodriver->openDevice (_audiodriver->getIndexIn(), index, _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_PLAYBACK, alsaplugin);
+	_audiodriver->openDevice(_audiodriver->getIndexIn(), index,
+			_audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
+			SFL_PCM_PLAYBACK, alsaplugin);
 
-    if (_audiodriver -> getErrorMessage() != -1)
-        notifyErrClient (_audiodriver -> getErrorMessage());
+	if (_audiodriver -> getErrorMessage() != -1)
+		notifyErrClient(_audiodriver -> getErrorMessage());
 
-    // set config
-    setConfig (AUDIO , ALSA_CARD_ID_OUT , index);
+	// set config
+	setConfig(AUDIO, ALSA_CARD_ID_OUT, index);
 }
 
 /**
  * Get list of supported audio input device
  */
-std::vector<std::string>
-ManagerImpl::getAudioInputDeviceList (void)
-{
-    AlsaLayer *audiolayer;
-    std::vector <std::string> devices;
-
-    audiolayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
+std::vector<std::string> ManagerImpl::getAudioInputDeviceList (void) {
+	AlsaLayer *audiolayer;
+	std::vector<std::string> devices;
 
+	audiolayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
 
-    if (audiolayer)
-        devices = audiolayer->getSoundCardsInfo (SFL_PCM_CAPTURE);
+	if (audiolayer)
+		devices = audiolayer->getSoundCardsInfo(SFL_PCM_CAPTURE);
 
-    return devices;
+	return devices;
 }
 
 /**
  * Set audio input device
  */
-void
-ManagerImpl::setAudioInputDevice (const int index)
-{
-    AlsaLayer *alsalayer;
-    std::string alsaplugin;
+void ManagerImpl::setAudioInputDevice (const int index) {
+	AlsaLayer *alsalayer;
+	std::string alsaplugin;
 
-    _debug ("Set audio input device %i", index);
+	_debug ("Set audio input device %i", index);
 
-    _audiodriver -> setErrorMessage (-1);
+	_audiodriver -> setErrorMessage(-1);
 
-    alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver ());
-    alsaplugin = alsalayer->getAudioPlugin ();
+	alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
+	alsaplugin = alsalayer->getAudioPlugin();
 
-    _debug ("  set input plugin: %s", alsaplugin.c_str());
+	_debug ("  set input plugin: %s", alsaplugin.c_str());
 
-    _audiodriver->openDevice (index, _audiodriver->getIndexOut(), _audiodriver->getSampleRate(), _audiodriver->getFrameSize(), SFL_PCM_CAPTURE, alsaplugin);
+	_audiodriver->openDevice(index, _audiodriver->getIndexOut(),
+			_audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
+			SFL_PCM_CAPTURE, alsaplugin);
 
-    if (_audiodriver -> getErrorMessage() != -1)
-        notifyErrClient (_audiodriver -> getErrorMessage());
+	if (_audiodriver -> getErrorMessage() != -1)
+		notifyErrClient(_audiodriver -> getErrorMessage());
 
-    // set config
-    setConfig (AUDIO , ALSA_CARD_ID_IN , index);
+	// set config
+	setConfig(AUDIO, ALSA_CARD_ID_IN, index);
 }
 
 /**
  * Get string array representing integer indexes of output and input device
  */
-std::vector<std::string>
-ManagerImpl::getCurrentAudioDevicesIndex()
-{
-    _debug ("Get current audio devices index");
-    std::vector<std::string> v;
-    std::stringstream ssi , sso;
-    sso << _audiodriver->getIndexOut();
-    v.push_back (sso.str());
-    ssi << _audiodriver->getIndexIn();
-    v.push_back (ssi.str());
-    return v;
-}
-
-int
-ManagerImpl::isIax2Enabled (void)
-{
+std::vector<std::string> ManagerImpl::getCurrentAudioDevicesIndex () {
+	_debug ("Get current audio devices index");
+	std::vector<std::string> v;
+	std::stringstream ssi, sso;
+	sso << _audiodriver->getIndexOut();
+	v.push_back(sso.str());
+	ssi << _audiodriver->getIndexIn();
+	v.push_back(ssi.str());
+	return v;
+}
+
+int ManagerImpl::isIax2Enabled (void) {
 #ifdef USE_IAX
-    return true;
+	return true;
 #else
-    return false;
+	return false;
 #endif
 }
 
-int
-ManagerImpl::isRingtoneEnabled (void)
-{
-    return (getConfigString (PREFERENCES, CONFIG_RINGTONE) == "true") ? 1:0;
+int ManagerImpl::isRingtoneEnabled (void) {
+	return (getConfigString(PREFERENCES, CONFIG_RINGTONE) == "true") ? 1 : 0;
 }
 
-void
-ManagerImpl::ringtoneEnabled (void)
-{
-    (getConfigString (PREFERENCES , CONFIG_RINGTONE) == RINGTONE_ENABLED) ? setConfig (PREFERENCES , CONFIG_RINGTONE , FALSE_STR) : setConfig (PREFERENCES , CONFIG_RINGTONE , TRUE_STR);
+void ManagerImpl::ringtoneEnabled (void) {
+	(getConfigString(PREFERENCES, CONFIG_RINGTONE) == RINGTONE_ENABLED) ? setConfig(
+			PREFERENCES, CONFIG_RINGTONE, FALSE_STR)
+			: setConfig(PREFERENCES, CONFIG_RINGTONE, TRUE_STR);
 }
 
-std::string
-ManagerImpl::getRingtoneChoice (void)
-{
-    // we need the absolute path
-    std::string tone_name = getConfigString (AUDIO , RING_CHOICE);
-    std::string tone_path ;
+std::string ManagerImpl::getRingtoneChoice (void) {
+	// we need the absolute path
+	std::string tone_name = getConfigString(AUDIO, RING_CHOICE);
+	std::string tone_path;
 
-    if (tone_name.find (DIR_SEPARATOR_CH) == std::string::npos) {
-        // check in ringtone directory ($(PREFIX)/share/sflphone/ringtones)
-        tone_path = std::string (PROGSHAREDIR) + DIR_SEPARATOR_STR + RINGDIR + DIR_SEPARATOR_STR + tone_name ;
-    } else {
-        // the absolute has been saved; do nothing
-        tone_path = tone_name ;
-    }
+	if (tone_name.find(DIR_SEPARATOR_CH) == std::string::npos) {
+		// check in ringtone directory ($(PREFIX)/share/sflphone/ringtones)
+		tone_path = std::string(PROGSHAREDIR) + DIR_SEPARATOR_STR + RINGDIR
+				+ DIR_SEPARATOR_STR + tone_name;
+	} else {
+		// the absolute has been saved; do nothing
+		tone_path = tone_name;
+	}
 
-    _debug ("%s", tone_path.c_str());
+	_debug ("%s", tone_path.c_str());
 
-    return tone_path;
+	return tone_path;
 }
 
-void
-ManagerImpl::setRingtoneChoice (const std::string& tone)
-{
-    // we save the absolute path
-    setConfig (AUDIO , RING_CHOICE , tone);
+void ManagerImpl::setRingtoneChoice (const std::string& tone) {
+	// we save the absolute path
+	setConfig(AUDIO, RING_CHOICE, tone);
 }
 
-std::string
-ManagerImpl::getRecordPath (void)
-{
-    return getConfigString (AUDIO, RECORD_PATH);
+std::string ManagerImpl::getRecordPath (void) {
+	return getConfigString(AUDIO, RECORD_PATH);
 }
 
-void
-ManagerImpl::setRecordPath (const std::string& recPath)
-{
-    _debug ("ManagerImpl::setRecordPath(%s)! ", recPath.c_str());
-    setConfig (AUDIO, RECORD_PATH, recPath);
+void ManagerImpl::setRecordPath (const std::string& recPath) {
+	_debug ("ManagerImpl::setRecordPath(%s)! ", recPath.c_str());
+	setConfig(AUDIO, RECORD_PATH, recPath);
 }
 
-bool
-ManagerImpl::getMd5CredentialHashing (void)
-{
-    return getConfigBool (PREFERENCES, CONFIG_MD5HASH);
+bool ManagerImpl::getMd5CredentialHashing (void) {
+	return getConfigBool(PREFERENCES, CONFIG_MD5HASH);
 }
 
-int
-ManagerImpl::getDialpad (void)
-{
-    if (getConfigString (PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) {
-        return 1;
-    } else {
-        return 0;
-    }
+int ManagerImpl::getDialpad (void) {
+	if (getConfigString(PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) {
+		return 1;
+	} else {
+		return 0;
+	}
 }
 
-void
-ManagerImpl::setDialpad (bool display)
-{
-    std::string set;
+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
+	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);
+	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;
-    }
+int ManagerImpl::getVolumeControls (void) {
+	if (getConfigString(PREFERENCES, CONFIG_VOLUME) == TRUE_STR) {
+		return 1;
+	} else {
+		return 0;
+	}
 }
 
-void ManagerImpl::setVolumeControls (bool display)
-{
-    std::string set;
+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
+	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);
+	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);
+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);
+	 getAccountLink (accountid)->setRecording (id);
+	 */
+	AccountID accountid = getAccountFromCall(id);
+	Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id);
 
-    rec->setRecording();
+	rec->setRecording();
 }
 
-bool
-ManagerImpl::isRecording (const CallID& id)
-{
-    /*
-    _debug ("ManagerImpl::isRecording()! ");
-    AccountID accountid = getAccountFromCall (id);
+bool ManagerImpl::isRecording (const CallID& id) {
+	/*
+	 _debug ("ManagerImpl::isRecording()! ");
+	 AccountID accountid = getAccountFromCall (id);
 
-    return getAccountLink (accountid)->isRecording (id);
-    */
+	 return getAccountLink (accountid)->isRecording (id);
+	 */
 
-    AccountID accountid = getAccountFromCall (id);
-    Recordable* rec = (Recordable*) getAccountLink (accountid)->getCall (id);
+	AccountID accountid = getAccountFromCall(id);
+	Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id);
 
-    return rec->isRecording();
+	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);
+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;
+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::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);
+void ManagerImpl::setHistoryLimit (const int& days) {
+	setConfig(PREFERENCES, CONFIG_HISTORY_LIMIT, days);
 }
 
-int ManagerImpl::getHistoryLimit (void)
-{
-    return getConfigInt (PREFERENCES , CONFIG_HISTORY_LIMIT);
+int ManagerImpl::getHistoryLimit (void) {
+	return getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT);
 }
 
-std::string ManagerImpl::getHistoryEnabled (void)
-{
-    return getConfigString (PREFERENCES, CONFIG_HISTORY_ENABLED);
+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);
+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);
+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);
+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 ;
+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;
+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);
+void ManagerImpl::setNotify (void) {
+	(getConfigString(PREFERENCES, CONFIG_NOTIFY) == NOTIFY_ALL) ? setConfig(
+			PREFERENCES, CONFIG_NOTIFY, FALSE_STR) : setConfig(PREFERENCES,
+			CONFIG_NOTIFY, TRUE_STR);
 }
 
-int32_t
-ManagerImpl::getMailNotify (void)
-{
-    return getConfigInt (PREFERENCES, CONFIG_MAIL_NOTIFY);
+int32_t ManagerImpl::getMailNotify (void) {
+	return getConfigInt(PREFERENCES, CONFIG_MAIL_NOTIFY);
 }
 
-void ManagerImpl::setAudioManager (const int32_t& api)
-{
+void ManagerImpl::setAudioManager (const int32_t& api) {
 
-    int type;
-    std::string alsaPlugin;
+	int type;
+	std::string alsaPlugin;
 
-    _debug ("Setting audio manager ");
+	_debug ("Setting audio manager ");
 
-    if (!_audiodriver)
-        return;
+	if (!_audiodriver)
+		return;
 
-    type = _audiodriver->getLayerType();
+	type = _audiodriver->getLayerType();
 
-    if (type == api) {
-        _debug ("Audio manager chosen already in use. No changes made. ");
-        return;
-    }
+	if (type == api) {
+		_debug ("Audio manager chosen already in use. No changes made. ");
+		return;
+	}
 
-    setConfig (PREFERENCES , CONFIG_AUDIO , api) ;
+	setConfig(PREFERENCES, CONFIG_AUDIO, api);
 
-    switchAudioManager();
-    return;
+	switchAudioManager();
+	return;
 
 }
 
-int32_t
-ManagerImpl::getAudioManager (void)
-{
-    return getConfigInt (PREFERENCES , CONFIG_AUDIO);
+int32_t ManagerImpl::getAudioManager (void) {
+	return getConfigInt(PREFERENCES, CONFIG_AUDIO);
 }
 
-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::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) {
-        _debug ("NOTIFY ERR NUMBER %i" , errCode);
-        _dbus -> getConfigurationManager() -> errorAlert (errCode);
-    }
+void ManagerImpl::notifyErrClient (const int32_t& errCode) {
+	if (_dbus) {
+		_debug ("NOTIFY ERR NUMBER %i" , errCode);
+		_dbus -> getConfigurationManager() -> errorAlert(errCode);
+	}
 }
 
-int
-ManagerImpl::getAudioDeviceIndex (const std::string name)
-{
-    AlsaLayer *alsalayer;
+int ManagerImpl::getAudioDeviceIndex (const std::string name) {
+	AlsaLayer *alsalayer;
 
-    _debug ("Get audio device index");
+	_debug ("Get audio device index");
 
-    alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
+	alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
 
-    if (alsalayer)
-        return alsalayer -> soundCardGetIndex (name);
-    else
-        return 0;
+	if (alsalayer)
+		return alsalayer -> soundCardGetIndex(name);
+	else
+		return 0;
 }
 
-std::string
-ManagerImpl::getCurrentAudioOutputPlugin (void)
-{
-    AlsaLayer *alsalayer;
+std::string ManagerImpl::getCurrentAudioOutputPlugin (void) {
+	AlsaLayer *alsalayer;
 
-    _debug ("Get alsa plugin");
+	_debug ("Get alsa plugin");
 
-    alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
+	alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
 
-    if (alsalayer)   return alsalayer -> getAudioPlugin ();
-    else            return getConfigString (AUDIO , ALSA_PLUGIN);
+	if (alsalayer)
+		return alsalayer -> getAudioPlugin();
+	else
+		return getConfigString(AUDIO, ALSA_PLUGIN);
 }
 
-int ManagerImpl::app_is_running (std::string process)
-{
-    std::ostringstream cmd;
+int ManagerImpl::app_is_running (std::string process) {
+	std::ostringstream cmd;
 
-    cmd << "ps -C " << process;
-    return system (cmd.str().c_str());
+	cmd << "ps -C " << process;
+	return system(cmd.str().c_str());
 }
 
-
 /**
  * Initialization: Main Thread
  */
-bool
-ManagerImpl::initAudioDriver (void)
-{
-
-    int error;
-
-    _debugInit ("AudioLayer Creation");
-
-    if (getConfigInt (PREFERENCES , CONFIG_AUDIO) == ALSA) {
-        _audiodriver = new AlsaLayer (this);
-        _audiodriver->setMainBuffer (&_mainBuffer);
-    } else if (getConfigInt (PREFERENCES , CONFIG_AUDIO) == PULSEAUDIO) {
-        if (app_is_running ("pulseaudio") == 0) {
-            _audiodriver = new PulseLayer (this);
-            _audiodriver->setMainBuffer (&_mainBuffer);
-        } else {
-            _audiodriver = new AlsaLayer (this);
-            setConfig (PREFERENCES, CONFIG_AUDIO, ALSA);
-            _audiodriver->setMainBuffer (&_mainBuffer);
-        }
-    } else
-        _debug ("Error - Audio API unknown");
-
-    if (_audiodriver == 0) {
-        _debug ("Init audio driver error");
-        return false;
-    } else {
-        error = getAudioDriver()->getErrorMessage();
-
-        if (error == -1) {
-            _debug ("Init audio driver: %i", error);
-            return false;
-        }
-    }
+bool ManagerImpl::initAudioDriver (void) {
+
+	int error;
+
+	_debugInit ("AudioLayer Creation");
+
+	if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA) {
+		_audiodriver = new AlsaLayer(this);
+		_audiodriver->setMainBuffer(&_mainBuffer);
+	} else if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == PULSEAUDIO) {
+		if (app_is_running("pulseaudio") == 0) {
+			_audiodriver = new PulseLayer(this);
+			_audiodriver->setMainBuffer(&_mainBuffer);
+		} else {
+			_audiodriver = new AlsaLayer(this);
+			setConfig(PREFERENCES, CONFIG_AUDIO, ALSA);
+			_audiodriver->setMainBuffer(&_mainBuffer);
+		}
+	} else
+		_debug ("Error - Audio API unknown");
+
+	if (_audiodriver == 0) {
+		_debug ("Init audio driver error");
+		return false;
+	} else {
+		error = getAudioDriver()->getErrorMessage();
+
+		if (error == -1) {
+			_debug ("Init audio driver: %i", error);
+			return false;
+		}
+	}
 
-    return true;
+	return true;
 
 }
 
 /**
  * Initialization: Main Thread and gui
  */
-void
-ManagerImpl::selectAudioDriver (void)
-{
-    int layer, numCardIn, numCardOut, sampleRate, frameSize;
-    std::string alsaPlugin;
-    AlsaLayer *alsalayer;
-
-    layer = _audiodriver->getLayerType();
-    _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);
-    sampleRate = getConfigInt (AUDIO , AUDIO_SAMPLE_RATE);
-
-    if (sampleRate <=0 || sampleRate > 48000) {
-        sampleRate = 44100;
-    }
+void ManagerImpl::selectAudioDriver (void) {
+	int layer, numCardIn, numCardOut, sampleRate, frameSize;
+	std::string alsaPlugin;
+	AlsaLayer *alsalayer;
+
+	layer = _audiodriver->getLayerType();
+	_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);
+	sampleRate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE);
+
+	if (sampleRate <= 0 || sampleRate > 48000) {
+		sampleRate = 44100;
+	}
 
-    frameSize = getConfigInt (AUDIO , ALSA_FRAME_SIZE);
+	frameSize = getConfigInt(AUDIO, ALSA_FRAME_SIZE);
 
-    /* Only for the ALSA layer, we check the sound card information */
+	/* Only for the ALSA layer, we check the sound card information */
 
-    if (layer == ALSA) {
-        alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver ());
+	if (layer == ALSA) {
+		alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
 
-        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);
-        }
+		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);
+		}
 
-        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);
-        }
-    }
+		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);
+		}
+	}
 
-    _audiodriver->setErrorMessage (-1);
+	_audiodriver->setErrorMessage(-1);
 
-    /* Open the audio devices */
-    _audiodriver->openDevice (numCardIn , numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin);
-    /* Notify the error if there is one */
+	/* Open the audio devices */
+	_audiodriver->openDevice(numCardIn, numCardOut, sampleRate, frameSize,
+			SFL_PCM_BOTH, alsaPlugin);
+	/* Notify the error if there is one */
 
-    if (_audiodriver -> getErrorMessage() != -1)
-        notifyErrClient (_audiodriver -> getErrorMessage());
+	if (_audiodriver -> getErrorMessage() != -1)
+		notifyErrClient(_audiodriver -> getErrorMessage());
 
 }
 
-void ManagerImpl::switchAudioManager (void)
-{
-    int type, samplerate, framesize, numCardIn, numCardOut;
-    std::string alsaPlugin;
+void ManagerImpl::switchAudioManager (void) {
+	int type, samplerate, framesize, numCardIn, numCardOut;
+	std::string alsaPlugin;
 
-    _debug ("Switching audio manager ");
+	_debug ("Switching audio manager ");
 
-    if (!_audiodriver)
-        return;
+	if (!_audiodriver)
+		return;
 
-    type = _audiodriver->getLayerType();
+	type = _audiodriver->getLayerType();
 
-    samplerate = getConfigInt (AUDIO , AUDIO_SAMPLE_RATE);
+	samplerate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE);
 
-    framesize = getConfigInt (AUDIO , ALSA_FRAME_SIZE);
+	framesize = getConfigInt(AUDIO, ALSA_FRAME_SIZE);
 
-    _debug ("samplerate: %i, framesize %i\n", samplerate, framesize);
+	_debug ("samplerate: %i, framesize %i\n", samplerate, framesize);
 
-    alsaPlugin = getConfigString (AUDIO , ALSA_PLUGIN);
+	alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN);
 
-    numCardIn  = getConfigInt (AUDIO , ALSA_CARD_ID_IN);
+	numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN);
 
-    numCardOut = getConfigInt (AUDIO , ALSA_CARD_ID_OUT);
+	numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT);
 
-    _debug ("Deleting current layer... ");
+	_debug ("Deleting current layer... ");
 
-    // ost::MutexLock lock (*getAudioLayerMutex());
-    getAudioLayerMutex()->enter();
+	// ost::MutexLock lock (*getAudioLayerMutex());
+	getAudioLayerMutex()->enter();
 
-    // _audiodriver->closeLayer();
-    delete _audiodriver;
+	// _audiodriver->closeLayer();
+	delete _audiodriver;
 
-    _audiodriver = NULL;
+	_audiodriver = NULL;
 
-    switch (type) {
+	switch (type) {
 
-        case ALSA:
-            _debug ("Creating Pulseaudio layer...");
-            _audiodriver = new PulseLayer (this);
-            _audiodriver->setMainBuffer (&_mainBuffer);
-            break;
+	case ALSA:
+		_debug ("Creating Pulseaudio layer...");
+		_audiodriver = new PulseLayer(this);
+		_audiodriver->setMainBuffer(&_mainBuffer);
+		break;
 
-        case PULSEAUDIO:
-            _debug ("Creating ALSA layer...");
-            _audiodriver = new AlsaLayer (this);
-            _audiodriver->setMainBuffer (&_mainBuffer);
-            break;
+	case PULSEAUDIO:
+		_debug ("Creating ALSA layer...");
+		_audiodriver = new AlsaLayer(this);
+		_audiodriver->setMainBuffer(&_mainBuffer);
+		break;
 
-        default:
-            _debug ("Error: audio layer unknown");
-            break;
-    }
+	default:
+		_debug ("Error: audio layer unknown");
+		break;
+	}
 
-    _audiodriver->setErrorMessage (-1);
+	_audiodriver->setErrorMessage(-1);
 
-    _audiodriver->openDevice (numCardIn , numCardOut, samplerate, framesize, SFL_PCM_BOTH, alsaPlugin);
+	_audiodriver->openDevice(numCardIn, numCardOut, samplerate, framesize,
+			SFL_PCM_BOTH, alsaPlugin);
 
-    if (_audiodriver -> getErrorMessage() != -1)
-        notifyErrClient (_audiodriver -> getErrorMessage());
+	if (_audiodriver -> getErrorMessage() != -1)
+		notifyErrClient(_audiodriver -> getErrorMessage());
 
-    _debug ("Current device: %i ", type);
+	_debug ("Current device: %i ", type);
 
-    _debug ("has current call: %i ", hasCurrentCall());
+	_debug ("has current call: %i ", hasCurrentCall());
 
-    if (hasCurrentCall())
-        _audiodriver->startStream();
+	if (hasCurrentCall())
+		_audiodriver->startStream();
 
-    // ost::MutexLock unlock (*getAudioLayerMutex());
-    getAudioLayerMutex()->leave();
+	// 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();
+	// 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
  */
-void
-ManagerImpl::initVolume()
-{
-    _debugInit ("Initiate Volume");
-    setSpkrVolume (getConfigInt (AUDIO, VOLUME_SPKR));
-    setMicVolume (getConfigInt (AUDIO, VOLUME_MICRO));
+void ManagerImpl::initVolume () {
+	_debugInit ("Initiate Volume");
+	setSpkrVolume(getConfigInt(AUDIO, VOLUME_SPKR));
+	setMicVolume(getConfigInt(AUDIO, VOLUME_MICRO));
 }
 
+void ManagerImpl::setSpkrVolume (unsigned short spkr_vol) {
+	PulseLayer *pulselayer = NULL;
 
-void ManagerImpl::setSpkrVolume (unsigned short spkr_vol)
-{
-    PulseLayer *pulselayer = NULL;
+	/* Set the manager sound volume */
+	_spkr_volume = spkr_vol;
 
-    /* Set the manager sound volume */
-    _spkr_volume = spkr_vol;
+	/* Only for PulseAudio */
+	pulselayer = dynamic_cast<PulseLayer*> (getAudioDriver());
 
-    /* Only for PulseAudio */
-    pulselayer = dynamic_cast<PulseLayer*> (getAudioDriver());
-
-    if (pulselayer) {
-        if (pulselayer->getLayerType() == PULSEAUDIO) {
-            if (pulselayer)  pulselayer->setPlaybackVolume (spkr_vol);
-        }
-    }
+	if (pulselayer) {
+		if (pulselayer->getLayerType() == PULSEAUDIO) {
+			if (pulselayer)
+				pulselayer->setPlaybackVolume(spkr_vol);
+		}
+	}
 }
 
-
-void ManagerImpl::setMicVolume (unsigned short mic_vol)
-{
-    _mic_volume = mic_vol;
+void ManagerImpl::setMicVolume (unsigned short mic_vol) {
+	_mic_volume = mic_vol;
 }
 
-
-
- 
-int ManagerImpl::getLocalIp2IpPort (void)
-{
-    // The SIP port used for default account (IP to IP) calls=
-    return getConfigInt (IP2IP_PROFILE, LOCAL_PORT);
+int ManagerImpl::getLocalIp2IpPort (void) {
+	// The SIP port used for default account (IP to IP) calls=
+	return getConfigInt(IP2IP_PROFILE, LOCAL_PORT);
 
 }
 
-
 // TODO: rewrite this
 /**
  * Main Thread
  */
-bool
-ManagerImpl::getCallStatus (const std::string& sequenceId UNUSED)
-{
-    if (!_dbus) {
-        return false;
-    }
-
-    ost::MutexLock m (_callAccountMapMutex);
-
-    CallAccountMap::iterator iter = _callAccountMap.begin();
-    TokenList tk;
-    std::string code;
-    std::string status;
-    std::string destination;
-    std::string number;
-
-    while (iter != _callAccountMap.end()) {
-        Call* call = getAccountLink (iter->second)->getCall (iter->first);
-        Call::ConnectionState state = call->getConnectionState();
-
-        if (state != Call::Connected) {
-            switch (state) {
-
-                case Call::Trying:
-                    code="110";
-                    status = "Trying";
-                    break;
-
-                case Call::Ringing:
-                    code="111";
-                    status = "Ringing";
-                    break;
-
-                case Call::Progressing:
-                    code="125";
-                    status = "Progressing";
-                    break;
-
-                case Call::Disconnected:
-                    code="125";
-                    status = "Disconnected";
-                    break;
-
-                default:
-                    code="";
-                    status= "";
-            }
-        } else {
-            switch (call->getState()) {
-
-                case Call::Active:
-
-                case Call::Conferencing:
-                    code="112";
-                    status = "Established";
-                    break;
-
-                case Call::Hold:
-                    code="114";
-                    status = "Held";
-                    break;
-
-                case Call::Busy:
-                    code="113";
-                    status = "Busy";
-                    break;
-
-                case Call::Refused:
-                    code="125";
-                    status = "Refused";
-                    break;
-
-                case Call::Error:
-                    code="125";
-                    status = "Error";
-                    break;
-
-                case Call::Inactive:
-                    code="125";
-                    status = "Inactive";
-                    break;
-            }
-        }
-
-        // No Congestion
-        // No Wrong Number
-        // 116 <CSeq> <call-id> <acc> <destination> Busy
-        destination = call->getPeerName();
-
-        number = call->getPeerNumber();
-
-        if (number!="") {
-            destination.append (" <");
-            destination.append (number);
-            destination.append (">");
-        }
-
-        tk.push_back (iter->second);
-
-        tk.push_back (destination);
-        tk.push_back (status);
-        tk.clear();
-
-        iter++;
-    }
-
-    return true;
+bool ManagerImpl::getCallStatus (const std::string& sequenceId UNUSED) {
+	if (!_dbus) {
+		return false;
+	}
+
+	ost::MutexLock m(_callAccountMapMutex);
+
+	CallAccountMap::iterator iter = _callAccountMap.begin();
+	TokenList tk;
+	std::string code;
+	std::string status;
+	std::string destination;
+	std::string number;
+
+	while (iter != _callAccountMap.end()) {
+		Call* call = getAccountLink(iter->second)->getCall(iter->first);
+		Call::ConnectionState state = call->getConnectionState();
+
+		if (state != Call::Connected) {
+			switch (state) {
+
+			case Call::Trying:
+				code = "110";
+				status = "Trying";
+				break;
+
+			case Call::Ringing:
+				code = "111";
+				status = "Ringing";
+				break;
+
+			case Call::Progressing:
+				code = "125";
+				status = "Progressing";
+				break;
+
+			case Call::Disconnected:
+				code = "125";
+				status = "Disconnected";
+				break;
+
+			default:
+				code = "";
+				status = "";
+			}
+		} else {
+			switch (call->getState()) {
+
+			case Call::Active:
+
+			case Call::Conferencing:
+				code = "112";
+				status = "Established";
+				break;
+
+			case Call::Hold:
+				code = "114";
+				status = "Held";
+				break;
+
+			case Call::Busy:
+				code = "113";
+				status = "Busy";
+				break;
+
+			case Call::Refused:
+				code = "125";
+				status = "Refused";
+				break;
+
+			case Call::Error:
+				code = "125";
+				status = "Error";
+				break;
+
+			case Call::Inactive:
+				code = "125";
+				status = "Inactive";
+				break;
+			}
+		}
+
+		// No Congestion
+		// No Wrong Number
+		// 116 <CSeq> <call-id> <acc> <destination> Busy
+		destination = call->getPeerName();
+
+		number = call->getPeerNumber();
+
+		if (number != "") {
+			destination.append(" <");
+			destination.append(number);
+			destination.append(">");
+		}
+
+		tk.push_back(iter->second);
+
+		tk.push_back(destination);
+		tk.push_back(status);
+		tk.clear();
+
+		iter++;
+	}
+
+	return true;
 }
 
 //THREAD=Main
-bool
-ManagerImpl::getConfig (const std::string& section, const std::string& name, TokenList& arg)
-{
-    return _config.getConfigTreeItemToken (section, name, arg);
+bool ManagerImpl::getConfig (const std::string& section,
+		const std::string& name, TokenList& arg) {
+	return _config.getConfigTreeItemToken(section, name, arg);
 }
 
 //THREAD=Main
 // throw an Conf::ConfigTreeItemException if not found
-int
-ManagerImpl::getConfigInt (const std::string& section, const std::string& name)
-{
-    try {
-        return _config.getConfigTreeItemIntValue (section, name);
-    } catch (Conf::ConfigTreeItemException& e) {
-        throw e;
-    }
+int ManagerImpl::getConfigInt (const std::string& section,
+		const std::string& name) {
+	try {
+		return _config.getConfigTreeItemIntValue(section, name);
+	} catch (Conf::ConfigTreeItemException& e) {
+		throw e;
+	}
 
-    return 0;
+	return 0;
 }
 
-bool
-ManagerImpl::getConfigBool (const std::string& section, const std::string& name)
-{
-    try {
-        return (_config.getConfigTreeItemValue (section, name) == TRUE_STR) ? true:false;
-    } catch (Conf::ConfigTreeItemException& e) {
-        throw e;
-    }
+bool ManagerImpl::getConfigBool (const std::string& section,
+		const std::string& name) {
+	try {
+		return (_config.getConfigTreeItemValue(section, name) == TRUE_STR) ? true
+				: false;
+	} catch (Conf::ConfigTreeItemException& e) {
+		throw e;
+	}
 
-    return false;
+	return false;
 }
 
 //THREAD=Main
-std::string
-ManagerImpl::getConfigString (const std::string& section, const std::string&
-                              name)
-{
-    try {
-        return _config.getConfigTreeItemValue (section, name);
-    } catch (Conf::ConfigTreeItemException& e) {
-        throw e;
-    }
+std::string ManagerImpl::getConfigString (const std::string& section,
+		const std::string& name) {
+	try {
+		return _config.getConfigTreeItemValue(section, name);
+	} catch (Conf::ConfigTreeItemException& e) {
+		throw e;
+	}
 
-    return "";
+	return "";
 }
 
 //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);
+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);
 }
 
 //THREAD=Main
-bool
-ManagerImpl::setConfig (const std::string& section, const std::string& name, int value)
-{
-    std::ostringstream valueStream;
-    valueStream << value;
-    return _config.setConfigTreeItem (section, name, valueStream.str());
+bool ManagerImpl::setConfig (const std::string& section,
+		const std::string& name, int value) {
+	std::ostringstream valueStream;
+	valueStream << value;
+	return _config.setConfigTreeItem(section, name, valueStream.str());
 }
 
-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);
+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);
 }
 
-std::vector< std::string > ManagerImpl::getAccountList() {
+std::vector<std::string> ManagerImpl::getAccountList () {
 
-    std::vector< std::string > v;
-    std::vector< std::string > account_order;
-    unsigned int i;
+	std::vector<std::string> v;
+	std::vector<std::string> account_order;
+	unsigned int i;
 
-    account_order = loadAccountOrder ();
-    AccountMap::iterator iter;
+	account_order = loadAccountOrder();
+	AccountMap::iterator iter;
 
 	// The IP2IP profile is always available, and first in the list
-	iter = _accountMap.find (IP2IP_PROFILE);
+	iter = _accountMap.find(IP2IP_PROFILE);
 	if (iter->second != NULL)
-		v.push_back (iter->first.data ());
-
-    // If no order has been set, load the default one
-    // ie according to the creation date.
-
-    if (account_order.size () == 0) {
-        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());
-            }
-
-            iter++;
-        }
-    }
-
-    // Otherelse, load the custom one
-    // ie according to the saved order
-    else {
-
-        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 ());
-                }
-            }
-        }
-    }
-
-    return v;
-}
-
-std::map< std::string, std::string > ManagerImpl::getAccountDetails (const AccountID& accountID)
-{
-    std::map<std::string, std::string> a;
-
-    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, 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> (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)));
-
-    RegistrationState state;
-    std::string registrationStateCode;
-    std::string registrationStateDescription;
-
-    if (account != NULL) {
+		v.push_back(iter->first.data());
+
+	// If no order has been set, load the default one
+	// ie according to the creation date.
+
+	if (account_order.size() == 0) {
+		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());
+			}
+
+			iter++;
+		}
+	}
+
+	// Otherelse, load the custom one
+	// ie according to the saved order
+	else {
+
+		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());
+				}
+			}
+		}
+	}
+
+	return v;
+}
+
+std::map<std::string, std::string> ManagerImpl::getAccountDetails (
+		const AccountID& accountID) {
+	std::map<std::string, std::string> a;
+
+	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, 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>(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)));
+
+	RegistrationState state;
+	std::string registrationStateCode;
+	std::string registrationStateDescription;
+
+	if (account != NULL) {
 		if (accountID == IP2IP_PROFILE) {
 			registrationStateCode = EMPTY_FIELD;
 			registrationStateDescription = "Direct IP call";
-		}
-		else {
+		} else {
 			state = account->getRegistrationState();
 			int code = account->getRegistrationStateDetailed().first;
 			std::stringstream out;
 			out << code;
 			registrationStateCode = out.str();
-			registrationStateDescription = account->getRegistrationStateDetailed().second;
+			registrationStateDescription
+					= account->getRegistrationStateDetailed().second;
 		}
-    } else {
-        state = Unregistered;
-    }
-
-    (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;
+	} else {
+		state = Unregistered;
+	}
+
+	(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;
 }
 
 /* Transform digest to string.
@@ -3453,1041 +3387,1055 @@ std::map< std::string, std::string > ManagerImpl::getAccountDetails (const Accou
  * NOTE: THE OUTPUT STRING IS NOT NULL TERMINATED!
  */
 
-void ManagerImpl::digest2str (const unsigned char digest[], char *output)
-{
-    int i;
+void ManagerImpl::digest2str (const unsigned char digest[], char *output) {
+	int i;
 
-    for (i = 0; i<16; ++i) {
-        pj_val_to_hex_digit (digest[i], output);
-        output += 2;
-    }
+	for (i = 0; i < 16; ++i) {
+		pj_val_to_hex_digit(digest[i], output);
+		output += 2;
+	}
 }
 
-std::string  ManagerImpl::computeMd5HashFromCredential (const std::string& username, const std::string& password, const std::string& realm)
-{
-    pj_md5_context pms;
-    unsigned char digest[16];
-    char ha1[PJSIP_MD5STRLEN];
+std::string ManagerImpl::computeMd5HashFromCredential (
+		const std::string& username, const std::string& password,
+		const std::string& realm) {
+	pj_md5_context pms;
+	unsigned char digest[16];
+	char ha1[PJSIP_MD5STRLEN];
 
-    pj_str_t usernamePjFormat = pj_str (strdup (username.c_str()));
-    pj_str_t passwordPjFormat = pj_str (strdup (password.c_str()));
-    pj_str_t realmPjFormat = pj_str (strdup (realm.c_str()));
+	pj_str_t usernamePjFormat = pj_str(strdup(username.c_str()));
+	pj_str_t passwordPjFormat = pj_str(strdup(password.c_str()));
+	pj_str_t realmPjFormat = pj_str(strdup(realm.c_str()));
 
-    /* Compute md5 hash = MD5(username ":" realm ":" password) */
-    pj_md5_init (&pms);
-    MD5_APPEND (&pms, usernamePjFormat.ptr, usernamePjFormat.slen);
-    MD5_APPEND (&pms, ":", 1);
-    MD5_APPEND (&pms, realmPjFormat.ptr, realmPjFormat.slen);
-    MD5_APPEND (&pms, ":", 1);
-    MD5_APPEND (&pms, passwordPjFormat.ptr, passwordPjFormat.slen);
-    pj_md5_final (&pms, digest);
+	/* Compute md5 hash = MD5(username ":" realm ":" password) */
+	pj_md5_init(&pms);
+	MD5_APPEND (&pms, usernamePjFormat.ptr, usernamePjFormat.slen);
+	MD5_APPEND (&pms, ":", 1);
+	MD5_APPEND (&pms, realmPjFormat.ptr, realmPjFormat.slen);
+	MD5_APPEND (&pms, ":", 1);
+	MD5_APPEND (&pms, passwordPjFormat.ptr, passwordPjFormat.slen);
+	pj_md5_final(&pms, digest);
 
-    digest2str (digest, ha1);
+	digest2str(digest, ha1);
 
-    char ha1_null_terminated[PJSIP_MD5STRLEN+1];
-    memcpy (ha1_null_terminated, ha1, sizeof (char) *PJSIP_MD5STRLEN);
-    ha1_null_terminated[PJSIP_MD5STRLEN] = '\0';
+	char ha1_null_terminated[PJSIP_MD5STRLEN + 1];
+	memcpy(ha1_null_terminated, ha1, sizeof(char) * PJSIP_MD5STRLEN);
+	ha1_null_terminated[PJSIP_MD5STRLEN] = '\0';
 
-    std::string hashedDigest = ha1_null_terminated;
-    return hashedDigest;
+	std::string hashedDigest = ha1_null_terminated;
+	return hashedDigest;
 }
 
-void ManagerImpl::setCredential (const std::string& accountID, const int32_t& index, const std::map< std::string, std::string >& details)
-{
-    std::map<std::string, std::string>::iterator it;
-    std::map<std::string, std::string> credentialInformation = details;
-
-    std::string credentialIndex;
-    std::stringstream streamOut;
-    streamOut << index;
-    credentialIndex = streamOut.str();
+void ManagerImpl::setCredential (const std::string& accountID,
+		const int32_t& index, const std::map<std::string, std::string>& details) {
+	std::map<std::string, std::string>::iterator it;
+	std::map<std::string, std::string> credentialInformation = details;
 
-    std::string section = "Credential" + std::string (":") + accountID + std::string (":") + credentialIndex;
+	std::string credentialIndex;
+	std::stringstream streamOut;
+	streamOut << index;
+	credentialIndex = streamOut.str();
 
-    _debug ("Setting credential in section %s", section.c_str());
+	std::string section = "Credential" + std::string(":") + accountID
+			+ std::string(":") + credentialIndex;
 
-    it = credentialInformation.find (USERNAME);
-    std::string username;
+	_debug ("Setting credential in section %s", section.c_str());
 
-    if (it == credentialInformation.end()) {
-        username = EMPTY_FIELD;
-    } else {
-        username = it->second;
-    }
+	it = credentialInformation.find(USERNAME);
+	std::string username;
 
-    Manager::instance().setConfig (section, USERNAME, username);
-
-    it = credentialInformation.find (REALM);
-    std::string realm;
+	if (it == credentialInformation.end()) {
+		username = EMPTY_FIELD;
+	} else {
+		username = it->second;
+	}
 
-    if (it == credentialInformation.end()) {
-        realm = EMPTY_FIELD;
-    } else {
-        realm = it->second;
-    }
+	Manager::instance().setConfig(section, USERNAME, username);
 
-    Manager::instance().setConfig (section, REALM, realm);
+	it = credentialInformation.find(REALM);
+	std::string realm;
 
+	if (it == credentialInformation.end()) {
+		realm = EMPTY_FIELD;
+	} else {
+		realm = it->second;
+	}
 
-    it = credentialInformation.find (PASSWORD);
-    std::string password;
+	Manager::instance().setConfig(section, REALM, realm);
 
-    if (it == credentialInformation.end()) {
-        password = EMPTY_FIELD;
-    } else {
-        password = it->second;
-    }
+	it = credentialInformation.find(PASSWORD);
+	std::string password;
 
-    if (getMd5CredentialHashing()) {
-        // TODO: Fix this.
-        // This is an extremly weak test in order to check
-        // if the password is a hashed value. This is done
-        // because deleteCredential() is called before this
-        // method. Therefore, we cannot check if the value
-        // is different from the one previously stored in
-        // the configuration file. This is to avoid to
-        // re-hash a hashed password.
+	if (it == credentialInformation.end()) {
+		password = EMPTY_FIELD;
+	} else {
+		password = it->second;
+	}
 
-        if (password.length() != 32) {
-            password = computeMd5HashFromCredential (username, password, realm);
-        }
-    }
+	if (getMd5CredentialHashing()) {
+		// TODO: Fix this.
+		// This is an extremly weak test in order to check
+		// if the password is a hashed value. This is done
+		// because deleteCredential() is called before this
+		// method. Therefore, we cannot check if the value
+		// is different from the one previously stored in
+		// the configuration file. This is to avoid to
+		// re-hash a hashed password.
+
+		if (password.length() != 32) {
+			password = computeMd5HashFromCredential(username, password, realm);
+		}
+	}
 
-    Manager::instance().setConfig (section, PASSWORD, password);
+	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)
-{
+void ManagerImpl::setAccountDetails (const std::string& accountID,
+		const std::map<std::string, std::string>& details) {
 
-    std::string accountType;
-    std::map <std::string, std::string> map_cpy;
-    std::map<std::string, std::string>::iterator iter;
+	std::string accountType;
+	std::map<std::string, std::string> map_cpy;
+	std::map<std::string, std::string>::iterator iter;
 
-    // Work on a copy
-    map_cpy = details;
+	// Work on a copy
+	map_cpy = details;
 
-    std::string username;
-    std::string authenticationName;
-    std::string password;
-    std::string realm;
-    std::string voicemail_count;
+	std::string username;
+	std::string authenticationName;
+	std::string password;
+	std::string realm;
+	std::string voicemail_count;
 	std::string ua_name;
 
-    if ( (iter = map_cpy.find (AUTHENTICATION_USERNAME)) != map_cpy.end()) {
-        authenticationName = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (USERNAME)) != map_cpy.end()) {
-        username = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (PASSWORD)) != map_cpy.end()) {
-        password = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (REALM)) != map_cpy.end()) {
-        realm = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (USERAGENT)) != map_cpy.end()) {
-        ua_name = iter->second;
-    }
-
-    setConfig (accountID, REALM, realm);
-	setConfig (accountID, USERAGENT, ua_name);
-    setConfig (accountID, USERNAME, username);
-    setConfig (accountID, AUTHENTICATION_USERNAME, authenticationName);
-
-    if (!getMd5CredentialHashing()) {
-        setConfig (accountID, PASSWORD, 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)) {
-            _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);
-        }
-    }
-
-    std::string alias;
-
-    std::string mailbox;
-    std::string accountEnable;
-    std::string type;
-    std::string resolveOnce;
-    std::string registrationExpire;
-
-    std::string hostname;
-    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 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;
-
-    if ( (iter = map_cpy.find (HOSTNAME)) != map_cpy.end()) {
-        hostname = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (DISPLAY_NAME)) != map_cpy.end()) {
-        displayName = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (LOCAL_INTERFACE)) != map_cpy.end()) {
-        localInterface = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (PUBLISHED_SAMEAS_LOCAL)) != map_cpy.end()) {
-        publishedSameasLocal = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (PUBLISHED_ADDRESS)) != map_cpy.end()) {
-        publishedAddress = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (LOCAL_PORT)) != map_cpy.end()) {
-        localPort = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (PUBLISHED_PORT)) != map_cpy.end()) {
-        publishedPort = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (STUN_ENABLE)) != map_cpy.end()) {
-        stunEnable = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (STUN_SERVER)) != map_cpy.end()) {
-        stunServer = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (SRTP_ENABLE)) != map_cpy.end()) {
-        srtpEnable = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (SRTP_RTP_FALLBACK)) != map_cpy.end()) {
-        srtpRtpFallback = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (ZRTP_DISPLAY_SAS)) != map_cpy.end()) {
-        zrtpDisplaySas = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (ZRTP_DISPLAY_SAS_ONCE)) != map_cpy.end()) {
-        zrtpDisplaySasOnce = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (ZRTP_NOT_SUPP_WARNING)) != map_cpy.end()) {
-        zrtpNotSuppWarning = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (ZRTP_HELLO_HASH)) != map_cpy.end()) {
-        zrtpHelloHash = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (SRTP_KEY_EXCHANGE)) != map_cpy.end()) {
-        srtpKeyExchange = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (CONFIG_ACCOUNT_ALIAS)) != map_cpy.end()) {
-        alias = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (CONFIG_ACCOUNT_MAILBOX)) != map_cpy.end()) {
-        mailbox = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (CONFIG_ACCOUNT_ENABLE)) != map_cpy.end()) {
-        accountEnable = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (CONFIG_ACCOUNT_TYPE)) != map_cpy.end()) {
-        type = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (CONFIG_ACCOUNT_RESOLVE_ONCE)) != map_cpy.end()) {
-        resolveOnce = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (CONFIG_ACCOUNT_REGISTRATION_EXPIRE)) != map_cpy.end()) {
-        registrationExpire = iter->second;
-    }
-
-    // The TLS listener is unique and globally defined through IP2IP_PROFILE
-    if((accountID == IP2IP_PROFILE) && (iter = map_cpy.find (TLS_LISTENER_PORT)) != map_cpy.end()) {
-        tlsListenerPort = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_ENABLE)) != map_cpy.end()) {
-        tlsEnable = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_CA_LIST_FILE)) != map_cpy.end()) {
-        tlsCaListFile = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_CERTIFICATE_FILE)) != map_cpy.end()) {
-        tlsCertificateFile = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_PRIVATE_KEY_FILE)) != map_cpy.end()) {
-        tlsPrivateKeyFile = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_PASSWORD)) != map_cpy.end()) {
-        tlsPassword = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_METHOD)) != map_cpy.end()) {
-        tlsMethod = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_CIPHERS)) != map_cpy.end()) {
-        tlsCiphers = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_SERVER_NAME)) != map_cpy.end()) {
-        tlsServerName = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_VERIFY_SERVER)) != map_cpy.end()) {
-        tlsVerifyServer = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_VERIFY_CLIENT)) != map_cpy.end()) {
-        tlsVerifyClient = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_REQUIRE_CLIENT_CERTIFICATE)) != map_cpy.end()) {
-        tlsRequireClientCertificate = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_NEGOTIATION_TIMEOUT_SEC)) != map_cpy.end()) {
-        tlsNegotiationTimeoutSec = iter->second;
-    }
-
-    if ( (iter = map_cpy.find (TLS_NEGOTIATION_TIMEOUT_MSEC)) != map_cpy.end()) {
-        tlsNegotiationTimeoutMsec = iter->second;
-    }
-
-    setConfig (accountID, HOSTNAME, hostname);
-
-    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, DISPLAY_NAME, displayName);
-    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);
-
-    setConfig (accountID, STUN_ENABLE, stunEnable);
-    setConfig (accountID, STUN_SERVER, stunServer);
-
-    // 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);
-
-    setConfig (accountID, CONFIG_ACCOUNT_ALIAS, alias);
-    setConfig (accountID, CONFIG_ACCOUNT_MAILBOX, mailbox);
-    setConfig (accountID, CONFIG_ACCOUNT_ENABLE, accountEnable);
-    setConfig (accountID, CONFIG_ACCOUNT_TYPE, type);
-    setConfig (accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce);
-    setConfig (accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire);
-
-    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 ((iter = map_cpy.find(AUTHENTICATION_USERNAME)) != map_cpy.end()) {
+		authenticationName = iter->second;
+	}
+
+	if ((iter = map_cpy.find(USERNAME)) != map_cpy.end()) {
+		username = iter->second;
+	}
+
+	if ((iter = map_cpy.find(PASSWORD)) != map_cpy.end()) {
+		password = iter->second;
+	}
+
+	if ((iter = map_cpy.find(REALM)) != map_cpy.end()) {
+		realm = iter->second;
+	}
+
+	if ((iter = map_cpy.find(USERAGENT)) != map_cpy.end()) {
+		ua_name = iter->second;
+	}
+
+	setConfig(accountID, REALM, realm);
+	setConfig(accountID, USERAGENT, ua_name);
+	setConfig(accountID, USERNAME, username);
+	setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName);
+
+	if (!getMd5CredentialHashing()) {
+		setConfig(accountID, PASSWORD, 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)) {
+			_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);
+		}
+	}
+
+	std::string alias;
+
+	std::string mailbox;
+	std::string accountEnable;
+	std::string type;
+	std::string resolveOnce;
+	std::string registrationExpire;
+
+	std::string hostname;
+	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 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;
+
+	if ((iter = map_cpy.find(HOSTNAME)) != map_cpy.end()) {
+		hostname = iter->second;
+	}
+
+	if ((iter = map_cpy.find(DISPLAY_NAME)) != map_cpy.end()) {
+		displayName = iter->second;
+	}
+
+	if ((iter = map_cpy.find(LOCAL_INTERFACE)) != map_cpy.end()) {
+		localInterface = iter->second;
+	}
+
+	if ((iter = map_cpy.find(PUBLISHED_SAMEAS_LOCAL)) != map_cpy.end()) {
+		publishedSameasLocal = iter->second;
+	}
+
+	if ((iter = map_cpy.find(PUBLISHED_ADDRESS)) != map_cpy.end()) {
+		publishedAddress = iter->second;
+	}
+
+	if ((iter = map_cpy.find(LOCAL_PORT)) != map_cpy.end()) {
+		localPort = iter->second;
+	}
+
+	if ((iter = map_cpy.find(PUBLISHED_PORT)) != map_cpy.end()) {
+		publishedPort = iter->second;
+	}
+
+	if ((iter = map_cpy.find(STUN_ENABLE)) != map_cpy.end()) {
+		stunEnable = iter->second;
+	}
+
+	if ((iter = map_cpy.find(STUN_SERVER)) != map_cpy.end()) {
+		stunServer = iter->second;
+	}
+
+	if ((iter = map_cpy.find(SRTP_ENABLE)) != map_cpy.end()) {
+		srtpEnable = iter->second;
+	}
+
+	if ((iter = map_cpy.find(SRTP_RTP_FALLBACK)) != map_cpy.end()) {
+		srtpRtpFallback = iter->second;
+	}
+
+	if ((iter = map_cpy.find(ZRTP_DISPLAY_SAS)) != map_cpy.end()) {
+		zrtpDisplaySas = iter->second;
+	}
+
+	if ((iter = map_cpy.find(ZRTP_DISPLAY_SAS_ONCE)) != map_cpy.end()) {
+		zrtpDisplaySasOnce = iter->second;
+	}
 
-    // Update account details to the client side
-    if (_dbus) _dbus->getConfigurationManager()->accountsChanged();
+	if ((iter = map_cpy.find(ZRTP_NOT_SUPP_WARNING)) != map_cpy.end()) {
+		zrtpNotSuppWarning = iter->second;
+	}
+
+	if ((iter = map_cpy.find(ZRTP_HELLO_HASH)) != map_cpy.end()) {
+		zrtpHelloHash = iter->second;
+	}
+
+	if ((iter = map_cpy.find(SRTP_KEY_EXCHANGE)) != map_cpy.end()) {
+		srtpKeyExchange = iter->second;
+	}
+
+	if ((iter = map_cpy.find(CONFIG_ACCOUNT_ALIAS)) != map_cpy.end()) {
+		alias = iter->second;
+	}
+
+	if ((iter = map_cpy.find(CONFIG_ACCOUNT_MAILBOX)) != map_cpy.end()) {
+		mailbox = iter->second;
+	}
+
+	if ((iter = map_cpy.find(CONFIG_ACCOUNT_ENABLE)) != map_cpy.end()) {
+		accountEnable = iter->second;
+	}
+
+	if ((iter = map_cpy.find(CONFIG_ACCOUNT_TYPE)) != map_cpy.end()) {
+		type = iter->second;
+	}
+
+	if ((iter = map_cpy.find(CONFIG_ACCOUNT_RESOLVE_ONCE)) != map_cpy.end()) {
+		resolveOnce = iter->second;
+	}
+
+	if ((iter = map_cpy.find(CONFIG_ACCOUNT_REGISTRATION_EXPIRE))
+			!= map_cpy.end()) {
+		registrationExpire = iter->second;
+	}
+
+	// The TLS listener is unique and globally defined through IP2IP_PROFILE
+	if ((accountID == IP2IP_PROFILE)
+			&& (iter = map_cpy.find(TLS_LISTENER_PORT)) != map_cpy.end()) {
+		tlsListenerPort = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_ENABLE)) != map_cpy.end()) {
+		tlsEnable = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_CA_LIST_FILE)) != map_cpy.end()) {
+		tlsCaListFile = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_CERTIFICATE_FILE)) != map_cpy.end()) {
+		tlsCertificateFile = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_PRIVATE_KEY_FILE)) != map_cpy.end()) {
+		tlsPrivateKeyFile = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_PASSWORD)) != map_cpy.end()) {
+		tlsPassword = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_METHOD)) != map_cpy.end()) {
+		tlsMethod = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_CIPHERS)) != map_cpy.end()) {
+		tlsCiphers = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_SERVER_NAME)) != map_cpy.end()) {
+		tlsServerName = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_VERIFY_SERVER)) != map_cpy.end()) {
+		tlsVerifyServer = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_VERIFY_CLIENT)) != map_cpy.end()) {
+		tlsVerifyClient = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_REQUIRE_CLIENT_CERTIFICATE)) != map_cpy.end()) {
+		tlsRequireClientCertificate = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_SEC)) != map_cpy.end()) {
+		tlsNegotiationTimeoutSec = iter->second;
+	}
+
+	if ((iter = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_MSEC)) != map_cpy.end()) {
+		tlsNegotiationTimeoutMsec = iter->second;
+	}
+
+	setConfig(accountID, HOSTNAME, hostname);
+
+	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, DISPLAY_NAME, displayName);
+	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);
+
+	setConfig(accountID, STUN_ENABLE, stunEnable);
+	setConfig(accountID, STUN_SERVER, stunServer);
+
+	// 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);
+
+	setConfig(accountID, CONFIG_ACCOUNT_ALIAS, alias);
+	setConfig(accountID, CONFIG_ACCOUNT_MAILBOX, mailbox);
+	setConfig(accountID, CONFIG_ACCOUNT_ENABLE, accountEnable);
+	setConfig(accountID, CONFIG_ACCOUNT_TYPE, type);
+	setConfig(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce);
+	setConfig(accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire);
+
+	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");
+	}
+
+	// Update account details to the client side
+	if (_dbus)
+		_dbus->getConfigurationManager()->accountsChanged();
 
 }
 
-std::string
-ManagerImpl::addAccount (const std::map< std::string, std::string >& details)
-{
+std::string ManagerImpl::addAccount (
+		const std::map<std::string, std::string>& details) {
 
-    /** @todo Deal with both the _accountMap and the Configuration */
-    std::string accountType, account_list;
-    Account* newAccount;
-    std::stringstream accountID;
-    AccountID newAccountID;
+	/** @todo Deal with both the _accountMap and the Configuration */
+	std::string accountType, account_list;
+	Account* newAccount;
+	std::stringstream accountID;
+	AccountID newAccountID;
 
-    accountID << "Account:" << time (NULL);
-    newAccountID = accountID.str();
+	accountID << "Account:" << time(NULL);
+	newAccountID = accountID.str();
 
-    // Get the type
-    accountType = (*details.find (CONFIG_ACCOUNT_TYPE)).second;
+	// Get the type
+	accountType = (*details.find(CONFIG_ACCOUNT_TYPE)).second;
 
-    _debug ("%s", newAccountID.c_str());
+	_debug ("%s", newAccountID.c_str());
 
-    /** @todo Verify the uniqueness, in case a program adds accounts, two in a row. */
+	/** @todo Verify the uniqueness, in case a program adds accounts, two in a row. */
 
-    if (accountType == "SIP") {
-        newAccount = AccountCreator::createAccount (AccountCreator::SIP_ACCOUNT, newAccountID);
-	newAccount->setVoIPLink();
-    } else if (accountType == "IAX") {
-        newAccount = AccountCreator::createAccount (AccountCreator::IAX_ACCOUNT, newAccountID);
-    } else {
-        _debug ("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str());
-        return "";
-    }
+	if (accountType == "SIP") {
+		newAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT,
+				newAccountID);
+		newAccount->setVoIPLink();
+	} else if (accountType == "IAX") {
+		newAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT,
+				newAccountID);
+	} else {
+		_debug ("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str());
+		return "";
+	}
 
-    _accountMap[newAccountID] = newAccount;
+	_accountMap[newAccountID] = newAccount;
 
-    setAccountDetails (accountID.str(), details);
+	setAccountDetails(accountID.str(), details);
 
-    // Add the newly created account in the account order list
-    account_list = getConfigString (PREFERENCES, CONFIG_ACCOUNTS_ORDER);
+	// Add the newly created account in the account order list
+	account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER);
 
-    if (account_list != "") {
-        newAccountID += "/";
-        // Prepend the new account
-        account_list.insert (0, newAccountID);
-        setConfig (PREFERENCES, CONFIG_ACCOUNTS_ORDER, account_list);
-    }
+	if (account_list != "") {
+		newAccountID += "/";
+		// Prepend the new account
+		account_list.insert(0, newAccountID);
+		setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, account_list);
+	}
 
-    saveConfig();
+	saveConfig();
 
-    if (_dbus) _dbus->getConfigurationManager()->accountsChanged();
+	if (_dbus)
+		_dbus->getConfigurationManager()->accountsChanged();
 
-    return newAccountID;
+	return newAccountID;
 }
 
-void
-ManagerImpl::deleteAllCredential (const AccountID& accountID)
-{
-    int numberOfCredential = getConfigInt (accountID, CONFIG_CREDENTIAL_NUMBER);
+void ManagerImpl::deleteAllCredential (const AccountID& accountID) {
+	int numberOfCredential = getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER);
 
-    int i;
+	int i;
 
-    for (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;
+	for (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);
-    }
+		_config.removeSection(section);
+	}
 
-    if (accountID.empty() == false) {
-        setConfig (accountID, CONFIG_CREDENTIAL_NUMBER, 0);
-    }
+	if (accountID.empty() == false) {
+		setConfig(accountID, CONFIG_CREDENTIAL_NUMBER, 0);
+	}
 }
 
-void
-ManagerImpl::removeAccount (const AccountID& accountID)
-{
-    // Get it down and dying
-    Account* remAccount = NULL;
-    remAccount = getAccount (accountID);
+void ManagerImpl::removeAccount (const AccountID& accountID) {
+	// Get it down and dying
+	Account* remAccount = NULL;
+	remAccount = getAccount(accountID);
 
-    if (remAccount != NULL) {
-        remAccount->unregisterVoIPLink();
-        _accountMap.erase (accountID);
-        // http://projects.savoirfairelinux.net/issues/show/2355
-        // delete remAccount;
-    }
+	if (remAccount != NULL) {
+		remAccount->unregisterVoIPLink();
+		_accountMap.erase(accountID);
+		// http://projects.savoirfairelinux.net/issues/show/2355
+		// delete remAccount;
+	}
 
-    _config.removeSection (accountID);
+	_config.removeSection(accountID);
 
-    saveConfig();
+	saveConfig();
 
-    _debug ("REMOVE ACCOUNT");
+	_debug ("REMOVE ACCOUNT");
 
-    if (_dbus) _dbus->getConfigurationManager()->accountsChanged();
+	if (_dbus)
+		_dbus->getConfigurationManager()->accountsChanged();
 
 }
 
 // ACCOUNT handling
-bool
-ManagerImpl::associateCallToAccount (const CallID& callID, const AccountID& accountID)
-{
-    if (getAccountFromCall (callID) == AccountNULL) { // nothing with the same ID
-        if (accountExists (accountID)) {    // account id exist in AccountMap
-            ost::MutexLock m (_callAccountMapMutex);
-            _callAccountMap[callID] = accountID;
-            _debug ("Associate Call %s with Account %s", callID.data(), accountID.data());
-            return true;
-        } else {
-            return false;
-        }
-    } else {
-        return false;
-    }
+bool ManagerImpl::associateCallToAccount (const CallID& callID,
+		const AccountID& accountID) {
+	if (getAccountFromCall(callID) == AccountNULL) { // nothing with the same ID
+		if (accountExists(accountID)) { // account id exist in AccountMap
+			ost::MutexLock m(_callAccountMapMutex);
+			_callAccountMap[callID] = accountID;
+			_debug ("Associate Call %s with Account %s", callID.data(), accountID.data());
+			return true;
+		} else {
+			return false;
+		}
+	} else {
+		return false;
+	}
 }
 
-AccountID
-ManagerImpl::getAccountFromCall (const CallID& callID)
-{
-    ost::MutexLock m (_callAccountMapMutex);
-    CallAccountMap::iterator iter = _callAccountMap.find (callID);
+AccountID ManagerImpl::getAccountFromCall (const CallID& callID) {
+	ost::MutexLock m(_callAccountMapMutex);
+	CallAccountMap::iterator iter = _callAccountMap.find(callID);
 
-    if (iter == _callAccountMap.end()) {
-        return AccountNULL;
-    } else {
-        return iter->second;
-    }
+	if (iter == _callAccountMap.end()) {
+		return AccountNULL;
+	} else {
+		return iter->second;
+	}
 }
 
-bool
-ManagerImpl::removeCallAccount (const CallID& callID)
-{
-    ost::MutexLock m (_callAccountMapMutex);
+bool ManagerImpl::removeCallAccount (const CallID& callID) {
+	ost::MutexLock m(_callAccountMapMutex);
 
-    if (_callAccountMap.erase (callID)) {
-        return true;
-    }
+	if (_callAccountMap.erase(callID)) {
+		return true;
+	}
 
-    return false;
+	return false;
 }
 
-CallID
-ManagerImpl::getNewCallID()
-{
-    std::ostringstream random_id ("s");
-    random_id << (unsigned) rand();
+CallID ManagerImpl::getNewCallID () {
+	std::ostringstream random_id("s");
+	random_id << (unsigned) rand();
 
-    // when it's not found, it return ""
-    // generate, something like s10000s20000s4394040
+	// when it's not found, it return ""
+	// generate, something like s10000s20000s4394040
 
-    while (getAccountFromCall (random_id.str()) != AccountNULL) {
-        random_id.clear();
-        random_id << "s";
-        random_id << (unsigned) rand();
-    }
+	while (getAccountFromCall(random_id.str()) != AccountNULL) {
+		random_id.clear();
+		random_id << "s";
+		random_id << (unsigned) rand();
+	}
 
-    return random_id.str();
+	return random_id.str();
 }
 
-std::vector <std::string> ManagerImpl::loadAccountOrder (void)
-{
+std::vector<std::string> ManagerImpl::loadAccountOrder (void) {
 
-    std::string account_list;
-    std::vector <std::string> account_vect;
+	std::string account_list;
+	std::vector<std::string> account_vect;
 
-    account_list = getConfigString (PREFERENCES, CONFIG_ACCOUNTS_ORDER);
-    return unserialize (account_list);
+	account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER);
+	return unserialize(account_list);
 }
 
+short ManagerImpl::loadAccountMap () {
 
-short
-ManagerImpl::loadAccountMap()
-{
+	_debug ("Loading account map");
 
-    _debug ("Loading account map");
+	short nbAccount = 0;
+	TokenList sections = _config.getSections();
+	std::string accountType;
+	Account *tmpAccount = 0;
+	std::vector<std::string> account_order;
 
-    short nbAccount = 0;
-    TokenList sections = _config.getSections();
-    std::string accountType;
-    Account *tmpAccount = 0;
-    std::vector <std::string> account_order;
+	TokenList::iterator iter = sections.begin();
 
-    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, "");
 
-    // 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 ("Create default \"account\" (used as default UDP transport)");
-    if (_directIpAccount == NULL) {
+		_debug ("Failed to create default \"account\"");
+	} else {
 
-        _debug ("Failed to create default \"account\"");
-    } else {
+		_accountMap[IP2IP_PROFILE] = _directIpAccount;
 
-        _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();
 
-	// 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
 
-	// 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();
 
-	// _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;
-        }
+	// 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);
+		accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE);
 
-        if (accountType == "SIP") {
-            tmpAccount = AccountCreator::createAccount (AccountCreator::SIP_ACCOUNT, *iter);
-        }
+		if (accountType == "SIP") {
+			tmpAccount = AccountCreator::createAccount(
+					AccountCreator::SIP_ACCOUNT, *iter);
+		}
 
-        else if (accountType == "IAX") {
-            tmpAccount = AccountCreator::createAccount (AccountCreator::IAX_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());
-        }
+		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++;
-        }
+		if (tmpAccount != NULL) {
+			_debug ("Loading account %s ", iter->c_str());
+			_accountMap[iter->c_str()] = tmpAccount;
+			// tmpAccount->setVoIPLink(SIPVoIPLink::instance (""));
+			tmpAccount->setVoIPLink();
+			nbAccount++;
+		}
 
-        iter++;
-    }
+		iter++;
+	}
 
-    _debug ("nb account loaded %i \n", nbAccount);
+	_debug ("nb account loaded %i \n", nbAccount);
 
-    return nbAccount;
+	return nbAccount;
 }
 
-void
-ManagerImpl::unloadAccountMap()
-{
+void ManagerImpl::unloadAccountMap () {
 
-    AccountMap::iterator iter = _accountMap.begin();
+	AccountMap::iterator iter = _accountMap.begin();
 
-    while (iter != _accountMap.end()) {
+	while (iter != _accountMap.end()) {
 
-        _debug ("Unloading account %s\n", iter->first.c_str());
+		_debug ("Unloading account %s\n", iter->first.c_str());
 
-        delete iter->second;
-        iter->second = 0;
+		delete iter->second;
+		iter->second = 0;
 
-        iter++;
-    }
+		iter++;
+	}
 
-    _accountMap.clear();
+	_accountMap.clear();
 }
 
-bool
-ManagerImpl::accountExists (const AccountID& accountID)
-{
-    AccountMap::iterator iter = _accountMap.find (accountID);
+bool ManagerImpl::accountExists (const AccountID& accountID) {
+	AccountMap::iterator iter = _accountMap.find(accountID);
 
-    if (iter == _accountMap.end()) {
-        return false;
-    }
+	if (iter == _accountMap.end()) {
+		return false;
+	}
 
-    return true;
+	return true;
 }
 
 Account*
-ManagerImpl::getAccount (const AccountID& accountID)
-{
-    // In our definition,
-    // this is the "direct ip calls account"
-    if (accountID == AccountNULL) {
-        _debug ("Returns the direct IP account");
-        return _directIpAccount;
-    }
+ManagerImpl::getAccount (const AccountID& accountID) {
+	// In our definition,
+	// this is the "direct ip calls account"
+	if (accountID == AccountNULL) {
+		_debug ("Returns the direct IP account");
+		return _directIpAccount;
+	}
 
-    AccountMap::iterator iter = _accountMap.find (accountID);
+	AccountMap::iterator iter = _accountMap.find(accountID);
 
-    if (iter == _accountMap.end()) {
-        return NULL;
-    }
+	if (iter == _accountMap.end()) {
+		return NULL;
+	}
 
-    return iter->second;
+	return iter->second;
 }
 
-AccountID
-ManagerImpl::getAccountIdFromNameAndServer (const std::string& userName, const std::string& server)
-{
-    AccountMap::iterator iter;
-    SIPAccount *account;
-    _debug ("getAccountIdFromNameAndServer : username = %s , server = %s", userName.c_str(), server.c_str());
-    // Try to find the account id from username and server name by full match
+AccountID ManagerImpl::getAccountIdFromNameAndServer (
+		const std::string& userName, const std::string& server) {
+	AccountMap::iterator iter;
+	SIPAccount *account;
+	_debug ("getAccountIdFromNameAndServer : username = %s , server = %s", userName.c_str(), server.c_str());
+	// Try to find the account id from username and server name by full match
 
-    for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-        _debug ("for : account = %s", iter->first.c_str());
-        account = dynamic_cast<SIPAccount *> (iter->second);
+	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
+		_debug ("for : account = %s", iter->first.c_str());
+		account = dynamic_cast<SIPAccount *> (iter->second);
 
-        if (account != NULL) {
-            if (account->fullMatch (userName, server)) {
-                _debug ("Matching accountId in request is a fullmatch");
-                return iter->first;
-            }
-        }
-    }
+		if (account != NULL) {
+			if (account->fullMatch(userName, server)) {
+				_debug ("Matching accountId in request is a fullmatch");
+				return iter->first;
+			}
+		}
+	}
 
-    // We failed! Then only match the hostname
-    for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-        account = dynamic_cast<SIPAccount *> (iter->second);
+	// We failed! Then only match the hostname
+	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
+		account = dynamic_cast<SIPAccount *> (iter->second);
 
-        if (account != NULL) {
-            if (account->hostnameMatch (server)) {
-                _debug ("Matching accountId in request with hostname");
-                return iter->first;
-            }
-        }
-    }
+		if (account != NULL) {
+			if (account->hostnameMatch(server)) {
+				_debug ("Matching accountId in request with hostname");
+				return iter->first;
+			}
+		}
+	}
 
-    // We failed! Then only match the username
-    for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-        account = dynamic_cast<SIPAccount *> (iter->second);
+	// We failed! Then only match the username
+	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
+		account = dynamic_cast<SIPAccount *> (iter->second);
 
-        if (account != NULL) {
-            if (account->userMatch (userName)) {
-                _debug ("Matching accountId in request with username");
-                return iter->first;
-            }
-        }
-    }
+		if (account != NULL) {
+			if (account->userMatch(userName)) {
+				_debug ("Matching accountId in request with username");
+				return iter->first;
+			}
+		}
+	}
 
-    // Failed again! return AccountNULL
-    return AccountNULL;
+	// Failed again! return AccountNULL
+	return AccountNULL;
 }
 
-std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings ()
-{
+std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () {
 
-    std::map<std::string, int32_t> settings;
+	std::map<std::string, int32_t> settings;
 
-    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)));
+	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;
+	return settings;
 }
 
-void ManagerImpl::setAddressbookSettings (const std::map<std::string, int32_t>& settings)
-{
+void ManagerImpl::setAddressbookSettings (
+		const std::map<std::string, int32_t>& settings) {
 
-    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);
+	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 ();
+	// Write it to the configuration file
+	saveConfig();
 }
 
-void
-ManagerImpl::setAddressbookList (const std::vector<  std::string >& list)
-{
+void ManagerImpl::setAddressbookList (const std::vector<std::string>& list) {
 
-    std::string s = serialize (list);
-    setConfig (ADDRESSBOOK, ADDRESSBOOK_LIST, s);
+	std::string s = serialize(list);
+	setConfig(ADDRESSBOOK, ADDRESSBOOK_LIST, s);
 }
 
-std::vector <std::string>
-ManagerImpl::getAddressbookList (void)
-{
+std::vector<std::string> ManagerImpl::getAddressbookList (void) {
 
-    std::string s = getConfigString (ADDRESSBOOK, ADDRESSBOOK_LIST);
-    return unserialize (s);
+	std::string s = getConfigString(ADDRESSBOOK, ADDRESSBOOK_LIST);
+	return unserialize(s);
 }
 
-std::map<std::string, std::string> ManagerImpl::getHookSettings ()
-{
+std::map<std::string, std::string> ManagerImpl::getHookSettings () {
 
-    std::map<std::string, std::string> settings;
+	std::map<std::string, std::string> settings;
 
-    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)));
+	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;
+	return settings;
 }
 
-void ManagerImpl::setHookSettings (const std::map<std::string, std::string>& settings)
-{
+void ManagerImpl::setHookSettings (
+		const std::map<std::string, std::string>& settings) {
 
-    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);
+	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 ();
+	// Write it to the configuration file
+	saveConfig();
 }
 
-void ManagerImpl::check_call_configuration (const CallID& id, const std::string &to, Call::CallConfiguration *callConfig)
-{
-    Call::CallConfiguration config;
-
-    if (to.find (SIP_SCHEME) == 0 || to.find (SIPS_SCHEME) == 0) {
-        _debug ("Sending Sip Call ");
-        config = Call::IPtoIP;
-    } else {
-        config = Call::Classic;
-    }
+void ManagerImpl::check_call_configuration (const CallID& id,
+		const std::string &to, Call::CallConfiguration *callConfig) {
+	Call::CallConfiguration config;
+
+	if (to.find(SIP_SCHEME) == 0 || to.find(SIPS_SCHEME) == 0) {
+		_debug ("Sending Sip Call ");
+		config = Call::IPtoIP;
+	} else {
+		config = Call::Classic;
+	}
 
-    associateConfigToCall (id, config);
+	associateConfigToCall(id, config);
 
-    *callConfig = config;
+	*callConfig = config;
 }
 
+bool ManagerImpl::associateConfigToCall (const CallID& callID,
+		Call::CallConfiguration config) {
 
-bool ManagerImpl::associateConfigToCall (const CallID& callID, Call::CallConfiguration config)
-{
-
-    if (getConfigFromCall (callID) == CallConfigNULL) { // nothing with the same ID
-        _callConfigMap[callID] = config;
-        _debug ("Associate Call %s with config %i", callID.data(), config);
-        return true;
-    } else {
-        return false;
-    }
+	if (getConfigFromCall(callID) == CallConfigNULL) { // nothing with the same ID
+		_callConfigMap[callID] = config;
+		_debug ("Associate Call %s with config %i", callID.data(), config);
+		return true;
+	} else {
+		return false;
+	}
 }
 
-Call::CallConfiguration ManagerImpl::getConfigFromCall (const CallID& callID)
-{
+Call::CallConfiguration ManagerImpl::getConfigFromCall (const CallID& callID) {
 
-    CallConfigMap::iterator iter = _callConfigMap.find (callID);
+	CallConfigMap::iterator iter = _callConfigMap.find(callID);
 
-    if (iter == _callConfigMap.end()) {
-        return (Call::CallConfiguration) CallConfigNULL;
-    } else {
-        return iter->second;
-    }
+	if (iter == _callConfigMap.end()) {
+		return (Call::CallConfiguration) CallConfigNULL;
+	} else {
+		return iter->second;
+	}
 }
 
-bool ManagerImpl::removeCallConfig (const CallID& callID)
-{
+bool ManagerImpl::removeCallConfig (const CallID& callID) {
 
-    if (_callConfigMap.erase (callID)) {
-        return true;
-    }
+	if (_callConfigMap.erase(callID)) {
+		return true;
+	}
 
-    return false;
+	return false;
 }
 
-std::map< std::string, std::string > ManagerImpl::getCallDetails (const CallID& callID)
-{
-
-    std::map<std::string, std::string> call_details;
-    AccountID accountid;
-    Account *account;
-    VoIPLink *link;
-    Call *call = NULL;
-    std::stringstream type;
+std::map<std::string, std::string> ManagerImpl::getCallDetails (
+		const CallID& callID) {
 
+	std::map<std::string, std::string> call_details;
+	AccountID accountid;
+	Account *account;
+	VoIPLink *link;
+	Call *call = NULL;
+	std::stringstream type;
 
-    // We need here to retrieve the call information attached to the call ID
-    // To achieve that, we need to get the voip link attached to the call
-    // But to achieve that, we need to get the account the call was made with
+	// We need here to retrieve the call information attached to the call ID
+	// To achieve that, we need to get the voip link attached to the call
+	// But to achieve that, we need to get the account the call was made with
 
-    // So first we fetch the account
-    accountid = getAccountFromCall (callID);
-    _debug ("%s",callID.c_str());
-    // Then the VoIP link this account is linked with (IAX2 or SIP)
+	// So first we fetch the account
+	accountid = getAccountFromCall(callID);
+	_debug ("%s",callID.c_str());
+	// Then the VoIP link this account is linked with (IAX2 or SIP)
 
-    if ( (account=getAccount (accountid)) != 0) {
-        link = account->getVoIPLink ();
+	if ((account = getAccount(accountid)) != 0) {
+		link = account->getVoIPLink();
 
-        if (link) {
-            call = link->getCall (callID);
-        }
-    }
+		if (link) {
+			call = link->getCall(callID);
+		}
+	}
 
-    if (call) {
-        type << call->getCallType ();
-        call_details.insert (std::pair<std::string, std::string> ("ACCOUNTID", accountid));
-        call_details.insert (std::pair<std::string, std::string> ("PEER_NUMBER", call->getPeerNumber ()));
-        call_details.insert (std::pair<std::string, std::string> ("PEER_NAME", call->getPeerName ()));
-        call_details.insert (std::pair<std::string, std::string> ("DISPLAY_NAME", call->getDisplayName ()));
-        call_details.insert (std::pair<std::string, std::string> ("CALL_STATE", call->getStateStr ()));
-        call_details.insert (std::pair<std::string, std::string> ("CALL_TYPE", type.str ()));
-    } else {
-        _debug ("Error: Managerimpl - getCallDetails ()");
-        call_details.insert (std::pair<std::string, std::string> ("ACCOUNTID", AccountNULL));
-        call_details.insert (std::pair<std::string, std::string> ("PEER_NUMBER", "Unknown"));
-        call_details.insert (std::pair<std::string, std::string> ("PEER_NAME", "Unknown"));
-        call_details.insert (std::pair<std::string, std::string> ("CALL_STATE", "UNKNOWN"));
-        call_details.insert (std::pair<std::string, std::string> ("CALL_TYPE", "0"));
-    }
+	if (call) {
+		type << call->getCallType();
+		call_details.insert(std::pair<std::string, std::string>("ACCOUNTID",
+				accountid));
+		call_details.insert(std::pair<std::string, std::string>("PEER_NUMBER",
+				call->getPeerNumber()));
+		call_details.insert(std::pair<std::string, std::string>("PEER_NAME",
+				call->getPeerName()));
+		call_details.insert(std::pair<std::string, std::string>("DISPLAY_NAME",
+				call->getDisplayName()));
+		call_details.insert(std::pair<std::string, std::string>("CALL_STATE",
+				call->getStateStr()));
+		call_details.insert(std::pair<std::string, std::string>("CALL_TYPE",
+				type.str()));
+	} else {
+		_debug ("Error: Managerimpl - getCallDetails ()");
+		call_details.insert(std::pair<std::string, std::string>("ACCOUNTID",
+				AccountNULL));
+		call_details.insert(std::pair<std::string, std::string>("PEER_NUMBER",
+				"Unknown"));
+		call_details.insert(std::pair<std::string, std::string>("PEER_NAME",
+				"Unknown"));
+		call_details.insert(std::pair<std::string, std::string>("CALL_STATE",
+				"UNKNOWN"));
+		call_details.insert(std::pair<std::string, std::string>("CALL_TYPE",
+				"0"));
+	}
 
-    return call_details;
+	return call_details;
 }
 
-
-std::map<std::string, std::string> ManagerImpl::send_history_to_client (void)
-{
-    return _history->get_history_serialized ();
+std::map<std::string, std::string> ManagerImpl::send_history_to_client (void) {
+	return _history->get_history_serialized();
 }
 
-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 ();
+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();
 }
 
+std::vector<std::string> ManagerImpl::getCallList (void) {
+	std::vector<std::string> v;
 
-std::vector< std::string >
-ManagerImpl::getCallList (void)
-{
-    std::vector< std::string > v;
+	CallAccountMap::iterator iter = _callAccountMap.begin();
 
-    CallAccountMap::iterator iter = _callAccountMap.begin ();
-
-    while (iter != _callAccountMap.end ()) {
-        v.push_back (iter->first.data());
-        iter++;
-    }
+	while (iter != _callAccountMap.end()) {
+		v.push_back(iter->first.data());
+		iter++;
+	}
 
-    return v;
+	return v;
 }
 
+std::map<std::string, std::string> ManagerImpl::getConferenceDetails (
+		const ConfID& confID) {
 
-std::map< std::string, std::string >
-ManagerImpl::getConferenceDetails (const ConfID& confID)
-{
-
-    std::map<std::string, std::string> conf_details;
-    ConferenceMap::iterator iter_conf;
+	std::map<std::string, std::string> conf_details;
+	ConferenceMap::iterator iter_conf;
 
-    iter_conf = _conferencemap.find (confID);
+	iter_conf = _conferencemap.find(confID);
 
-    Conference* conf = NULL;
+	Conference* conf = NULL;
 
-    if (iter_conf != _conferencemap.end()) {
+	if (iter_conf != _conferencemap.end()) {
 
-        conf = iter_conf->second;
-        conf_details.insert (std::pair<std::string, std::string> ("CONFID", confID));
-        conf_details.insert (std::pair<std::string, std::string> ("CONF_STATE", conf->getStateStr()));
-    }
+		conf = iter_conf->second;
+		conf_details.insert(std::pair<std::string, std::string>("CONFID",
+				confID));
+		conf_details.insert(std::pair<std::string, std::string>("CONF_STATE",
+				conf->getStateStr()));
+	}
 
-    return conf_details;
+	return conf_details;
 }
 
+std::vector<std::string> ManagerImpl::getConferenceList (void) {
+	_debug ("ManagerImpl::getConferenceList");
+	std::vector<std::string> v;
 
-std::vector< std::string >
-ManagerImpl::getConferenceList (void)
-{
-    _debug ("ManagerImpl::getConferenceList");
-    std::vector< std::string > v;
-
-    ConferenceMap::iterator iter = _conferencemap.begin();
+	ConferenceMap::iterator iter = _conferencemap.begin();
 
-    while (iter != _conferencemap.end ()) {
-        v.push_back (iter->first);
-        iter++;
-    }
+	while (iter != _conferencemap.end()) {
+		v.push_back(iter->first);
+		iter++;
+	}
 
-    return v;
+	return v;
 }
 
+std::vector<std::string> ManagerImpl::getParticipantList (
+		const std::string& confID) {
+	_debug ("ManagerImpl::getParticipantList");
+	std::vector<std::string> v;
 
-std::vector< std::string >
-ManagerImpl::getParticipantList (const std::string& confID)
-{
-    _debug ("ManagerImpl::getParticipantList");
-    std::vector< std::string > v;
+	ConferenceMap::iterator iter_conf = _conferencemap.find(confID);
+	Conference *conf = NULL;
 
-    ConferenceMap::iterator iter_conf = _conferencemap.find (confID);
-    Conference *conf = NULL;
+	if (iter_conf != _conferencemap.end())
+		conf = iter_conf->second;
 
-    if (iter_conf != _conferencemap.end())
-        conf = iter_conf->second;
+	if (conf != NULL) {
+		ParticipantSet participants = conf->getParticipantList();
+		ParticipantSet::iterator iter_participant = participants.begin();
 
-    if (conf != NULL) {
-        ParticipantSet participants = conf->getParticipantList();
-        ParticipantSet::iterator iter_participant = participants.begin();
+		while (iter_participant != participants.end()) {
 
-        while (iter_participant != participants.end ()) {
+			v.push_back(*iter_participant);
 
-            v.push_back (*iter_participant);
-
-            iter_participant++;
-        }
-    }
+			iter_participant++;
+		}
+	}
 
-    return v;
+	return v;
 }
 
diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h
index 096b7f11f1..4e8ce791b8 100644
--- a/sflphone-common/src/user_cfg.h
+++ b/sflphone-common/src/user_cfg.h
@@ -64,6 +64,8 @@
 #define WINDOW_HEIGHT						"Window.height"
 #define WINDOW_POSITION_X					"Window.positionX"
 #define WINDOW_POSITION_Y					"Window.positionY"
+#define SHOW_STATUSICON						"Statusicon.show"
+
 
 #define IP2IP_PROFILE                       "IP2IP"    
 #define SIGNALISATION                       "VoIPLink"	                /** Section Signalisation */
-- 
GitLab


From 1ca09fb18253cbeb646cf0564900436903619a8b Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Mon, 1 Mar 2010 17:29:32 -0500
Subject: [PATCH 093/160] [#2579] Update man pages

---
 sflphone-client-gnome/VERSION                       | 2 +-
 sflphone-client-gnome/configure.ac                  | 2 +-
 sflphone-client-gnome/man/sflphone-client-gnome.pod | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sflphone-client-gnome/VERSION b/sflphone-client-gnome/VERSION
index 06fa200552..c81aa44afb 100644
--- a/sflphone-client-gnome/VERSION
+++ b/sflphone-client-gnome/VERSION
@@ -1 +1 @@
-0.9.7~beta
+0.9.7
diff --git a/sflphone-client-gnome/configure.ac b/sflphone-client-gnome/configure.ac
index f64a87384a..a0e88ac300 100644
--- a/sflphone-client-gnome/configure.ac
+++ b/sflphone-client-gnome/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([SFLphone],[0.9.7~beta],[sflphoneteam@savoirfairelinux.com],[sflphone-client-gnome])
+AC_INIT([SFLphone],[0.9.7],[sflphoneteam@savoirfairelinux.com],[sflphone-client-gnome])
 AM_CONFIG_HEADER(config.h)
 
 LT_INIT
diff --git a/sflphone-client-gnome/man/sflphone-client-gnome.pod b/sflphone-client-gnome/man/sflphone-client-gnome.pod
index 0880fd1634..471c8b7c93 100644
--- a/sflphone-client-gnome/man/sflphone-client-gnome.pod
+++ b/sflphone-client-gnome/man/sflphone-client-gnome.pod
@@ -18,7 +18,7 @@ Please report bugs at https://projects.savoirfairelinux.com/projects/sflphone/is
 
 =head1 AUTHORS
 
-B<sflphone-client-gnome> is developed in Montreal by Savoir-Faire Linux Inc. The active developers are Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> and Yun Liu <yun.liu@savoirfairelinux.com>.
+B<sflphone-client-gnome> is developed in Montreal by Savoir-Faire Linux Inc.
 
 This manual page was written by Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>.
 
-- 
GitLab


From 745001a2497af1e9f9e9312d6485ccfe33dc9d95 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Tue, 2 Mar 2010 10:28:17 -0500
Subject: [PATCH 094/160] [#2579] Updating translations

---
 lang/da/da.po       | 693 ++++++++++++++++---------------
 lang/de/de.po       | 690 ++++++++++++++++---------------
 lang/es/es.po       | 747 +++++++++++++++++----------------
 lang/fr/fr.po       | 699 ++++++++++++++++---------------
 lang/it/it.po       | 651 +++++++++++++++--------------
 lang/ko/ko.po       | 561 +++++++++++++------------
 lang/pl/pl.po       | 567 ++++++++++++++------------
 lang/pt/pt.po       | 595 ++++++++++++++-------------
 lang/pt_BR/pt_BR.po | 727 +++++++++++++++++----------------
 lang/ru/ru.po       | 974 +++++++++++++++++++++++---------------------
 lang/sflphone.pot   | 560 +++++++++++++------------
 lang/zh_CN/zh_CN.po | 636 +++++++++++++++--------------
 lang/zh_HK/zh_HK.po | 625 +++++++++++++++-------------
 lang/zh_TW/zh_TW.po | 571 +++++++++++++-------------
 14 files changed, 4906 insertions(+), 4390 deletions(-)

diff --git a/lang/da/da.po b/lang/da/da.po
index 1c011969ac..a6ed9863b0 100644
--- a/lang/da/da.po
+++ b/lang/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"
+"POT-Creation-Date: 2010-03-02 10:23-0500\n"
+"PO-Revision-Date: 2010-01-04 19:10+0000\n"
 "Last-Translator: Jonas Fonseca <fonseca@diku.dk>\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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Registreret"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Ikke registreret"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "Forsøger..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Fejl"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Godkendelse mislykkedes"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Netværk kan ikke nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "Vært kan ikke nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Stun konfigureringsfejl"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Stun server ugyldig"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Ugyldig"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Benytter konto"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Ingen registrerede konti"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,23 +80,26 @@ 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:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x 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
 msgid ""
@@ -124,43 +131,43 @@ msgstr ""
 "\n"
 "PulseAudio er tilgængelig"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 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:98
 msgid "There are calls in progress."
 msgstr "Igangværende opkald eksisterer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 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:331
 msgid "SFLphone Error"
 msgstr "SFLphone fejl"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr "Afslut opkald"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr "ZRTP-forhandling mislykkedes"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -183,11 +190,11 @@ 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:502
 msgid "Confirm Go Clear"
 msgstr "Godkend sikkerhedsændring"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "Godkend"
 
@@ -258,443 +265,465 @@ msgstr "Højtaler lydstyrke"
 msgid "Mic volume"
 msgstr "Mikrofon lydstyrke"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "_Vis hovedvindue"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Læg på"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, 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/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "aktiv konto"
+msgstr[1] "aktiv konto"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Talebesked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Talebesked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "Om SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 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:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "_Nyt opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "_Svar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 msgid "Answer the call"
-msgstr ""
+msgstr "Besvar opkaldet"
 
-#: ../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å"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
-msgstr ""
+msgstr "Afslut opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "I _venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 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:809
 msgid "O_ff hold"
-msgstr ""
+msgstr "F_jern fra venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
-msgstr ""
+msgstr "Fjern opkaldet fra venteposition"
 
-#: ../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 ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:811
 msgid "Configuration _Assistant"
 msgstr "Konfigurationsfil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Stun konfigureringsfejl"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d indtalt besked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
-msgstr ""
+msgstr "_Luk"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
-msgstr ""
+msgstr "Minimere til systembakken"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
-msgstr ""
+msgstr "_Afslut"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
-msgstr ""
+msgstr "Afslut programmet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
-msgstr ""
+msgstr "_Rediger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
-msgstr ""
+msgstr "_Kopier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
-msgstr ""
+msgstr "Kopier det valgte"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
-msgstr ""
+msgstr "Inds_æt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "Indsæt indholdet af udklipsholderen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "Konti"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Nuværende konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr ""
+msgstr "Ændr dine indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
-msgstr ""
+msgstr "_Vis"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Hjem"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr "Fortsæt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
-msgstr ""
+msgstr "Åbn manualen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr "Godkendelse"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
-msgstr ""
+msgstr "_Overfør"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr ""
+msgstr "Overfør opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Optag"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Optag den aktuelle samtale"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Vis værktøjslinie"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
-msgstr ""
+msgstr "Vis værktøjslinien"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
-msgstr "Deaktiveret"
+msgstr "_Nummertastatur"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
-msgstr ""
+msgstr "Vis nummertastaturet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
-msgstr ""
+msgstr "Vis _lydstyrke indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
-msgstr ""
+msgstr "Vis lydstyrke indstillingerne"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 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:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "I _venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "_Besvar opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "Ændre telefonnummer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "_Protokol"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr "_Nummer for talebesked"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "_Brugernavn"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr "Godkendelse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr "Hemmelig"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr "Legitimationsoplysning"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr "Godkendelsesnavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "Deaktiveret"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "Registrering"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr "Forældelse af registrering"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr "Offentliggjort adresse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 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:1048
 msgid "STUN server URL"
 msgstr "STUN serveradresse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 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:1059
 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:1077
 msgid "Published port"
 msgstr "Offentliggjort port"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Grundlæggende"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Advanceret"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Netværk"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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:131
+#, 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:421
 msgid "Protocol"
 msgstr "Protokol"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Status"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Konti"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "Oprettede konti"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "Generelt"
 
@@ -739,7 +768,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Navn"
 
@@ -780,182 +809,178 @@ msgstr "SRTP/ZRTP draft-zimmermann"
 msgid "None"
 msgstr "Ingen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 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:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "VoIP protokoller"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 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:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 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:390
 msgid "Optional email address"
 msgstr "Valgfri emailadresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "_Emailadresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr "IAX2 kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "_Benyt STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "_STUN server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "Kontoregistrering"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Tillykke!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Frekvens"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Bithastighed"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Båndbredde"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "ALSA plugin"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Uddata"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Inddata"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr "_Detektering af taleaktivitet"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../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:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "Lydhåndtering"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_PulseAudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Optagelser"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Destinationsmappe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Vælg en mappe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "Ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "Aktiver _ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "Vælg en ringetone"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "Lydfiler"
 
@@ -992,73 +1017,62 @@ msgstr "Omskrivning af telefonnummer"
 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:146
 msgid "Desktop Notifications"
 msgstr "Meddelelser"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "_Aktiver meddelelser"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr "Systembakke-ikon"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 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:181
 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:191
 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:205
 msgid "Calls History"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 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:224
 msgid "days"
 msgstr "dage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Indstillinger"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 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/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr "Advancerede indstillinger for TLS"
@@ -1080,55 +1094,59 @@ 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:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr "Autoritetscertifikatsliste"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 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:147
 msgid "Public endpoint certificate file"
 msgstr "Offentlig endpoint certifikatsfil"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 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:174
 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:195
 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:218
 msgid "TLS protocol method"
 msgstr "TLS protokolmetode"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr "TLS cifferliste"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 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:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Forhandlingstimeout"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 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:292
 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:298
 msgid "Require certificate for incoming tls connections"
 msgstr "Kræv certifikat for indgående TLS forbindelser"
 
@@ -1152,6 +1170,15 @@ msgstr "_Advar hvis ZRTP ikke understøttes"
 msgid "Display SAS once for hold events"
 msgstr "_Vis SAS en enkelt gang for vente-hændelser"
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "ZRTP indstillinger"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Søg alle"
@@ -1175,41 +1202,57 @@ msgstr "Søg i indgående opkald"
 msgid "Search by outgoing call"
 msgstr "Søg i udgående 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 "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i konto oprettet"
+#~ msgstr[1] "%i konti oprettet"
+
+#~ msgid "Direct IP calls"
+#~ msgstr "Direkte IP opkald"
+
+#~ msgid "SIP Port"
+#~ msgstr "SIP Port"
 
 #~ msgid "Codec"
 #~ msgstr "Kodning"
 
-#~ msgid "Network"
-#~ msgstr "Netværk"
+#~ msgid "There "
+#~ msgstr "Der "
 
 #~ msgid "Manually"
 #~ msgstr "Manuelt"
 
-#~ msgid "There "
-#~ msgstr "Der "
-
-#~ msgid "is "
-#~ msgstr "er "
+#~ 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 "IP call - %s"
+#~ msgstr "IP opkald - %s"
 
 #~ msgid "Store SIP credentials as MD5 hash"
 #~ msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi"
diff --git a/lang/de/de.po b/lang/de/de.po
index ca1afd15a4..be328408cb 100644
--- a/lang/de/de.po
+++ b/lang/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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2010-01-04 00:05+0000\n"
+"Last-Translator: Jarosław Ogrodnik <nobodythere@gmail.com>\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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Registriert"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Nicht registriert"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "Am versuchen..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Fehler"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Authentifizierung fehlgeschlagen"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Kein netzwerk"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "Host unerreichbar"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Stun: Konfigurationsfehler"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Ungültiger Stun server"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Ungültig"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Mit Konto"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Kein registriertes Konto"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,23 +80,26 @@ 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:607
+#: ../sflphone-client-gnome/src/actions.c:931
 msgid "Direct SIP call"
+msgstr "Direkter SIP-Anruf"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+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:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+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
 msgid ""
@@ -124,65 +131,69 @@ msgstr ""
 "\n"
 "Pulseaudio nicht gestartet"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr "Laufender Anruf."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr "Laufende Anrufe."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 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:331
 msgid "SFLphone Error"
 msgstr "SFLphone Fehler"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr "Anruf beenden"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
-msgstr ""
+msgstr "ZRTP Übertragung fehlgeschlagen"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "Bestätigen"
 
@@ -227,16 +238,18 @@ 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
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr ""
+msgstr "%s unterstützt ZRTP nicht."
 
 #: ../sflphone-client-gnome/src/sflnotify.c:220
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr ""
+msgstr "ZRTP-Übertragung mit %s schlug fehl"
 
 #: ../sflphone-client-gnome/src/sflnotify.c:235
 #, c-format
@@ -251,444 +264,461 @@ msgstr "Lautsprecher Lautstärke"
 msgid "Mic volume"
 msgstr "Mikro Lautstärke"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "_Hauptfenster anzeigen"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "A_uflegen"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, 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/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "aktive Konten"
+msgstr[1] "aktive Konten"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Voicemail"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Voicemail (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "Über SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "_Anruf"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "_Neuer Anruf"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "_Abnehmen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 "A_uflegen"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
-msgstr ""
+msgstr "Den Anruf beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "in _Warteschleife"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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:811
 msgid "Configuration _Assistant"
 msgstr "Einrichtungsdatei"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Stun: Konfigurationsfehler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d Voice Nachricht"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr "_Editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
-msgstr ""
+msgstr "Das Programm beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "Entfernen Sie das ausgewählte Konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "Liste der vorherigen Anrufen _leeren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Vorherigen Anrufen leeren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "_Konten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Aktuelles Konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Einstellungen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr ""
+msgstr "Ihre Einstellungen ändern"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "_Anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Hilfe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr "Weiter"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr "Authentifizierung"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "Weiterleiten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "Weiterleiten zu : "
+msgstr "Weiterleiten zu :"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Gespräch aufzeichnen"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "_Wählscheibe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "Lautstärke-Regler anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "Lautstärke-Regler anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Vorherige Anrufe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Liste der vorherigen Anrufen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 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:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "in _Warteschleife"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "_Zurückrufen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "Nummer editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "_Protokoll"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr "_Voicemail Nummer"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "_Benutzername"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr "Authentifizierung"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr "Geheim"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr "Authentifizierung Name"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "Deaktiviert"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "Anmeldung"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Kontoeinstellungen"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Allgemein"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Erweitert"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Netzwerk"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr "Protokoll"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Status"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "Konfigurierten Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "Allgemein"
 
@@ -733,7 +763,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Name"
 
@@ -774,183 +804,179 @@ msgstr "SRTP/ZRTP draft-zimmermann"
 msgid "None"
 msgstr "Nichts"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone Konto (Konfigurationsassistent)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "VoIP Protokoll"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr "Kontotyp auswählen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterisk Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 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:390
 msgid "Optional email address"
 msgstr "Fakultative E-mail-Adresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "_Email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr "Konfiguration des IAX2 Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "STUN Ei_nschalten"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "_STUN Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "Konto Registrierung"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Gratulation!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Frequenz"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Bandbreite"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "ALSA Plugin"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Ausgabe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Eingabe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr "\"Voice Activity\" Erkennung"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../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:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "Sound Manager"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Aufnahmen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Zielverzeichnis"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Verzeichnis auswählen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "Klingeltöne"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "Klingeltöne _einschalten"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "Klingelton auswählen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "Audio Dateien"
 
@@ -987,69 +1013,62 @@ msgstr "Telefonnummer umformen"
 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:146
 msgid "Desktop Notifications"
 msgstr "Desktopbenachrichtigungen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "Benachrichtigungen _einschalten"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr "Benachrichtigungsfeld (\"System Tray\") Icon"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 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:181
 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:191
 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:205
 msgid "Calls History"
 msgstr "Liste der vorherigen Anrufen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr "Tage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr "Hooks"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1067,55 +1086,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1139,6 +1162,15 @@ msgstr "_Warnung wenn ZRTP nicht unterstüzt"
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "ZRTP Optionen"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Suche alle"
@@ -1162,38 +1194,21 @@ msgstr "Suche nach eingehenden Anruf"
 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 ""
+#~ "<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 "Enable voicemail _notifications"
-#~ msgstr "_Benachrichtigung für Voice Nachrichten"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i Konto konfiguriert"
+#~ msgstr[1] "%i Konten konfiguriert"
 
 #~ msgctxt "account state"
 #~ msgid "Error"
@@ -1231,6 +1246,9 @@ msgstr "Suche nach ausgehenden Anru"
 #~ msgid "Default account"
 #~ msgstr "Default Konto"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone KDE Client"
 
@@ -1410,6 +1428,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 +1456,53 @@ 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 "%s - %s"
 #~ msgstr "%s - %s"
 
 #~ 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,Jarosław Ogrodnik,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,"
+#~ "maxime.chambreuil@gmail.com,Bananeweizen@gmx.de,,sven.werlen@gmail.com"
diff --git a/lang/es/es.po b/lang/es/es.po
index a40c09ce90..c390d2931e 100644
--- a/lang/es/es.po
+++ b/lang/es/es.po
@@ -9,68 +9,72 @@ 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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2009-12-17 23:18+0000\n"
+"Last-Translator: Jorge E. Gómez <jorge@jorgee.net>\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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "No registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "Intentando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Error"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Falló la autenticación"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Red Inaccesible"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "_Parte del servidor"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Error de configuración Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Servidor stun inválido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Inválido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Usando la cuenta"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Ninguna cuenta registrada"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -78,23 +82,26 @@ msgstr ""
 "Incapaz de conectar con el servidor SFLphone.\n"
 " Asegúrese que el demonio esté funcionando."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 msgid "Direct SIP call"
 msgstr "Llamadas IP directas"
 
-#: ../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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 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/errors.c:29
 msgid ""
@@ -126,43 +133,43 @@ msgstr ""
 "\n"
 "Pulseaudio no está funcionando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 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:98
 msgid "There are calls in progress."
 msgstr "Hay llamadas en curso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 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:331
 msgid "SFLphone Error"
 msgstr "Error SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP no es compatible con %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 msgid "Continue"
 msgstr "Seguir"
 
-#: ../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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr "Terminar llamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -171,11 +178,11 @@ msgstr ""
 "Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n"
 "Razón exacta: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:482
 msgid "ZRTP negotiation failed"
 msgstr "Negociación ZRTP fracasada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -184,11 +191,11 @@ 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:502
 msgid "Confirm Go Clear"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "Confirmar"
 
@@ -259,443 +266,465 @@ msgstr "Volumen de altavoces"
 msgid "Mic volume"
 msgstr "Volumen del micrófono"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "Mostrar ventana principal"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Colgar"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, 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/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "Hay %d cuenta activada"
+msgstr[1] "Hay %d cuentas activadas"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Mensaje de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 msgid "No address book selected"
 msgstr "Libreta de contactos"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Libreta de contactos"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Mensaje de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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"
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:398
 msgid "About SFLphone"
 msgstr "Sobre SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "_Llamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "_Nueva llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "_Descolgar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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:806
 msgid "Finish the call"
-msgstr ""
+msgstr "Finalizar el llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "En _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 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:809
 msgid "O_ff hold"
 msgstr "Seguir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "G_rabar"
+msgstr "Sacar el llamado de espera"
 
-#: ../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:811
 msgid "Configuration _Assistant"
 msgstr "Archivo de configuración"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Error de configuración Stun"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d mensaje de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
-msgstr ""
+msgstr "_Cerrar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 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:818
 msgid "_Quit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
-msgstr ""
+msgstr "Salir del programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
-msgstr ""
+msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "Eliminar la cuenta seleccionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
-msgstr ""
+msgstr "_Pegar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "Pegar el contenido del portapapeles"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "_Limpiar historial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Limpiar historial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "_Cuentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Cuenta actual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Preferencias"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr ""
+msgstr "Cambiar sus preferencias"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "_Ver"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Ayuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr "Seguir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
-msgstr ""
+msgstr "Abrir el manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr "Autentificación"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "Transferir a : "
+msgstr "Transferir a :"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "G_rabar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Grabar la conversación actual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Mostrar barra de herramientas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
-msgstr ""
+msgstr "Mostrar barra de herramientas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "Desactivado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
-msgstr ""
+msgstr "Mostrar el teclado de marcado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "_Controles de volumen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "_Controles de volumen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Historia de Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Historia de Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 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:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "En _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "_Llamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "Editar número de teléfono"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 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:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "_Usuario"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr "Autentificación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr "Secreto"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr "Informaciónes"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr "Nombre de autentificación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "Desactivado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "Registración"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr "Registracíon expira"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr "Dirección publicada"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
-msgstr "Usando STUN "
+msgstr "Usando STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr "URL del servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 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:1059
 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:1077
 msgid "Published port"
 msgstr "Puerto publicado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Configuración de cuentas"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Códecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Avanzado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Red"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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:131
+#, c-format
 msgid "Server returned \"%s\" (%d)"
-msgstr "Servidor contesta \""
+msgstr "El servidor contesta \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Cuentas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "Cuentas Configuradas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "General"
 
@@ -740,7 +769,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Nombre"
 
@@ -781,181 +810,177 @@ msgstr "SRTP/ZRTP draft-zimmermann"
 msgid "None"
 msgstr "Ninguno"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 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:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 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:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 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:390
 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:390
 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:398
 msgid "_Email address"
 msgstr "_Correo"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "A_ctivar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "Registro de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "¡Enhorabuena!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Frecuencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Tasa de transferencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Ancho de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Salida"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../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:759
+#: ../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:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "Gestor de audio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Grabaciones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Carpeta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Seleccione una carpeta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "Tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "_Habilitar tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 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:885
 msgid "Audio Files"
 msgstr "Archivos de Audio"
 
@@ -992,76 +1017,65 @@ msgstr "Reescritura de número de teléfono"
 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:146
 msgid "Desktop Notifications"
 msgstr "Notificación de escritorio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "_Activar notificaciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 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:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 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:181
 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:191
 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:205
 msgid "Calls History"
 msgstr "Historia de llamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 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:224
 msgid "days"
 msgstr "días"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Preferencias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Sonido"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Libreta de Direcciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 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/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
-msgstr "Opciones avanzadas por TLS"
+msgstr "Opciones avanzadas para TLS"
 
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
 msgid "TLS transport"
@@ -1080,57 +1094,61 @@ 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:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 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:126
 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:147
 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:151
 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:174
 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:195
 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:218
 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:252
 msgid "TLS cipher list"
 msgstr "Lista de cifrado TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 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:269
 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:286
 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:292
 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:298
 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
 msgid "ZRTP Options"
@@ -1152,6 +1170,15 @@ msgstr "_Prevenir si ZRTP no es compatible"
 msgid "Display SAS once for hold events"
 msgstr "Presentar SAS una vez para eventos en espera"
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "Opciones ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Buscar todos"
@@ -1161,7 +1188,7 @@ msgstr "Buscar todos"
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:84
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:96
 msgid "Click here to change the search type"
-msgstr "Haz clic aqui para cambiar el type de busqueda"
+msgstr "Pulse aqui para cambiar el tipo de busqueda"
 
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:71
 msgid "Search by missed call"
@@ -1175,44 +1202,24 @@ msgstr "Buscar en llamadas entrantes"
 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 "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 ""
+#~ "<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 "Enable voicemail _notifications"
-#~ msgstr "Activar _notificaciones de mensajes de voz"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i cuenta configurada"
+#~ msgstr[1] "%i cuentas configuradas"
 
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr "Guarda informaciòn SIP como hash MD5"
+#~ msgid "Direct IP calls"
+#~ msgstr "Llamadas IP directas"
 
 #~ msgctxt "account state"
 #~ msgid "Registered"
@@ -1241,6 +1248,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"
 
@@ -1296,6 +1306,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 +1465,18 @@ 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 "_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 +1484,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"
 
@@ -1770,13 +1792,36 @@ 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 "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,Jorge E. Gómez,Maxime Chambreuil,Nicolás M. Zahlut,Xuacu "
+#~ "Saturio"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1784,4 +1829,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,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 c7ace4f55b..2647cf64f4 100644
--- a/lang/fr/fr.po
+++ b/lang/fr/fr.po
@@ -9,68 +9,72 @@ 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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2009-12-12 14:56+0000\n"
+"Last-Translator: Pierre Slamich <pierre.slamich@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-11-12 18:12+0000\n"
+"X-Launchpad-Export-Date: 2010-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Enregistré"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Non Enregistré"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "En cours..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Erreur"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Erreur d'authentification"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Réseau non trouvé"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "Serveur introuvable"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Erreur de configuration Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Serveur Stun invalide"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Non valide"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Utilise le compte"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Pas de compte enregistré"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -78,23 +82,26 @@ 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:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 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/errors.c:29
 msgid ""
@@ -126,43 +133,43 @@ msgstr ""
 "\n"
 "Pulseaudio n'est pas lancé"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 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:98
 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:103
 msgid "Do you still want to quit?"
 msgstr "Voulez-vous quitter?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr "Erreur SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr "Arrêter l'appel"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr "Erreur d'authentification"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -184,11 +191,11 @@ 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:502
 msgid "Confirm Go Clear"
 msgstr "Confirmer Communication en clair"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "Confirmer"
 
@@ -259,448 +266,466 @@ msgstr "Volume des hauts-parleurs"
 msgid "Mic volume"
 msgstr "Volume du micro"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "_Afficher la fenêtre principale"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Raccrocher"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, 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/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%d compte actif"
+msgstr[1] "%d comptes actifs"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Boite vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Carnet d'adresses"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Boite vocale (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "A propos de SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "Actions"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "_Nouvel appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "_Décrocher"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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:806
 msgid "Finish the call"
 msgstr "Terminer l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "Mettre en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 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:809
 msgid "O_ff hold"
 msgstr "Reprendre"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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:811
 msgid "Configuration _Assistant"
 msgstr "_Assistant de configuration"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Lancer l'assistant de configuration"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "Appeler la boite vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr "_Fermer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 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:818
 msgid "_Quit"
 msgstr "_Quitter"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr "Quitter le programme"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Editer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr "_Copier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "Copier la sélection"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr "C_oller"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 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:827
 msgid "Clear _history"
 msgstr "Effacer l'_historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Effacer l'historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "Co_mptes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Éditer les comptes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Préférences"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr "Modifier les préférences"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "A_ffichage"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "A_ide"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr "Sommaire"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr "Ouvrir le manuel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr "À propos de cette application"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "Transférer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "Transférer à : "
+msgstr "Transférer à :"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "Enregistrer"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Enregistrer la conversation courante"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr "Afficher la _barre d'outil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr "Afficher la barre d'outil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "_Clavier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr "Afficher le clavier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "Contrôle du _volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "Afficher les controles du volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Historique d'appels"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 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:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "_Mettre en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "_Rappeler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "Éditer le numéro"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "A_lias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "P_rotocole"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr "_Boite vocale #"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "Usa_ger"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr "Identification"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr "Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr "Informations"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr "Nom d'authentification"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "Désactivé"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "Expiration d'enregistrement"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr "Expiration d'enregistrement"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr "Adresse de publication"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
-msgstr "Utiliser STUN "
+msgstr "Utiliser STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr "URL du serveur STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 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:1059
 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:1077
 msgid "Published port"
 msgstr "Port de publication"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Paramètre des comptes"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Général"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Avancé"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Réseau"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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:131
 #, 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:421
 msgid "Protocol"
 msgstr "Protocole"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Statut"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Comptes"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "Comptes Configurés"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "Général"
 
@@ -745,7 +770,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Nom"
 
@@ -786,183 +811,179 @@ msgstr "SRTP/ZRTP draft-zimmermann"
 msgid "None"
 msgstr "Aucun"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 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:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "Protocoles VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 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:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 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:390
 msgid "Optional email address"
 msgstr "Adresse courriel optionnelle"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "A_dresse courriel"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "A_ctiver STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "S_erveur STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "Enregistrement du compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Félicitations!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Fréquence"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Bande passante"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "Greffon ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Sortie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Entrée"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../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:759
+#: ../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:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "Interface Audio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Enregistrements"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Dossier de destination"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Choisissez un dossier"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "Sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "_Activer les sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "Sélectionner une sonnerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "Fichier Audio"
 
@@ -999,73 +1020,62 @@ msgstr "Réécriture des numéros appelés"
 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:146
 msgid "Desktop Notifications"
 msgstr "Notifications de Bureau"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "_Activer les notifications"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 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:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 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:181
 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:191
 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:205
 msgid "Calls History"
 msgstr "Historique des appels"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 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:224
 msgid "days"
 msgstr "jours"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Préférences"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Carnet d'adresse"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr "Ancrage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Appels IP"
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr "Options avancées TLS"
@@ -1087,55 +1097,59 @@ 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:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 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:126
 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:147
 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:151
 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:174
 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:195
 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:218
 msgid "TLS protocol method"
 msgstr "Méthode pour TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr "Liste de cryptogramme TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 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:269
 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:286
 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:292
 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:298
 msgid "Require certificate for incoming tls connections"
 msgstr "Exiger un certificat pour les connexions TLS entrantes"
 
@@ -1159,6 +1173,15 @@ msgstr "_Avertir si ZRTP n'est pas supporté"
 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:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "Options de ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Rechercher dans tous"
@@ -1182,48 +1205,24 @@ msgstr "Rechercher dans les appels entrants"
 msgid "Search by outgoing call"
 msgstr "Rechercher dans les appels sortants"
 
-#~ msgid "Configuration File"
-#~ msgstr "Fichier de configuration"
-
-#~ msgid "Store SIP credentials as MD5 hash"
+#~ 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 ""
-#~ "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"
+#~ "<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 "UDP Transport"
-#~ msgstr "Transport UDP"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i compte configuré"
+#~ msgstr[1] "%i comptes configurés"
 
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Activer les notifications de boîte _vocale"
+#~ msgid "Direct IP calls"
+#~ msgstr "Appels IP"
 
 #~ msgctxt "account state"
 #~ msgid "Registered"
@@ -1286,6 +1285,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 +1477,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 +1501,24 @@ 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 "_Account creation wizard"
 #~ msgstr "_Assistant de création de compte"
 
 #~ 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"
 
@@ -1817,12 +1831,38 @@ 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 "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:,Emmanuel Milou,Maxime Chambreuil,Pierre Slamich"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1830,4 +1870,5 @@ 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,,,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 cf8644aea9..7c22d15053 100644
--- a/lang/it/it.po
+++ b/lang/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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2009-12-09 20:05+0000\n"
+"Last-Translator: Maurizio Porrato <Unknown>\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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Registrato"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Non registrato"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "Registrazione in corso..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Errore"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Autenticazione fallita"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Rete irraggiungibile"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "Host non raggiungibile"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Errore di configurazione STUN"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Server STUN non valido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Non valido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Account in uso:"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Nessun account registrato"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,23 +80,26 @@ 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:607
+#: ../sflphone-client-gnome/src/actions.c:931
 msgid "Direct SIP call"
+msgstr "Chiamata SIP diretta"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+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:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+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
 msgid ""
@@ -121,65 +128,65 @@ msgstr ""
 "Notifica PulseAudio\n"
 "PulseAudio non è in esecuzione"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 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:98
 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:103
 msgid "Do you still want to quit?"
 msgstr "Vuoi veramente uscire?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr "Errore SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
-msgstr ""
+msgstr "Termina la chiamata"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
-msgstr ""
+msgstr "Negoziazione ZRTP fallita"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -228,17 +235,17 @@ msgstr ""
 #: ../sflphone-client-gnome/src/sflnotify.c:205
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr ""
+msgstr "%s non supporta ZRTP."
 
 #: ../sflphone-client-gnome/src/sflnotify.c:220
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr ""
+msgstr "Negoziazione ZRTP fallita con %s"
 
 #: ../sflphone-client-gnome/src/sflnotify.c:235
 #, c-format
 msgid "<i>With:</i> %s"
-msgstr ""
+msgstr "<i>Con:</i> %s"
 
 #: ../sflphone-client-gnome/src/sliders.c:162
 msgid "Speakers volume"
@@ -248,445 +255,461 @@ msgstr "Volume altoparlante"
 msgid "Mic volume"
 msgstr "Volume microfono"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "Mostra la finestra principale"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Chiudi"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, 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/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "Account predefinito"
+msgstr[1] "Account predefinito"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Segreteria telefonica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Segreteria telefonica (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "Informazioni su SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "_Chiama"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "Chiama"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "Rispondi"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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:806
 msgid "Finish the call"
-msgstr ""
+msgstr "Termina la chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "Attesa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 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:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Errore di configurazione STUN"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d messaggio vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr "_Modifica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Modifica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "Elimina l'account selezionato"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "Cancella la cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Cancella la cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "_Account"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Account attivo"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Preferenze"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr ""
+msgstr "Modifica le preferenze"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "_Visualizza"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Aiuto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "Inoltra"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "Inoltra a: "
+msgstr "Inoltra a:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Registra"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Regista la conversazione in corso"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "Mostra tastiera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
-msgstr ""
+msgstr "Mostra la tastiera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "Mostra i controlli del volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "Mostra i controlli del volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Cronologia chiamate"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 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:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "Attesa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Pseudonimo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "_Protocollo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr "Numero segreteria telefonica"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "Nome _utente"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
-msgstr ""
+msgstr "Autenticazione"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr "Scadenza registrazione"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Impostazioni dell'account"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Generale"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codec"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Avanzate"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Rete"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr "Protocollo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Stato"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Account"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "Account configurati"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr ""
 
@@ -731,7 +754,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Nome"
 
@@ -770,184 +793,180 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "Protocolli VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 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:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr "Indirizzo email opzionale"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "Indirizzo _email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr "Impostazioni account IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "Abilita STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "Server STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "Registrazione account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Congratulazioni!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Frequenza"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Uscita"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Ingresso"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Registrazioni"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Cartella di destinazione"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Seleziona una cartella"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "Suonerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "Abilita suonerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "Selezionare una suoneria"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "File audio"
 
@@ -984,69 +1003,62 @@ msgstr "Riscrittura numero telefonico"
 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:146
 msgid "Desktop Notifications"
 msgstr "Notifiche"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "Abilita notifiche"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 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:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 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:181
 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:191
 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:205
 msgid "Calls History"
 msgstr "Cronologia chiamate"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 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:224
 msgid "days"
 msgstr "giorni"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1064,55 +1076,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1136,6 +1152,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Cerca tra tutte le chiamate"
@@ -1159,24 +1183,25 @@ msgstr "Cerca tra le chiamate ricevute"
 msgid "Search by outgoing call"
 msgstr "Cerca tra le chiamate effettuate"
 
-#~ msgid "IP call - %s"
-#~ msgstr "Chiamata IP diretta - %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>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>)"
+
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i account configurato"
+#~ msgstr[1] "%i account configurati"
 
 #~ 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"
 
@@ -1228,15 +1253,15 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgid "Enable notifications"
 #~ msgstr "Attiva le notifiche"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP Port"
+
 #~ msgid "Port"
 #~ msgstr "Port"
 
 #~ msgid "PulseAudio sound server"
 #~ msgstr "Server audio PulseAudio"
 
-#~ msgid "Default account"
-#~ msgstr "Account predefinito"
-
 #~ msgid "You have an incoming call from"
 #~ msgstr "Chiamata in arrivo da"
 
@@ -1255,6 +1280,9 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ 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 +1325,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"
 
@@ -1321,10 +1355,11 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgstr ""
 #~ ",Launchpad Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad "
 #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad "
+#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad "
 #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil"
 
 #~ 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"
diff --git a/lang/ko/ko.po b/lang/ko/ko.po
index c7ebb3c80f..240e28e87a 100644
--- a/lang/ko/ko.po
+++ b/lang/ko/ko.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\n"
 "PO-Revision-Date: 2009-10-26 20:46+0000\n"
 "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
 "Language-Team: Korean <ko@li.org>\n"
@@ -18,74 +18,85 @@ msgstr ""
 "X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "등록했습니다"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 msgstr ""
 
 #: ../sflphone-client-gnome/src/errors.c:29
@@ -109,65 +120,65 @@ msgid ""
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -236,445 +247,458 @@ msgstr ""
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:189
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
+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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:398
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 msgid "_Host name"
 msgstr ""
 
-#: ../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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 msgid "_User name"
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr ""
 
@@ -719,7 +743,7 @@ 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:577
+#: ../sflphone-client-gnome/src/config/audioconf.c:595
 msgid "Name"
 msgstr ""
 
@@ -758,181 +782,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:257
 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:271
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:293
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:307
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:506
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 msgid "ALSA settings"
 msgstr ""
 
-#: ../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:853
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr ""
 
@@ -969,69 +989,62 @@ msgstr ""
 msgid "_Prefix dialed numbers with"
 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 ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1049,55 +1062,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1121,6 +1138,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr ""
diff --git a/lang/pl/pl.po b/lang/pl/pl.po
index 6d2a4515be..35a0d85ed0 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: 2009-12-03 10:22-0500\n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\n"
 "PO-Revision-Date: 2009-11-04 12:08+0000\n"
 "Last-Translator: Mariusz Bednarz <mbednarz@bedmar.pl>\n"
 "Language-Team: Polish <pl@li.org>\n"
@@ -19,57 +19,61 @@ msgstr ""
 "X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Zarejestrowany"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Nie zarejestrowany"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "Próbuję ..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Błąd"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Autoryzacja nie powiodła się"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Sieć niedostępna"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "Wybrany host jest niedostępny"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Niepoprawny"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Używane konto"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Brak zarejestrowanych kont"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -77,18 +81,25 @@ msgstr ""
 "Nie można połączyć się z serwerem SFLphone.\n"
 "Upewnij się, że został uruchomiony daemon SFLphone"
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 msgstr ""
 
 #: ../sflphone-client-gnome/src/errors.c:29
@@ -118,65 +129,65 @@ msgstr ""
 "Informacja Pulseaudio\n"
 "Pulseaudio nie zostało uruchomione"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -245,434 +256,449 @@ msgstr ""
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] ""
-msgstr[1] ""
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "Używane konto"
+msgstr[1] "Używane konto"
+msgstr[2] "Używane konto"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:398
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d głosowa wiadomość"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Brak zarejestrowanych kont"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 msgid "_Host name"
 msgstr ""
 
-#: ../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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 msgid "_User name"
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 msgid "Network Interface"
 msgstr "Sieć niedostępna"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
@@ -680,12 +706,12 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr ""
 
@@ -730,7 +756,7 @@ 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:577
+#: ../sflphone-client-gnome/src/config/audioconf.c:595
 msgid "Name"
 msgstr ""
 
@@ -769,181 +795,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:257
 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:271
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:293
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:307
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:506
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 msgid "ALSA settings"
 msgstr ""
 
-#: ../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:853
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr ""
 
@@ -980,69 +1002,62 @@ msgstr ""
 msgid "_Prefix dialed numbers with"
 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 ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1060,55 +1075,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1132,6 +1151,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr ""
diff --git a/lang/pt/pt.po b/lang/pt/pt.po
index ef406f9445..c76af4cb49 100644
--- a/lang/pt/pt.po
+++ b/lang/pt/pt.po
@@ -7,85 +7,96 @@ 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-26 20:46+0000\n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\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"
 "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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Registado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Não Registado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Erro"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Autenticação Falhou"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "A rede está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "A máquina está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Inválido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 msgstr ""
 
 #: ../sflphone-client-gnome/src/errors.c:29
@@ -109,65 +120,65 @@ msgid ""
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -236,445 +247,461 @@ msgstr ""
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Desligar"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] ""
-msgstr[1] ""
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "Adicionar uma nova conta"
+msgstr[1] "Adicionar uma nova conta"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Correio de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 msgid "No address book selected"
 msgstr "Livro de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Livro de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Correio de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:398
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "_Chamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 "_Desligar"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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 ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "Remover a conta seleccionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "_Contas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "_Ver"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Ajuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Gravar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "Marca_dor"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr "Livro de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Nomear"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 msgid "_Host name"
 msgstr ""
 
-#: ../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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 msgid "_User name"
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "Utilizador"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Configurações da conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Rede"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Contas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "Geral"
 
@@ -719,7 +746,7 @@ 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:577
+#: ../sflphone-client-gnome/src/config/audioconf.c:595
 msgid "Name"
 msgstr "Nome"
 
@@ -758,181 +785,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:257
 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:271
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:293
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:307
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr "Endereço de email opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Parabéns!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Frequência"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Taxa de Dados"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Largura de Banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Saída"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 msgid "ALSA settings"
 msgstr ""
 
-#: ../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:853
 msgid "Recordings"
 msgstr "Gravações"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Pasta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Seleccione uma pasta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "Ficheiros Áudio"
 
@@ -969,69 +992,62 @@ msgstr ""
 msgid "_Prefix dialed numbers with"
 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 ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr "Ícone de Notificação"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr "Histórico de Chamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr "dias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Áudio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Livro de Endereços"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1049,55 +1065,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1121,6 +1141,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr ""
@@ -1144,15 +1172,6 @@ msgstr ""
 msgid "Search by outgoing call"
 msgstr ""
 
-#~ msgid "Codec"
-#~ msgstr "Codec"
-
-#~ msgid "Network"
-#~ msgstr "Rede"
-
-#~ msgid "SIP Port"
-#~ msgstr "Porta SIP"
-
 #~ msgid "Email address"
 #~ msgstr "Endereço de correiro electrónico"
 
@@ -1162,6 +1181,9 @@ msgstr ""
 #~ msgid "Jérémy Quentin"
 #~ msgstr "Jérémy Quentin"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "Incoming call"
 #~ msgstr "Chamada recebida"
 
@@ -1177,9 +1199,6 @@ msgstr ""
 #~ msgid "Remove"
 #~ msgstr "Remover"
 
-#~ msgid "Add a new account"
-#~ msgstr "Adicionar uma nova conta"
-
 #~ msgid "Add"
 #~ msgstr "Adicionar"
 
@@ -1228,6 +1247,9 @@ msgstr ""
 #~ msgid "Work"
 #~ msgstr "Trabalho"
 
+#~ msgid "SIP Port"
+#~ msgstr "Porta SIP"
+
 #~ msgid "Advanced Settings"
 #~ msgstr "Configurações Avançadas"
 
@@ -1240,10 +1262,11 @@ msgstr ""
 #~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad Contributions:,"
 #~ "Maxime Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime "
 #~ "Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago "
-#~ "Silva"
+#~ "Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago Silva"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ ",,maxime.chambreuil@gmail.com,,,maxime.chambreuil@gmail.com,,,,maxime."
-#~ "chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,"
+#~ "chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime."
+#~ "chambreuil@gmail.com,"
diff --git a/lang/pt_BR/pt_BR.po b/lang/pt_BR/pt_BR.po
index 0a5429e6c0..f2ce14eb7c 100644
--- a/lang/pt_BR/pt_BR.po
+++ b/lang/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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2010-01-22 22:19+0000\n"
+"Last-Translator: Ricardo Martins <ricardo.macedo@yahoo.com.br>\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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Não Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "Tentando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Erro"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "A autenticação falhou"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "A rede está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "A máquina está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Erro de configuração no stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Servidor stun inválido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "Inválido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "Utilizando conta"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "Sem contas registradas"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,23 +80,26 @@ 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:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 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/errors.c:29
 msgid ""
@@ -124,43 +131,43 @@ msgstr ""
 "\n"
 "Pulseaudio não está rodando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 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:98
 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:103
 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:331
 msgid "SFLphone Error"
 msgstr "Erro no SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr "Finalizar Chamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr "Negociação ZRTP falhou"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -182,11 +189,11 @@ 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:502
 msgid "Confirm Go Clear"
 msgstr "Confirmar Vá Limpar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "Confirmar"
 
@@ -257,443 +264,465 @@ msgstr "Volume dos auto-falantes"
 msgid "Mic volume"
 msgstr "Volume do microfone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "_Apresentar janela principal"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Desligar"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, 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/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "conta ativa"
+msgstr[1] "conta ativa"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "Correio de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Correio de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "Sobre o SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "_Chamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "_Nova ligação"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "_Atender"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 "_Desligar"
+msgstr "Responder a chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
-msgstr ""
+msgstr "Terminar a chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "Em _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 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:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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"
+msgstr "Encerrar a chamada em espera"
 
-#: ../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:811
 msgid "Configuration _Assistant"
 msgstr "Arquivo de Configuração"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 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:815
 msgid "Call your voicemail"
 msgstr "%d mensagem de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
-msgstr ""
+msgstr "_Fechar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 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:818
 msgid "_Quit"
-msgstr "_Editar"
+msgstr "_Sair"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
-msgstr ""
+msgstr "Sair do programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
-msgstr ""
+msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "Remover a conta selecionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
-msgstr ""
+msgstr "_Colar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 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:827
 msgid "Clear _history"
 msgstr "Limpar _histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "Limpar histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "_Contas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "Conta atual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr ""
+msgstr "Altera as suas preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "_Exibir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Ajuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
-msgstr ""
+msgstr "Abrir o manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr "Autenticação"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "Transfirir para: "
+msgstr "Transfirir para:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Gravar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Gravar a conversação atual"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Exibir barra de ferramentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
-msgstr ""
+msgstr "Mostra a barra de ferramentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "Desabilitado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "_Controle de Volumes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "Exibir controles de volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "Histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 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:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "Em _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "_Ligar de volta"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "Editar número de telefone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Apelido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 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:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "_Nome do usuário"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr "Autenticação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr "Segredo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr "Credencial"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr "Nome de autenticação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "Desabilitado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "Registro"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr "Registro expira"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr "Endereço publicado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
-msgstr "Utilizando STUN "
+msgstr "Utilizando STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr "URL do servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 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:1059
 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:1077
 msgid "Published port"
 msgstr "Porta publicada"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "Configurações da conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Rede"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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:131
+#, 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:421
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "Contas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "Contas Configuradas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "Geral"
 
@@ -738,7 +767,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Nome"
 
@@ -779,184 +808,180 @@ msgstr "SRTP/ZRTP rascunho-zimmermann"
 msgid "None"
 msgstr "Nenhum"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 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:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 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:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "Conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 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:390
 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:390
 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:398
 msgid "_Email address"
 msgstr "_endereço de email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "Ha_bilitar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "Registro de conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Parabéns!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Frequência"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Taxa de bits"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "Largura de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "Saída"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../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:759
+#: ../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:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "Gerenciador de Som"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Gravações"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "Pasta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "Selecione uma pasta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "Ringtones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "_Habilitar ringtones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "Escolha um ringtone"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "Arquivos de Áudio"
 
@@ -993,73 +1018,62 @@ msgstr "Reescrevendo número do telefone"
 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:146
 msgid "Desktop Notifications"
 msgstr "Notificações de Desktop"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "_Habilitar notificações"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 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:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 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:181
 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:191
 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:205
 msgid "Calls History"
 msgstr "Histórico de Chamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 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:224
 msgid "days"
 msgstr "dias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr "Áudio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 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/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr "Opções avançadas para o TLS"
@@ -1083,55 +1097,59 @@ 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:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 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:126
 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:147
 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:151
 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:174
 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:195
 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:218
 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:252
 msgid "TLS cipher list"
 msgstr "Lista de cifras TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 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:269
 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:286
 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:292
 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:298
 msgid "Require certificate for incoming tls connections"
 msgstr "Requer certificado para conexões tls entrantes"
 
@@ -1155,6 +1173,15 @@ msgstr "_Alerta se o ZRTP não é suportado"
 msgid "Display SAS once for hold events"
 msgstr "Apresenta o SAS uma vez para realizar eventos"
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "Opções ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Buscar todos"
@@ -1178,48 +1205,31 @@ msgstr "Buscar por ligações recebidas"
 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 "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 ""
+#~ "<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 "Enable voicemail _notifications"
-#~ msgstr "Habilitar _notificações de correio de voz"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i conta configurada"
+#~ msgstr[1] "%i contas configuradas"
 
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr "Armazenar as credenciais SIP como hash MD5"
+#~ msgid "Direct IP calls"
+#~ msgstr "Ligações IP diretas"
 
 #~ msgid "Stun Server"
 #~ msgstr "Servidor STUN"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "(C) 2009 Savoir-faire Linux"
 #~ msgstr "(C) 2009 Savoir-faire Linux"
 
@@ -1274,6 +1284,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 +1471,9 @@ 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 "_Account creation wizard"
 #~ msgstr "_Assistante de criação de conta"
 
@@ -1482,19 +1498,50 @@ 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 "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"
+
 #~ 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,Maxime Chambreuil,Ricardo Martins,"
+#~ "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/lang/ru/ru.po b/lang/ru/ru.po
index 14b3aa5dd8..fb4c0f42bf 100644
--- a/lang/ru/ru.po
+++ b/lang/ru/ru.po
@@ -7,92 +7,100 @@ 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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2010-02-12 23:19+0000\n"
+"Last-Translator: Lortonix <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-03-01 23:16+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "Зарегистрирован"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "Не зарегистрирован"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
-msgstr "Подключение..."
+msgstr "Пытаюсь..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "Ошибка"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "Аутентификация не удалась"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "Сеть недоступна"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
-msgstr "Узел сети недоступен"
+msgstr "Узел недоступен"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Ошибка конфигурации Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Неверный сервер Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
-msgstr "Ошибка"
+msgstr "Неверный"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
-msgstr "Используется учетная запись"
+msgstr "Использовать аккаунт"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
-msgstr "Нет зарегистрированных учëтных записей"
+msgstr "У вас нет зарегистрированных аккаунтов"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 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:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 msgstr ""
-"<b>Ошибка: звуковые кодеки не найдены.\n"
-"\n"
-"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</"
-"b> каталоге в вашем домашнем каталоге( <i>%s</i> )"
 
 #: ../sflphone-client-gnome/src/errors.c:29
 msgid ""
@@ -100,9 +108,9 @@ msgid ""
 "\n"
 "Error while opening playback device"
 msgstr ""
-"<b>ALSA-nпредупреждение</b>\n"
+"<b>Предупреждение ALSA</b>\n"
 "\n"
-"Ошибка во время активирования устройства проигрывания"
+"Ошибка при попытке открытия устройства воспроизведения звука"
 
 #: ../sflphone-client-gnome/src/errors.c:32
 msgid ""
@@ -110,9 +118,9 @@ msgid ""
 "\n"
 "Error while opening capture device"
 msgstr ""
-"<b>ALSA-nпредупреждение</b>\n"
+"<b>Предупреждение ALSA</b>\n"
 "\n"
-"Ошибка во время активирования устройства входа"
+"Ошибка при попытке открытия устройства захвата звука"
 
 #: ../sflphone-client-gnome/src/errors.c:35
 msgid ""
@@ -122,71 +130,72 @@ msgid ""
 msgstr ""
 "<b>Предупреждение Pulseaudio</b>\n"
 "\n"
-"Pulseaudio не работает"
+"Pulseaudio не запущен"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
-msgstr "Один текущий разговор."
+msgstr "Звонок ещё не окончен."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
-msgstr "Несколько текущих разговоров."
+msgstr "Несколько звонков ещё не окончены."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr "Вы уверенны что хотите выйти?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr "Ошибка SFLphone."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
-msgstr "Закончить звонок"
+msgstr "Завершить вызов"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr "Неудачный обмен информации ZRTP"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr "Подтвердить переход на незашифрованную связь"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "Подтвердить"
 
@@ -212,19 +221,19 @@ msgstr[2] "%d голосовые письма"
 #: ../sflphone-client-gnome/src/sflnotify.c:111
 #, 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
 msgid "Current account"
-msgstr "Нынешняя учëтная запись"
+msgstr "Текущий аккаунт"
 
 #: ../sflphone-client-gnome/src/sflnotify.c:130
 msgid "You have no accounts set up"
-msgstr "Вы не настроили ни одной учëтной записи"
+msgstr "У вас нет настроенных аккаунтов"
 
 #: ../sflphone-client-gnome/src/sflnotify.c:147
 msgid "You have no registered accounts"
-msgstr "У вас нет зарегистрированных учëтных записей"
+msgstr "У вас нет зарегистрированных аккаунтов"
 
 #: ../sflphone-client-gnome/src/sflnotify.c:190
 #, c-format
@@ -232,7 +241,7 @@ 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
@@ -256,447 +265,469 @@ msgstr "Громкость"
 
 #: ../sflphone-client-gnome/src/sliders.c:164
 msgid "Mic volume"
-msgstr "Громкость микрофона"
+msgstr "Чувствительность микрофона"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "_Показать главное окно"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Положить трубку"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "Настроена одна учëтная запись"
-msgstr[1] "Настроены %i учëтные записи"
-msgstr[2] "Настроены %i учëтные записи"
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%d активный аккаунт"
+msgstr[1] "%d активных аккаунтов"
+msgstr[2] "действующий аккаунт"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
-msgstr "Автоответчик"
+msgstr "Голосовая почта"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
-msgstr "Автоответчик (%i)"
+msgstr "Голосовая почта (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
-msgstr "О SFLphone"
+msgstr "О программе SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
-msgstr "_Звонок"
+msgstr "_Вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
-msgstr "_Новый звонок"
+msgstr "_Новый вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "_Взять трубку"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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:806
 msgid "Finish the call"
-msgstr "Закончить звонок"
+msgstr "Завершить вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
-msgstr "_Удержать звонок"
+msgstr "_Удерживать вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
-msgstr "Удержать звонок"
+msgstr "Поставить вызов на удержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
-msgstr "_Возобновить разговор"
+msgstr "_Снять вызов с удержания"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
-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 "Записать переговор"
+msgstr "Поставить вызов на удержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:811
 msgid "Configuration _Assistant"
 msgstr "Мастер настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Запустить мастер настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
-msgstr "%d голосовое письмо"
+msgstr "Прослушивание голосовой почты"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr "_Закрыть"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
-msgstr "Уменьшить в значок"
+msgstr "Свернуть в трей"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
-msgstr "_Правка"
+msgstr "В_ыход"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr "Выйти из программы"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "_Правка"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr "_Копировать"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
-msgstr "Копировать видимое"
+msgstr "Копировать выделенное"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
-msgstr "_Вставить"
+msgstr "В_ставить"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr "Вставить из буфера обмена"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
-msgstr "_Стереть журнал"
+msgstr "Очистить журнал"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
-msgstr "Очистить историю"
+msgstr "Очистить журнал вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
-msgstr "_Учëтные записи"
+msgstr "_Аккаунты"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
-msgstr "Изменить ваши учëтные записи"
+msgstr "Нстройка аккаунта"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
-msgstr "_Предпочтения"
+msgstr "_Настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr "Изменить ваши предпочтении"
+msgstr "Изменить ваши настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "_Вид"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "_Помощь"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
-msgstr "Продолжить"
+msgstr "Содержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
-msgstr "Открыть справочник "
+msgstr "Открыть руководство пользователя"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
-msgstr "Идентификация"
+msgstr "О программе"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
-msgstr "Переслать звонок на другой номер"
+msgstr "Переадресация вызова"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "Переслать звонок на другой номер"
+msgstr "Переадресовать вызов"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Запись"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Записать текущий разговор"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
-msgstr "Показать панель инструментов"
+msgstr "Показать _панель инструментов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
-msgstr "Показать панель инструментов"
+msgstr "Показывать панель инструментов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
-msgstr "Панель набора номера"
+msgstr "_Номеронабиратель"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
-msgstr "Показать панель набора номера"
+msgstr "Показывать _номеронабиратель"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
-msgstr "_Настройки громкости"
+msgstr "Настройки _громкости"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
-msgstr "_Настройки громкости"
+msgstr "Показывать настройки _громкости"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
-msgstr "Журнал"
+msgstr "Журнал вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
-msgstr "Журнал звонков"
+msgstr "История вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
-msgstr "_Удержать звонок"
+msgstr "_Удерживать звонок"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
-msgstr "_Перезвонить"
+msgstr "Обратный вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
-msgstr "Мобильный телефон"
+msgstr "Изменить номер телефона"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "_Псевдоним"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "Пр_отокол"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
-msgstr "Номер _автоответчика #"
+msgstr "Номер _голосовой почты"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "Имя пользователя"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
-msgstr "Идентификация"
+msgstr "Аутентификация"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
-msgstr "Секретный"
+msgstr "Пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr "Параметры доступа"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr "Имя для аутентификации"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "Отключен"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "Регистрация"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
-msgstr "Срок истечения регистрации"
+msgstr "Истек срок регистрации"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
-msgstr "Сетевые настройки для Интернета"
+msgstr "Публичный адрес"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
-msgstr "Использует STUN "
+msgstr "Использовать STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr "URL STUN-сервера"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr "Использовать локальный адрес и порт"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
-msgstr "Настроить видимый адрес и порт :"
+msgstr "Настроить публичный адрес и порт:"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr "Публичный порт"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
-msgstr "Настройки учëтной записи"
+msgstr "Настройки аккаунта"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr "Основные"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Кодеки"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
-msgstr "Дополнительные"
+msgstr "Дополнительно"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "Сеть"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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:164
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#, 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:421
 msgid "Protocol"
 msgstr "Протокол"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "Статус"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
-msgstr "Учётные записи"
+msgstr "Аккаунты"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
-msgstr "Настроенные учëтные записи"
+msgstr "Настройка аккаунтов"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "Общие настройки"
 
@@ -706,7 +737,7 @@ msgstr "_Использовать адресную книгу Evolution"
 
 #: ../sflphone-client-gnome/src/config/addressbook-config.c:319
 msgid "Download limit :"
-msgstr "Показывать не более "
+msgstr "Ограничение скорости скачивания:"
 
 #: ../sflphone-client-gnome/src/config/addressbook-config.c:327
 msgid "cards"
@@ -718,7 +749,7 @@ msgstr "_Показать фотографию контакта (если име
 
 #: ../sflphone-client-gnome/src/config/addressbook-config.c:341
 msgid "Fields from Evolution's address books"
-msgstr "Исполоьзовать следующие номера из адресной книги Evolution"
+msgstr "Использовать следующие поля из адресной книги Evolution:"
 
 #: ../sflphone-client-gnome/src/config/addressbook-config.c:345
 msgid "_Work"
@@ -741,7 +772,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "Имя"
 
@@ -756,7 +787,7 @@ msgid ""
 "parameters in the Options/Accounts window."
 msgstr ""
 "Вы можете в любое время проверить статус регистрации или изменить параметры  "
-"ваших учëтных записей в меню Правка / Учëтные записи"
+"ваших аккаунтов в меню Правка / Аккаунты."
 
 #: ../sflphone-client-gnome/src/config/assistant.c:80
 msgid "Alias"
@@ -768,11 +799,11 @@ msgstr "Сервер"
 
 #: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid "Username"
-msgstr "Пользователь"
+msgstr "Имя пользователя"
 
 #: ../sflphone-client-gnome/src/config/assistant.c:92
 msgid "Security: "
-msgstr "Безопасность:"
+msgstr "Безопасность "
 
 #: ../sflphone-client-gnome/src/config/assistant.c:94
 msgid "SRTP/ZRTP draft-zimmermann"
@@ -782,183 +813,182 @@ msgstr "SRTP/ZRTP draft-zimmermann"
 msgid "None"
 msgstr "Нет"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
-msgstr "Мастер настройки SFLphone"
+msgstr "Мастер создания аккаунта SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "VoIP-протоколы"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
-msgstr "Выберите тип учëтной записи"
+msgstr "Выберите тип аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 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:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
-msgstr "Учëтная запись"
+msgstr "Аккаунт"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 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:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr "Защищëнная связь с _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
-msgstr "Электронный адрес (необязательный)"
+msgstr "e-mail"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "_Адрес эл. почты"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
-msgstr "Настройка учëтной записи IAX2"
+msgstr "Настройка IAX2-аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:497
 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:506
 msgid "E_nable STUN"
 msgstr "Включить STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "_STUN-сервер"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
-msgstr "Регистрация учëтной записи"
+msgstr "Регистрация аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "Поздравляем!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "Частота"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "Битрейт"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
-msgstr "Пропускная способность"
+msgstr "Полоса пропускания"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "ALSA-плагин"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
-msgstr "Выход"
+msgstr "Аудиовыход"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
-msgstr "Вход"
+msgstr "Аудиовход"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
-msgstr "Включить детектор тишины"
+msgstr "Детектор тишины (VAD)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr "Шумоподавление"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "Менеджер звука"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "Записи"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
-msgstr "Папка назначения"
+msgstr "Сохранять в"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
-msgstr "Выберите папку"
+msgstr "Выберите каталог"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
-msgstr "Звонки"
+msgstr "Рингтоны"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
-msgstr "Включить звонок"
+msgstr "Включить рингтон"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
-msgstr "Выберите звонок"
+msgstr "Выберать рингтон"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
-msgstr "Звуковые файлы"
+msgstr "Аудио файлы"
 
 #: ../sflphone-client-gnome/src/config/hooks-config.c:130
 msgid "URL Argument"
@@ -966,7 +996,7 @@ msgstr "Передача URL"
 
 #: ../sflphone-client-gnome/src/config/hooks-config.c:135
 msgid "Custom commands on incoming calls with URL"
-msgstr "Пользовательские команды при входящих вызовах с URL"
+msgstr "Пользовательская команда при входящих вызовах с URL"
 
 #: ../sflphone-client-gnome/src/config/hooks-config.c:138
 #, c-format
@@ -987,82 +1017,71 @@ msgstr "_Выполнить команду:"
 
 #: ../sflphone-client-gnome/src/config/hooks-config.c:165
 msgid "Phone number rewriting"
-msgstr "Переписка номера телефона"
+msgstr "Префикс"
 
 #: ../sflphone-client-gnome/src/config/hooks-config.c:169
 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:146
 msgid "Desktop Notifications"
-msgstr "Извещения на рабочем столе"
+msgstr "Всплывающие уведомления"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
-msgstr "Включить звонок"
+msgstr "Показывать всплывающие уведомления"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
-msgstr "Поведение окна SFLPhone"
+msgstr "Значок в системном трее"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
-msgstr "_Показать главное окно при входящем звонке"
+msgstr "_Показать главное окно при входящем вызове"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
-msgstr "Никогда не показывать главное окно"
+msgstr "_Никогда не показывать главное окно"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 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:205
 msgid "Calls History"
-msgstr "Журнал звонков"
+msgstr "Журнал вызовов"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
-msgstr "Со_хранить мой журнал звонков как минимум в течении"
+msgstr "_Хранить журнал вызовов в течении"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr "дней"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
-msgstr "Предпочтения"
+msgstr "Настройка"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
-msgstr "Звук"
+msgstr "Аудио"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
-msgstr "Зацепки"
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Прямые IP-звонки"
+msgstr "Прочее"
 
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
-msgstr "Дополнительные опции для TLS"
+msgstr "Дополнительные настройки для TLS"
 
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
 msgid "TLS transport"
@@ -1081,55 +1100,59 @@ msgstr ""
 "каждого аккаунта (но каждый из них будет использовать свой выделенный "
 "порт).\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
-msgstr "Список центра сертификации"
+msgstr "Список центров сертификации"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
-msgstr "Выберите файл Центра сертификации (необязательный)"
+msgstr "Выберите файл Центра сертификации (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr "Файл с публичным сертификатом"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
-msgstr "Выберите публичный сертификат (необязательный)"
+msgstr "Выберите публичный сертификат (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
-msgstr "Выберите файл с секретным ключом (необязательно)"
+msgstr "Выберите файл с приватным ключом (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
-msgstr "Пароль для секретного ключа"
+msgstr "Пароль для приватного ключа"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr "Метод протокола TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr "Список шифров TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 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:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Время ожидания соединения (сек:мсек)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
-msgstr "Проверять входящие сертификаты (в качестве сервера)"
+msgstr "Проверять входящие сертификаты как сервер"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 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:298
 msgid "Require certificate for incoming tls connections"
 msgstr "Требовать сертификат для входящих TLS-подключений"
 
@@ -1153,6 +1176,15 @@ msgstr "_Предупредить если ZRTP не пддерживается"
 msgid "Display SAS once for hold events"
 msgstr "Показать SAS один раз"
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "Опции ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "Искать все"
@@ -1162,58 +1194,39 @@ msgstr "Искать все"
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:84
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:96
 msgid "Click here to change the search type"
-msgstr "Нажмите, чтобы изменить тип поиска"
+msgstr "Нажмите сюда, чтобы изменить тип поиска"
 
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:71
 msgid "Search by missed call"
-msgstr "Поиск по пропущенным вызовам"
+msgstr "Поиск в пропущенных вызовах"
 
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:83
 msgid "Search by incoming call"
-msgstr "Поиск по входящим вызовам"
+msgstr "Поиск в входящих вызовах"
 
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:95
 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 "_Mute other applications during a call"
-#~ msgstr "Приглушать звук других програм во время звонка"
-
-#~ msgid "SIP Port"
-#~ msgstr "SIP-порт"
-
-#~ msgid "UDP Transport"
-#~ msgstr "Транспорт UDP"
+#~ 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 "Enable voicemail _notifications"
-#~ msgstr "Включить предупреждения о речевых сообщениях"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i аккаунт настроен"
+#~ msgstr[1] "%i аккаунтов настроено"
+#~ msgstr[2] "%i аккаунтов настроены"
 
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr "Записать параметры доступа SIP с шифровкой MD5."
+#~ msgid "Direct IP calls"
+#~ msgstr "Прямые IP-вызовы"
 
 #~ msgid "Account creation wizard"
 #~ msgstr "Мастер настройки SFLphone"
@@ -1221,6 +1234,9 @@ msgstr "Поиск по исходящим вызовам"
 #~ msgid "Voicemail number"
 #~ msgstr "Номер автоответчика #"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "Display volume controls"
 #~ msgstr "_Настройки громкости"
 
@@ -1266,21 +1282,33 @@ 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 "_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 "Порт"
 
@@ -1456,6 +1484,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 +1513,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/lang/sflphone.pot b/lang/sflphone.pot
index 8fd477d585..62ec100dd6 100644
--- a/lang/sflphone.pot
+++ b/lang/sflphone.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\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"
@@ -17,74 +17,85 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 msgstr ""
 
 #: ../sflphone-client-gnome/src/errors.c:29
@@ -108,65 +119,65 @@ msgid ""
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -235,446 +246,460 @@ msgstr ""
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:189
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
+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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:398
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 msgid "_Host name"
 msgstr ""
 
-#: ../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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 msgid "_User name"
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr ""
 
@@ -719,7 +744,7 @@ 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:577
+#: ../sflphone-client-gnome/src/config/audioconf.c:595
 msgid "Name"
 msgstr ""
 
@@ -758,181 +783,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:257
 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:271
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:293
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:307
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:506
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 msgid "ALSA settings"
 msgstr ""
 
-#: ../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:853
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr ""
 
@@ -969,69 +990,62 @@ msgstr ""
 msgid "_Prefix dialed numbers with"
 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 ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1049,55 +1063,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1121,6 +1139,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr ""
diff --git a/lang/zh_CN/zh_CN.po b/lang/zh_CN/zh_CN.po
index bfc3429d51..6ebdc78a32 100644
--- a/lang/zh_CN/zh_CN.po
+++ b/lang/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-03-02 10:23-0500\n"
+"PO-Revision-Date: 2010-02-28 01:32+0000\n"
+"Last-Translator: wzssyqa <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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "已注册"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "未注册"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "正在连接..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "注册失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr "认证失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "网络连接失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "服务器连接失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Stun配置有误"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Stun服务器无效"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "无效"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "使用账户"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "没有已注册帐户"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -77,23 +81,26 @@ msgstr ""
 "连接SFLphone服务器失败.\n"
 "请检查daemon是否还在运行."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+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
 msgid ""
@@ -125,65 +132,65 @@ msgstr ""
 "\n"
 "Pulseaudio未运行"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr "有一个电话正在处理"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr "有电话正在处理中"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr "确认要退出?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr "SFLphone出错"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr "停止呼叫"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr "确认"
 
@@ -251,443 +258,460 @@ msgstr "扬声器音量"
 msgid "Mic volume"
 msgstr "话筒音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "显示主窗口(S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "挂断(_H)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "已配置了%i个账户"
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "默认帐户"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "语音信箱"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "语音信箱 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "关于SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "电话(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "新电话(_N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "接听(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "保持(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr "恢复通话"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Stun配置有误"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d 个语音信息"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
-msgstr "编辑(_E)"
+msgstr "退出(_Q)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "编辑(_E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "删除所选账户"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "清空历史记录(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "清空历史记录"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "账户(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "当前帐户"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
-msgstr "首选项"
+msgstr "首选项(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
-msgstr ""
+msgstr "更改您的首选项"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "查看(_V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "帮助(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr "继续"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr "身份验证"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "转接"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "转给: "
+msgstr "转给:"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "录音(_R)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "禁用"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "历史"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "呼叫记录"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "保持(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "回叫(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "编辑电话号码"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "别名(A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "协议(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr "语音信箱号码(V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "用户名(U)"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr "身份验证"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr "禁用"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr "注册"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "帐户设置"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Codecs编码"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr "网络"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr "协议"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "状态"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "帐户"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "已配置帐户"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "常用配置"
 
@@ -732,7 +756,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "名称"
 
@@ -771,181 +795,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone账户创建向导"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "VoIP协议"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr "选择帐户类型"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(会话初始化协议)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(Asterisk内部交换协议)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr "请选择以下选项中的一个"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr "可选邮件地址"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "邮件地址(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr "IAX2帐户设置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 msgid "Network Address Translation (NAT)"
 msgstr "网络地址解析(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:506
 msgid "E_nable STUN"
 msgstr "使用STUN(n)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "STUN服务器(S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "帐户注册"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "恭喜!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "频率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "比率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "带宽"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "ALSA插件"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "输出"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "输入"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr "声音状态检测(V)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr "降噪处理-窄频压缩(N)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "音频管理器"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "记录"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "目标文件夹"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "选择文件夹"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "铃声"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "启用铃声(E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "选择铃声"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "音频文件"
 
@@ -982,69 +1002,62 @@ msgstr "重设电话号码"
 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:146
 msgid "Desktop Notifications"
 msgstr "桌面提示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "启用提示(E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr "系统托盘图标"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr "来电时弹出主窗口(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr "从不弹出主窗口(v)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr "在启动时隐藏SFLphone主窗口"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr "拨号历史"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "首选项"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr "钩键"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1062,55 +1075,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1134,6 +1151,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "查询所有"
@@ -1157,23 +1182,20 @@ msgstr "从来电中查询"
 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 ""
+#~ "<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 "Enable voicemail _notifications"
-#~ msgstr "启用语音邮箱提示(n)"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "已配置了%i个账户"
 
 #~ msgid "Account creation wizard"
 #~ msgstr "帐户创建向导"
@@ -1192,8 +1214,8 @@ msgstr "从拨出电话中查询"
 #~ "account."
 #~ msgstr "当您检查完选定的设置, 请点击\"结束\"来创建帐户"
 
-#~ msgid "Default account"
-#~ msgstr "默认帐户"
+#~ msgid "Codec"
+#~ msgstr "编码"
 
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone KDE客户端"
@@ -1381,6 +1403,9 @@ msgstr "从拨出电话中查询"
 #~ msgid "On start"
 #~ msgstr "正在启动"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP端口号"
+
 #~ msgid "Trigger on specific SIP header"
 #~ msgstr "激活指定的SIP头"
 
@@ -1396,12 +1421,21 @@ msgstr "从拨出电话中查询"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "注意:结果超过可显示的最大值"
 
+#~ msgid "IP call - %s"
+#~ msgstr "IP 电话 - %s"
+
 #~ 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 "端口"
 
@@ -1702,7 +1736,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,wzssyqa,冯超,王英华"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1710,4 +1745,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/lang/zh_HK/zh_HK.po b/lang/zh_HK/zh_HK.po
index 0e4afca0c5..4acf258abd 100644
--- a/lang/zh_HK/zh_HK.po
+++ b/lang/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-03-02 10:23-0500\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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr "已註冊"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr "未註冊"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr "正在連接..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr "註冊失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr "網路連線失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr "伺服器連線失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr "Stun配置有誤"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr "Stun伺服器無效"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr "無效"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr "使用賬戶"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr "沒有已註冊帳戶"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -77,23 +81,26 @@ msgstr ""
 "連接SFLphone伺服器失敗.\n"
 "請核查daemon是否正在運行."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+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
 msgid ""
@@ -125,65 +132,65 @@ msgstr ""
 "\n"
 "Pulseaudio未運行"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr "有一個電話正在處理中."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr "有電話正在處理中."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr "確認要退出?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr "SFLphone 出錯"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -251,443 +258,460 @@ msgstr "揚聲器音量"
 msgid "Mic volume"
 msgstr "話筒音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr "顯示主窗口(S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "放下(H)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
-#, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "已配置了%i個賬戶"
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "默認帳戶"
 
 #: ../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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr "語音郵件"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "語音郵件 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 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:398
 msgid "About SFLphone"
 msgstr "有關SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr "電話"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr "新電話(N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr "撥出(P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr "待机"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr "恢复通話"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr "Stun配置有誤"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr "%d 個語音郵件"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr "編輯(E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr "編輯(E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr "刪除所選賬戶"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr "清空曆史記錄(C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr "清空曆史記錄"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr "帳戶(A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr "當前帳戶"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr "屬性"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr "查看(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr "幫助(H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr "轉接"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
-msgstr "轉給: "
+msgstr "轉給:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "記錄(R)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr "顯示撥號鍵盤"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr "歷史"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr "呼叫記錄"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr "待机"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr "回叫(C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr "編輯電話號碼"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr "別稱(A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr "協議(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr "語音郵箱(V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "使用者名稱(U)"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr "帳戶設置"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "編碼"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr "協議"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr "狀態"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr "帳戶"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr "已配置帳戶"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr "常用配置"
 
@@ -732,7 +756,7 @@ 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/audioconf.c:595
 msgid "Name"
 msgstr "名稱"
 
@@ -771,181 +795,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone賬戶創建嚮導"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 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:257
 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:271
 msgid "VoIP Protocols"
 msgstr "VoIP協議"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr "選擇帳戶類型"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(會話初始化協議)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(Asterisk內部交換協議)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr "帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr "請選擇以下選項中的一個"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 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:293
 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:307
 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:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr "可選郵件地址"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr "郵件地址(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr "IAX2帳戶配置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 msgid "Network Address Translation (NAT)"
 msgstr "网络地址解析(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:506
 msgid "E_nable STUN"
 msgstr "啟用STUN(n)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr "STUN伺服器(S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr "帳戶註冊"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr "恭喜!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr "顰律"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr "比率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr "顰寬"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr "ALSA插件"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr "輸出"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr "輸入"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr "聲音狀態檢測(V)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr "降噪處理-窄頻壓縮(N)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr "聲音管理器"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 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:853
 msgid "Recordings"
 msgstr "記錄"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr "目標文件夾"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr "選擇文件夾"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr "鈴聲"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr "啟動鈴聲(E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr "鈴聲選擇"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr "音訊檔案"
 
@@ -982,69 +1002,62 @@ msgstr "重設電話號碼"
 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:146
 msgid "Desktop Notifications"
 msgstr "桌面提示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr "啟動提示(E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr "系統托盤圖標"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr "來電話時彈出主視窗(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr "從不彈出主視窗(v)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr "在啟動時隱藏SFLphone主窗口"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr "打電話歷史"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr "屬性"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr "鉤鍵"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1062,55 +1075,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1134,6 +1151,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr "查詢所有"
@@ -1157,20 +1182,20 @@ msgstr "從來電中查詢"
 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 ""
+#~ "<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 "Enable voicemail _notifications"
-#~ msgstr "啟用語音郵箱提示(n)"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "已配置了%i個賬戶"
 
 #~ msgid "Account creation wizard"
 #~ msgstr "帳戶創建向導"
@@ -1189,8 +1214,8 @@ msgstr "從撥出電話中查詢"
 #~ "account."
 #~ msgstr "當您檢查完選定的設置,請點擊\"結束\"來創建帳戶"
 
-#~ msgid "Default account"
-#~ msgstr "默認帳戶"
+#~ msgid "Codec"
+#~ msgstr "編碼"
 
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone KDE客戶端"
@@ -1375,6 +1400,9 @@ msgstr "從撥出電話中查詢"
 #~ msgid "On start"
 #~ msgstr "正在啟動"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP端口"
+
 #~ msgid "Trigger on specific SIP header"
 #~ msgstr "激活指定的SIP頭"
 
@@ -1390,15 +1418,24 @@ msgstr "從撥出電話中查詢"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "注意:結果超過可顯示的最大值"
 
+#~ msgid "IP call - %s"
+#~ msgstr "IP電話- %s"
+
 #~ msgid "_Account creation wizard"
 #~ msgstr "帳戶創建向導(A)"
 
 #~ 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 "端口"
 
@@ -1697,10 +1734,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,"
diff --git a/lang/zh_TW/zh_TW.po b/lang/zh_TW/zh_TW.po
index f7992fe2b8..0e64a8ba79 100644
--- a/lang/zh_TW/zh_TW.po
+++ b/lang/zh_TW/zh_TW.po
@@ -7,85 +7,96 @@ 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"
+"POT-Creation-Date: 2010-03-02 10:23-0500\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"
 "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-03-01 23:16+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:170
 msgid "Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:173
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:176
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/accountlist.c:179
 #: ../sflphone-client-gnome/src/sflnotify.c:131
 #: ../sflphone-client-gnome/src/sflnotify.c:148
 msgid "Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:182
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:185
 msgid "Network unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:188
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:191
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:194
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
 msgid "Invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:114
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:121
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:306
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
 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:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
 msgstr ""
 
 #: ../sflphone-client-gnome/src/errors.c:29
@@ -109,65 +120,65 @@ msgid ""
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:94
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:98
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:103
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:331
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:450
 #, 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:452
 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:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
 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:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:480
 #, 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:482
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:500
 #, 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:502
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:504
 msgid "Confirm"
 msgstr ""
 
@@ -236,445 +247,459 @@ msgstr ""
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:128
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:189
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
+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/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:121
 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:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:327
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:396
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:398
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:800
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:802
 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:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:804
 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 ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:806
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:807
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:808
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:809
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:810
 msgid "Place the call off hold"
 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:811
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:812
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:815
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:816
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:818
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:822
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:838
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:850
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:854
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:859
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:860
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:861
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1234
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1390
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1402
 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:241
 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:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
 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:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
 msgid "_Host name"
 msgstr ""
 
-#: ../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:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
 msgid "_User name"
 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:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
 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:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
 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:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
 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:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
 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:801
 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:807
 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:813
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
 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:920
 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:933
 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:1000
 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:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
 #, 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:544
 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/preferencesdialog.c:291
 msgid "General"
 msgstr ""
 
@@ -719,7 +744,7 @@ 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:577
+#: ../sflphone-client-gnome/src/config/audioconf.c:595
 msgid "Name"
 msgstr ""
 
@@ -758,181 +783,177 @@ msgstr ""
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:230
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:256
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:257
 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:271
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:271
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:273
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:275
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:289
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:291
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:293
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:307
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 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:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:390
 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:398
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:420
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:497
 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:506
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:513
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:527
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
 msgid "_Voice Activity Detection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
 msgid "_Noise Reduction (Narrow-Band Companding)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
 msgid "ALSA settings"
 msgstr ""
 
-#: ../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:853
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
 msgid "Audio Files"
 msgstr ""
 
@@ -969,69 +990,62 @@ msgstr ""
 msgid "_Prefix dialed numbers with"
 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 ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr ""
-
 #: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
 msgid "Advanced options for TLS"
 msgstr ""
@@ -1049,55 +1063,59 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
@@ -1121,6 +1139,14 @@ msgstr ""
 msgid "Display SAS once for hold events"
 msgstr ""
 
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
 #: ../sflphone-client-gnome/src/contacts/searchbar.c:58
 msgid "Search all"
 msgstr ""
@@ -1149,10 +1175,11 @@ msgstr ""
 #~ msgstr ""
 #~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou, ,"
 #~ "Launchpad Contributions:,Emmanuel Milou, ,Launchpad Contributions:,"
-#~ "Emmanuel Milou"
+#~ "Emmanuel Milou, ,Launchpad Contributions:,Emmanuel Milou"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ ",,,,emmanuel.milou@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux."
-#~ "com,,,emmanuel.milou@savoirfairelinux.com"
+#~ "com,,,emmanuel.milou@savoirfairelinux.com,,,emmanuel."
+#~ "milou@savoirfairelinux.com"
-- 
GitLab


From 2ece32abdc5d974b65ffe10d0bd585acd787952c Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Tue, 2 Mar 2010 10:29:07 -0500
Subject: [PATCH 095/160] [#2579] Adding japanese, greek and asturian
 translation

The turkish po has also been added, but almost empty
---
 lang/ast/ast.po | 1223 +++++++++++++++++++++++++++++++++++++++++++++++
 lang/el/el.po   | 1209 ++++++++++++++++++++++++++++++++++++++++++++++
 lang/ja/ja.po   | 1222 ++++++++++++++++++++++++++++++++++++++++++++++
 lang/tr/tr.po   | 1172 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 4826 insertions(+)
 create mode 100644 lang/ast/ast.po
 create mode 100644 lang/el/el.po
 create mode 100644 lang/ja/ja.po
 create mode 100644 lang/tr/tr.po

diff --git a/lang/ast/ast.po b/lang/ast/ast.po
new file mode 100644
index 0000000000..e4e2ccba97
--- /dev/null
+++ b/lang/ast/ast.po
@@ -0,0 +1,1223 @@
+# Asturian translation for sflphone
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the sflphone package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sflphone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\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"
+"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-03-01 23:16+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../sflphone-client-gnome/src/accountlist.c:170
+msgid "Registered"
+msgstr "Rexistráu"
+
+#: ../sflphone-client-gnome/src/accountlist.c:173
+msgid "Not Registered"
+msgstr "Non rexistráu"
+
+#: ../sflphone-client-gnome/src/accountlist.c:176
+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
+msgid "Error"
+msgstr "Fallu"
+
+#: ../sflphone-client-gnome/src/accountlist.c:182
+msgid "Authentication Failed"
+msgstr "Falló n'autenticación"
+
+#: ../sflphone-client-gnome/src/accountlist.c:185
+msgid "Network unreachable"
+msgstr "Rede nun alcanzable"
+
+#: ../sflphone-client-gnome/src/accountlist.c:188
+msgid "Host unreachable"
+msgstr "Host nun alcanzable"
+
+#: ../sflphone-client-gnome/src/accountlist.c:191
+msgid "Stun configuration error"
+msgstr "Error na configuración STUN"
+
+#: ../sflphone-client-gnome/src/accountlist.c:194
+msgid "Stun server invalid"
+msgstr "Sirvidor STUN inválidu"
+
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
+msgid "Invalid"
+msgstr "Inválidu"
+
+#: ../sflphone-client-gnome/src/actions.c:114
+msgid "Using account"
+msgstr "Usando la cuenta"
+
+#: ../sflphone-client-gnome/src/actions.c:121
+msgid "No registered accounts"
+msgstr "Nun hai cuentes rexistráes"
+
+#: ../sflphone-client-gnome/src/actions.c:306
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+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:931
+msgid "Direct SIP call"
+msgstr "Llamada SIP direuta"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"<b>Avisu ALSA</b>\n"
+"\n"
+"Error al abrir el preséu de reproducción"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"<b>Avisu ALSA</b>\n"
+"\n"
+"Error al abrir el preséu de captura"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"<b>Avisu de Pulseaudio</b>\n"
+"\n"
+"Pulseaudio nun ta funcionando"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:94
+msgid "There is one call in progress."
+msgstr "Hai una llamada en cursu."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:98
+msgid "There are calls in progress."
+msgstr "Hai llamaes en cursu."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:103
+msgid "Do you still want to quit?"
+msgstr "¿Entá quier salir?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:331
+msgid "SFLphone Error"
+msgstr "Error SFLphone"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:450
+#, 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:452
+msgid "Secure Communication Unavailable"
+msgstr "La comunicación segura nun ta disponible"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
+msgid "Continue"
+msgstr "Siguir"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
+msgid "Stop Call"
+msgstr "Terminar llamada"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:480
+#, 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 fizo que la llamada con %s pasara a mou ensin encriptar.\n"
+"Razón esauta: %s\n"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:482
+msgid "ZRTP negotiation failed"
+msgstr "Falló la negociación ZRTP"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:500
+#, c-format
+msgid ""
+"%s wants to stop using secure communication. Confirm will resume "
+"conversation without SRTP.\n"
+msgstr ""
+"%s quier dexar d'usar comunicación segura. Confirmar reaniciará la "
+"conversación ensin SRTP.\n"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:502
+msgid "Confirm Go Clear"
+msgstr "Confirmar mou en claro"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:504
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s cuenta : %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>De</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, 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
+#, 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
+msgid "Current account"
+msgstr "Cuenta actual"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "Nun hai cuentes configuraes"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "Nun tien denguna cuenta rexistrada"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:190
+#, c-format
+msgid ""
+"<i>With:</i> %s \n"
+"using %s"
+msgstr ""
+"<i>Con:</i> %s\n"
+"usando %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:205
+#, c-format
+msgid "%s does not support ZRTP."
+msgstr "%s nun tien sofitu pa ZRTP."
+
+#: ../sflphone-client-gnome/src/sflnotify.c:220
+#, c-format
+msgid "ZRTP negotiation failed with %s"
+msgstr "Falló la negociación ZRTP con %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:235
+#, c-format
+msgid "<i>With:</i> %s"
+msgstr "<i>Con:</i> %s"
+
+#: ../sflphone-client-gnome/src/sliders.c:162
+msgid "Speakers volume"
+msgstr "Volume d'altavoces"
+
+#: ../sflphone-client-gnome/src/sliders.c:164
+msgid "Mic volume"
+msgstr "Volume del micrófonu"
+
+#: ../sflphone-client-gnome/src/statusicon.c:128
+msgid "_Show main window"
+msgstr "Amo_sar ventana principal"
+
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "_Colgar"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "Hai %d cuenta activa"
+msgstr[1] "Hai %d cuentes actives"
+
+#: ../sflphone-client-gnome/src/toolbar.c:38
+#: ../sflphone-client-gnome/src/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
+msgid "Voicemail"
+msgstr "Buzón de voz"
+
+#: ../sflphone-client-gnome/src/uimanager.c:121
+msgid "No address book selected"
+msgstr "Nun s'escoyó una llibreta de direiciones"
+
+#: ../sflphone-client-gnome/src/uimanager.c:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
+msgid "Address book"
+msgstr "Llibreta de direiciones"
+
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
+msgid "Voicemail (%i)"
+msgstr "Buzón de voz (%i)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:396
+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:398
+msgid "About SFLphone"
+msgstr "Tocante a SFLphone"
+
+#: ../sflphone-client-gnome/src/uimanager.c:800
+msgid "Call"
+msgstr "Llamada"
+
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
+msgid "_New call"
+msgstr "Llamada _Nueva"
+
+#: ../sflphone-client-gnome/src/uimanager.c:802
+msgid "Place a new call"
+msgstr "Facer una llamada nueva"
+
+#: ../sflphone-client-gnome/src/uimanager.c:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
+msgid "_Pick up"
+msgstr "_Descolgar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:804
+msgid "Answer the call"
+msgstr "Contestar la llamada"
+
+#: ../sflphone-client-gnome/src/uimanager.c:806
+msgid "Finish the call"
+msgstr "Finar la llamada"
+
+#: ../sflphone-client-gnome/src/uimanager.c:807
+msgid "O_n hold"
+msgstr "_N'espera"
+
+#: ../sflphone-client-gnome/src/uimanager.c:808
+msgid "Place the call on hold"
+msgstr "Poner la llamada n'espera"
+
+#: ../sflphone-client-gnome/src/uimanager.c:809
+msgid "O_ff hold"
+msgstr "_Salir d'espera"
+
+#: ../sflphone-client-gnome/src/uimanager.c:810
+msgid "Place the call off hold"
+msgstr "Sacar la llamada d'espera"
+
+#: ../sflphone-client-gnome/src/uimanager.c:811
+msgid "Configuration _Assistant"
+msgstr "_Asistente de configuración"
+
+#: ../sflphone-client-gnome/src/uimanager.c:812
+msgid "Run the configuration assistant"
+msgstr "Executar l'asistente de configuración"
+
+#: ../sflphone-client-gnome/src/uimanager.c:815
+msgid "Call your voicemail"
+msgstr "Llamar al buzón de voz"
+
+#: ../sflphone-client-gnome/src/uimanager.c:816
+msgid "_Close"
+msgstr "_Zarrar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:817
+msgid "Minimize to system tray"
+msgstr "Minimizar na bandexa de sistema"
+
+#: ../sflphone-client-gnome/src/uimanager.c:818
+msgid "_Quit"
+msgstr "_Colar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:819
+msgid "Quit the program"
+msgstr "Colar del programa"
+
+#: ../sflphone-client-gnome/src/uimanager.c:822
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:823
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:824
+msgid "Copy the selection"
+msgstr "Copiar la seleición"
+
+#: ../sflphone-client-gnome/src/uimanager.c:825
+msgid "_Paste"
+msgstr "A_pegar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:826
+msgid "Paste the clipboard"
+msgstr "Pegar el conteníu del cartafueyu"
+
+#: ../sflphone-client-gnome/src/uimanager.c:827
+msgid "Clear _history"
+msgstr "Llimpiar _hestorial"
+
+#: ../sflphone-client-gnome/src/uimanager.c:828
+msgid "Clear the call history"
+msgstr "Llimpiar l'hestorial de llamáes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "_Accounts"
+msgstr "_Cuentes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "Edit your accounts"
+msgstr "Editar les sos cuentes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:831
+msgid "_Preferences"
+msgstr "_Preferencies"
+
+#: ../sflphone-client-gnome/src/uimanager.c:832
+msgid "Change your preferences"
+msgstr "Camudar les sos preferencies"
+
+#: ../sflphone-client-gnome/src/uimanager.c:835
+msgid "_View"
+msgstr "_Ver"
+
+#: ../sflphone-client-gnome/src/uimanager.c:838
+msgid "_Help"
+msgstr "_Aida"
+
+#: ../sflphone-client-gnome/src/uimanager.c:839
+msgid "Contents"
+msgstr "Conteníu"
+
+#: ../sflphone-client-gnome/src/uimanager.c:840
+msgid "Open the manual"
+msgstr "Abrir el manual"
+
+#: ../sflphone-client-gnome/src/uimanager.c:841
+msgid "About this application"
+msgstr "Tocante a esta aplicación"
+
+#: ../sflphone-client-gnome/src/uimanager.c:849
+msgid "_Transfer"
+msgstr "_Tresferir"
+
+#: ../sflphone-client-gnome/src/uimanager.c:850
+msgid "Transfer the call"
+msgstr "Tresferir la llamada"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "G_rabar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Grabar la conversación actual"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
+msgid "_Show toolbar"
+msgstr "Amo_sar ferramientes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:854
+msgid "Show the toolbar"
+msgstr "Amuesa la barra de ferramientes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:855
+msgid "_Dialpad"
+msgstr "_Tecláu"
+
+#: ../sflphone-client-gnome/src/uimanager.c:856
+msgid "Show the dialpad"
+msgstr "Amosar el tecláu pa marcar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:857
+msgid "_Volume controls"
+msgstr "_Controles de volume"
+
+#: ../sflphone-client-gnome/src/uimanager.c:858
+msgid "Show the volume controls"
+msgstr "Amuesa los controles de volume"
+
+#: ../sflphone-client-gnome/src/uimanager.c:859
+msgid "_History"
+msgstr "_Hestorial"
+
+#: ../sflphone-client-gnome/src/uimanager.c:860
+msgid "Calls history"
+msgstr "Hestorial de llamáes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:861
+msgid "_Address book"
+msgstr "Llibret_a de direiciones"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
+msgid "On _Hold"
+msgstr "_N'espera"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1234
+msgid "_Call back"
+msgstr "Tornar _Llamada"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1390
+msgid "Edit phone number"
+msgstr "Editar númberu de teléfonu"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1402
+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:241
+msgid "Account Parameters"
+msgstr "Parámetros de cuenta"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
+msgid "_Alias"
+msgstr "Nom_atu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
+msgid "_Protocol"
+msgstr "_Protocolu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
+msgid "Unknown"
+msgstr "Desconocíu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
+msgid "_Host name"
+msgstr "Nome del _host"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
+msgid "_User name"
+msgstr "Nome d'_usuariu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
+msgid "_Password"
+msgstr "Cont_raseña"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
+msgid "Show password"
+msgstr "Amosar contraseña"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
+msgid "_Voicemail number"
+msgstr "Númberu del buzón de _voz"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "Nome d'_usuariu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
+msgid "Authentication"
+msgstr "Autenticación"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
+msgid "Secret"
+msgstr "Secretu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
+msgid "Credential"
+msgstr "Credencial"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
+msgid "Authentication name"
+msgstr "Nome d'autenticación"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
+msgid "Password"
+msgstr "Contraseña"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
+msgid "Security"
+msgstr "Seguridá"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:801
+msgid "Use TLS transport (sips)"
+msgstr "Usar tresporte TLS (sips)"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:807
+msgid "SRTP key exchange"
+msgstr "Intercambéu de clave SRTP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:813
+msgid "Disabled"
+msgstr "Desactiváu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
+msgid "Registration"
+msgstr "Rexistru"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
+msgid "Registration expire"
+msgstr "Fin del rexistu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
+msgid "_Comply with RFC 3263"
+msgstr "_Cumplir con RFC 3263"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:920
+msgid "Network Interface"
+msgstr "Interfaz de rede"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:933
+msgid "Local address"
+msgstr "Direición llocal"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000
+msgid "Local port"
+msgstr "Puertu llocal"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
+msgid "Published address"
+msgstr "Direición espublizada"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
+msgid "Using STUN"
+msgstr "Usando STUN"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
+msgid "STUN server URL"
+msgstr "URL del sirvidor STUN"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
+msgid "Same as local parameters"
+msgstr "Igual que los parámetros llocales"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
+msgid "Set published address and port:"
+msgstr "Afitar direición y puertu espublizaos:"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
+msgid "Published port"
+msgstr "Puertu espublizáu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
+msgid "Account settings"
+msgstr "Axustes de la cuenta"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
+msgid "Basic"
+msgstr "Básicu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Códecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
+msgid "Advanced"
+msgstr "Avanzáu"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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 ""
+"Esti perfil va usase cuando quiera coneutar col par remotu escribiendo una "
+"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
+#, c-format
+msgid "Server returned \"%s\" (%d)"
+msgstr "El sirvidor devolvió \"%s\" (%d)"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+msgid "Protocol"
+msgstr "Protocolu"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+msgid "Status"
+msgstr "Estáu"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+msgid "Accounts"
+msgstr "Cuentes"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+msgid "Configured Accounts"
+msgstr "Cuentes Configuraes"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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
+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:291
+msgid "General"
+msgstr "Xeneral"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "_Usar llibreta de direiciones d'Evolution"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "Llende de descarga:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "tarxetes"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "Amosar foto _del contautu, si ta disponible"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+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
+msgid "_Work"
+msgstr "_Trabayu"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "_Casa"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "_Movil"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "Llibretes de direiciones"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+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
+msgid "Name"
+msgstr "Nome"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:75
+#, c-format
+msgid "This assistant is now finished."
+msgstr "Esti asistente yá finó."
+
+#: ../sflphone-client-gnome/src/config/assistant.c:77
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+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
+msgid "Alias"
+msgstr "Nomatu"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:84
+msgid "Server"
+msgstr "Sirvidor"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:88
+msgid "Username"
+msgstr "Nome d'usuariu"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:92
+msgid "Security: "
+msgstr "Seguridá: "
+
+#: ../sflphone-client-gnome/src/config/assistant.c:94
+msgid "SRTP/ZRTP draft-zimmermann"
+msgstr "SRTP/ZRTP draft-zimmermann"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:96
+msgid "None"
+msgstr "Denguna"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:230
+msgid "SFLphone account creation wizard"
+msgstr "Asistente SFLphone de creación de cuentes"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:256
+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
+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
+msgid "VoIP Protocols"
+msgstr "Protocolos VoIP"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "Select an account type"
+msgstr "Escueya una triba de cuenta"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:273
+msgid "SIP (Session Initiation Protocol)"
+msgstr "SIP (Session Initiation Protocol)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:275
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2 (InterAsterix Exchange)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Account"
+msgstr "Cuenta"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Please select one of the following options"
+msgstr "Escueya una de les siguientes opciones"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:291
+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
+msgid "Register an existing SIP or IAX2 account"
+msgstr "Rexistrar una cuenta SIP o IAX2 esistente"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+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
+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
+msgid "Secure communications with _ZRTP"
+msgstr "Comunicación segura con _ZRTP"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "Optional email address"
+msgstr "Corréu ellectrónicu opcional"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+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
+msgid "_Email address"
+msgstr "_Corréu"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "IAX2 account settings"
+msgstr "Axustes de cuenta IAX2"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "Network Address Translation (NAT)"
+msgstr "Conversión de Direición de Rede (NAT)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+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
+msgid "E_nable STUN"
+msgstr "A_ctivar STUN"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:513
+msgid "_STUN server"
+msgstr "_Sirvidor STUN"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Account Registration"
+msgstr "Rexistru de cuenta"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Congratulations!"
+msgstr "¡Norabona!"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
+msgid "Bitrate"
+msgstr "Tasa de bits"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
+msgid "Bandwidth"
+msgstr "Anchor de banda"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
+msgid "ALSA plugin"
+msgstr "Complementu ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
+msgid "Output"
+msgstr "Salida"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
+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:777
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "Ame_norgar ruíu (Narrow-Band Companding)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
+msgid "Sound Manager"
+msgstr "Xestor de soníu"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
+msgid "_Pulseaudio"
+msgstr "_Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
+msgid "_ALSA"
+msgstr "_ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
+msgid "ALSA settings"
+msgstr "Axustes de ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Recordings"
+msgstr "Grabaciones"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
+msgid "Destination folder"
+msgstr "Carpeta de destín"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
+msgid "Select a folder"
+msgstr "Seleicione una carpeta"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
+msgid "Ringtones"
+msgstr "Tonos de llamada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
+msgid "_Enable ringtones"
+msgstr "_Activar tonos de llamada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
+msgid "Choose a ringtone"
+msgstr "Escueya un tono de llamada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
+msgid "Audio Files"
+msgstr "Ficheros de soníu"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "URL Argumentu"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+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
+#, 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
+msgid "Trigger on specific _SIP header"
+msgstr "Disparador pa una cabecera _SIP determinada"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "Disparador pa una URL _IAX2"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "O_rde a executar"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "Reescritura de númberu telefónicu"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "_Prefixar los númberos marcaos con"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
+msgid "Desktop Notifications"
+msgstr "Notificaciones nel escritoriu"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
+msgid "_Enable notifications"
+msgstr "_Activar notificaciones"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
+msgid "System Tray Icon"
+msgstr "Iconu de la bandexa del sistema"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
+msgid "_Popup main window on incoming call"
+msgstr "_Estenderexar ventana principal al recibir llamada"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
+msgid "Ne_ver popup main window"
+msgstr "_Nunca estenderexar ventana principal"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
+msgid "Hide SFLphone window on _startup"
+msgstr "Anubrir _ventana SFLphone nel entamu"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
+msgid "Calls History"
+msgstr "Hestóricu de llamaes"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
+msgid "_Keep my history for at least"
+msgstr "_Guardar el mio hestóricu polo menos"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
+msgid "days"
+msgstr "díes"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
+msgid "Preferences"
+msgstr "Preferencies"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
+msgid "Audio"
+msgstr "Soníu"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+msgid "Address Book"
+msgstr "Llibreta de direiciones"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
+msgid "Hooks"
+msgstr "Enganches"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+msgid "Advanced options for TLS"
+msgstr "Opciones avanzaes pa TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+msgid "TLS transport"
+msgstr "Tresporte TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+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 ""
+"El tresporte TLS puede utilizase xunto con UDP para les llamaes que "
+"necesiten\n"
+"intercambéos SIP seguros (SIPS). Puede configurar un tresporte TLS distintu\n"
+"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
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+msgid "Certificate of Authority list"
+msgstr "Llista de Certificaos d'Autoridá"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+msgid "Choose a CA list file (optional)"
+msgstr "Escueya un ficheru de llista de CA (opcional)"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+msgid "Public endpoint certificate file"
+msgstr "Ficheru de certificáu de par públicu"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+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
+msgid "Choose a private key file (optional)"
+msgstr "Escueye un ficheru de clave privada (opcional)"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+msgid "Password for the private key"
+msgstr "Contraseña de la clave privada"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+msgid "TLS protocol method"
+msgstr "Métodu del protocolu TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+msgid "TLS cipher list"
+msgstr "Llista de cifráu TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+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
+msgid "Negotiation timeout (sec:msec)"
+msgstr "Tiempu de negociación (seg:mseg)"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+msgid "Verify incoming certificates, as a server"
+msgstr "Comprobar certificaos entrantes, como un sirvidor"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+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
+msgid "Require certificate for incoming tls connections"
+msgstr "Requerir certificáu pa les conexones TLS entrantes"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+msgid "ZRTP Options"
+msgstr "Opciones ZRTP"
+
+#: ../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/zrtpadvanceddialog.c:75
+msgid "Ask User to Confirm SAS"
+msgstr "Pidir al usuariu que confirme SAS"
+
+#: ../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/zrtpadvanceddialog.c:87
+msgid "Display SAS once for hold events"
+msgstr "Amosar SAS una vegada pa eventos n'espera"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "Opciones ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+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
+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
+msgid "Search by missed call"
+msgstr "Guetar por llamaes perdíes"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+msgid "Search by incoming call"
+msgstr "Guetar por llamaes entrantes"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+msgid "Search by outgoing call"
+msgstr "Guetar por llamaes salientes"
+
+#~ 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: Nun s'alcontraron codecs de soníu.\n"
+#~ "\n"
+#~ "</b> Los codecs de soníu de SFLphone han tar en <i>%s</i> o nel "
+#~ "direutoriu <b>.sflphone</b> de la so carpeta personal ( <i>%s</i> )"
+
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i cuenta configurada"
+#~ msgstr[1] "%i cuentes configuraes"
+
+#~ msgid "Direct IP calls"
+#~ msgstr "Llamaes IP direutes"
diff --git a/lang/el/el.po b/lang/el/el.po
new file mode 100644
index 0000000000..76b3bf0445
--- /dev/null
+++ b/lang/el/el.po
@@ -0,0 +1,1209 @@
+# Greek 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-03-02 10:23-0500\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"
+"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-03-01 23:16+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../sflphone-client-gnome/src/accountlist.c:170
+msgid "Registered"
+msgstr "Εγγεγραμμένος"
+
+#: ../sflphone-client-gnome/src/accountlist.c:173
+msgid "Not Registered"
+msgstr "Μη εγγεγραμμένος"
+
+#: ../sflphone-client-gnome/src/accountlist.c:176
+msgid "Trying..."
+msgstr "Προσπαθώ..."
+
+#: ../sflphone-client-gnome/src/accountlist.c:179
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "Σφάλμα"
+
+#: ../sflphone-client-gnome/src/accountlist.c:182
+msgid "Authentication Failed"
+msgstr "Αποτυχία πιστοποίησης"
+
+#: ../sflphone-client-gnome/src/accountlist.c:185
+msgid "Network unreachable"
+msgstr "Μη προσβάσιμο δίκτυο"
+
+#: ../sflphone-client-gnome/src/accountlist.c:188
+msgid "Host unreachable"
+msgstr "Μη προσβάσιμος υπολογιστής"
+
+#: ../sflphone-client-gnome/src/accountlist.c:191
+msgid "Stun configuration error"
+msgstr "Σφάλμα ρύθμισης εξυπηρετητή STUN"
+
+#: ../sflphone-client-gnome/src/accountlist.c:194
+msgid "Stun server invalid"
+msgstr "Ακυρος εξυπηρετητής STUN"
+
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
+msgid "Invalid"
+msgstr "Μη έγκυρο"
+
+#: ../sflphone-client-gnome/src/actions.c:114
+msgid "Using account"
+msgstr "Χρήση λογαριασμού"
+
+#: ../sflphone-client-gnome/src/actions.c:121
+msgid "No registered accounts"
+msgstr "Μη πιστοποιημένοι λογαριασμοί"
+
+#: ../sflphone-client-gnome/src/actions.c:306
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"Αδυναμία σύνδεσης στον εξυπηρετητη του  SFLphone\n"
+"Σιγουρευτείτε οτι τρέχει ο daemon"
+
+#: ../sflphone-client-gnome/src/actions.c:607
+#: ../sflphone-client-gnome/src/actions.c:931
+msgid "Direct SIP call"
+msgstr "Κλήση κατευθείαν SIP"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"Ειδοποίηση απο την ALSA:\n"
+"\n"
+"Σφάλμα κατα το άνοιγμα της συσκευής αναπαραγωγής"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"Ειδοποίηση απο την ALSA:\n"
+"\n"
+"Σφάλμα κατα το άνοιγμα της συσκευής λήψης ήχου"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"Ειδοποίηση απο το Pulseaudio\n"
+"\n"
+"Tο Pulseaudio δεν τρέχει"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:94
+msgid "There is one call in progress."
+msgstr "Υπάρχει μια κλήση εν εξελίξει"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:98
+msgid "There are calls in progress."
+msgstr "Υπάρχουν κλήσεις εν εξελίξει"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:103
+msgid "Do you still want to quit?"
+msgstr "Να κλείσω σιγουρα;"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:331
+msgid "SFLphone Error"
+msgstr "Σφάλμα SFLphone"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:450
+#, c-format
+msgid "ZRTP is not supported by peer %s\n"
+msgstr "Το πρωτόκολλο ZRTP δεν υποσττηρίζεται απο το peer %s\n"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:452
+msgid "Secure Communication Unavailable"
+msgstr "Κρυπτογραφημένη επικοινωνια μη διαθέσιμη"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
+msgid "Continue"
+msgstr "Συνέχεια"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
+msgid "Stop Call"
+msgstr "Τερματισμός κλήσης"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:480
+#, 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\n"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:482
+msgid "ZRTP negotiation failed"
+msgstr "Η διαπραγμάτευση ZRTP απέτυχε"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:500
+#, c-format
+msgid ""
+"%s wants to stop using secure communication. Confirm will resume "
+"conversation without SRTP.\n"
+msgstr ""
+"Ο/Η %s θέλει να σταματησει να χρησιμοποιεί κρυπτογραφημένη επικοινωνία. Η "
+"επιβεβαιωση θα συνεχίσει τη συζήτηση αλλα χωρις κρυπτογράφηση\n"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:502
+msgid "Confirm Go Clear"
+msgstr "Επιβεβαίωση Φύγε Καθαρισμός"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:504
+msgid "Confirm"
+msgstr "Επιβεβαίωση"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s λογαριασμός %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>Από</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d Μηνυμα τηλεφωνητή"
+msgstr[1] "%d Μηνυματα τηλεφωνητή"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "Κλήση μέ %s λογαριασμό <i>%s</i>"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "Τρέχων λογαριασμός"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "Δεν έχετε θέσει λογαριασμούς"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "Δεν έχετε κατοχυρομένους λογαριασμούς"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:190
+#, c-format
+msgid ""
+"<i>With:</i> %s \n"
+"using %s"
+msgstr ""
+"<i>Με:</i> %s \n"
+"χρηση: %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:205
+#, c-format
+msgid "%s does not support ZRTP."
+msgstr "Ο %s δεν υποστηρίζει ZRTP"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:220
+#, c-format
+msgid "ZRTP negotiation failed with %s"
+msgstr "Η ZRTP διαπραγμάτευση απέτυχε με %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:235
+#, c-format
+msgid "<i>With:</i> %s"
+msgstr "<i>Με:</i> %s"
+
+#: ../sflphone-client-gnome/src/sliders.c:162
+msgid "Speakers volume"
+msgstr "Ένταση ηχείων"
+
+#: ../sflphone-client-gnome/src/sliders.c:164
+msgid "Mic volume"
+msgstr "Ενταση μικροφώνου"
+
+#: ../sflphone-client-gnome/src/statusicon.c:128
+msgid "_Show main window"
+msgstr "Δείξε το βα_σικό παράθυρο"
+
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "Κλείστο _Η"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, 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:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
+msgid "Voicemail"
+msgstr "Τηλεφωνητής"
+
+#: ../sflphone-client-gnome/src/uimanager.c:121
+msgid "No address book selected"
+msgstr "Κανένα βιβλίο διευθύνσεω δεν έχει επιλεχθεί"
+
+#: ../sflphone-client-gnome/src/uimanager.c:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
+msgid "Address book"
+msgstr "Βιβλίο διευθύνσεων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
+msgid "Voicemail (%i)"
+msgstr "Τηλεφωνητής (%i)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:396
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr ""
+"Το SFLphone ειναι ένα προγραμμα πελάτης VoIP συμβατό με SIP και ΙΑΧ2 "
+"πρωτόκολλα"
+
+#: ../sflphone-client-gnome/src/uimanager.c:398
+msgid "About SFLphone"
+msgstr "Σχετικά με το SFLphone"
+
+#: ../sflphone-client-gnome/src/uimanager.c:800
+msgid "Call"
+msgstr "Κλήση"
+
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
+msgid "_New call"
+msgstr "_Νέα κλήση"
+
+#: ../sflphone-client-gnome/src/uimanager.c:802
+msgid "Place a new call"
+msgstr "Κάντε μια νέα κλήση"
+
+#: ../sflphone-client-gnome/src/uimanager.c:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
+msgid "_Pick up"
+msgstr "Σήκωστο  _Π"
+
+#: ../sflphone-client-gnome/src/uimanager.c:804
+msgid "Answer the call"
+msgstr "Σηκώστε το τηλέφωνο"
+
+#: ../sflphone-client-gnome/src/uimanager.c:806
+msgid "Finish the call"
+msgstr "Κλέιστε το τηλέφωνο"
+
+#: ../sflphone-client-gnome/src/uimanager.c:807
+msgid "O_n hold"
+msgstr "Σε α_ναμονή"
+
+#: ../sflphone-client-gnome/src/uimanager.c:808
+msgid "Place the call on hold"
+msgstr "Βάλτε την κλήση σε αναμονή"
+
+#: ../sflphone-client-gnome/src/uimanager.c:809
+msgid "O_ff hold"
+msgstr "Επανα_φορά"
+
+#: ../sflphone-client-gnome/src/uimanager.c:810
+msgid "Place the call off hold"
+msgstr "Επαναφέρετε την κλήση σε αναμονή"
+
+#: ../sflphone-client-gnome/src/uimanager.c:811
+msgid "Configuration _Assistant"
+msgstr "Οδηγός Ρυθμίσεων _Α"
+
+#: ../sflphone-client-gnome/src/uimanager.c:812
+msgid "Run the configuration assistant"
+msgstr "Εκτέλεση του οδηγού ρύθμισης"
+
+#: ../sflphone-client-gnome/src/uimanager.c:815
+msgid "Call your voicemail"
+msgstr "Κλήση προς τον τηλεφωνητή σας"
+
+#: ../sflphone-client-gnome/src/uimanager.c:816
+msgid "_Close"
+msgstr "_Κλείσιμο"
+
+#: ../sflphone-client-gnome/src/uimanager.c:817
+msgid "Minimize to system tray"
+msgstr "Ελαχιστοποίηση στη περιοχή ειδοποιήσεων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:818
+msgid "_Quit"
+msgstr "Έξοδος"
+
+#: ../sflphone-client-gnome/src/uimanager.c:819
+msgid "Quit the program"
+msgstr "Τερματισμός του προγράμματος"
+
+#: ../sflphone-client-gnome/src/uimanager.c:822
+msgid "_Edit"
+msgstr "_Επεξεργασία"
+
+#: ../sflphone-client-gnome/src/uimanager.c:823
+msgid "_Copy"
+msgstr "Αντέγρα_ψε"
+
+#: ../sflphone-client-gnome/src/uimanager.c:824
+msgid "Copy the selection"
+msgstr "Αντιγραφή της επιλογής"
+
+#: ../sflphone-client-gnome/src/uimanager.c:825
+msgid "_Paste"
+msgstr "Ε_πικόλληση"
+
+#: ../sflphone-client-gnome/src/uimanager.c:826
+msgid "Paste the clipboard"
+msgstr "Επικόλληση των περιεχομένων του προχείρου (clipboard)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:827
+msgid "Clear _history"
+msgstr "Καθαρισμός ιστορικού κλ_ησεων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:828
+msgid "Clear the call history"
+msgstr "Καθαρισμός του ιστορικού κλησεων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "_Accounts"
+msgstr "Λογαρι_ασμοί"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "Edit your accounts"
+msgstr "Επεξεργασία των λογαριασμών σας"
+
+#: ../sflphone-client-gnome/src/uimanager.c:831
+msgid "_Preferences"
+msgstr "_Προτιμήσεις"
+
+#: ../sflphone-client-gnome/src/uimanager.c:832
+msgid "Change your preferences"
+msgstr "Αλλαγή των προτιμήσεων σας"
+
+#: ../sflphone-client-gnome/src/uimanager.c:835
+msgid "_View"
+msgstr "_Προβολή"
+
+#: ../sflphone-client-gnome/src/uimanager.c:838
+msgid "_Help"
+msgstr "_Βο_ηθεια"
+
+#: ../sflphone-client-gnome/src/uimanager.c:839
+msgid "Contents"
+msgstr "Περιεχόμενα"
+
+#: ../sflphone-client-gnome/src/uimanager.c:840
+msgid "Open the manual"
+msgstr "Άνοιγμα του εγχειριδίου"
+
+#: ../sflphone-client-gnome/src/uimanager.c:841
+msgid "About this application"
+msgstr "Περί αυτής της εφαρμογής"
+
+#: ../sflphone-client-gnome/src/uimanager.c:849
+msgid "_Transfer"
+msgstr "Με_ταφορά"
+
+#: ../sflphone-client-gnome/src/uimanager.c:850
+msgid "Transfer the call"
+msgstr "Μεταφορά της κλήσης"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "Καταγ_ραφή"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "Καταγραψτε τη τρέχουσα συνομιλία"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
+msgid "_Show toolbar"
+msgstr "Εμφάνι_ση γραμμής εργαλείων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:854
+msgid "Show the toolbar"
+msgstr "Εμφάνιση της γραμμής εργαλείων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:855
+msgid "_Dialpad"
+msgstr "Πληκτρολόγιο _δ"
+
+#: ../sflphone-client-gnome/src/uimanager.c:856
+msgid "Show the dialpad"
+msgstr "Εμφάνιση του πληκτρολογίου"
+
+#: ../sflphone-client-gnome/src/uimanager.c:857
+msgid "_Volume controls"
+msgstr "Ένταση ήχων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:858
+msgid "Show the volume controls"
+msgstr "Δείξε τις ρυθμίσεις για την ένταση ήχων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:859
+msgid "_History"
+msgstr "Ιστορικό _Η"
+
+#: ../sflphone-client-gnome/src/uimanager.c:860
+msgid "Calls history"
+msgstr "Ιστορικό κλήσεων"
+
+#: ../sflphone-client-gnome/src/uimanager.c:861
+msgid "_Address book"
+msgstr "Βιβλίο διευθύνσεων _Α"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
+msgid "On _Hold"
+msgstr "Κλ_ηση σε αναμονή"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1234
+msgid "_Call back"
+msgstr "Κλήση"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1390
+msgid "Edit phone number"
+msgstr "Επεξεργσία τηελφωνικού αριθμού"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1402
+msgid "Edit the phone number before making a call"
+msgstr "Επεξεργσία τηελφωνικού αριθμού προ της κλήσης"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:241
+msgid "Account Parameters"
+msgstr "Παράμετροι λογαρισμού"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
+msgid "_Alias"
+msgstr "Ψευδώνυμο"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
+msgid "_Protocol"
+msgstr "_Πρωτοκολλο"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
+msgid "Unknown"
+msgstr "'Αγνωστο"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
+msgid "_Host name"
+msgstr "Εξυπηρετητής παρόχου"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
+msgid "_User name"
+msgstr "Ονομα χρήστη"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
+msgid "_Password"
+msgstr "Συνθηματικό"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
+msgid "Show password"
+msgstr "Εμφάνιση συνθηματικού"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
+msgid "_Voicemail number"
+msgstr "Αριθμός τηλεφωνητή"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "Ονομα χρήστη"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
+msgid "Authentication"
+msgstr "Ταυτοποίηση"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
+msgid "Secret"
+msgstr "Απόρρητο"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
+msgid "Credential"
+msgstr "Πιστοποιητικό"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
+msgid "Authentication name"
+msgstr "Όνομα εξακρίβωσης"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
+msgid "Password"
+msgstr "Συνθηματικό"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
+msgid "Security"
+msgstr "Ασφάλεια"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:801
+msgid "Use TLS transport (sips)"
+msgstr "Χρήση TLS"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:807
+msgid "SRTP key exchange"
+msgstr "Ανταλλαγή κλειδιών SRTP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:813
+msgid "Disabled"
+msgstr "Απενεργοποιημένο"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
+msgid "Registration"
+msgstr "Εγγραφή"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
+msgid "Registration expire"
+msgstr "Λήξη εγγραφής"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
+msgid "_Comply with RFC 3263"
+msgstr "Συμβατότητα με RFC 3263"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:920
+msgid "Network Interface"
+msgstr "Συσκευή δικτύου"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:933
+msgid "Local address"
+msgstr "Τοπική διεύθυνση δικτύου"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000
+msgid "Local port"
+msgstr "Τοπική θύρα δικτύου"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
+msgid "Published address"
+msgstr "Δημοσιευμένη διευθυνση"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
+msgid "Using STUN"
+msgstr "Χρήση STUN"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
+msgid "STUN server URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
+msgid "Same as local parameters"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
+msgid "Set published address and port:"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
+msgid "Published port"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
+msgid "Account settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
+msgid "Basic"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
+msgid "Advanced"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
+#, c-format
+msgid "Server returned \"%s\" (%d)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+msgid "Protocol"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+msgid "Status"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+msgid "Accounts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+msgid "Configured Accounts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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
+msgid "You have no active account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:291
+msgid "General"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+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
+msgid "Name"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:75
+#, c-format
+msgid "This assistant is now finished."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:77
+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
+msgid "Alias"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:84
+msgid "Server"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:88
+msgid "Username"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:92
+msgid "Security: "
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:94
+msgid "SRTP/ZRTP draft-zimmermann"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:96
+msgid "None"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:230
+msgid "SFLphone account creation wizard"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:256
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:257
+msgid "This installation wizard will help you configure an account."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "VoIP Protocols"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "Select an account type"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:273
+msgid "SIP (Session Initiation Protocol)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:275
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Please select one of the following options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:291
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:293
+msgid "Register an existing SIP or IAX2 account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+msgid "SIP account settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "Please fill the following information"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
+msgid "Secure communications with _ZRTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "Optional email address"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "This email address will be used to send your voicemail messages."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:398
+msgid "_Email address"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "IAX2 account settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "Network Address Translation (NAT)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "You should probably enable this if you are behind a firewall."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:506
+msgid "E_nable STUN"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:513
+msgid "_STUN server"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Account Registration"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Congratulations!"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
+msgid "Frequency"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
+msgid "Bitrate"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
+msgid "Bandwidth"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
+msgid "ALSA plugin"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
+msgid "Output"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
+msgid "Input"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
+msgid "_Voice Activity Detection"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
+msgid "Sound Manager"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
+msgid "_Pulseaudio"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
+msgid "_ALSA"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
+msgid "ALSA settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Recordings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
+msgid "Destination folder"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
+msgid "Select a folder"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
+msgid "Ringtones"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
+msgid "_Enable ringtones"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
+msgid "Choose a ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
+msgid "Audio Files"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
+msgid "Desktop Notifications"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
+msgid "_Enable notifications"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
+msgid "System Tray Icon"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
+msgid "_Popup main window on incoming call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
+msgid "Ne_ver popup main window"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
+msgid "Hide SFLphone window on _startup"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
+msgid "Calls History"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
+msgid "_Keep my history for at least"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
+msgid "days"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
+msgid "Preferences"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
+msgid "Audio"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+msgid "Address Book"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
+msgid "Hooks"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+msgid "Advanced options for TLS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+msgid "TLS transport"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+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:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+msgid "Certificate of Authority list"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+msgid "Choose a CA list file (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+msgid "Public endpoint certificate file"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+msgid "Choose a public endpoint certificate (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+msgid "Choose a private key file (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+msgid "Password for the private key"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+msgid "TLS protocol method"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+msgid "TLS cipher list"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+msgid "Server name instance for outgoing TLS connection"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+msgid "Negotiation timeout (sec:msec)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+msgid "Verify incoming certificates, as a server"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+msgid "Verify certificates from answer, as a client"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+msgid "Require certificate for incoming tls connections"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+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
+msgid "Click here to change the search type"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+msgid "Search by missed call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+msgid "Search by incoming call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+msgid "Search by outgoing call"
+msgstr ""
+
+#~ 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>Οι  codecs ήχου SFL πρέπει να βρίσκονται στον <i>%s</i> είτε στον <b>."
+#~ "sflphone</b> φάκελο στον προσωπικο φάκελο  ( <i>%s</i> )"
+
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "Ο %i λογαριασμός  ρυθμίστηκε"
+#~ msgstr[1] "Οι %i λογαριασμοί  ρυθμίστηκαν"
diff --git a/lang/ja/ja.po b/lang/ja/ja.po
new file mode 100644
index 0000000000..88481019c3
--- /dev/null
+++ b/lang/ja/ja.po
@@ -0,0 +1,1222 @@
+# Japanese translation for sflphone
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the sflphone package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sflphone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\n"
+"PO-Revision-Date: 2009-12-23 22:50+0000\n"
+"Last-Translator: Launchpad Translations Administrators <rosetta@launchpad."
+"net>\n"
+"Language-Team: Japanese <ja@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-03-01 23:16+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../sflphone-client-gnome/src/accountlist.c:170
+msgid "Registered"
+msgstr "登録しました"
+
+#: ../sflphone-client-gnome/src/accountlist.c:173
+msgid "Not Registered"
+msgstr "登録できません"
+
+#: ../sflphone-client-gnome/src/accountlist.c:176
+msgid "Trying..."
+msgstr "検索中..."
+
+#: ../sflphone-client-gnome/src/accountlist.c:179
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "エラー"
+
+#: ../sflphone-client-gnome/src/accountlist.c:182
+msgid "Authentication Failed"
+msgstr "認証に失敗"
+
+#: ../sflphone-client-gnome/src/accountlist.c:185
+msgid "Network unreachable"
+msgstr "ネットワークに接続できません"
+
+#: ../sflphone-client-gnome/src/accountlist.c:188
+msgid "Host unreachable"
+msgstr "ホストに接続できません"
+
+#: ../sflphone-client-gnome/src/accountlist.c:191
+msgid "Stun configuration error"
+msgstr "構成エラー"
+
+#: ../sflphone-client-gnome/src/accountlist.c:194
+msgid "Stun server invalid"
+msgstr "サーバー無効"
+
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
+msgid "Invalid"
+msgstr "無効"
+
+#: ../sflphone-client-gnome/src/actions.c:114
+msgid "Using account"
+msgstr "アカウント使用中"
+
+#: ../sflphone-client-gnome/src/actions.c:121
+msgid "No registered accounts"
+msgstr "アカウント登録されていません"
+
+#: ../sflphone-client-gnome/src/actions.c:306
+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:931
+msgid "Direct SIP call"
+msgstr "ダイレクトSIPコール"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"ALSA通知\n"
+"\n"
+"再生デバイスエラー"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"ALSA通知\n"
+"\n"
+"再生ディバイスエラー"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"Pulseaudio通知\n"
+"\n"
+"Pulseaudioが動いていません。"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:94
+msgid "There is one call in progress."
+msgstr "呼び出し中"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:98
+msgid "There are calls in progress."
+msgstr "呼び出し中"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:103
+msgid "Do you still want to quit?"
+msgstr "キャンセルしますか?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:331
+msgid "SFLphone Error"
+msgstr "SFLphoneエラー"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:450
+#, c-format
+msgid "ZRTP is not supported by peer %s\n"
+msgstr "ZRTPが%sにサポートされていません。\n"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:452
+msgid "Secure Communication Unavailable"
+msgstr "安全なコミュニケーションが利用できません。"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
+msgid "Continue"
+msgstr "次へ"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
+msgid "Stop Call"
+msgstr "電話をやめてください"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:480
+#, 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:482
+msgid "ZRTP negotiation failed"
+msgstr "ZRTP交渉失敗"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:500
+#, 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:502
+msgid "Confirm Go Clear"
+msgstr "クリアを確認してください。"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:504
+msgid "Confirm"
+msgstr "確認"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s アカウント: %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "</i> %sから <i>"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d ボイスメール"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "%s アカウント<i>%s</i>を呼び出し中"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "現在のアカウント"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "アカウントが設定されていません"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "アカウント登録されていません"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:190
+#, c-format
+msgid ""
+"<i>With:</i> %s \n"
+"using %s"
+msgstr ""
+"<i>で:</i> %s\n"
+" %sを使ってください。"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:205
+#, c-format
+msgid "%s does not support ZRTP."
+msgstr "%s はZRTPをサポートできていません。"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:220
+#, c-format
+msgid "ZRTP negotiation failed with %s"
+msgstr "ZRTP交渉%sで失敗しました"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:235
+#, c-format
+msgid "<i>With:</i> %s"
+msgstr "<i>With:</i> %s"
+
+#: ../sflphone-client-gnome/src/sliders.c:162
+msgid "Speakers volume"
+msgstr "スピーカーの音量"
+
+#: ../sflphone-client-gnome/src/sliders.c:164
+msgid "Mic volume"
+msgstr "マイク音量"
+
+#: ../sflphone-client-gnome/src/statusicon.c:128
+msgid "_Show main window"
+msgstr "メインウィンドウを開く"
+
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr "通話を切る(_H)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
+msgid "SFLphone"
+msgstr "SFLフォン"
+
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, fuzzy, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%dアクティブアカウント"
+
+#: ../sflphone-client-gnome/src/toolbar.c:38
+#: ../sflphone-client-gnome/src/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
+msgid "Voicemail"
+msgstr "ボイスメール"
+
+#: ../sflphone-client-gnome/src/uimanager.c:121
+msgid "No address book selected"
+msgstr "アドレス帳が選択されていません"
+
+#: ../sflphone-client-gnome/src/uimanager.c:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
+msgid "Address book"
+msgstr "アドレス帳"
+
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
+msgid "Voicemail (%i)"
+msgstr "ボイスメール(%i)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:396
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr "SFLフォンはVoIPクライアントとSIP、IAX2プロトコルと互換性があります"
+
+#: ../sflphone-client-gnome/src/uimanager.c:398
+msgid "About SFLphone"
+msgstr "SFLフォンに関して"
+
+#: ../sflphone-client-gnome/src/uimanager.c:800
+msgid "Call"
+msgstr "呼び出し"
+
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
+msgid "_New call"
+msgstr "通話先"
+
+#: ../sflphone-client-gnome/src/uimanager.c:802
+msgid "Place a new call"
+msgstr "発信します"
+
+#: ../sflphone-client-gnome/src/uimanager.c:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
+msgid "_Pick up"
+msgstr "選択"
+
+#: ../sflphone-client-gnome/src/uimanager.c:804
+msgid "Answer the call"
+msgstr "応答する"
+
+#: ../sflphone-client-gnome/src/uimanager.c:806
+msgid "Finish the call"
+msgstr "通話終了"
+
+#: ../sflphone-client-gnome/src/uimanager.c:807
+msgid "O_n hold"
+msgstr "保留"
+
+#: ../sflphone-client-gnome/src/uimanager.c:808
+msgid "Place the call on hold"
+msgstr "保留中"
+
+#: ../sflphone-client-gnome/src/uimanager.c:809
+msgid "O_ff hold"
+msgstr "保留解除"
+
+#: ../sflphone-client-gnome/src/uimanager.c:810
+msgid "Place the call off hold"
+msgstr "保留を解除する"
+
+#: ../sflphone-client-gnome/src/uimanager.c:811
+msgid "Configuration _Assistant"
+msgstr "構成アシスタント"
+
+#: ../sflphone-client-gnome/src/uimanager.c:812
+msgid "Run the configuration assistant"
+msgstr "構成アシスタントを起動します"
+
+#: ../sflphone-client-gnome/src/uimanager.c:815
+msgid "Call your voicemail"
+msgstr "ボイスメールに電話をしてください"
+
+#: ../sflphone-client-gnome/src/uimanager.c:816
+msgid "_Close"
+msgstr "閉じる(_C)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:817
+msgid "Minimize to system tray"
+msgstr "システムトレイを最小化する"
+
+#: ../sflphone-client-gnome/src/uimanager.c:818
+msgid "_Quit"
+msgstr "終了(_Q)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:819
+msgid "Quit the program"
+msgstr "プログラムの終了"
+
+#: ../sflphone-client-gnome/src/uimanager.c:822
+msgid "_Edit"
+msgstr "編集(_E)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:823
+msgid "_Copy"
+msgstr "コピー(_C)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:824
+msgid "Copy the selection"
+msgstr "選択範囲をコピー"
+
+#: ../sflphone-client-gnome/src/uimanager.c:825
+msgid "_Paste"
+msgstr "貼り付け(_P)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:826
+msgid "Paste the clipboard"
+msgstr "クリップボードに貼り付け"
+
+#: ../sflphone-client-gnome/src/uimanager.c:827
+msgid "Clear _history"
+msgstr "履歴消去"
+
+#: ../sflphone-client-gnome/src/uimanager.c:828
+msgid "Clear the call history"
+msgstr "通話履歴消去"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "_Accounts"
+msgstr "アカウント(_A)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "Edit your accounts"
+msgstr "アカウント編集"
+
+#: ../sflphone-client-gnome/src/uimanager.c:831
+msgid "_Preferences"
+msgstr "基本設定"
+
+#: ../sflphone-client-gnome/src/uimanager.c:832
+msgid "Change your preferences"
+msgstr "基本設定の変更"
+
+#: ../sflphone-client-gnome/src/uimanager.c:835
+msgid "_View"
+msgstr "表示(_V)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:838
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:839
+msgid "Contents"
+msgstr "目次"
+
+#: ../sflphone-client-gnome/src/uimanager.c:840
+msgid "Open the manual"
+msgstr "手動で開く"
+
+#: ../sflphone-client-gnome/src/uimanager.c:841
+msgid "About this application"
+msgstr "アプリケーションについて"
+
+#: ../sflphone-client-gnome/src/uimanager.c:849
+msgid "_Transfer"
+msgstr "転送"
+
+#: ../sflphone-client-gnome/src/uimanager.c:850
+msgid "Transfer the call"
+msgstr "通話転送"
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "録音(_R)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr "現在の会話を録音中"
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
+msgid "_Show toolbar"
+msgstr "ツールバーの表示"
+
+#: ../sflphone-client-gnome/src/uimanager.c:854
+msgid "Show the toolbar"
+msgstr "ツールバーの表示"
+
+#: ../sflphone-client-gnome/src/uimanager.c:855
+msgid "_Dialpad"
+msgstr "ダイアルパッド(_D)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:856
+msgid "Show the dialpad"
+msgstr "ダイヤルパッドの表示"
+
+#: ../sflphone-client-gnome/src/uimanager.c:857
+msgid "_Volume controls"
+msgstr "ボリュームコントロール"
+
+#: ../sflphone-client-gnome/src/uimanager.c:858
+msgid "Show the volume controls"
+msgstr "音量調整の表示"
+
+#: ../sflphone-client-gnome/src/uimanager.c:859
+msgid "_History"
+msgstr "履歴(_H)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:860
+msgid "Calls history"
+msgstr "通話履歴"
+
+#: ../sflphone-client-gnome/src/uimanager.c:861
+msgid "_Address book"
+msgstr "アドレス帳"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
+msgid "On _Hold"
+msgstr "保留中"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1234
+msgid "_Call back"
+msgstr "折り返し電話をする"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1390
+msgid "Edit phone number"
+msgstr "電話番号の編集"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1402
+msgid "Edit the phone number before making a call"
+msgstr "電話をする前に電話番号の編集をする"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:241
+msgid "Account Parameters"
+msgstr "アカウントパラメーター"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
+msgid "_Alias"
+msgstr "別名(_A)"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
+msgid "_Protocol"
+msgstr "プロトコル"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
+msgid "Unknown"
+msgstr "不明"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
+msgid "_Host name"
+msgstr "ホスト名"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
+msgid "_User name"
+msgstr "ユーザー名"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
+msgid "_Password"
+msgstr "パスワード(_P):"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
+msgid "Show password"
+msgstr "パスワードを表示"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
+msgid "_Voicemail number"
+msgstr "ボイスメールの番号"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "ユーザー名"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
+msgid "Authentication"
+msgstr "認証"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
+msgid "Secret"
+msgstr "シークレット"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
+msgid "Credential"
+msgstr "資格情報"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
+msgid "Authentication name"
+msgstr "名前の認証"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
+msgid "Password"
+msgstr "パスワード"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
+msgid "Security"
+msgstr "セキュリティ"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:801
+msgid "Use TLS transport (sips)"
+msgstr "TLS トランスポートを使用"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:807
+msgid "SRTP key exchange"
+msgstr "SRTP キー交換"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:813
+msgid "Disabled"
+msgstr "無効"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
+msgid "Registration"
+msgstr "登録"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
+msgid "Registration expire"
+msgstr "登録期間切れ"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
+msgid "_Comply with RFC 3263"
+msgstr "RFC 3263に準拠"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:920
+msgid "Network Interface"
+msgstr "ネットワークインターフェース"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:933
+msgid "Local address"
+msgstr "ローカルアドレス"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000
+msgid "Local port"
+msgstr "ローカルポート"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
+msgid "Published address"
+msgstr "アドレス公開"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
+msgid "Using STUN"
+msgstr "STUN使用"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
+msgid "STUN server URL"
+msgstr "STUNサーバーのURL"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
+msgid "Same as local parameters"
+msgstr "ローカルパラメータと同様"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
+msgid "Set published address and port:"
+msgstr "公開アドレスとポートの設定"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
+msgid "Published port"
+msgstr "公開ポート"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
+msgid "Account settings"
+msgstr "アカウントの設定"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
+msgid "Basic"
+msgstr "基本設定"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "コーデック"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
+msgid "Advanced"
+msgstr "詳細設定"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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 を入力し単にリモートピアに達成したい時"
+"にこのプロファイルが使用可能\r\n"
+"着信通話または発信通話を照合できないアカウントであれば設定も可能"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#, c-format
+msgid "Server returned \"%s\" (%d)"
+msgstr "サーバーが\"%s\" (%d)を返しました"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+msgid "Protocol"
+msgstr "プロトコル"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+msgid "Status"
+msgstr "状態"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+msgid "Accounts"
+msgstr "アカウント"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+msgid "Configured Accounts"
+msgstr "アカウント設定済み"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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
+msgid "You have no active account"
+msgstr "アクティブアカウントが存在しません"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:291
+msgid "General"
+msgstr "全般"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "展開アドレス帳の使用"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "ダウンロードの制限"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "カード"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "可能であれば連絡先の写真を表示"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "展開アドレス帳の項目"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "勤務先"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "自宅"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "携帯"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "アドレス帳"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+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
+msgid "Name"
+msgstr "名前"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:75
+#, c-format
+msgid "This assistant is now finished."
+msgstr "アシスタントは現在終了"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:77
+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
+msgid "Alias"
+msgstr "別名"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:84
+msgid "Server"
+msgstr "サーバー"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:88
+msgid "Username"
+msgstr "ユーザー名"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:92
+msgid "Security: "
+msgstr "セキュリティー "
+
+#: ../sflphone-client-gnome/src/config/assistant.c:94
+msgid "SRTP/ZRTP draft-zimmermann"
+msgstr "SRTP/ZRTP草稿"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:96
+msgid "None"
+msgstr "なし"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:230
+msgid "SFLphone account creation wizard"
+msgstr "SFLフォンアカウント作成ウィザード"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:256
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "SFLフォンのアカウント作成ウィザードへようこそ"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:257
+msgid "This installation wizard will help you configure an account."
+msgstr "このインストールウィザードはアカウント作成を助けます"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "VoIP Protocols"
+msgstr "VoIPプロトコル"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "Select an account type"
+msgstr "勘定タイプの選択"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:273
+msgid "SIP (Session Initiation Protocol)"
+msgstr "SIP(セッション開始プロトコル)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:275
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2(アスタリスク変換)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Account"
+msgstr "アカウント"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Please select one of the following options"
+msgstr "オプションに従い1つ選択してください"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:291
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "無料SIP/IAX2アカウントをsflフォン組織に作成"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:293
+msgid "Register an existing SIP or IAX2 account"
+msgstr "SIPまたは IAX2アカウントの存在を登録"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+msgid "SIP account settings"
+msgstr "SIPアカウント設定"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "Please fill the following information"
+msgstr "情報を入力してください"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
+msgid "Secure communications with _ZRTP"
+msgstr "ZRTPセキュリティーで保護された通信"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "Optional email address"
+msgstr "任意のメールアドレス"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "This email address will be used to send your voicemail messages."
+msgstr "このメールアドレスはボイスメールメッセージに送られます"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:398
+msgid "_Email address"
+msgstr "Eメールアドレス"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "IAX2 account settings"
+msgstr "IAX2アカウント設定"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "Network Address Translation (NAT)"
+msgstr "ネットワークアドレス変換(NAT)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "You should probably enable this if you are behind a firewall."
+msgstr "ファイアウォールの内側であれば接続できます"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:506
+msgid "E_nable STUN"
+msgstr "STUN有効(E)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:513
+msgid "_STUN server"
+msgstr "STUNサーバー"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Account Registration"
+msgstr "アカウント登録"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Congratulations!"
+msgstr "設定完了"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
+msgid "Frequency"
+msgstr "周波数"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
+msgid "Bitrate"
+msgstr "ビットレート"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
+msgid "Bandwidth"
+msgstr "帯域幅"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
+msgid "ALSA plugin"
+msgstr "ALSAプラグイン"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
+msgid "Output"
+msgstr "出力"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
+msgid "Input"
+msgstr "入力"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
+msgid "_Voice Activity Detection"
+msgstr "ボイスアクティビティ検出"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "ノイズ除去"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
+msgid "Sound Manager"
+msgstr "サウンドマネージャー"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
+msgid "_Pulseaudio"
+msgstr "パルスオーディオ"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
+msgid "_ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
+msgid "ALSA settings"
+msgstr "ALSA設定"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Recordings"
+msgstr "録音"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
+msgid "Destination folder"
+msgstr "インストール先フォルダ"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
+msgid "Select a folder"
+msgstr "フォルダの選択"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
+msgid "Ringtones"
+msgstr "着信音"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
+msgid "_Enable ringtones"
+msgstr "着信音可能"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
+msgid "Choose a ringtone"
+msgstr "着信音選択"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
+msgid "Audio Files"
+msgstr "音声ファイル"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "URL 引数"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "URL着信履歴ユーザー設定コマンド"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "%sはURLに置き換え"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "特定SIPヘッダーのトリガ"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "IAX2 URLのトリガ"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "実行するコマンド"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "電話番号書き換え"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "プレフィックス番号"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
+msgid "Desktop Notifications"
+msgstr "デスクトップ通知"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
+msgid "_Enable notifications"
+msgstr "通知可能"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
+msgid "System Tray Icon"
+msgstr "システムトレイアイコン"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
+msgid "_Popup main window on incoming call"
+msgstr "着信通話のポップアップメインウィンドウ"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
+msgid "Ne_ver popup main window"
+msgstr "ポップアップメインウィンドウ非表示"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
+msgid "Hide SFLphone window on _startup"
+msgstr "起動SFLphoneウィンドウ非表示"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
+msgid "Calls History"
+msgstr "着信履歴"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
+msgid "_Keep my history for at least"
+msgstr "最後の着信履歴の保護"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
+msgid "days"
+msgstr "曜日"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
+msgid "Preferences"
+msgstr "基本設定"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
+msgid "Audio"
+msgstr "音声"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+msgid "Address Book"
+msgstr "アドレス帳"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
+msgid "Hooks"
+msgstr "フック"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+msgid "Advanced options for TLS"
+msgstr "TLSの詳細設定オプション"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+msgid "TLS transport"
+msgstr "TLS転送"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+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 ""
+"通話はセキュリティーで保護されたSIPトランザクションの要求によりTLS転送はUDPを"
+"使用できます。\n"
+"それぞれのアカウントでTLS転送を確認してください。そうするとそれぞれ専用ポー"
+"ト、異なったものに実行できます。\n"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+msgid "Certificate of Authority list"
+msgstr "j証明機関の一覧"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+msgid "Choose a CA list file (optional)"
+msgstr "CAリストファイルの選択"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+msgid "Public endpoint certificate file"
+msgstr "公式エンドポイント証明ファイル"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+msgid "Choose a public endpoint certificate (optional)"
+msgstr "公式エンドポイント証明の選択"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+msgid "Choose a private key file (optional)"
+msgstr "個人キーファイルの選択"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+msgid "Password for the private key"
+msgstr "プライベートキーのパスワード"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+msgid "TLS protocol method"
+msgstr "TLSプロトコルメソッド"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+msgid "TLS cipher list"
+msgstr "TLS暗号一覧"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+msgid "Server name instance for outgoing TLS connection"
+msgstr "TLS接続発信サーバー名インスタンス"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+msgid "Negotiation timeout (sec:msec)"
+msgstr "ネゴシエーションタイムアウト"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+msgid "Verify incoming certificates, as a server"
+msgstr "サーバーの証明受信の確認"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+msgid "Verify certificates from answer, as a client"
+msgstr "クライアント応答証明の確認"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+msgid "Require certificate for incoming tls connections"
+msgstr "受信tls接続のための証明要求"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+msgid "ZRTP Options"
+msgstr "ZRTPオプション"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+msgid "Send Hello Hash in S_DP"
+msgstr "SDPでハローハッシュ送信"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+msgid "Ask User to Confirm SAS"
+msgstr "ユーザーへSAS確認"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+msgid "_Warn if ZRTP not supported"
+msgstr "ZRTPがサポートされているかどうか警告"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+msgid "Display SAS once for hold events"
+msgstr "イベント管理のためSAS表示"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+#, fuzzy
+msgid "SDES Options"
+msgstr "ZRTPオプション"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+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
+msgid "Click here to change the search type"
+msgstr "検索の種類を変更するにはここをクリックしてください"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+msgid "Search by missed call"
+msgstr "不在着信の検索"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+msgid "Search by incoming call"
+msgstr "受信通話の検索"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+msgid "Search by outgoing call"
+msgstr "発信通話の検索"
+
+#~ 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 "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%iアカウント構成日"
+
+#~ msgid "Direct IP calls"
+#~ msgstr "ダイレクトIPコール"
+
+#~ msgid "IP call - %s"
+#~ msgstr "IP 電話 -%s"
+
+#~ msgid "Codec"
+#~ msgstr "コーデック"
diff --git a/lang/tr/tr.po b/lang/tr/tr.po
new file mode 100644
index 0000000000..36459e4c71
--- /dev/null
+++ b/lang/tr/tr.po
@@ -0,0 +1,1172 @@
+# Turkish translation for sflphone
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the sflphone package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sflphone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-02 10:23-0500\n"
+"PO-Revision-Date: 2009-12-30 08:56+0000\n"
+"Last-Translator: zeugma <Unknown>\n"
+"Language-Team: Turkish <tr@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-03-01 23:16+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../sflphone-client-gnome/src/accountlist.c:170
+msgid "Registered"
+msgstr "Kayıtlı"
+
+#: ../sflphone-client-gnome/src/accountlist.c:173
+msgid "Not Registered"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:176
+msgid "Trying..."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:179
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "Hata"
+
+#: ../sflphone-client-gnome/src/accountlist.c:182
+msgid "Authentication Failed"
+msgstr "Kimlik Doğrulama Başarısız"
+
+#: ../sflphone-client-gnome/src/accountlist.c:185
+msgid "Network unreachable"
+msgstr "Ağ erişilemez durumda"
+
+#: ../sflphone-client-gnome/src/accountlist.c:188
+msgid "Host unreachable"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:191
+msgid "Stun configuration error"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:194
+msgid "Stun server invalid"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:197
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:200
+msgid "Invalid"
+msgstr "Geçersiz"
+
+#: ../sflphone-client-gnome/src/actions.c:114
+msgid "Using account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/actions.c:121
+msgid "No registered accounts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/actions.c:306
+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:931
+msgid "Direct SIP call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:379
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:382
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:384
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:388
+msgid "%x at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:94
+msgid "There is one call in progress."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:98
+msgid "There are calls in progress."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:103
+msgid "Do you still want to quit?"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:331
+msgid "SFLphone Error"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:450
+#, c-format
+msgid "ZRTP is not supported by peer %s\n"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:452
+msgid "Secure Communication Unavailable"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:454
+#: ../sflphone-client-gnome/src/mainwindow.c:484
+msgid "Continue"
+msgstr "Devam et"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:455
+#: ../sflphone-client-gnome/src/mainwindow.c:485
+#: ../sflphone-client-gnome/src/mainwindow.c:506
+msgid "Stop Call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:480
+#, 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:482
+msgid "ZRTP negotiation failed"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:500
+#, c-format
+msgid ""
+"%s wants to stop using secure communication. Confirm will resume "
+"conversation without SRTP.\n"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:502
+msgid "Confirm Go Clear"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:504
+msgid "Confirm"
+msgstr "Onayla"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:190
+#, c-format
+msgid ""
+"<i>With:</i> %s \n"
+"using %s"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:205
+#, c-format
+msgid "%s does not support ZRTP."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:220
+#, c-format
+msgid "ZRTP negotiation failed with %s"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:235
+#, c-format
+msgid "<i>With:</i> %s"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sliders.c:162
+msgid "Speakers volume"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sliders.c:164
+msgid "Mic volume"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:128
+msgid "_Show main window"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:135
+#: ../sflphone-client-gnome/src/uimanager.c:805
+#: ../sflphone-client-gnome/src/uimanager.c:1119
+#: ../sflphone-client-gnome/src/uimanager.c:1161
+msgid "_Hang up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:187
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-gnome/src/statusicon.c:189
+#, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] ""
+
+#: ../sflphone-client-gnome/src/toolbar.c:38
+#: ../sflphone-client-gnome/src/uimanager.c:770
+#: ../sflphone-client-gnome/src/uimanager.c:814
+msgid "Voicemail"
+msgstr "Sesli mesaj"
+
+#: ../sflphone-client-gnome/src/uimanager.c:121
+msgid "No address book selected"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:144
+#: ../sflphone-client-gnome/src/uimanager.c:862
+msgid "Address book"
+msgstr "Adres Defteri"
+
+#: ../sflphone-client-gnome/src/uimanager.c:327
+#, c-format
+msgid "Voicemail (%i)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:396
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:398
+msgid "About SFLphone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:800
+msgid "Call"
+msgstr "Çağrı"
+
+#: ../sflphone-client-gnome/src/uimanager.c:801
+#: ../sflphone-client-gnome/src/uimanager.c:1311
+msgid "_New call"
+msgstr "_Yeni çağrı"
+
+#: ../sflphone-client-gnome/src/uimanager.c:802
+msgid "Place a new call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:803
+#: ../sflphone-client-gnome/src/uimanager.c:1107
+msgid "_Pick up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:804
+msgid "Answer the call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:806
+msgid "Finish the call"
+msgstr "Aramayı sonlandır"
+
+#: ../sflphone-client-gnome/src/uimanager.c:807
+msgid "O_n hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:808
+msgid "Place the call on hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:809
+msgid "O_ff hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:810
+msgid "Place the call off hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:811
+msgid "Configuration _Assistant"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:812
+msgid "Run the configuration assistant"
+msgstr "Yapılandırma sihirbazını çalıştır"
+
+#: ../sflphone-client-gnome/src/uimanager.c:815
+msgid "Call your voicemail"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:816
+msgid "_Close"
+msgstr "_Kapat"
+
+#: ../sflphone-client-gnome/src/uimanager.c:817
+msgid "Minimize to system tray"
+msgstr "Sistem çubuğuna küçült"
+
+#: ../sflphone-client-gnome/src/uimanager.c:818
+msgid "_Quit"
+msgstr "_Çık"
+
+#: ../sflphone-client-gnome/src/uimanager.c:819
+msgid "Quit the program"
+msgstr "Programdan çık"
+
+#: ../sflphone-client-gnome/src/uimanager.c:822
+msgid "_Edit"
+msgstr "_Düzenle"
+
+#: ../sflphone-client-gnome/src/uimanager.c:823
+msgid "_Copy"
+msgstr "_Kopyala"
+
+#: ../sflphone-client-gnome/src/uimanager.c:824
+msgid "Copy the selection"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:825
+msgid "_Paste"
+msgstr "_Yapıştır"
+
+#: ../sflphone-client-gnome/src/uimanager.c:826
+msgid "Paste the clipboard"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:827
+msgid "Clear _history"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:828
+msgid "Clear the call history"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "_Accounts"
+msgstr "_Hesaplar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "Edit your accounts"
+msgstr "Hesaplarınızı düzenleyin"
+
+#: ../sflphone-client-gnome/src/uimanager.c:831
+msgid "_Preferences"
+msgstr "_Tercihler"
+
+#: ../sflphone-client-gnome/src/uimanager.c:832
+msgid "Change your preferences"
+msgstr "Tercihlerinizi değiştirin"
+
+#: ../sflphone-client-gnome/src/uimanager.c:835
+msgid "_View"
+msgstr "_Göster"
+
+#: ../sflphone-client-gnome/src/uimanager.c:838
+msgid "_Help"
+msgstr "_Yardım"
+
+#: ../sflphone-client-gnome/src/uimanager.c:839
+msgid "Contents"
+msgstr "İçerikler"
+
+#: ../sflphone-client-gnome/src/uimanager.c:840
+msgid "Open the manual"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:841
+msgid "About this application"
+msgstr "Bu uygulama hakkında"
+
+#: ../sflphone-client-gnome/src/uimanager.c:849
+msgid "_Transfer"
+msgstr "_Transfer"
+
+#: ../sflphone-client-gnome/src/uimanager.c:850
+msgid "Transfer the call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:851
+#: ../sflphone-client-gnome/src/uimanager.c:1143
+msgid "_Record"
+msgstr "_Kayıt"
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:853
+msgid "_Show toolbar"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:854
+msgid "Show the toolbar"
+msgstr "Araç çubuğunu göster"
+
+#: ../sflphone-client-gnome/src/uimanager.c:855
+msgid "_Dialpad"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:856
+msgid "Show the dialpad"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:857
+msgid "_Volume controls"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:858
+msgid "Show the volume controls"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:859
+msgid "_History"
+msgstr "_Geçmiş"
+
+#: ../sflphone-client-gnome/src/uimanager.c:860
+msgid "Calls history"
+msgstr "Arama geçmişi"
+
+#: ../sflphone-client-gnome/src/uimanager.c:861
+msgid "_Address book"
+msgstr "_Adres defteri"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1131
+#: ../sflphone-client-gnome/src/uimanager.c:1173
+msgid "On _Hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:1234
+msgid "_Call back"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:1390
+msgid "Edit phone number"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:1402
+msgid "Edit the phone number before making a call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:241
+msgid "Account Parameters"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
+#: ../sflphone-client-gnome/src/config/assistant.c:315
+#: ../sflphone-client-gnome/src/config/assistant.c:428
+msgid "_Alias"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:258
+msgid "_Protocol"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:276
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
+#: ../sflphone-client-gnome/src/config/assistant.c:323
+#: ../sflphone-client-gnome/src/config/assistant.c:436
+msgid "_Host name"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:294
+#: ../sflphone-client-gnome/src/config/assistant.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:444
+msgid "_User name"
+msgstr "_Kullanıcı adı"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:311
+#: ../sflphone-client-gnome/src/config/assistant.c:347
+#: ../sflphone-client-gnome/src/config/assistant.c:459
+msgid "_Password"
+msgstr "_Parola"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:331
+#: ../sflphone-client-gnome/src/config/assistant.c:364
+#: ../sflphone-client-gnome/src/config/assistant.c:474
+msgid "Show password"
+msgstr "Parolayı göster"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:335
+#: ../sflphone-client-gnome/src/config/assistant.c:369
+#: ../sflphone-client-gnome/src/config/assistant.c:479
+msgid "_Voicemail number"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:343
+#, fuzzy
+msgid "_User-agent"
+msgstr "_Kullanıcı adı"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:431
+msgid "Authentication"
+msgstr "Kimlik Doğrulama"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:432
+msgid "Secret"
+msgstr "Gizli"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:686
+msgid "Credential"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:720
+msgid "Authentication name"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:731
+msgid "Password"
+msgstr "Parola"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:790
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1187
+msgid "Security"
+msgstr "Güvenlik"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:801
+msgid "Use TLS transport (sips)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:807
+msgid "SRTP key exchange"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:813
+msgid "Disabled"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:888
+msgid "Registration"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:892
+msgid "Registration expire"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:901
+msgid "_Comply with RFC 3263"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:920
+msgid "Network Interface"
+msgstr "Ağ Arayüzü"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:933
+msgid "Local address"
+msgstr "Yerel adres"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1000
+msgid "Local port"
+msgstr "Yerel port"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1037
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1068
+msgid "Published address"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1041
+msgid "Using STUN"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1048
+msgid "STUN server URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
+msgid "Same as local parameters"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1059
+msgid "Set published address and port:"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1077
+msgid "Published port"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1144
+msgid "Account settings"
+msgstr "Hesap ayarları"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1166
+msgid "Basic"
+msgstr "Basit"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1174
+#: ../sflphone-client-gnome/src/config/audioconf.c:913
+msgid "Codecs"
+msgstr "Çözücüler"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1182
+msgid "Advanced"
+msgstr "Gelişmiş"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1195
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1360
+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
+#, c-format
+msgid "Server returned \"%s\" (%d)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+msgid "Protocol"
+msgstr "İletişim Kuralları"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+msgid "Status"
+msgstr "Durum"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+msgid "Accounts"
+msgstr "Hesaplar"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+msgid "Configured Accounts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#, 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
+msgid "You have no active account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:291
+msgid "General"
+msgstr "Genel"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "_İş"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "_Başlangıç"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "_Hareketli"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "Adres Defterleri"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+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
+msgid "Name"
+msgstr "İsim"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:75
+#, c-format
+msgid "This assistant is now finished."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:77
+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
+msgid "Alias"
+msgstr "Rumuz"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:84
+msgid "Server"
+msgstr "Sunucu"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:88
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:92
+msgid "Security: "
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:94
+msgid "SRTP/ZRTP draft-zimmermann"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:96
+msgid "None"
+msgstr "Hiçbiri"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:230
+msgid "SFLphone account creation wizard"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:256
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:257
+msgid "This installation wizard will help you configure an account."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "VoIP Protocols"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:271
+msgid "Select an account type"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:273
+msgid "SIP (Session Initiation Protocol)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:275
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Account"
+msgstr "Hesap"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:289
+msgid "Please select one of the following options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:291
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:293
+msgid "Register an existing SIP or IAX2 account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+msgid "SIP account settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "Please fill the following information"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:377
+#: ../sflphone-client-gnome/src/config/assistant.c:406
+msgid "Secure communications with _ZRTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "Optional email address"
+msgstr "isteğe bağlı e-posta adresi"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:390
+msgid "This email address will be used to send your voicemail messages."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:398
+msgid "_Email address"
+msgstr "_E-Posta adresi"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:420
+msgid "IAX2 account settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "Network Address Translation (NAT)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:497
+msgid "You should probably enable this if you are behind a firewall."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:506
+msgid "E_nable STUN"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:513
+msgid "_STUN server"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Account Registration"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:527
+msgid "Congratulations!"
+msgstr "Tebrikler!"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:600
+msgid "Frequency"
+msgstr "Frekans"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:605
+msgid "Bitrate"
+msgstr "Veri akış hızı"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:610
+msgid "Bandwidth"
+msgstr "Band Genişliği"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:688
+msgid "ALSA plugin"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:710
+msgid "Output"
+msgstr "Çıkış"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:732
+msgid "Input"
+msgstr "Giriş"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:767
+msgid "_Voice Activity Detection"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:777
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:813
+msgid "Sound Manager"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:822
+msgid "_Pulseaudio"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:826
+msgid "_ALSA"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:832
+msgid "ALSA settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Recordings"
+msgstr "Kayıtlar"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:857
+msgid "Destination folder"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:861
+msgid "Select a folder"
+msgstr "Bir klasör seç"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:867
+msgid "Ringtones"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:873
+msgid "_Enable ringtones"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:879
+msgid "Choose a ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:885
+msgid "Audio Files"
+msgstr "Ses Dosyaları"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:146
+msgid "Desktop Notifications"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:151
+msgid "_Enable notifications"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
+msgid "System Tray Icon"
+msgstr "Sistem Tepsisi Simgesi"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:168
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:175
+msgid "_Popup main window on incoming call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:181
+msgid "Ne_ver popup main window"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:191
+msgid "Hide SFLphone window on _startup"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:205
+msgid "Calls History"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:209
+msgid "_Keep my history for at least"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:224
+msgid "days"
+msgstr "gün"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:270
+msgid "Preferences"
+msgstr "Tercihler"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:297
+msgid "Audio"
+msgstr "Ses"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+msgid "Address Book"
+msgstr "Adres Defteri"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
+msgid "Hooks"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+msgid "Advanced options for TLS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+msgid "TLS transport"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+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:107
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+msgid "Certificate of Authority list"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+msgid "Choose a CA list file (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+msgid "Public endpoint certificate file"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+msgid "Choose a public endpoint certificate (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+msgid "Choose a private key file (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+msgid "Password for the private key"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+msgid "TLS protocol method"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+msgid "TLS cipher list"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+msgid "Server name instance for outgoing TLS connection"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+msgid "Negotiation timeout (sec:msec)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+msgid "Verify incoming certificates, as a server"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+msgid "Verify certificates from answer, as a client"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+msgid "Require certificate for incoming tls connections"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+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
+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
+msgid "Search by missed call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+msgid "Search by incoming call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+msgid "Search by outgoing call"
+msgstr ""
-- 
GitLab


From 01048011551578b65162d8c649ab996057f77b31 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 2 Mar 2010 17:14:28 -0500
Subject: [PATCH 096/160] [#2926] Cleanup

---
 sflphone-common/src/sip/sdp.cpp         |  6 +++---
 sflphone-common/src/sip/sipvoiplink.cpp | 24 +++++++++++++-----------
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index 886dc1430f..b46d35bb46 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -240,17 +240,17 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
         message = rdata->msg_info.msg;
 
         if (message == NULL) {
-            _error ("No message");
+            _error ("SDP: No message");
             return PJMEDIA_SDP_EINSDP;
         }
 
         if (message->body == NULL) {
-            _error ("Empty message body");
+            _error ("SDP: Empty message body");
             return PJMEDIA_SDP_EINSDP;
         }
 
         if (pj_stricmp (&message->body->content_type.type, &str_application) || pj_stricmp (&message->body->content_type.subtype, &str_sdp)) {
-            _error ("Incoming Message does not contain SDP");
+            _error ("SDP: Incoming Message does not contain SDP");
             return PJMEDIA_SDP_EINSDP;
         }
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 5c5bed5941..c4fb1fb8ee 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1497,20 +1497,20 @@ void
 SIPVoIPLink::SIPCallAnswered (SIPCall *call, pjsip_rx_data *rdata)
 {
 
-    _debug ("SIPCallAnswered");
+    _info ("UserAgent: SIP call answered");
 
     if (!call) {
-        _debug ("! SIP Failure: unknown call");
+        _warn ("UserAgent: Error: SIP failure, unknown call");
         return;
     }
 
     if (call->getConnectionState() != Call::Connected) {
-        _debug ("Update call state , id = %s", call->getCallId().c_str());
+        _debug ("UserAgent: Update call state , id = %s", call->getCallId().c_str());
         call->setConnectionState (Call::Connected);
         call->setState (Call::Active);
         Manager::instance().peerAnsweredCall (call->getCallId());
     } else {
-        _debug ("* SIP Info: Answering call (on/off hold to send ACK)");
+        _debug ("UserAgent: Answering call (on/off hold to send ACK)");
     }
 }
 
@@ -3076,7 +3076,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         status = call->getLocalSDP()->check_sdp_answer (inv, rdata);
 
         if (status != PJ_SUCCESS) {
-            _debug ("Failed to check_incoming_sdp in call_on_state_changed");
+            _warn ("UserAgent: Failed to check_incoming_sdp in call_on_state_changed");
             return;
         }
     }
@@ -3434,12 +3434,12 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     // No need to go any further on incoming ACK
     if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD) {
-        _debug("UserAgent: received an ACK");
+        _info("UserAgent: received an ACK");
 	return true;
     }
 
     // Handle the incoming call invite in this function
-    _debug("UserAgent: Receiving REQUEST using transport: %s %s (refcnt=%d)",
+    _info("UserAgent: Receiving REQUEST using transport: %s %s (refcnt=%d)",
 	   rdata->tp_info.transport->obj_name,
 	   rdata->tp_info.transport->info,
 	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
@@ -3470,7 +3470,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     /* If we can't find any voIP link to handle the incoming call */
     if (!link) {
-        _warn("ERROR: cannot retrieve the voiplink from the account ID...");
+        _warn("UserAgent: Error: cannot retrieve the voiplink from the account ID...");
 	pj_strdup2 (_pool, &reason, "ERROR: cannot retrieve the voip link from account");
         pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
 				       &reason, NULL, NULL);
@@ -3582,7 +3582,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     /************************************************************************************************/
 
-    _debug ("UserAgent: Create a new call");
+    _info ("UserAgent: Create a new call");
 
     // Generate a new call ID for the incoming call!
     id = Manager::instance().getNewCallID();
@@ -3639,7 +3639,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     // Notify UI there is an incoming call
 
-    _debug ("Add call to account link");
+    _debug ("UserAgent: Add call to account link");
 
     if (Manager::instance().incomingCall (call, account_id)) {
         // Add this call to the callAccountMap in ManagerImpl
@@ -3672,7 +3672,8 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     if (status!=PJ_SUCCESS) {
         delete call; call = NULL;
-	pj_strdup2 (_pool, &reason, "fail in receiving local offer");
+        _warn("UserAgent: fail in receiving initial offer");
+        pj_strdup2 (_pool, &reason, "fail in receiving initial offer");
         pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
 				       &reason, NULL, NULL);
         return false;
@@ -3683,6 +3684,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     status = pjsip_dlg_create_uas (pjsip_ua_instance(), rdata, NULL, &dialog);
     if (status != PJ_SUCCESS) {
         delete call; call = NULL;
+        _warn("UserAgent: Error: Failed to create uas dialog");
         pj_strdup2 (_pool, &reason, "fail to create uas dialog");
         pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
 				       &reason, NULL, NULL);
-- 
GitLab


From d6928d411f12f7b1f76ac30e33c72ded73329a64 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 2 Mar 2010 17:52:04 -0500
Subject: [PATCH 097/160] [#2926] Cleanup

---
 sflphone-common/src/sip/sdp.cpp         | 20 +++++++++-----------
 sflphone-common/src/sip/sipvoiplink.cpp | 11 ++++++-----
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index b46d35bb46..4d6505740f 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -134,7 +134,7 @@ int Sdp::create_local_offer (CodecOrder selectedCodecs) {
 
     pj_status_t status;
 
-    _debug ("Create local offer");
+    _info("SDP: Create local offer");
 
     // Build local media capabilities
     set_local_media_capabilities (selectedCodecs);
@@ -173,12 +173,12 @@ int Sdp::create_initial_offer (CodecOrder selectedCodecs) {
     pj_status_t status;
     pjmedia_sdp_neg_state state;
 
-    _debug ("Create initial offer");
+    _info("SDP: Create initial offer");
     // Build the SDP session descriptor
     status = create_local_offer (selectedCodecs);
 
     if (status != PJ_SUCCESS) {
-        _warn ("    Error: Failed to create initial offer");
+        _error ("SDP: Error: Failed to create initial offer");
         return status;
     }
 
@@ -186,7 +186,7 @@ int Sdp::create_initial_offer (CodecOrder selectedCodecs) {
     status = pjmedia_sdp_neg_create_w_local_offer (_pool, get_local_sdp_session(), &_negociator);
 
     if (status != PJ_SUCCESS) {
-        _error ("    Error: Failed to create an initial SDP negociator");
+        _error ("SDP: Error: Failed to create an initial SDP negociator");
         return status;
     }
 
@@ -194,8 +194,6 @@ int Sdp::create_initial_offer (CodecOrder selectedCodecs) {
 
     PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
 
-    _debug ("    Initial offer created succesfully");
-
     return PJ_SUCCESS;
 }
 
@@ -213,6 +211,7 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder select
     status = create_local_offer (selectedCodecs);
 
     if (status != PJ_SUCCESS) {
+    	_error ("SDP: Error: Failed to create initial offer");
         return status;
     }
 
@@ -220,7 +219,7 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder select
     this->set_media_transport_info_from_remote_sdp (remote);
 
     status = pjmedia_sdp_neg_create_w_remote_offer (_pool,
-             get_local_sdp_session(), remote, &_negociator);
+    get_local_sdp_session(), remote, &_negociator);
 
     PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
 
@@ -262,17 +261,17 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
         }
 
         if (status != PJ_SUCCESS) {
-            _debug ("SDP cannot be validated");
+            _warn ("SDP: cannot be validated");
             return PJMEDIA_SDP_EINSDP;
         }
 
         // This is an answer
-        _debug ("Got SDP answer %s", pjsip_rx_data_get_info (rdata));
+        _debug ("SDP: Got SDP answer %s", pjsip_rx_data_get_info (rdata));
 
         status = pjmedia_sdp_neg_set_remote_answer (inv->pool, inv->neg, remote_sdp);
 
         if (status != PJ_SUCCESS) {
-            _debug ("An error occured while processing remote answer %s", pjsip_rx_data_get_info (rdata));
+            _error ("SDP: Error: while processing remote answer %s", pjsip_rx_data_get_info (rdata));
             return PJMEDIA_SDP_EINSDP;
         }
 
@@ -359,7 +358,6 @@ void Sdp::sdp_add_media_description()
     }
 }
 
-// @TODO crypto should be a vector of string
 void Sdp::sdp_add_sdes_attribute (std::vector<std::string>& crypto)
 {
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index c4fb1fb8ee..fdbbd7f59e 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -738,7 +738,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
         account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (Manager::instance().getAccountFromCall (id)));
 
         if (account == NULL) {
-            _debug ("Error retrieving the account to the make the call with");
+            _error ("UserAgent: Error: Could not retrieving account to make call with");
             call->setConnectionState (Call::Disconnected);
             call->setState (Call::Error);
             delete call;
@@ -764,16 +764,17 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
             loadSIPLocalIP (&addrSdp);
 
         try {
-            _debug ("Creating new rtp session in newOutgoingCall");
-	    call->getAudioRtp()->initAudioRtpConfig (call);
+            _info ("UserAgent: Creating new rtp session");
+            call->getAudioRtp()->initAudioRtpConfig (call);
             call->getAudioRtp()->initAudioRtpSession (call);
         } catch (...) {
-            _error ("Failed to create rtp thread from newOutGoingCall");
+            _error ("UserAgent: Error: Failed to create rtp thread from newOutGoingCall");
         }
 
         call->initRecFileName();
 
-        _debug ("Try to make a call to: %s with call ID: %s", toUrl.data(), id.data());
+        _debug ("UserAgent: Try to make a call to: %s with call ID: %s", toUrl.data(), id.data());
+
         // Building the local SDP offer
         call->getLocalSDP()->set_ip_address (addrSdp);
         status = call->getLocalSDP()->create_initial_offer (account->getActiveCodecs ());
-- 
GitLab


From db7229a5459b61a03e7da28fd9a88cfb917dc484 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 3 Mar 2010 16:09:26 -0500
Subject: [PATCH 098/160] restore autogen.sh for detecting arch

---
 sflphone-common/libs/pjproject/autogen.sh | 26 +++++++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 sflphone-common/libs/pjproject/autogen.sh

diff --git a/sflphone-common/libs/pjproject/autogen.sh b/sflphone-common/libs/pjproject/autogen.sh
new file mode 100644
index 0000000000..695c27e85e
--- /dev/null
+++ b/sflphone-common/libs/pjproject/autogen.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+#####################################################
+# File Name: autogen.sh
+#
+# Purpose :
+#
+# Author: Julien Bonjean (julien@bonjean.info) 
+#
+# Creation Date: 2009-05-26
+# Last Modified: 2009-06-01 18:25:28 -0400
+#####################################################
+
+if [ -e /usr/share/misc/config.guess ]; then
+	rm -f config.sub config.guess
+        ln -s /usr/share/misc/config.sub .
+        ln -s /usr/share/misc/config.guess .	
+elif [ -e /usr/lib/rpm/config.guess ]; then
+	rm -f config.sub config.guess
+	ln -s /usr/lib/rpm/config.sub .
+	ln -s /usr/lib/rpm/config.guess .
+else
+	aclocal --force
+	automake --add-missing --force-missing --copy	
+fi
+
+exit 0
-- 
GitLab


From 9d97dd073e71163764b683e604e59007daa02cae Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Mar 2010 13:25:09 -0500
Subject: [PATCH 099/160] [#2977] Dtmf over RTP implemented

Missing user configuration in GUI
---
 .../src/audio/audiortp/AudioRtpFactory.cpp    |  16 +++
 .../src/audio/audiortp/AudioRtpFactory.h      | 100 +++++++-------
 .../src/audio/audiortp/AudioRtpSession.h      | 124 ++++++++++++++++--
 .../src/audio/audiortp/AudioSrtpSession.cpp   |   6 -
 sflphone-common/src/managerimpl.cpp           |  18 +--
 sflphone-common/src/sip/sipaccount.cpp        |   3 +-
 sflphone-common/src/sip/sipaccount.h          |  36 +++--
 sflphone-common/src/sip/sipvoiplink.cpp       | 121 +++++++++++------
 sflphone-common/src/sip/sipvoiplink.h         |  12 +-
 9 files changed, 296 insertions(+), 140 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
index 646aa89b95..cb3480979e 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
@@ -229,6 +229,22 @@ void AudioRtpFactory::setRemoteCryptoInfo(sfl::SdesNegotiator& nego)
     }
 }
 
+void AudioRtpFactory::sendDtmfDigit(int digit) {
+	switch(_rtpSessionType) {
+
+	case Sdes:
+		static_cast<AudioSrtpSession *> (_rtpSession)->putDtmfEvent(digit);
+		break;
+
+	case Symmetric:
+		static_cast<AudioSymmetricRtpSession *> (_rtpSession)->putDtmfEvent(digit);
+		break;
+
+	case Zrtp:
+		static_cast<AudioZrtpSession *> (_rtpSession)->putDtmfEvent(digit);
+		break;
+	}
+}
 }
 
 
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
index 0076c968c8..a1c93d2cdc 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
@@ -86,31 +86,31 @@ namespace sfl {
 	void stop();
 
 	/**
-         * Update current RTP destination address with one stored in call 
-         * @param None
-         */
+	 * Update current RTP destination address with one stored in call
+	 * @param None
+	 */
 	void updateDestinationIpAddress (void);
           
-        /** 
-        * @param None
-        * @return The internal audio rtp thread of the type specified in the configuration
-        * file. initAudioRtpSession must have been called prior to that. 
-        */  
-        inline void * getAudioRtpSession(void) { return _rtpSession; }
+	/**
+	 * @param None
+	 * @return The internal audio rtp thread of the type specified in the configuration
+	 * file. initAudioRtpSession must have been called prior to that.
+	 */
+	inline void * getAudioRtpSession(void) { return _rtpSession; }
 
 	/** 
-        * @param None
-        * @return The internal audio rtp session type 
-	*         Symmetric = 0
-        *         Zrtp = 1
-        *         Sdes = 2 
-        */  
-        inline RtpMethod getAudioRtpType(void) { return _rtpSessionType; }
+	 * @param None
+	 * @return The internal audio rtp session type
+	 *         Symmetric = 0
+	 *         Zrtp = 1
+	 *         Sdes = 2
+	 */
+	inline RtpMethod getAudioRtpType(void) { return _rtpSessionType; }
 	
-        /** 
-        * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes) 
-        */  
-        inline void setAudioRtpType(RtpMethod type) { _rtpSessionType = type; }
+	/**
+	 * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes)
+	 */
+	inline void setAudioRtpType(RtpMethod type) { _rtpSessionType = type; }
 
 	/**
 	 * Manually set the srtpEnable option (usefull for RTP fallback)
@@ -127,35 +127,43 @@ namespace sfl {
 	 */
 	void setHelloHashEnabled(bool enable){ _helloHashEnabled = enable; }
  
-        /**
-         * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException
-         * if the current rtp thread is null, or if it's not of the correct type.
-         * @return The current AudioZrtpSession thread.
-         */
-        sfl::AudioZrtpSession * getAudioZrtpSession();  
+	/**
+	 * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException
+	 * if the current rtp thread is null, or if it's not of the correct type.
+	 * @return The current AudioZrtpSession thread.
+	 */
+	sfl::AudioZrtpSession * getAudioZrtpSession();
 
 	/**
-         * Set remote cryptographic info. Should be called after negotiation in SDP
+	 * Set remote cryptographic info. Should be called after negotiation in SDP
 	 * offer/answer session.
-         */
-        void setRemoteCryptoInfo(sfl::SdesNegotiator& nego);   
+	 */
+	void setRemoteCryptoInfo(sfl::SdesNegotiator& nego);
+
+	/**
+	 * 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 sendDtmfDigit(int digit);
         
-        private:
-           void * _rtpSession;
-           RtpMethod _rtpSessionType;
-           ost::Mutex _audioRtpThreadMutex;
-
-	   // Field used when initializinga udio rtp session
-	   // May be set manually or from config using initAudioRtpConfig
-	   bool _srtpEnabled;
-
-	   // Field used when initializinga udio rtp session
-	   // May be set manually or from config using initAudioRtpConfig
-	   int _keyExchangeProtocol;
-
-	   // Field used when initializinga udio rtp session
-	   // May be set manually or from config using initAudioRtpConfig
-	   bool _helloHashEnabled;
-    };
+private:
+	void * _rtpSession;
+	RtpMethod _rtpSessionType;
+	ost::Mutex _audioRtpThreadMutex;
+
+	// Field used when initializinga udio rtp session
+	// May be set manually or from config using initAudioRtpConfig
+	bool _srtpEnabled;
+
+	// Field used when initializinga udio rtp session
+	// May be set manually or from config using initAudioRtpConfig
+	int _keyExchangeProtocol;
+
+	// Field used when initializinga udio rtp session
+	// May be set manually or from config using initAudioRtpConfig
+	bool _helloHashEnabled;
+};
 }
 #endif // __AUDIO_RTP_FACTORY_H__
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index b6d4908445..cb0578beaa 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -25,6 +25,7 @@
 
 #include <iostream>
 #include <exception>
+#include <list>
 
 #include "global.h"
 
@@ -43,6 +44,7 @@ namespace sfl {
     static const int schedulingTimeout = 100000;
     static const int expireTimeout = 1000000;
     
+
     class AudioRtpSessionException: public std::exception
     {
       virtual const char* what() const throw()
@@ -51,6 +53,14 @@ namespace sfl {
       }
     };
     
+    typedef struct DtmfEvent {
+    	ost::RTPPacket::RFC2833Payload payload;
+    	int length;
+    	bool newevent;
+    } DtmfEvent;
+
+    typedef list<DtmfEvent *> EventQueue;
+
     template <typename D>
     class AudioRtpSession : public ost::Thread, public ost::TimerPort {
         public:
@@ -72,6 +82,16 @@ namespace sfl {
              */
             void updateDestinationIpAddress(void);
 
+            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.
+            	 */
+            void sendDtmfEvent(sfl::DtmfEvent *dtmf);
+
         private:
         
             void initBuffers(void);
@@ -178,6 +198,11 @@ namespace sfl {
               * Time counter used to trigger incoming call notification
               */
              int _countNotificationTime;
+
+             /**
+              * EventQueue used to store list of DTMF-
+              */
+             EventQueue _eventQueue;
             
         protected:
              SIPCall * _ca;
@@ -316,8 +341,8 @@ namespace sfl {
     void AudioRtpSession<D>::setDestinationIpAddress(void)
     {
         if (_ca == NULL) {
-            _warn ("Rtp: Sipcall is gone.");
-            throw AudioRtpSessionException();
+        	_warn ("Rtp: Sipcall is gone.");
+			throw AudioRtpSessionException();
         }
         
         _info ("RTP: Setting IP address for the RTP session");
@@ -338,8 +363,8 @@ namespace sfl {
         _ca->getLocalSDP()->get_remote_ip().data(), _remote_port);
 
         if (! static_cast<D*>(this)->addDestination (_remote_ip, _remote_port)) {
-            _warn("Rtp: Can't add new destination to session!");
-            return;
+        	_warn("Rtp: Can't add new destination to session!");
+			return;
         }
     }
 
@@ -357,6 +382,68 @@ namespace sfl {
         setDestinationIpAddress();
     }
     
+    template<typename D>
+    void AudioRtpSession<D>::putDtmfEvent(int digit)
+    {
+
+    	sfl::DtmfEvent *dtmf = new sfl::DtmfEvent();
+
+		dtmf->payload.event = digit;
+    	dtmf->payload.ebit = false; 			// end of event bit
+    	dtmf->payload.rbit = false;  		// reserved bit
+    	dtmf->payload.duration = 1; 	        // duration for this event
+    	dtmf->newevent = true;
+    	dtmf->length = 1000;
+
+    	_eventQueue.push_back(dtmf);
+
+    	_debug("RTP: Put Dtmf Event %d", _eventQueue.size());
+
+    }
+
+    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));
+
+		 // 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));
+
+		 // 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;
+
+		 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>
     int AudioRtpSession<D>::processDataEncode(void)
     {
@@ -364,7 +451,7 @@ namespace sfl {
         assert(_audiolayer);
 
 	
-	int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+        int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
         // compute codec framesize in ms
         float fixed_codec_framesize = computeCodecFrameSize (_audiocodec->getFrameSize(), _audiocodec->getClockRate());
@@ -399,7 +486,7 @@ namespace sfl {
 
         } else {
 
-	    _nSamplesMic = nbSample; 
+        	_nSamplesMic = nbSample;
 
             // no resampling required
             compSize = _audiocodec->codecEncode (_micDataEncoded, _micData, nbSample*sizeof (int16));
@@ -472,7 +559,6 @@ namespace sfl {
         //   4. send it
 
         // Increment timestamp for outgoing packet
-        
         _timestamp += _codecFrameSize;
 
         if (!_audiolayer) {
@@ -518,10 +604,16 @@ namespace sfl {
 
         unsigned int size = adu->getSize(); // size in char
 
-	// DTMF over RTP, size must be over 4 in order to process it as voice data
-	if(size > 4) {
-	    processDataDecode (spkrData, size);
-	}
+        // DTMF over RTP, size must be over 4 in order to process it as voice data
+        if(size > 4) {
+        	processDataDecode (spkrData, size);
+        }
+        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);
+
+        }
     }
     
     template <typename D>
@@ -580,7 +672,12 @@ namespace sfl {
             // Send session
             sessionWaiting = static_cast<D*>(this)->isWaiting();
 
-            sendMicData ();
+            if(_eventQueue.size() > 0) {
+            	sendDtmfEvent(_eventQueue.front());
+            }
+            else {
+            	sendMicData ();
+            }
 
             // Recv session
             receiveSpeakerData ();
@@ -594,8 +691,7 @@ namespace sfl {
                 _ca->recAudio.recData (_micData,_nSamplesMic);
             }
 
-	    // ost::MutexLock unlock(*(_manager->getAudioLayerMutex()));
-	    _manager->getAudioLayerMutex()->leave();
+            _manager->getAudioLayerMutex()->leave();
 
             // Let's wait for the next transmit cycle
             Thread::sleep (TimerPort::getTimer());
diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
index 26b4290394..0595cf4366 100644
--- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
@@ -33,12 +33,6 @@
 #include <cstring>
 #include <cerrno>
 
-static uint8 mk[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-		      0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
-
-static uint8 ms[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
-		      0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d };
-
 
 namespace sfl
 {
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index f4e3f899eb..bf60e374f0 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -1461,22 +1461,8 @@ bool ManagerImpl::sendDtmf (const CallID& id, char code) {
 
 	bool returnValue = false;
 
-	switch (sendType) {
-
-	case 0: // SIP INFO
-		playDtmf(code);
-		returnValue = getAccountLink(accountid)->carryingDTMFdigits(id, code);
-		break;
-
-	case 1: // Audio way
-		break;
-
-	case 2: // rfc 2833
-		break;
-
-	default: // unknown - error config?
-		break;
-	}
+	playDtmf(code);
+	returnValue = getAccountLink(accountid)->carryingDTMFdigits(id, code);
 
 	return returnValue;
 }
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index 4541d675c9..9d91ffaf68 100644
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -33,7 +33,7 @@ SIPAccount::SIPAccount (const AccountID& accountID)
         , _publishedIpAddress ("")
         , _localPort (atoi (DEFAULT_SIP_PORT))
         , _publishedPort (atoi (DEFAULT_SIP_PORT))
-	, _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT))
+		, _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT))
         , _transportType (PJSIP_TRANSPORT_UNSPECIFIED)
         , _transport (NULL)
         , _resolveOnce (false)
@@ -42,6 +42,7 @@ SIPAccount::SIPAccount (const AccountID& accountID)
         , _realm (DEFAULT_REALM)
         , _authenticationUsername ("")
         , _tlsSetting (NULL)
+	    , _dtmfType(OVERRTP)
         , _displayName ("")
 {
     
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index dd9782f2d9..c6cdb021a3 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -31,6 +31,8 @@
 #include "pjsip/sip_transport_tls.h"
 #include "pjsip/sip_types.h"
 
+enum DtmfType { OVERRTP, SIPINFO};
+
 class SIPVoIPLink;
 
 /**
@@ -95,7 +97,7 @@ class SIPAccount : public Account
 	 *
 	 * @return A string describing the expiration value.
 	 */
-        inline std::string& getRegistrationExpire(void) { return _registrationExpire; }
+	inline std::string& getRegistrationExpire(void) { return _registrationExpire; }
 
 	/**
 	 * Setting the Expiration Interval of Contact Addresses.
@@ -297,11 +299,15 @@ class SIPAccount : public Account
          */
         inline pjsip_transport_type_e getTransportType(void) { return _transportType; }
         
-	inline pjsip_transport* getAccountTransport (void) { return _transport; }
+        inline pjsip_transport* getAccountTransport (void) { return _transport; }
+
+        inline void setAccountTransport (pjsip_transport *transport) { _transport = transport; }
 
-	inline void setAccountTransport (pjsip_transport *transport) { _transport = transport; }
+        std::string getTransportMapKey(void);
 
-	std::string getTransportMapKey(void);
+        DtmfType getDtmfType(void) { return _dtmfType; }
+
+        void setDtmfType(DtmfType type) { _dtmfType = type; }
 
   private: 
 
@@ -353,22 +359,22 @@ class SIPAccount : public Account
         // Network settings
         std::string _registrationExpire;
 
-	// interface name on which this account is bound
-	std::string _interface;
+        // interface name on which this account is bound
+        std::string _interface;
 
-	// Flag which determine if _localIpAddress or _publishedIpAddress is used in 
+        // Flag which determine if _localIpAddress or _publishedIpAddress is used in
         // sip headers
-	bool _publishedSameasLocal;
+        bool _publishedSameasLocal;
                 
         std::string _publishedIpAddress;
         
         pj_uint16_t _localPort;
         pj_uint16_t _publishedPort;
 
-	/**
-	 * The global TLS listener port which can be configured through the IP2IP_PROFILE 
-	 */ 
-	pj_uint16_t _tlsListenerPort;
+        /**
+         * The global TLS listener port which can be configured through the IP2IP_PROFILE
+         */
+        pj_uint16_t _tlsListenerPort;
         
         pjsip_transport_type_e _transportType;
 
@@ -391,8 +397,10 @@ class SIPAccount : public Account
         // The STUN server name, if applicable
         pj_str_t _stunServerName;	                                                  
 
-	// The STUN server port, if applicable
-	pj_uint16_t _stunPort;
+        // The STUN server port, if applicable
+        pj_uint16_t _stunPort;
+
+        DtmfType _dtmfType;
         
         // Display Name that can be used in  SIP URI.        
         std::string _displayName;        
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index fdbbd7f59e..b22e053aca 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1235,68 +1235,104 @@ SIPVoIPLink::getCurrentCodecName()
 bool
 SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code)
 {
+    SIPCall *call = getSIPCall (id);
 
-    SIPCall *call;
-    int duration;
-    const int body_len = 1000;
-    char *dtmf_body;
-    pj_status_t status;
-    pjsip_tx_data *tdata;
-    pj_str_t methodName, content;
-    pjsip_method method;
-    pjsip_media_type ctype;
+    if (!call) {
+        _error ("UserAgent: Error: Call doesn't exist while sending DTMF");
+        return false;
+    }
 
-    call = getSIPCall (id);
+    AccountID accountID = Manager::instance().getAccountFromCall(id);
+    SIPAccount *account = static_cast<SIPAccount *>(Manager::instance().getAccount(accountID));
 
-    if (call==0) {
-        _debug ("Call doesn't exist");
-        return false;
+    if(!account) {
+    	_error ("UserAgent: Error: Account not found while sending DTMF");
+    	return false;
     }
 
-    duration = Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH);
+    DtmfType type = account->getDtmfType();
 
-    dtmf_body = new char[body_len];
+    if(type == OVERRTP)
+    	dtmfOverRtp(call, code);
+    else if(type == SIPINFO)
+    	dtmfSipInfo(call, code);
+    else {
+    	_error("UserAgent: Error: Dtmf type does not exist");
+    	return false;
+    }
 
-    snprintf (dtmf_body, body_len - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration);
+    return true;
+}
 
-    pj_strdup2 (_pool, &methodName, "INFO");
-    pjsip_method_init_np (&method, &methodName);
 
-    /* Create request message. */
-    status = pjsip_dlg_create_request (call->getInvSession()->dlg, &method, -1, &tdata);
+bool
+SIPVoIPLink::dtmfSipInfo(SIPCall *call, char code)
+{
 
-    if (status != PJ_SUCCESS) {
-        _debug ("UserAgent: Unable to create INFO request -- %d", status);
-        return false;
-    }
+	int duration;
+	const int body_len = 1000;
+	char *dtmf_body;
+	pj_status_t status;
+	pjsip_tx_data *tdata;
+	pj_str_t methodName, content;
+	pjsip_method method;
+	pjsip_media_type ctype;
 
-    /* Get MIME type */
-    pj_strdup2 (_pool, &ctype.type, "application");
 
-    pj_strdup2 (_pool, &ctype.subtype, "dtmf-relay");
+	duration = Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH);
 
-    /* Create "application/dtmf-relay" message body. */
-    pj_strdup2 (_pool, &content, dtmf_body);
+	dtmf_body = new char[body_len];
 
-    tdata->msg->body = pjsip_msg_body_create (tdata->pool, &ctype.type, &ctype.subtype, &content);
+	snprintf (dtmf_body, body_len - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration);
 
-    if (tdata->msg->body == NULL) {
-        _debug ("UserAgent: Unable to create msg body!");
-        pjsip_tx_data_dec_ref (tdata);
-        return false;
-    }
+	pj_strdup2 (_pool, &methodName, "INFO");
+	pjsip_method_init_np (&method, &methodName);
 
-    /* Send the request. */
-    status = pjsip_dlg_send_request (call->getInvSession()->dlg, tdata, getModId(), NULL);
+	/* Create request message. */
+	status = pjsip_dlg_create_request (call->getInvSession()->dlg, &method, -1, &tdata);
 
-    if (status != PJ_SUCCESS) {
-        _debug ("UserAgent: Unable to send MESSAGE request -- %d", status);
-        return false;
-    }
+	if (status != PJ_SUCCESS) {
+		_debug ("UserAgent: Unable to create INFO request -- %d", status);
+		return false;
+	}
 
-    return true;
+	/* Get MIME type */
+	pj_strdup2 (_pool, &ctype.type, "application");
+
+	pj_strdup2 (_pool, &ctype.subtype, "dtmf-relay");
+
+	/* Create "application/dtmf-relay" message body. */
+	pj_strdup2 (_pool, &content, dtmf_body);
+
+	tdata->msg->body = pjsip_msg_body_create (tdata->pool, &ctype.type, &ctype.subtype, &content);
+
+	if (tdata->msg->body == NULL) {
+		_debug ("UserAgent: Unable to create msg body!");
+		pjsip_tx_data_dec_ref (tdata);
+		return false;
+	}
+
+	/* Send the request. */
+	status = pjsip_dlg_send_request (call->getInvSession()->dlg, tdata, getModId(), NULL);
+
+	if (status != PJ_SUCCESS) {
+		_debug ("UserAgent: Unable to send MESSAGE request -- %d", status);
+		return false;
+	}
+
+	return true;
+}
+
+bool
+SIPVoIPLink::dtmfOverRtp(SIPCall* call, char code)
+{
+	call->getAudioRtp()->sendDtmfDigit(atoi(&code));
+
+	return true;
 }
 
+
+
 bool
 SIPVoIPLink::SIPOutgoingInvite (SIPCall* call)
 {
@@ -2783,6 +2819,7 @@ void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
 }
 
 
+
 bool SIPVoIPLink::loadSIPLocalIP (std::string *addr)
 {
 
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 67108a7b93..445a28b6fd 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -178,13 +178,23 @@ class SIPVoIPLink : public VoIPLink
         bool refuse (const CallID& id);
 
         /**
-         * Send DTMF
+         * Send DTMF refering to account configuration
          * @param id The call identifier
          * @param code  The char code
          * @return bool True on success
          */
         bool carryingDTMFdigits(const CallID& id, char code);
 
+        /**
+         * Send Dtmf using SIP INFO message
+         */
+        bool dtmfSipInfo(SIPCall *call, char code);
+
+        /**
+         * Send Dtmf over RTP
+         */
+        bool dtmfOverRtp(SIPCall* call, char code);
+
         /** 
          * Terminate every call not hangup | brutal | Protected by mutex 
          */
-- 
GitLab


From 315cbc2debfe9ab82fd29d0b508b0c48c2327373 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Mar 2010 15:59:47 -0500
Subject: [PATCH 100/160] [#2977] Added DTMF type configuration on a per
 account basis in GUI

---
 .../src/config/accountconfigdialog.c          | 75 +++++++++++++++++++
 sflphone-client-gnome/src/config/audioconf.c  |  3 +-
 sflphone-client-gnome/src/sflphone_const.h    |  5 ++
 sflphone-common/src/account.h                 |  2 +
 sflphone-common/src/managerimpl.cpp           |  8 ++
 sflphone-common/src/sip/sipaccount.cpp        |  5 ++
 sflphone-common/src/sip/sipaccount.h          |  3 +
 7 files changed, 100 insertions(+), 1 deletion(-)

diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index 4f7e34ee3f..63f9d9d141 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -90,6 +90,8 @@ GtkWidget * displayNameEntry;
 GtkWidget * security_tab;
 GtkWidget * advanced_tab;
 
+GtkWidget * overrtp;
+
 GHashTable * directIpCallsProperties = NULL;
 
 // Credentials
@@ -134,6 +136,25 @@ is_iax_enabled(void)
 }
 
 
+        void
+select_dtmf_type( void )
+{
+
+        DEBUG("DTMF selection changed\n");
+
+        if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(overrtp) ) )
+        {
+                // dbus_set_audio_manager( ALSA );
+                DEBUG("Selected DTMF over RTP");
+        }
+        else {
+
+                // dbus_set_audio_manager( PULSEAUDIO );
+                DEBUG("Selected DTMF over SIP");
+        }
+
+}
+
 static GPtrArray* getNewCredential (GHashTable * properties) {
 
 	GtkTreeIter iter;
@@ -1119,6 +1140,53 @@ GtkWidget* create_advanced_tab (account_t **a) {
 	return ret;
 }
 
+GtkWidget* create_codecs_configuration (account_t **a) {
+
+        // Main widget
+        GtkWidget *ret, *codecs, *dtmf, *box, *frame, *sipinfo, *table;
+        account_t *currentAccount = *a;
+        gchar *currentDtmfType = "";
+        gboolean dtmf_are_rtp = TRUE;
+
+        ret = gtk_vbox_new(FALSE, 10);
+        gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+
+        box = codecs_box (a);
+
+        // Box for the codecs
+        gnome_main_section_new (_("Codecs"), &codecs);
+        gtk_box_pack_start (GTK_BOX(ret), codecs, FALSE, FALSE, 0);
+        gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
+        gtk_widget_show (codecs);
+        gtk_container_add (GTK_CONTAINER (codecs) , box);
+
+        // Box for dtmf
+        gnome_main_section_new_with_table (_("DTMF"), &dtmf, &table, 1, 2);
+        gtk_box_pack_start (GTK_BOX(ret), dtmf, FALSE, FALSE, 0);
+        gtk_widget_show (dtmf);
+
+
+        currentDtmfType = g_hash_table_lookup (currentAccount->properties, g_strdup(ACCOUNT_DTMF_TYPE));
+        if (g_strcasecmp(currentDtmfType, OVERRTP) != 0) {
+            dtmf_are_rtp = FALSE;
+        }
+
+        overrtp = gtk_radio_button_new_with_label( NULL, _("RTP") );
+        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(overrtp), dtmf_are_rtp);
+        gtk_table_attach ( GTK_TABLE( table ), overrtp, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+       sipinfo = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(overrtp),  _("SIP"));
+        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(sipinfo), !dtmf_are_rtp);
+        g_signal_connect(G_OBJECT(sipinfo), "clicked", G_CALLBACK(select_dtmf_type), NULL);
+        gtk_table_attach ( GTK_TABLE( table ), sipinfo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+
+        gtk_widget_show_all(ret);
+
+        return ret;
+
+}
+
 void show_account_window (account_t * a) {
 
 	GtkWidget * notebook;
@@ -1277,6 +1345,13 @@ void show_account_window (account_t * a) {
 			}
 
 
+			if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overrtp))) {
+			    g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_DTMF_TYPE), g_strdup(OVERRTP));
+			}
+			else {
+			    g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_DTMF_TYPE), g_strdup(SIPINFO));
+			}
+
 			gchar* keyExchange = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo));
 
 			if (g_strcasecmp(keyExchange, "ZRTP") == 0) {
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index ce269415c6..322801a904 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -900,7 +900,7 @@ GtkWidget* create_audio_configuration()
 
 	return ret;
 }
-
+/*
 GtkWidget* create_codecs_configuration (account_t **a) {
 
 	// Main widget
@@ -922,3 +922,4 @@ GtkWidget* create_codecs_configuration (account_t **a) {
 	return ret;
 
 }
+*/
diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h
index 7153a5f543..919bf1d30d 100644
--- a/sflphone-client-gnome/src/sflphone_const.h
+++ b/sflphone-client-gnome/src/sflphone_const.h
@@ -62,6 +62,7 @@
 #define ACCOUNT_REGISTRATION_EXPIRE        "Account.expire"
 #define ACCOUNT_SIP_STUN_SERVER	           "STUN.server"
 #define ACCOUNT_SIP_STUN_ENABLED           "STUN.enable"
+#define ACCOUNT_DTMF_TYPE                   "Account.dtmfType"
 #define ACCOUNT_HOSTNAME                   "hostname"
 #define ACCOUNT_USERNAME                   "username"
 #define ACCOUNT_PASSWORD                   "password"
@@ -135,6 +136,10 @@ log4c_category_t* log4c_sfl_gtk_category;
 #define ALSA	      0
 #define PULSEAUDIO    1
 
+ /** DTMF type */
+#define OVERRTP "overrtp"
+#define SIPINFO "sipinfo"
+
 /** Notification levels */
 #define __NOTIF_LEVEL_MIN     0
 #define __NOTIF_LEVEL_MED     1
diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index 998330d0c5..3272010a2e 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -65,6 +65,7 @@ typedef enum RegistrationState {
 #define CONFIG_ACCOUNT_RESOLVE_ONCE         "Account.resolveOnce"
 #define CONFIG_ACCOUNT_REGISTRATION_EXPIRE  "Account.expire"
 #define CONFIG_CREDENTIAL_NUMBER            "Credential.count"
+#define ACCOUNT_DTMF_TYPE                   "Account.dtmfType"
 
 #define HOSTNAME                            "hostname"
 #define USERNAME                            "username"
@@ -117,6 +118,7 @@ typedef enum RegistrationState {
 #define REGISTRATION_STATE_CODE             "Registration.code" 
 #define REGISTRATION_STATE_DESCRIPTION      "Registration.description"
 
+
 class Account{
 
     public:
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index bf60e374f0..2e0934d170 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -3277,6 +3277,8 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails (
 			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;
 	std::string registrationStateCode;
@@ -3561,6 +3563,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID,
 	std::string publishedPort;
 	std::string stunEnable;
 	std::string stunServer;
+	std::string dtmfType;
 	std::string srtpEnable;
 	std::string srtpRtpFallback;
 	std::string zrtpDisplaySas;
@@ -3620,6 +3623,10 @@ void ManagerImpl::setAccountDetails (const std::string& accountID,
 		stunServer = iter->second;
 	}
 
+	if((iter = map_cpy.find(ACCOUNT_DTMF_TYPE)) != map_cpy.end()) {
+		dtmfType = iter->second;
+	}
+
 	if ((iter = map_cpy.find(SRTP_ENABLE)) != map_cpy.end()) {
 		srtpEnable = iter->second;
 	}
@@ -3749,6 +3756,7 @@ void ManagerImpl::setAccountDetails (const std::string& accountID,
 
 	setConfig(accountID, STUN_ENABLE, stunEnable);
 	setConfig(accountID, STUN_SERVER, stunServer);
+	setConfig(accountID, ACCOUNT_DTMF_TYPE, dtmfType);
 
 	// The TLS listener is unique and globally defined through IP2IP_PROFILE
 	if (accountID == IP2IP_PROFILE)
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index 9d91ffaf68..e50ac19058 100644
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -363,6 +363,11 @@ void SIPAccount::loadConfig()
 
     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);
 
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index c6cdb021a3..57fd602c62 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -33,6 +33,9 @@
 
 enum DtmfType { OVERRTP, SIPINFO};
 
+#define OVERRTPSTR "overrtp"
+#define SIPINFOSTR "sipinfo"
+
 class SIPVoIPLink;
 
 /**
-- 
GitLab


From 858c85ca71a954c3714ee56e4446f4bd8bfc4c6c Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Thu, 4 Mar 2010 16:22:06 -0500
Subject: [PATCH 101/160] [#2916] Added support for shortcuts

---
 sflphone-client-gnome/src/Makefile.am         |    6 +-
 sflphone-client-gnome/src/config/Makefile.am  |    1 +
 .../src/config/preferencesdialog.c            |    6 +
 .../src/config/shortcuts-config.c             |  107 +
 .../src/config/shortcuts-config.h             |   48 +
 .../dbus/configurationmanager-introspec.xml   |    9 +
 sflphone-client-gnome/src/dbus/dbus.c         | 3314 +++++++++--------
 sflphone-client-gnome/src/dbus/dbus.h         |    2 +
 sflphone-client-gnome/src/main.c              |    6 +
 sflphone-common/.cproject                     |    3 +
 .../dbus/configurationmanager-introspec.xml   |    7 +
 .../src/dbus/configurationmanager.cpp         | 1116 +++---
 .../src/dbus/configurationmanager.h           |    6 +
 13 files changed, 2402 insertions(+), 2229 deletions(-)
 create mode 100644 sflphone-client-gnome/src/config/shortcuts-config.c
 create mode 100644 sflphone-client-gnome/src/config/shortcuts-config.h

diff --git a/sflphone-client-gnome/src/Makefile.am b/sflphone-client-gnome/src/Makefile.am
index 1f2eb25028..30e2a818e6 100644
--- a/sflphone-client-gnome/src/Makefile.am
+++ b/sflphone-client-gnome/src/Makefile.am
@@ -24,11 +24,13 @@ sflphone_client_gnome_SOURCES = \
   sliders.c \
   statusicon.c \
   codeclist.c \
-  reqaccount.c 
+  reqaccount.c \
+  shortcuts.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 \
+                  shortcuts.h
 
 sflphone_client_gnome_LDADD = $(DEPS_LIBS) $(NOTIFY_LIBS) $(SFLPHONEGTK_LIBS) $(LIBSEXY_LIBS) $(LOG4C)
 
diff --git a/sflphone-client-gnome/src/config/Makefile.am b/sflphone-client-gnome/src/config/Makefile.am
index 3a4f01d7d7..e39b6dde11 100644
--- a/sflphone-client-gnome/src/config/Makefile.am
+++ b/sflphone-client-gnome/src/config/Makefile.am
@@ -4,6 +4,7 @@ noinst_LTLIBRARIES = libconfig.la
 
 libconfig_la_SOURCES = \
   addressbook-config.c \
+  shortcuts-config.c \
   assistant.c \
   preferencesdialog.c \
   accountlistconfigdialog.c \
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index c5f6db485d..b24137b22b 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -30,6 +30,7 @@
 #include <mainwindow.h>
 #include <audioconf.h>
 #include <addressbook-config.h>
+#include <shortcuts-config.h>
 #include <hooks-config.h>
 #include <utils.h>
 
@@ -519,6 +520,11 @@ show_preferences_dialog ()
 	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);
diff --git a/sflphone-client-gnome/src/config/shortcuts-config.c b/sflphone-client-gnome/src/config/shortcuts-config.c
new file mode 100644
index 0000000000..91e4d140a9
--- /dev/null
+++ b/sflphone-client-gnome/src/config/shortcuts-config.c
@@ -0,0 +1,107 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 "shortcuts-config.h"
+#include "shortcuts.h"
+
+#include <gdk/gdkx.h>
+
+GtkWidget*
+create_shortcuts_settings()
+{
+  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *table;
+  GtkListStore *store;
+  GtkTreeIter iter;
+  guint i = 0;
+
+  vbox = gtk_vbox_new(FALSE, 10);
+  gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
+
+  gnome_main_section_new(_("General"), &result_frame);
+
+  treeview = gtk_tree_view_new();
+  setup_tree_view(treeview);
+
+  store = gtk_list_store_new(COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT);
+
+  Accelerator* list = shortcuts_get_list();
+
+  while (list[i].action != NULL)
+    {
+      gtk_list_store_append(store, &iter);
+      gtk_list_store_set(store, &iter, ACTION, list[i].action, MASK,
+          (gint) list[i].mask, VALUE, XKeycodeToKeysym(GDK_DISPLAY(),
+              list[i].value, 0), -1);
+      i++;
+    }
+
+  gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
+  g_object_unref(store);
+
+  gtk_container_add(GTK_CONTAINER (result_frame), treeview);
+  gtk_box_pack_start(GTK_BOX(vbox), result_frame, FALSE, FALSE, 0);
+
+  gtk_widget_show_all(vbox);
+
+  return vbox;
+}
+
+/*
+ *  Create a tree view with two columns. The first is an action and the
+ * second is a keyboard accelerator.
+ */
+static void
+setup_tree_view(GtkWidget *treeview)
+{
+  GtkCellRenderer *renderer;
+  GtkTreeViewColumn *column;
+
+  renderer = gtk_cell_renderer_text_new();
+  column = gtk_tree_view_column_new_with_attributes("Action", renderer, "text",
+      ACTION, NULL);
+  gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
+
+  renderer = gtk_cell_renderer_accel_new();
+  g_object_set(renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
+      "editable", TRUE, NULL);
+  column = gtk_tree_view_column_new_with_attributes("Shortcut", renderer,
+      "accel-mods", MASK, "accel-key", VALUE, NULL);
+
+  gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
+  g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
+}
+
+static void
+accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
+    GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview)
+{
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+
+  // Update treeview
+  model = gtk_tree_view_get_model(treeview);
+  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
+    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, (gint) mask, VALUE,
+        accel_key, -1);
+
+  gint code = XKeysymToKeycode(GDK_DISPLAY(), accel_key);
+
+  // Update GDK bindings
+  shortcuts_update_bindings(atoi(path), code);
+}
diff --git a/sflphone-client-gnome/src/config/shortcuts-config.h b/sflphone-client-gnome/src/config/shortcuts-config.h
new file mode 100644
index 0000000000..61306699f0
--- /dev/null
+++ b/sflphone-client-gnome/src/config/shortcuts-config.h
@@ -0,0 +1,48 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 _SHORTCUTS_CONFIG
+#define _SHORTCUTS_CONFIG
+
+#include <gtk/gtk.h>
+#include <glib/gtypes.h>
+
+#include "actions.h"
+#include <utils.h>
+
+G_BEGIN_DECLS
+
+enum
+{
+  ACTION = 0, MASK, VALUE, COLUMNS
+};
+
+GtkWidget*
+create_shortcuts_settings();
+
+static void
+setup_tree_view(GtkWidget *treeview);
+
+static void
+accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
+    GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview);
+
+G_END_DECLS
+
+#endif // _SHORTCUTS_CONFIG
diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
index fa1433399a..f7a2b79ead 100644
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -162,6 +162,8 @@
     <method name="addAccount">
       <!--* Add a new account to the SFLphone-daemon list. If no
 	    details are specified, default parameters are used.
+	    A REGISTER is automatically sent and configuration is
+	    saved if account created successfully.
 
             @param[in] input details
             @param[out] output accountID
@@ -546,5 +548,12 @@
       <arg type="as" name="list" direction="out"/>
     </method>
     
+    <method name="getShortcuts">
+      <arg type="a{si}" name="shortcutsMap" direction="out"/>
+    </method>
+    
+    <method name="setShortcuts">
+      <arg type="a{si}" name="shortcutsMap" direction="in"/>
+    </method>
   </interface>
 </node>
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index 3d2c6fe829..bfa9b58369 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -43,1704 +43,1618 @@ DBusGProxy * callManagerProxy;
 DBusGProxy * configurationManagerProxy;
 DBusGProxy * instanceProxy;
 
-    static void
-incoming_call_cb (DBusGProxy *proxy UNUSED,
-        const gchar* accountID,
-        const gchar* callID,
-        const gchar* from,
-        void * foo  UNUSED )
+static void
+incoming_call_cb(DBusGProxy *proxy UNUSED, const gchar* accountID,
+    const gchar* callID, const gchar* from, void * foo  UNUSED )
 {
-    DEBUG("Incoming call (%s) from %s", callID, from);
+  DEBUG("Incoming call (%s) from %s", callID, from);
 
-    callable_obj_t * c;
-    gchar *peer_name, *peer_number;
-    // We receive the from field under a formatted way. We want to extract the number and the name of the caller
-    peer_name = call_get_peer_name (from);
-    peer_number = call_get_peer_number (from);
+  callable_obj_t * c;
+  gchar *peer_name, *peer_number;
+  // We receive the from field under a formatted way. We want to extract the number and the name of the caller
+  peer_name = call_get_peer_name(from);
+  peer_number = call_get_peer_number(from);
 
-    DEBUG("    peer name: %s", peer_name);
-    DEBUG("    peer number: %s", peer_number);
+  DEBUG("    peer name: %s", peer_name);
+  DEBUG("    peer number: %s", peer_number);
 
-    create_new_call (CALL, CALL_STATE_INCOMING, g_strdup(callID), g_strdup(accountID), peer_name, peer_number, &c);
+  create_new_call(CALL, CALL_STATE_INCOMING, g_strdup(callID), g_strdup(
+      accountID), peer_name, peer_number, &c);
 #if GTK_CHECK_VERSION(2,10,0)
-    status_tray_icon_blink (TRUE);
-	popup_main_window ();
+  status_tray_icon_blink(TRUE);
+  popup_main_window();
 #endif
 
-    set_timestamp (&c->_time_start);
-    notify_incoming_call (c);
-    sflphone_incoming_call (c);
+  set_timestamp(&c->_time_start);
+  notify_incoming_call(c);
+  sflphone_incoming_call(c);
 }
 
-    static void
-zrtp_negotiation_failed_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        const gchar* reason,
-        const gchar* severity,
-        void * foo  UNUSED )
+static void
+zrtp_negotiation_failed_cb(DBusGProxy *proxy UNUSED, const gchar* callID,
+    const gchar* reason, const gchar* severity, void * foo  UNUSED )
 {
-    DEBUG ("Zrtp negotiation failed.");
-    main_window_zrtp_negotiation_failed(callID, reason, severity);
-    callable_obj_t * c = NULL;
-    c = calllist_get(current_calls, callID);
-    if(c) {
-        notify_zrtp_negotiation_failed(c);
+  DEBUG ("Zrtp negotiation failed.");
+  main_window_zrtp_negotiation_failed(callID, reason, severity);
+  callable_obj_t * c = NULL;
+  c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      notify_zrtp_negotiation_failed(c);
     }
 }
 
-    static void
-curent_selected_codec (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        const gchar* codecName,
-        void * foo  UNUSED )
+static void
+curent_selected_codec(DBusGProxy *proxy UNUSED, const gchar* callID,
+    const gchar* codecName, void * foo  UNUSED )
 {
-    // DEBUG ("%s codec decided for call %s",codecName,callID);
-    // sflphone_display_selected_codec (codecName);
+  // DEBUG ("%s codec decided for call %s",codecName,callID);
+  // sflphone_display_selected_codec (codecName);
 }
 
-    static void
-volume_changed_cb (DBusGProxy *proxy UNUSED,
-        const gchar* device,
-        const gdouble value,
-        void * foo  UNUSED )
+static void
+volume_changed_cb(DBusGProxy *proxy UNUSED, const gchar* device, const gdouble value,
+    void * foo  UNUSED )
 {
-    DEBUG ("Volume of %s changed to %f.",device, value);
-    set_slider(device, value);
+  DEBUG ("Volume of %s changed to %f.",device, value);
+  set_slider(device, value);
 }
 
-    static void
-voice_mail_cb (DBusGProxy *proxy UNUSED,
-        const gchar* accountID,
-        const guint nb,
-        void * foo  UNUSED )
+static void
+voice_mail_cb(DBusGProxy *proxy UNUSED, const gchar* accountID, const guint nb,
+    void * foo  UNUSED )
 {
-    DEBUG ("%d Voice mail waiting!",nb);
-    sflphone_notify_voice_mail (accountID , nb);
+  DEBUG ("%d Voice mail waiting!",nb);
+  sflphone_notify_voice_mail(accountID, nb);
 }
 
-    static void
-incoming_message_cb (DBusGProxy *proxy UNUSED,
-        const gchar* accountID UNUSED,
-        const gchar* msg,
-        void * foo  UNUSED )
+static void
+incoming_message_cb(DBusGProxy *proxy UNUSED, const gchar* accountID UNUSED,
+    const gchar* msg, void * foo  UNUSED )
 {
-    DEBUG ("Message %s!",msg);
+  DEBUG ("Message %s!",msg);
 
 }
 
-    static void
-call_state_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        const gchar* state,
-        void * foo  UNUSED )
+static void
+call_state_cb(DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* state,
+    void * foo  UNUSED )
 {
-    DEBUG ("Call %s state %s",callID, state);
-    callable_obj_t * c = calllist_get(current_calls, callID);
-    if(c)
+  DEBUG ("Call %s state %s",callID, state);
+  callable_obj_t * c = calllist_get(current_calls, callID);
+  if (c)
     {
-        if ( strcmp(state, "HUNGUP") == 0 )
+      if (strcmp(state, "HUNGUP") == 0)
         {
-            if(c->_state==CALL_STATE_CURRENT)
+          if (c->_state == CALL_STATE_CURRENT)
             {
-                // peer hung up, the conversation was established, so _stop has been initialized with the current time value
-                DEBUG("call state current");
-                set_timestamp (&c->_time_stop);
-                calltree_update_call( history, c, NULL);
+              // peer hung up, the conversation was established, so _stop has been initialized with the current time value
+              DEBUG("call state current");
+              set_timestamp(&c->_time_stop);
+              calltree_update_call(history, c, NULL);
             }
-            stop_notification();
-            sflphone_hung_up (c);
-            calltree_update_call( history, c, NULL );
-            status_bar_display_account();
+          stop_notification();
+          sflphone_hung_up(c);
+          calltree_update_call(history, c, NULL );
+          status_bar_display_account();
         }
-        else if ( strcmp(state, "UNHOLD_CURRENT") == 0 )
+      else if (strcmp(state, "UNHOLD_CURRENT") == 0)
         {
-            sflphone_current (c);
+          sflphone_current(c);
         }
-        else if ( strcmp(state, "UNHOLD_RECORD") == 0 )
+      else if (strcmp(state, "UNHOLD_RECORD") == 0)
         {
-            sflphone_record (c);
+          sflphone_record(c);
         }
-        else if ( strcmp(state, "HOLD") == 0 )
+      else if (strcmp(state, "HOLD") == 0)
         {
-            sflphone_hold (c);
+          sflphone_hold(c);
         }
-        else if ( strcmp(state, "RINGING") == 0 )
+      else if (strcmp(state, "RINGING") == 0)
         {
-            sflphone_ringing (c);
+          sflphone_ringing(c);
         }
-        else if ( strcmp(state, "CURRENT") == 0 )
+      else if (strcmp(state, "CURRENT") == 0)
         {
-            sflphone_current (c);
+          sflphone_current(c);
         }
-        else if ( strcmp(state, "FAILURE") == 0 )
+      else if (strcmp(state, "FAILURE") == 0)
         {
-            sflphone_fail (c);
+          sflphone_fail(c);
         }
-        else if ( strcmp(state, "BUSY") == 0 )
+      else if (strcmp(state, "BUSY") == 0)
         {
-            sflphone_busy (c);
+          sflphone_busy(c);
         }
     }
-    else
+  else
     {
-        // The callID is unknow, threat it like a new call
-        // If it were an incoming call, we won't be here
-        // It means that a new call has been initiated with an other client (cli for instance)
-        if ( strcmp(state, "RINGING") == 0  || strcmp(state, "CURRENT") == 0)
+      // The callID is unknow, threat it like a new call
+      // If it were an incoming call, we won't be here
+      // It means that a new call has been initiated with an other client (cli for instance)
+      if (strcmp(state, "RINGING") == 0 || strcmp(state, "CURRENT") == 0)
         {
-            callable_obj_t *new_call;
-            GHashTable *call_details;
-            gchar *type;
+          callable_obj_t *new_call;
+          GHashTable *call_details;
+          gchar *type;
 
-            DEBUG ("New ringing call! accountID: %s", callID);
+          DEBUG ("New ringing call! accountID: %s", callID);
 
-            // We fetch the details associated to the specified call
-            call_details = dbus_get_call_details (callID);
-            create_new_call_from_details (callID, call_details, &new_call);
+          // We fetch the details associated to the specified call
+          call_details = dbus_get_call_details(callID);
+          create_new_call_from_details(callID, call_details, &new_call);
 
-            // Restore the callID to be synchronous with the daemon
-            new_call->_callID = g_strdup(callID);
-            type = g_hash_table_lookup (call_details, "CALL_TYPE");
+          // Restore the callID to be synchronous with the daemon
+          new_call->_callID = g_strdup(callID);
+          type = g_hash_table_lookup(call_details, "CALL_TYPE");
 
-            if (g_strcasecmp (type, "0") == 0)
+          if (g_strcasecmp(type, "0") == 0)
             {
-                // DEBUG("incoming\n");
-                new_call->_history_state = INCOMING;
+              // DEBUG("incoming\n");
+              new_call->_history_state = INCOMING;
             }
-            else
+          else
             {
-                // DEBUG("outgoing\n");
-                new_call->_history_state = OUTGOING;
+              // DEBUG("outgoing\n");
+              new_call->_history_state = OUTGOING;
             }
 
-            calllist_add (current_calls, new_call);
-            calllist_add (history, new_call);
-            calltree_add_call (current_calls, new_call, NULL);
-            update_actions ();
-            calltree_display (current_calls);
+          calllist_add(current_calls, new_call);
+          calllist_add(history, new_call);
+          calltree_add_call(current_calls, new_call, NULL);
+          update_actions();
+          calltree_display(current_calls);
 
-            //sflphone_incoming_call (new_call);
+          //sflphone_incoming_call (new_call);
         }
     }
 }
 
 static void
-conference_changed_cb (DBusGProxy *proxy UNUSED,
-	const gchar* confID,
-        const gchar* state,
-        void * foo  UNUSED )
+conference_changed_cb(DBusGProxy *proxy UNUSED, const gchar* confID,
+    const gchar* state, void * foo  UNUSED )
 {
-    
-    // sflphone_display_transfer_status("Transfer successfull");
-    conference_obj_t* changed_conf = conferencelist_get(confID);
-    gchar** participants;
-    gchar** part;
 
-    DEBUG("conference new state %s\n", state);
+  // sflphone_display_transfer_status("Transfer successfull");
+  conference_obj_t* changed_conf = conferencelist_get(confID);
+  gchar** participants;
+  gchar** part;
+
+  DEBUG("conference new state %s\n", state);
 
-    if(changed_conf)
+  if (changed_conf)
     {
-        // remove old conference from calltree
-	calltree_remove_conference (current_calls, changed_conf, NULL);
+      // remove old conference from calltree
+      calltree_remove_conference(current_calls, changed_conf, NULL);
 
-	// update conference state
-	if ( strcmp(state, "ACTIVE_ATACHED") == 0 ) {
-	    changed_conf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-	}
-	else if ( strcmp(state, "ACTIVE_DETACHED") == 0 ) {
-	    changed_conf->_state = CONFERENCE_STATE_ACTIVE_DETACHED;
-	}
-	else if ( strcmp(state, "HOLD") == 0 ) {
-	    changed_conf->_state = CONFERENCE_STATE_HOLD;
-	}
-	else {
-	    DEBUG("Error: conference state not recognized");
-	}
-	
+      // update conference state
+      if (strcmp(state, "ACTIVE_ATACHED") == 0)
+        {
+          changed_conf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+        }
+      else if (strcmp(state, "ACTIVE_DETACHED") == 0)
+        {
+          changed_conf->_state = CONFERENCE_STATE_ACTIVE_DETACHED;
+        }
+      else if (strcmp(state, "HOLD") == 0)
+        {
+          changed_conf->_state = CONFERENCE_STATE_HOLD;
+        }
+      else
+        {
+          DEBUG("Error: conference state not recognized");
+        }
 
-	participants = (gchar**)dbus_get_participant_list(changed_conf->_confID);
+      participants = (gchar**) dbus_get_participant_list(changed_conf->_confID);
 
-	// update conferece participants
-	conference_participant_list_update(participants, changed_conf);
-	
-	// add new conference to calltree
-	calltree_add_conference (current_calls, changed_conf);
+      // update conferece participants
+      conference_participant_list_update(participants, changed_conf);
+
+      // add new conference to calltree
+      calltree_add_conference(current_calls, changed_conf);
     }
 }
 
-
 static void
-conference_created_cb (DBusGProxy *proxy UNUSED,
-	const gchar* confID,
-        void * foo  UNUSED )
+conference_created_cb(DBusGProxy *proxy UNUSED, const gchar* confID, void * foo  UNUSED )
 {
-    DEBUG ("Conference added %s\n", confID);
+  DEBUG ("Conference added %s\n", confID);
 
-    conference_obj_t* new_conf;
-    callable_obj_t* call;
-    gchar* call_id;
-    gchar** participants;
-    gchar** part;
+  conference_obj_t* new_conf;
+  callable_obj_t* call;
+  gchar* call_id;
+  gchar** participants;
+  gchar** part;
 
-    create_new_conference(CONFERENCE_STATE_ACTIVE_ATACHED, confID, &new_conf);
-    // new_conf->_confID = g_strdup(confID);
+  create_new_conference(CONFERENCE_STATE_ACTIVE_ATACHED, confID, &new_conf);
+  // new_conf->_confID = g_strdup(confID);
 
-    participants = (gchar**)dbus_get_participant_list(new_conf->_confID);
+  participants = (gchar**) dbus_get_participant_list(new_conf->_confID);
 
-    conference_participant_list_update(participants, new_conf);
+  conference_participant_list_update(participants, new_conf);
 
-    // participant = new_conf->participant;
-    for (part = participants; *part; part++)
-    {	    
-	call_id = (gchar*)(*part);
-	call = calllist_get (current_calls, call_id);
-	call->_confID = g_strdup(confID);
+  // participant = new_conf->participant;
+  for (part = participants; *part; part++)
+    {
+      call_id = (gchar*) (*part);
+      call = calllist_get(current_calls, call_id);
+      call->_confID = g_strdup(confID);
     }
 
-    conferencelist_add(new_conf);
-    calltree_add_conference (current_calls, new_conf);
+  conferencelist_add(new_conf);
+  calltree_add_conference(current_calls, new_conf);
 }
 
-
 static void
-conference_removed_cb (DBusGProxy *proxy UNUSED,
-	const gchar* confID,
-        void * foo  UNUSED )
+conference_removed_cb(DBusGProxy *proxy UNUSED, const gchar* confID, void * foo  UNUSED )
 {
-    DEBUG ("Conference removed %s\n", confID);
+  DEBUG ("Conference removed %s\n", confID);
 
-    conference_obj_t * c = conferencelist_get(confID);
-    calltree_remove_conference (current_calls, c, NULL);
-    conferencelist_remove(c->_confID); 
+  conference_obj_t * c = conferencelist_get(confID);
+  calltree_remove_conference(current_calls, c, NULL);
+  conferencelist_remove(c->_confID);
 }
 
-
-    static void
-accounts_changed_cb (DBusGProxy *proxy UNUSED,
-        void * foo  UNUSED )
+static void
+accounts_changed_cb(DBusGProxy *proxy UNUSED, void * foo  UNUSED )
 {
-    DEBUG ("Accounts changed");
-    sflphone_fill_account_list ();
-    sflphone_fill_ip2ip_profile();
-    account_list_config_dialog_fill();
+  DEBUG ("Accounts changed");
+  sflphone_fill_account_list();
+  sflphone_fill_ip2ip_profile();
+  account_list_config_dialog_fill();
 
-    // Update the status bar in case something happened
-    // Should fix ticket #1215
-    status_bar_display_account();
+  // Update the status bar in case something happened
+  // Should fix ticket #1215
+  status_bar_display_account();
 }
 
-
-    static void
-transfer_succeded_cb (DBusGProxy *proxy UNUSED,
-        void * foo  UNUSED )
+static void
+transfer_succeded_cb(DBusGProxy *proxy UNUSED, void * foo  UNUSED )
 {
-    DEBUG ("Transfer succeded\n");
-    sflphone_display_transfer_status("Transfer successfull");
+  DEBUG ("Transfer succeded\n");
+  sflphone_display_transfer_status("Transfer successfull");
 }
 
-
-    static void
-transfer_failed_cb (DBusGProxy *proxy UNUSED,
-        void * foo  UNUSED )
+static void
+transfer_failed_cb(DBusGProxy *proxy UNUSED, void * foo  UNUSED )
 {
-    DEBUG ("Transfer failed\n");
-    sflphone_display_transfer_status("Transfer failed");
+  DEBUG ("Transfer failed\n");
+  sflphone_display_transfer_status("Transfer failed");
 }
 
-static void 
-secure_sdes_on_cb(DBusGProxy *proxy UNUSED, 
-		  const gchar *callID,
-		  void *foo UNUSED)
+static void
+secure_sdes_on_cb(DBusGProxy *proxy UNUSED, const gchar *callID, void *foo UNUSED)
 {
-    DEBUG("SRTP using SDES is on");
-    callable_obj_t *c = calllist_get(current_calls, callID);
-    if(c) {
-        sflphone_srtp_sdes_on(c);
-	notify_secure_on(c);
+  DEBUG("SRTP using SDES is on");
+  callable_obj_t *c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      sflphone_srtp_sdes_on(c);
+      notify_secure_on(c);
     }
 
 }
 
-
 static void
-secure_sdes_off_cb(DBusGProxy *proxy UNUSED,
-		   const gchar *callID,
-		   void *foo UNUSED)
+secure_sdes_off_cb(DBusGProxy *proxy UNUSED, const gchar *callID, void *foo UNUSED)
 {
-    DEBUG("SRTP using SDES is off");
-    callable_obj_t *c = calllist_get(current_calls, callID);
-    if(c) {
-        sflphone_srtp_sdes_off(c);
-	notify_secure_off(c);
+  DEBUG("SRTP using SDES is off");
+  callable_obj_t *c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      sflphone_srtp_sdes_off(c);
+      notify_secure_off(c);
     }
 }
 
-    static void
-secure_zrtp_on_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        const gchar* cipher,
-        void * foo  UNUSED )
+static void
+secure_zrtp_on_cb(DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* cipher,
+    void * foo  UNUSED )
 {
-    DEBUG ("SRTP using ZRTP is ON secure_on_cb");
-    callable_obj_t * c = calllist_get(current_calls, callID);
-    if(c) {
-        c->_srtp_cipher = g_strdup(cipher);
-	
-        sflphone_srtp_zrtp_on (c);
-        notify_secure_on(c);
+  DEBUG ("SRTP using ZRTP is ON secure_on_cb");
+  callable_obj_t * c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      c->_srtp_cipher = g_strdup(cipher);
+
+      sflphone_srtp_zrtp_on(c);
+      notify_secure_on(c);
     }
 }
 
-    static void
-secure_zrtp_off_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        void * foo  UNUSED )
+static void
+secure_zrtp_off_cb(DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED )
 {
-    DEBUG ("SRTP using ZRTP is OFF");
-    callable_obj_t * c = calllist_get(current_calls, callID);
-    if(c) {
-        sflphone_srtp_zrtp_off (c);
-        notify_secure_off (c);
+  DEBUG ("SRTP using ZRTP is OFF");
+  callable_obj_t * c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      sflphone_srtp_zrtp_off(c);
+      notify_secure_off(c);
     }
 }
 
-    static void
-show_zrtp_sas_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        const gchar* sas,
-        const gboolean verified,
-        void * foo  UNUSED )
+static void
+show_zrtp_sas_cb(DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* sas,
+    const gboolean verified, void * foo  UNUSED )
 {
-    DEBUG ("Showing SAS");
-    callable_obj_t * c = calllist_get(current_calls, callID);
-    if(c) {
-        sflphone_srtp_zrtp_show_sas (c, sas, verified);
+  DEBUG ("Showing SAS");
+  callable_obj_t * c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      sflphone_srtp_zrtp_show_sas(c, sas, verified);
     }
 }
 
-    static void
-confirm_go_clear_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        void * foo  UNUSED )
+static void
+confirm_go_clear_cb(DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED )
 {
-    DEBUG ("Confirm Go Clear request");
-    callable_obj_t * c = calllist_get(current_calls, callID);
-    if(c) {
-        sflphone_confirm_go_clear (c);
+  DEBUG ("Confirm Go Clear request");
+  callable_obj_t * c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      sflphone_confirm_go_clear(c);
     }
 }
 
-    static void
-zrtp_not_supported_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        void * foo  UNUSED )
+static void
+zrtp_not_supported_cb(DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED )
 {
-    DEBUG ("ZRTP not supported on the other end");
-    callable_obj_t * c = calllist_get(current_calls, callID);
-    if(c) {
-        sflphone_srtp_zrtp_not_supported (c);
-        notify_zrtp_not_supported(c);
+  DEBUG ("ZRTP not supported on the other end");
+  callable_obj_t * c = calllist_get(current_calls, callID);
+  if (c)
+    {
+      sflphone_srtp_zrtp_not_supported(c);
+      notify_zrtp_not_supported(c);
     }
 }
 
-    static void
-sip_call_state_cb (DBusGProxy *proxy UNUSED,
-        const gchar* callID,
-        const gchar* description,
-        const guint code, 
-        void * foo  UNUSED )
+static void
+sip_call_state_cb(DBusGProxy *proxy UNUSED, const gchar* callID,
+    const gchar* description, const guint code, void * foo  UNUSED )
 {
-    callable_obj_t * c = NULL;
-    c = calllist_get(current_calls, callID);
+  callable_obj_t * c = NULL;
+  c = calllist_get(current_calls, callID);
 
-    if(c != NULL) {
-        DEBUG("sip_call_state_cb received code %d", code);       
-        sflphone_call_state_changed(c, description, code);
+  if (c != NULL)
+    {
+      DEBUG("sip_call_state_cb received code %d", code);
+      sflphone_call_state_changed(c, description, code);
     }
 }
 
-    static void
-error_alert(DBusGProxy *proxy UNUSED,
-        int errCode,
-        void * foo  UNUSED )
+static void
+error_alert(DBusGProxy *proxy UNUSED, int errCode, void * foo  UNUSED )
 {
-    ERROR ("Error notifying : (%i)", errCode);
-    sflphone_throw_exception( errCode );
+  ERROR ("Error notifying : (%i)", errCode);
+  sflphone_throw_exception(errCode);
 }
 
-    gboolean
-dbus_connect ()
-{
-
-    GError *error = NULL;
-    connection = NULL;
-    instanceProxy = NULL;
-
-    g_type_init ();
-
-    connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+gboolean
+dbus_connect()
+{
 
-    if (error)
-    {
-        ERROR ("Failed to open connection to bus: %s",
-                error->message);
-        g_error_free (error);
-        return FALSE;
-    }
-
-    /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */
-
-
-    instanceProxy = dbus_g_proxy_new_for_name (connection,
-            "org.sflphone.SFLphone",
-            "/org/sflphone/SFLphone/Instance",
-            "org.sflphone.SFLphone.Instance");
-    /*
-       instanceProxy = dbus_g_proxy_new_for_name_owner (connection,
-       "org.sflphone.SFLphone",
-       "/org/sflphone/SFLphone/Instance",
-       "org.sflphone.SFLphone.Instance",
-       &error);
-     */
-
-    if (instanceProxy==NULL)
-    {
-        ERROR ("Failed to get proxy to Instance");
-        return FALSE;
-    }
-
-
-    DEBUG ("DBus connected to Instance");
-
-
-    callManagerProxy = dbus_g_proxy_new_for_name (connection,
-            "org.sflphone.SFLphone",
-            "/org/sflphone/SFLphone/CallManager",
-            "org.sflphone.SFLphone.CallManager");
-
-    /*
-       callManagerProxy = dbus_g_proxy_new_for_name_owner (connection,
-       "org.sflphone.SFLphone",
-       "/org/sflphone/SFLphone/CallManager",
-       "org.sflphone.SFLphone.CallManager",
-       &error);
-     */
-    if (callManagerProxy==NULL)
-    {
-        ERROR ("Failed to get proxy to CallManagers");
-        return FALSE;
-    }
-
-    DEBUG ("DBus connected to CallManager");
-    /* STRING STRING STRING Marshaller */
-    /* Incoming call */
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING_STRING,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "incomingCall", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "incomingCall", G_CALLBACK(incoming_call_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "zrtpNegotiationFailed", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "zrtpNegotiationFailed", G_CALLBACK(zrtp_negotiation_failed_cb), NULL, NULL);
-            
-    /* Current codec */
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING_STRING,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "currentSelectedCodec", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "currentSelectedCodec", G_CALLBACK(curent_selected_codec), NULL, NULL);
-
-    /* Register a marshaller for STRING,STRING */
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "callStateChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "callStateChanged", G_CALLBACK(call_state_cb), NULL, NULL);
-
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_INT,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "voiceMailNotify", G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "voiceMailNotify", G_CALLBACK(voice_mail_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "incomingMessage", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "incomingMessage", G_CALLBACK(incoming_message_cb), NULL, NULL);
-
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_DOUBLE,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "volumeChanged", G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "volumeChanged", G_CALLBACK(volume_changed_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "transferSucceded", G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "transferSucceded", G_CALLBACK(transfer_succeded_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "transferFailed", G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "transferFailed", G_CALLBACK(transfer_failed_cb), NULL, NULL);
-
-    /* Conference related callback */
-
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "conferenceChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "conferenceChanged", G_CALLBACK(conference_changed_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "conferenceCreated", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "conferenceCreated", G_CALLBACK(conference_created_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "conferenceRemoved", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "conferenceRemoved", G_CALLBACK(conference_removed_cb), NULL, NULL);
-
-    /* Security related callbacks */
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "secureSdesOn", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "secureSdesOn", G_CALLBACK(secure_sdes_on_cb), NULL, NULL);
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "secureSdesOff", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "secureSdesOff", G_CALLBACK(secure_sdes_off_cb), NULL, NULL);
-    
-    /* Register a marshaller for STRING,STRING,BOOL */
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING_BOOL,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "showSAS", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "showSAS", G_CALLBACK(show_zrtp_sas_cb), NULL, NULL);  
-  
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "secureZrtpOn", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "secureZrtpOn", G_CALLBACK(secure_zrtp_on_cb), NULL, NULL);
-
-    /* Register a marshaller for STRING*/
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "secureZrtpOff", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "secureZrtpOff", G_CALLBACK(secure_zrtp_off_cb), NULL, NULL);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "zrtpNotSuppOther", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "zrtpNotSuppOther", G_CALLBACK(zrtp_not_supported_cb), NULL, NULL);
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "confirmGoClear", G_TYPE_STRING, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "confirmGoClear", G_CALLBACK(confirm_go_clear_cb), NULL, NULL);               
-
-    /* VOID STRING STRING INT */
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_STRING_INT,
-            G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-
-
-    dbus_g_proxy_add_signal (callManagerProxy,
-            "sipCallStateChanged", G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (callManagerProxy,
-            "sipCallStateChanged", G_CALLBACK(sip_call_state_cb), NULL, NULL);
-                        
-    configurationManagerProxy = dbus_g_proxy_new_for_name (connection, 
-            "org.sflphone.SFLphone",
-            "/org/sflphone/SFLphone/ConfigurationManager",
-            "org.sflphone.SFLphone.ConfigurationManager");
-
-
-    /*
-       configurationManagerProxy = dbus_g_proxy_new_for_name_owner (connection,
-       "org.sflphone.SFLphone",
-       "/org/sflphone/SFLphone/ConfigurationManager",
-       "org.sflphone.SFLphone.ConfigurationManager",
-       &error);
-     */
-    if (!configurationManagerProxy)
-    {
-        ERROR ("Failed to get proxy to ConfigurationManager");
-        return FALSE;
-    }
-    DEBUG ("DBus connected to ConfigurationManager");
-    dbus_g_proxy_add_signal (configurationManagerProxy,
-            "accountsChanged", G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (configurationManagerProxy,
-            "accountsChanged", G_CALLBACK(accounts_changed_cb), NULL, NULL);
-
-    dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__INT,
-            G_TYPE_NONE, G_TYPE_INT , G_TYPE_INVALID);
-    dbus_g_proxy_add_signal (configurationManagerProxy,
-            "errorAlert", G_TYPE_INT , G_TYPE_INVALID);
-    dbus_g_proxy_connect_signal (configurationManagerProxy,
-            "errorAlert", G_CALLBACK(error_alert), NULL, NULL);
-            
-    /* Defines a default timeout for the proxies */
+  GError *error = NULL;
+  connection = NULL;
+  instanceProxy = NULL;
+
+  g_type_init();
+
+  connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
+
+  if (error)
+    {
+      ERROR ("Failed to open connection to bus: %s",
+          error->message);
+      g_error_free(error);
+      return FALSE;
+    }
+
+  /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */
+
+  instanceProxy = dbus_g_proxy_new_for_name(connection,
+      "org.sflphone.SFLphone", "/org/sflphone/SFLphone/Instance",
+      "org.sflphone.SFLphone.Instance");
+  /*
+   instanceProxy = dbus_g_proxy_new_for_name_owner (connection,
+   "org.sflphone.SFLphone",
+   "/org/sflphone/SFLphone/Instance",
+   "org.sflphone.SFLphone.Instance",
+   &error);
+   */
+
+  if (instanceProxy == NULL)
+    {
+      ERROR ("Failed to get proxy to Instance");
+      return FALSE;
+    }
+
+  DEBUG ("DBus connected to Instance");
+
+  callManagerProxy = dbus_g_proxy_new_for_name(connection,
+      "org.sflphone.SFLphone", "/org/sflphone/SFLphone/CallManager",
+      "org.sflphone.SFLphone.CallManager");
+
+  /*
+   callManagerProxy = dbus_g_proxy_new_for_name_owner (connection,
+   "org.sflphone.SFLphone",
+   "/org/sflphone/SFLphone/CallManager",
+   "org.sflphone.SFLphone.CallManager",
+   &error);
+   */
+  if (callManagerProxy == NULL)
+    {
+      ERROR ("Failed to get proxy to CallManagers");
+      return FALSE;
+    }
+
+  DEBUG ("DBus connected to CallManager");
+  /* STRING STRING STRING Marshaller */
+  /* Incoming call */
+  dbus_g_object_register_marshaller(
+      g_cclosure_user_marshal_VOID__STRING_STRING_STRING, G_TYPE_NONE,
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "incomingCall", G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "incomingCall",
+      G_CALLBACK(incoming_call_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "zrtpNegotiationFailed",
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "zrtpNegotiationFailed",
+      G_CALLBACK(zrtp_negotiation_failed_cb), NULL, NULL);
+
+  /* Current codec */
+  dbus_g_object_register_marshaller(
+      g_cclosure_user_marshal_VOID__STRING_STRING_STRING, G_TYPE_NONE,
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "currentSelectedCodec",
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "currentSelectedCodec",
+      G_CALLBACK(curent_selected_codec), NULL, NULL);
+
+  /* Register a marshaller for STRING,STRING */
+  dbus_g_object_register_marshaller(
+      g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "callStateChanged", G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "callStateChanged",
+      G_CALLBACK(call_state_cb), NULL, NULL);
+
+  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_INT,
+      G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "voiceMailNotify", G_TYPE_STRING,
+      G_TYPE_INT, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "voiceMailNotify",
+      G_CALLBACK(voice_mail_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "incomingMessage", G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "incomingMessage",
+      G_CALLBACK(incoming_message_cb), NULL, NULL);
+
+  dbus_g_object_register_marshaller(
+      g_cclosure_user_marshal_VOID__STRING_DOUBLE, G_TYPE_NONE, G_TYPE_STRING,
+      G_TYPE_DOUBLE, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "volumeChanged", G_TYPE_STRING,
+      G_TYPE_DOUBLE, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "volumeChanged",
+      G_CALLBACK(volume_changed_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "transferSucceded", G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "transferSucceded",
+      G_CALLBACK(transfer_succeded_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "transferFailed", G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "transferFailed",
+      G_CALLBACK(transfer_failed_cb), NULL, NULL);
+
+  /* Conference related callback */
+
+  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
+      G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "conferenceChanged", G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "conferenceChanged",
+      G_CALLBACK(conference_changed_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "conferenceCreated", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "conferenceCreated",
+      G_CALLBACK(conference_created_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "conferenceRemoved", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "conferenceRemoved",
+      G_CALLBACK(conference_removed_cb), NULL, NULL);
+
+  /* Security related callbacks */
+
+  dbus_g_proxy_add_signal(callManagerProxy, "secureSdesOn", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "secureSdesOn",
+      G_CALLBACK(secure_sdes_on_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "secureSdesOff", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "secureSdesOff",
+      G_CALLBACK(secure_sdes_off_cb), NULL, NULL);
+
+  /* Register a marshaller for STRING,STRING,BOOL */
+  dbus_g_object_register_marshaller(
+      g_cclosure_user_marshal_VOID__STRING_STRING_BOOL, G_TYPE_NONE,
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "showSAS", G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "showSAS",
+      G_CALLBACK(show_zrtp_sas_cb), NULL, NULL);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "secureZrtpOn", G_TYPE_STRING,
+      G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "secureZrtpOn",
+      G_CALLBACK(secure_zrtp_on_cb), NULL, NULL);
+
+  /* Register a marshaller for STRING*/
+  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
+      G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(callManagerProxy, "secureZrtpOff", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "secureZrtpOff",
+      G_CALLBACK(secure_zrtp_off_cb), NULL, NULL);
+  dbus_g_proxy_add_signal(callManagerProxy, "zrtpNotSuppOther", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "zrtpNotSuppOther",
+      G_CALLBACK(zrtp_not_supported_cb), NULL, NULL);
+  dbus_g_proxy_add_signal(callManagerProxy, "confirmGoClear", G_TYPE_STRING,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "confirmGoClear",
+      G_CALLBACK(confirm_go_clear_cb), NULL, NULL);
+
+  /* VOID STRING STRING INT */
+  dbus_g_object_register_marshaller(
+      g_cclosure_user_marshal_VOID__STRING_STRING_INT, G_TYPE_NONE,
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
+
+  dbus_g_proxy_add_signal(callManagerProxy, "sipCallStateChanged",
+      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(callManagerProxy, "sipCallStateChanged",
+      G_CALLBACK(sip_call_state_cb), NULL, NULL);
+
+  configurationManagerProxy = dbus_g_proxy_new_for_name(connection,
+      "org.sflphone.SFLphone", "/org/sflphone/SFLphone/ConfigurationManager",
+      "org.sflphone.SFLphone.ConfigurationManager");
+
+  /*
+   configurationManagerProxy = dbus_g_proxy_new_for_name_owner (connection,
+   "org.sflphone.SFLphone",
+   "/org/sflphone/SFLphone/ConfigurationManager",
+   "org.sflphone.SFLphone.ConfigurationManager",
+   &error);
+   */
+  if (!configurationManagerProxy)
+    {
+      ERROR ("Failed to get proxy to ConfigurationManager");
+      return FALSE;
+    }
+  DEBUG ("DBus connected to ConfigurationManager");
+  dbus_g_proxy_add_signal(configurationManagerProxy, "accountsChanged",
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(configurationManagerProxy, "accountsChanged",
+      G_CALLBACK(accounts_changed_cb), NULL, NULL);
+
+  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__INT,
+      G_TYPE_NONE, G_TYPE_INT, G_TYPE_INVALID);
+  dbus_g_proxy_add_signal(configurationManagerProxy, "errorAlert", G_TYPE_INT,
+      G_TYPE_INVALID);
+  dbus_g_proxy_connect_signal(configurationManagerProxy, "errorAlert",
+      G_CALLBACK(error_alert), NULL, NULL);
+
+  /* Defines a default timeout for the proxies */
 #if HAVE_DBUS_G_PROXY_SET_DEFAULT_TIMEOUT
-    dbus_g_proxy_set_default_timeout(callManagerProxy, DEFAULT_DBUS_TIMEOUT);
-    dbus_g_proxy_set_default_timeout(instanceProxy, DEFAULT_DBUS_TIMEOUT);
-    dbus_g_proxy_set_default_timeout(configurationManagerProxy, DEFAULT_DBUS_TIMEOUT);
+  dbus_g_proxy_set_default_timeout(callManagerProxy, DEFAULT_DBUS_TIMEOUT);
+  dbus_g_proxy_set_default_timeout(instanceProxy, DEFAULT_DBUS_TIMEOUT);
+  dbus_g_proxy_set_default_timeout(configurationManagerProxy, DEFAULT_DBUS_TIMEOUT);
 #endif
-    
-    return TRUE;
+
+  return TRUE;
 }
 
-    void
-dbus_clean ()
+void
+dbus_clean()
 {
-    g_object_unref (callManagerProxy);
-    g_object_unref (configurationManagerProxy);
-    g_object_unref (instanceProxy);
+  g_object_unref(callManagerProxy);
+  g_object_unref(configurationManagerProxy);
+  g_object_unref(instanceProxy);
 }
 
-
-    void
-dbus_hold (const callable_obj_t * c)
+void
+dbus_hold(const callable_obj_t * c)
 {
-    DEBUG("dbus_hold %s\n", c->_callID);
+  DEBUG("dbus_hold %s\n", c->_callID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_hold ( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_hold(callManagerProxy, c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call hold() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call hold() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_unhold (const callable_obj_t * c)
+void
+dbus_unhold(const callable_obj_t * c)
 {
-    DEBUG("dbus_unhold %s\n", c->_callID);
+  DEBUG("dbus_unhold %s\n", c->_callID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_unhold ( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_unhold(callManagerProxy, c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call unhold() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call unhold() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_hold_conference (const conference_obj_t * c)
+void
+dbus_hold_conference(const conference_obj_t * c)
 {
-    DEBUG("dbus_hold_conference %s\n", c->_confID);
+  DEBUG("dbus_hold_conference %s\n", c->_confID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_hold_conference ( callManagerProxy, c->_confID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_hold_conference(callManagerProxy,
+      c->_confID, &error);
+  if (error)
     {
-        ERROR ("Failed to call hold() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call hold() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_unhold_conference (const conference_obj_t * c)
+void
+dbus_unhold_conference(const conference_obj_t * c)
 {
-    DEBUG("dbus_unhold_conference %s\n", c->_confID);
+  DEBUG("dbus_unhold_conference %s\n", c->_confID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_unhold_conference ( callManagerProxy, c->_confID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_unhold_conference(callManagerProxy,
+      c->_confID, &error);
+  if (error)
     {
-        ERROR ("Failed to call unhold() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call unhold() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_hang_up (const callable_obj_t * c)
+void
+dbus_hang_up(const callable_obj_t * c)
 {
-    DEBUG("dbus_hang_up %s\n", c->_callID);
-    
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_hang_up ( callManagerProxy, c->_callID, &error);
-    if (error)
+  DEBUG("dbus_hang_up %s\n", c->_callID);
+
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_hang_up(callManagerProxy, c->_callID,
+      &error);
+  if (error)
     {
-        ERROR ("Failed to call hang_up() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call hang_up() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-
-    void
-dbus_hang_up_conference (const conference_obj_t * c)
+void
+dbus_hang_up_conference(const conference_obj_t * c)
 {
-    DEBUG("dbus_hang_up_conference %s\n", c->_confID);
-    
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_hang_up_conference ( callManagerProxy, c->_confID, &error);
-    if (error)
+  DEBUG("dbus_hang_up_conference %s\n", c->_confID);
+
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_hang_up_conference(callManagerProxy,
+      c->_confID, &error);
+  if (error)
     {
-        ERROR ("Failed to call hang_up() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call hang_up() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_transfert (const callable_obj_t * c)
+void
+dbus_transfert(const callable_obj_t * c)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_transfert ( callManagerProxy, c->_callID, c->_trsft_to, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_transfert(callManagerProxy, c->_callID,
+      c->_trsft_to, &error);
+  if (error)
     {
-        ERROR ("Failed to call transfert() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call transfert() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_accept (const callable_obj_t * c)
+void
+dbus_accept(const callable_obj_t * c)
 {
 #if GTK_CHECK_VERSION(2,10,0)
-    status_tray_icon_blink( FALSE );
+  status_tray_icon_blink(FALSE);
 #endif
 
-    DEBUG("dbus_accept %s\n", c->_callID);
+  DEBUG("dbus_accept %s\n", c->_callID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_accept ( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_accept(callManagerProxy, c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call accept(%s) on CallManager: %s", c->_callID,
-                (error->message == NULL ? g_quark_to_string(error->domain): error->message));
-        g_error_free (error);
+      ERROR ("Failed to call accept(%s) on CallManager: %s", c->_callID,
+          (error->message == NULL ? g_quark_to_string(error->domain): error->message));
+      g_error_free(error);
     }
 }
 
-    void
-dbus_refuse (const callable_obj_t * c)
+void
+dbus_refuse(const callable_obj_t * c)
 {
 #if GTK_CHECK_VERSION(2,10,0)
-    status_tray_icon_blink( FALSE );
+  status_tray_icon_blink(FALSE);
 #endif
 
-    DEBUG("dbus_refuse %s\n", c->_callID);
+  DEBUG("dbus_refuse %s\n", c->_callID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_refuse ( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_refuse(callManagerProxy, c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call refuse() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call refuse() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-
-    void
-dbus_place_call (const callable_obj_t * c)
+void
+dbus_place_call(const callable_obj_t * c)
 {
-    DEBUG("dbus_place_call %s\n", c->_callID);
+  DEBUG("dbus_place_call %s\n", c->_callID);
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_place_call ( callManagerProxy, c->_accountID, c->_callID, c->_peer_number, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_place_call(callManagerProxy, c->_accountID,
+      c->_callID, c->_peer_number, &error);
+  if (error)
     {
-        ERROR ("Failed to call placeCall() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call placeCall() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-gchar**  dbus_account_list() {
-    GError *error = NULL;
-    char ** array;
+gchar**
+dbus_account_list()
+{
+  GError *error = NULL;
+  char ** array;
 
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_account_list ( configurationManagerProxy, &array, &error))
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_account_list(
+      configurationManagerProxy, &array, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_account_list) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_account_list) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_account_list: %s", error->message);
+          ERROR("Error while calling get_account_list: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
+      g_error_free(error);
+      return NULL;
     }
-    else{
-        DEBUG ("DBus called get_account_list() on ConfigurationManager");
-        return array;
+  else
+    {
+      DEBUG ("DBus called get_account_list() on ConfigurationManager");
+      return array;
     }
 }
 
-
-GHashTable* dbus_account_details(gchar * accountID)
+GHashTable*
+dbus_account_details(gchar * accountID)
 {
-    GError *error = NULL;
-    GHashTable * details;
+  GError *error = NULL;
+  GHashTable * details;
 
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_account_details( configurationManagerProxy, accountID, &details, &error))
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_account_details(
+      configurationManagerProxy, accountID, &details, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_account_details: %s", error->message);
+          ERROR("Error while calling get_account_details: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
+      g_error_free(error);
+      return NULL;
     }
-    else{
-        return details;
+  else
+    {
+      return details;
     }
 }
 
-    void
+void
 dbus_set_credential(account_t *a, int index)
 {
-    DEBUG("Sending credential %d to server", index);
-    GError *error = NULL;
-    GHashTable * credential = g_ptr_array_index(a->credential_information, index);
-    
-    if(credential == NULL) {
-        DEBUG("Credential %d was deleted", index);
-    } else {
-        org_sflphone_SFLphone_ConfigurationManager_set_credential (
-                configurationManagerProxy,
-                a->accountID,
-                index,
-                credential,
-                &error);
-    }
-            
-    if (error) {
-        ERROR ("Failed to call set_credential() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
-    }
-}
-    void 
-dbus_set_number_of_credential(account_t *a, int number) 
-{
-    DEBUG("Sending number of credential %d to server", number);
-    GError *error = NULL;
-
-    org_sflphone_SFLphone_ConfigurationManager_set_number_of_credential( configurationManagerProxy, a->accountID, number, &error);
-            
-    if (error) {
-        ERROR ("Failed to call set_number_of_credential() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
-    } 
-}
-    void
+  DEBUG("Sending credential %d to server", index);
+  GError *error = NULL;
+  GHashTable * credential = g_ptr_array_index(a->credential_information, index);
+
+  if (credential == NULL)
+    {
+      DEBUG("Credential %d was deleted", index);
+    }
+  else
+    {
+      org_sflphone_SFLphone_ConfigurationManager_set_credential(
+          configurationManagerProxy, a->accountID, index, credential, &error);
+    }
+
+  if (error)
+    {
+      ERROR ("Failed to call set_credential() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
+    }
+}
+void
+dbus_set_number_of_credential(account_t *a, int number)
+{
+  DEBUG("Sending number of credential %d to server", number);
+  GError *error = NULL;
+
+  org_sflphone_SFLphone_ConfigurationManager_set_number_of_credential(
+      configurationManagerProxy, a->accountID, number, &error);
+
+  if (error)
+    {
+      ERROR ("Failed to call set_number_of_credential() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
+    }
+}
+void
 dbus_delete_all_credential(account_t *a)
 {
-    DEBUG("Deleting all credentials\n");
-    GError *error = NULL;
-    
-    org_sflphone_SFLphone_ConfigurationManager_delete_all_credential(configurationManagerProxy, a->accountID, &error);
-        
-    if (error) {
-        ERROR ("Failed to call deleteAllCredential on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
-    } 
+  DEBUG("Deleting all credentials\n");
+  GError *error = NULL;
+
+  org_sflphone_SFLphone_ConfigurationManager_delete_all_credential(
+      configurationManagerProxy, a->accountID, &error);
+
+  if (error)
+    {
+      ERROR ("Failed to call deleteAllCredential on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
+    }
 }
 
-    int
+int
 dbus_get_number_of_credential(gchar * accountID)
 {
-    GError *error = NULL;
-    int number = 0;
+  GError *error = NULL;
+  int number = 0;
+
+  DEBUG("Getting number of credential for account %s", accountID);
 
-    DEBUG("Getting number of credential for account %s", accountID);
-        
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_number_of_credential( configurationManagerProxy, accountID, &number, &error)) {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
-            ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_number_of_credential(
+      configurationManagerProxy, accountID, &number, &error))
+    {
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
+        {
+          ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else {
-            ERROR("Error while calling get_account_details: %s", error->message);
+      else
+        {
+          ERROR("Error while calling get_account_details: %s", error->message);
         }
-        g_error_free (error);
-        return 0;
-    } else {
-        DEBUG("%d credential(s) found for account %s", number, accountID);
-        return number;
+      g_error_free(error);
+      return 0;
+    }
+  else
+    {
+      DEBUG("%d credential(s) found for account %s", number, accountID);
+      return number;
     }
 }
 
-GHashTable* dbus_get_credential(gchar * accountID, int index)
+GHashTable*
+dbus_get_credential(gchar * accountID, int index)
 {
-    GError *error = NULL;
-    GHashTable * details;
+  GError *error = NULL;
+  GHashTable * details;
 
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_credential( configurationManagerProxy, accountID, index, &details, &error)) {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
-            ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        } else {
-            ERROR("Error while calling get_account_details: %s", error->message);
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_credential(
+      configurationManagerProxy, accountID, index, &details, &error))
+    {
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
+        {
+          ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+        }
+      else
+        {
+          ERROR("Error while calling get_account_details: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
-    } else {
-        return details;
+      g_error_free(error);
+      return NULL;
+    }
+  else
+    {
+      return details;
     }
 }
 
-GHashTable* dbus_get_ip2_ip_details(void)
+GHashTable*
+dbus_get_ip2_ip_details(void)
 {
-    GError *error = NULL;
-    GHashTable * details;
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_ip2_ip_details( configurationManagerProxy, &details, &error))
+  GError *error = NULL;
+  GHashTable * details;
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_ip2_ip_details(
+      configurationManagerProxy, &details, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_ip2_ip_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_ip2_ip_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_ip2_ip_details: %s", error->message);
+          ERROR("Error while calling get_ip2_ip_details: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
+      g_error_free(error);
+      return NULL;
     }
-    else{
-        return details;
+  else
+    {
+      return details;
     }
 }
 
-    void
+void
 dbus_set_ip2ip_details(GHashTable * properties)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_ip2_ip_details (
-            configurationManagerProxy,
-            properties,
-            &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_ip2_ip_details(
+      configurationManagerProxy, properties, &error);
+  if (error)
     {
-        ERROR ("Failed to call set_ip_2ip_details() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call set_ip_2ip_details() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_send_register ( gchar* accountID , const guint enable)
+void
+dbus_send_register(gchar* accountID, const guint enable)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_send_register(configurationManagerProxy, accountID, enable ,&error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_send_register(
+      configurationManagerProxy, accountID, enable, &error);
+  if (error)
     {
-        ERROR ("Failed to call send_register() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call send_register() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
+void
 dbus_remove_account(gchar * accountID)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_remove_account (
-            configurationManagerProxy,
-            accountID,
-            &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_remove_account(
+      configurationManagerProxy, accountID, &error);
+  if (error)
     {
-        ERROR ("Failed to call remove_account() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call remove_account() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
+void
 dbus_set_account_details(account_t *a)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_account_details (
-            configurationManagerProxy,
-            a->accountID,
-            a->properties,
-            &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_account_details(
+      configurationManagerProxy, a->accountID, a->properties, &error);
+  if (error)
     {
-        ERROR ("Failed to call set_account_details() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call set_account_details() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
-    gchar*
+gchar*
 dbus_add_account(account_t *a)
 {
-    gchar* accountId;
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_add_account (
-            configurationManagerProxy,
-            a->properties,
-            &accountId,
-            &error);
-    if (error)
+  gchar* accountId;
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_add_account(
+      configurationManagerProxy, a->properties, &accountId, &error);
+  if (error)
     {
-        ERROR ("Failed to call add_account() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call add_account() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return accountId;
+  return accountId;
 }
 
-    void
+void
 dbus_set_volume(const gchar * device, gdouble value)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_set_volume(
-            callManagerProxy,
-            device,
-            value,
-            &error);
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_set_volume(callManagerProxy, device, value,
+      &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call set_volume() on callManagerProxy: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call set_volume() on callManagerProxy: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-
-    gdouble
+gdouble
 dbus_get_volume(const gchar * device)
 {
-    gdouble  value;
-    GError *error = NULL;
+  gdouble value;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_CallManager_get_volume(
-            callManagerProxy,
-            device,
-            &value,
-            &error);
+  org_sflphone_SFLphone_CallManager_get_volume(callManagerProxy, device,
+      &value, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call get_volume() on callManagerProxy: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call get_volume() on callManagerProxy: %s",
+          error->message);
+      g_error_free(error);
     }
-    return value;
+  return value;
 }
 
-
-    void
+void
 dbus_play_dtmf(const gchar * key)
 {
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_CallManager_play_dt_mf(
-            callManagerProxy,
-            key,
-            &error);
+  org_sflphone_SFLphone_CallManager_play_dt_mf(callManagerProxy, key, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call playDTMF() on callManagerProxy: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call playDTMF() on callManagerProxy: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_start_tone(const int start , const guint type )
+void
+dbus_start_tone(const int start, const guint type)
 {
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_CallManager_start_tone(
-            callManagerProxy,
-            start,
-            type,
-            &error);
+  org_sflphone_SFLphone_CallManager_start_tone(callManagerProxy, start, type,
+      &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call startTone() on callManagerProxy: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call startTone() on callManagerProxy: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
+void
 dbus_register(int pid, gchar * name)
 {
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_Instance_register(
-            instanceProxy,
-            pid,
-            name,
-            &error);
+  org_sflphone_SFLphone_Instance_register(instanceProxy, pid, name, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call register() on instanceProxy: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call register() on instanceProxy: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
+void
 dbus_unregister(int pid)
 {
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_Instance_unregister(
-            instanceProxy,
-            pid,
-            &error);
+  org_sflphone_SFLphone_Instance_unregister(instanceProxy, pid, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call unregister() on instanceProxy: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call unregister() on instanceProxy: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    gchar**
+gchar**
 dbus_codec_list()
 {
 
-    GError *error = NULL;
-    gchar** array = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_codec_list (
-            configurationManagerProxy,
-            &array,
-            &error);
+  GError *error = NULL;
+  gchar** array = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_codec_list(
+      configurationManagerProxy, &array, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call get_codec_list() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call get_codec_list() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
-    gchar**
-dbus_codec_details( int payload )
+gchar**
+dbus_codec_details(int payload)
 {
 
-    GError *error = NULL;
-    gchar ** array;
-    org_sflphone_SFLphone_ConfigurationManager_get_codec_details (
-            configurationManagerProxy,
-            payload,
-            &array,
-            &error);
+  GError *error = NULL;
+  gchar ** array;
+  org_sflphone_SFLphone_ConfigurationManager_get_codec_details(
+      configurationManagerProxy, payload, &array, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call get_codec_details() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call get_codec_details() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
-gchar* dbus_get_current_codec_name (const callable_obj_t * c)
+gchar*
+dbus_get_current_codec_name(const callable_obj_t * c)
 {
 
-    gchar* codecName= "";
-    GError* error = NULL;
+  gchar* codecName = "";
+  GError* error = NULL;
 
-    org_sflphone_SFLphone_CallManager_get_current_codec_name (
-            callManagerProxy,
-            c->_callID,
-            &codecName,
-            &error);
-    if(error)
+  org_sflphone_SFLphone_CallManager_get_current_codec_name(callManagerProxy,
+      c->_callID, &codecName, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 
-    DEBUG("dbus_get_current_codec_name : codecName : %s", codecName);
+  DEBUG("dbus_get_current_codec_name : codecName : %s", codecName);
 
-    return codecName;
+  return codecName;
 }
 
-gchar** dbus_get_active_codec_list (gchar *accountID) {
+gchar**
+dbus_get_active_codec_list(gchar *accountID)
+{
 
-    gchar ** array;
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_active_codec_list (
-            configurationManagerProxy,
-			accountID,
-            &array,
-            &error);
+  gchar ** array;
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_active_codec_list(
+      configurationManagerProxy, accountID, &array, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call get_active_codec_list() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call get_active_codec_list() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
-    void
+void
 dbus_set_active_codec_list(const gchar** list, const gchar *accountID)
 {
 
-    GError *error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_active_codec_list (
-            configurationManagerProxy,
-            list,
-			accountID,
-            &error);
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_active_codec_list(
+      configurationManagerProxy, list, accountID, &error);
 
-    if (error)
+  if (error)
     {
-        ERROR ("Failed to call set_active_codec_list() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call set_active_codec_list() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
 /**
  * Get a list of input supported audio plugins
  */
-    gchar**
+gchar**
 dbus_get_input_audio_plugin_list()
 {
-    gchar** array;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_input_audio_plugin_list(
-            configurationManagerProxy,
-            &array,
-            &error);
-    if(error)
+  gchar** array;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_input_audio_plugin_list(
+      configurationManagerProxy, &array, &error);
+  if (error)
     {
-        ERROR("Failed to call get_input_audio_plugin_list() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call get_input_audio_plugin_list() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
 /**
  * Get a list of output supported audio plugins
  */
-    gchar**
+gchar**
 dbus_get_output_audio_plugin_list()
 {
-    gchar** array;
-    GError* error = NULL;
+  gchar** array;
+  GError* error = NULL;
 
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_output_audio_plugin_list( configurationManagerProxy, &array, &error))
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_output_audio_plugin_list(
+      configurationManagerProxy, &array, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_output_audio_plugin_list) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_output_audio_plugin_list) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_out_audio_plugin_list: %s", error->message);
+          ERROR("Error while calling get_out_audio_plugin_list: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
+      g_error_free(error);
+      return NULL;
     }
-    else{
-        return array;
+  else
+    {
+      return array;
     }
 }
 
-    void
+void
 dbus_set_input_audio_plugin(gchar* audioPlugin)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_input_audio_plugin(
-            configurationManagerProxy,
-            audioPlugin,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_input_audio_plugin(
+      configurationManagerProxy, audioPlugin, &error);
+  if (error)
     {
-        ERROR("Failed to call set_input_audio_plugin() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call set_input_audio_plugin() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
 }
 
-    void
+void
 dbus_set_output_audio_plugin(gchar* audioPlugin)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_output_audio_plugin(
-            configurationManagerProxy,
-            audioPlugin,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_output_audio_plugin(
+      configurationManagerProxy, audioPlugin, &error);
+  if (error)
     {
-        ERROR("Failed to call set_output_audio_plugin() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call set_output_audio_plugin() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
 }
 
 /**
  * Get all output devices index supported by current audio manager
  */
-gchar** dbus_get_audio_output_device_list()
+gchar**
+dbus_get_audio_output_device_list()
 {
-    gchar** array;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_audio_output_device_list(
-            configurationManagerProxy,
-            &array,
-            &error);
-    if(error)
+  gchar** array;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_audio_output_device_list(
+      configurationManagerProxy, &array, &error);
+  if (error)
     {
-        ERROR("Failed to call get_audio_output_device_list() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call get_audio_output_device_list() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
 /**
  * Set audio output device from its index
  */
-    void
+void
 dbus_set_audio_output_device(const int index)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_audio_output_device(
-            configurationManagerProxy,
-            index,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_audio_output_device(
+      configurationManagerProxy, index, &error);
+  if (error)
     {
-        ERROR("Failed to call set_audio_output_device() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call set_audio_output_device() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
 }
 
 /**
  * Get all input devices index supported by current audio manager
  */
-    gchar**
+gchar**
 dbus_get_audio_input_device_list()
 {
-    gchar** array;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_audio_input_device_list(
-            configurationManagerProxy,
-            &array,
-            &error);
-    if(error)
+  gchar** array;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_audio_input_device_list(
+      configurationManagerProxy, &array, &error);
+  if (error)
     {
-        ERROR("Failed to call get_audio_input_device_list() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call get_audio_input_device_list() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
 /**
  * Set audio input device from its index
  */
-    void
+void
 dbus_set_audio_input_device(const int index)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_audio_input_device(
-            configurationManagerProxy,
-            index,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_audio_input_device(
+      configurationManagerProxy, index, &error);
+  if (error)
     {
-        ERROR("Failed to call set_audio_input_device() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call set_audio_input_device() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
 }
 
 /**
  * Get output device index and input device index
  */
-    gchar**
+gchar**
 dbus_get_current_audio_devices_index()
 {
-    gchar** array;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_current_audio_devices_index(
-            configurationManagerProxy,
-            &array,
-            &error);
-    if(error)
+  gchar** array;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_current_audio_devices_index(
+      configurationManagerProxy, &array, &error);
+  if (error)
     {
-        ERROR("Failed to call get_current_audio_devices_index() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call get_current_audio_devices_index() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
 /**
  * Get index
  */
-    int
+int
 dbus_get_audio_device_index(const gchar *name)
 {
-    int index;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_audio_device_index(
-            configurationManagerProxy,
-            name,
-            &index,
-            &error);
-    if(error)
+  int index;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_audio_device_index(
+      configurationManagerProxy, name, &index, &error);
+  if (error)
     {
-        ERROR("Failed to call get_audio_device_index() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call get_audio_device_index() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
-    return index;
+  return index;
 }
 
 /**
  * Get audio plugin
  */
-    gchar*
+gchar*
 dbus_get_current_audio_output_plugin()
 {
-    gchar* plugin="";
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_current_audio_output_plugin(
-            configurationManagerProxy,
-            &plugin,
-            &error);
-    if(error)
+  gchar* plugin = "";
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_current_audio_output_plugin(
+      configurationManagerProxy, &plugin, &error);
+  if (error)
     {
-        ERROR("Failed to call get_current_audio_output_plugin() on ConfigurationManager: %s", error->message);
-        g_error_free(error);
+      ERROR("Failed to call get_current_audio_output_plugin() on ConfigurationManager: %s", error->message);
+      g_error_free(error);
     }
-    return plugin;
+  return plugin;
 }
 
-
-    gchar*
+gchar*
 dbus_get_ringtone_choice()
 {
-    gchar* tone;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_ringtone_choice(
-            configurationManagerProxy,
-            &tone,
-            &error);
-    if(error)
+  gchar* tone;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_ringtone_choice(
+      configurationManagerProxy, &tone, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return tone;
+  return tone;
 }
 
-    void
-dbus_set_ringtone_choice( const gchar* tone )
+void
+dbus_set_ringtone_choice(const gchar* tone)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_ringtone_choice(
-            configurationManagerProxy,
-            tone,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_ringtone_choice(
+      configurationManagerProxy, tone, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    int
+int
 dbus_is_ringtone_enabled()
 {
-    int res;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled(
-            configurationManagerProxy,
-            &res,
-            &error);
-    if(error)
+  int res;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled(
+      configurationManagerProxy, &res, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return res;
+  return res;
 }
 
-    void
+void
 dbus_ringtone_enabled()
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled(
-            configurationManagerProxy,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled(
+      configurationManagerProxy, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    gboolean
+gboolean
 dbus_is_md5_credential_hashing()
 {
-    int res;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_is_md5_credential_hashing(
-            configurationManagerProxy,
-            &res,
-            &error);
-    if(error)
+  int res;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_is_md5_credential_hashing(
+      configurationManagerProxy, &res, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return res;
+  return res;
 }
 
-    void
+void
 dbus_set_md5_credential_hashing(gboolean enabled)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_md5_credential_hashing(
-            configurationManagerProxy,
-            enabled,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_md5_credential_hashing(
+      configurationManagerProxy, enabled, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    int
+int
 dbus_is_iax2_enabled()
 {
-    int res;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_is_iax2_enabled(
-            configurationManagerProxy,
-            &res,
-            &error);
-    if(error)
+  int res;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_is_iax2_enabled(
+      configurationManagerProxy, &res, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return res;
+  return res;
 }
 
-    int
+int
 dbus_get_dialpad()
 {
-    int state;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_dialpad(
-            configurationManagerProxy,
-            &state,
-            &error);
-    if(error)
+  int state;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_dialpad(
+      configurationManagerProxy, &state, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return state;
+  return state;
 }
 
-void dbus_set_dialpad (gboolean display)
+void
+dbus_set_dialpad(gboolean display)
 {
-    
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_dialpad(
-            configurationManagerProxy,
-			display,
-            &error);
-    if(error)
+
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_dialpad(
+      configurationManagerProxy, display, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    int
+int
 dbus_get_searchbar()
 {
-    int state;
-    GError* error = NULL;
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_searchbar( configurationManagerProxy, &state, &error))
+  int state;
+  GError* error = NULL;
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_searchbar(
+      configurationManagerProxy, &state, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_searchbar) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_searchbar) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_searchbar: %s", error->message);
+          ERROR("Error while calling get_searchbar: %s", error->message);
         }
-        g_error_free (error);
-        return -1;
+      g_error_free(error);
+      return -1;
     }
-    else
+  else
     {
-        return state;
+      return state;
     }
 }
 
-    void
-dbus_set_searchbar(  )
+void
+dbus_set_searchbar()
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_searchbar(
-            configurationManagerProxy,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_searchbar(
+      configurationManagerProxy, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    int
+int
 dbus_get_volume_controls()
 {
-    int state;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_volume_controls(
-            configurationManagerProxy,
-            &state,
-            &error);
-    if(error)
+  int state;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_volume_controls(
+      configurationManagerProxy, &state, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return state;
+  return state;
 }
 
-    void
-dbus_set_volume_controls (gboolean display)
+void
+dbus_set_volume_controls(gboolean display)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_volume_controls(
-            configurationManagerProxy,
-			display,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_volume_controls(
+      configurationManagerProxy, display, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
@@ -1748,831 +1662,925 @@ void
 dbus_join_participant(const gchar* sel_callID, const gchar* drag_callID)
 {
 
-    DEBUG("dbus_join_participant %s and %s\n", sel_callID, drag_callID);
+  DEBUG("dbus_join_participant %s and %s\n", sel_callID, drag_callID);
 
-    GError* error = NULL;
-    
-    org_sflphone_SFLphone_CallManager_join_participant (
-             callManagerProxy, 
-	     sel_callID, 
-	     drag_callID, 
-	     &error);
-    if(error)
+  GError* error = NULL;
+
+  org_sflphone_SFLphone_CallManager_join_participant(callManagerProxy,
+      sel_callID, drag_callID, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    
+
 }
 
 void
 dbus_add_participant(const gchar* callID, const gchar* confID)
 {
 
-    DEBUG("dbus_add_participant %s and %s\n", callID, confID);
+  DEBUG("dbus_add_participant %s and %s\n", callID, confID);
 
-    GError* error = NULL;
-    
-    org_sflphone_SFLphone_CallManager_add_participant (
-             callManagerProxy, 
-	     callID, 
-	     confID, 
-	     &error);
-    if(error)
+  GError* error = NULL;
+
+  org_sflphone_SFLphone_CallManager_add_participant(callManagerProxy, callID,
+      confID, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    
+
 }
 
 void
 dbus_add_main_participant(const gchar* confID)
 {
-    DEBUG("dbus_add_participant %s\n", confID);
+  DEBUG("dbus_add_participant %s\n", confID);
 
-    GError* error = NULL;
+  GError* error = NULL;
 
-    org_sflphone_SFLphone_CallManager_add_main_participant (
-             callManagerProxy, 
-	     confID, 
-	     &error);
-    if(error)
+  org_sflphone_SFLphone_CallManager_add_main_participant(callManagerProxy,
+      confID, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-
-    void
+void
 dbus_detach_participant(const gchar* callID)
 {
 
-    DEBUG("dbus_detach_participant %s\n", callID);
+  DEBUG("dbus_detach_participant %s\n", callID);
 
-    GError* error = NULL;
-    org_sflphone_SFLphone_CallManager_detach_participant(
-            callManagerProxy,
-            callID,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_CallManager_detach_participant(callManagerProxy,
+      callID, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    
-}
 
+}
 
 dbus_join_conference(const gchar* sel_confID, const gchar* drag_confID)
 {
 
-    DEBUG("dbus_join_conference %s and %s\n", sel_confID, drag_confID);
+  DEBUG("dbus_join_conference %s and %s\n", sel_confID, drag_confID);
 
-    GError* error = NULL;
-    
-    org_sflphone_SFLphone_CallManager_join_conference (
-             callManagerProxy, 
-	     sel_confID, 
-	     drag_confID, 
-	     &error);
-    if(error)
+  GError* error = NULL;
+
+  org_sflphone_SFLphone_CallManager_join_conference(callManagerProxy,
+      sel_confID, drag_confID, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    
-}
-
 
+}
 
-    void
+void
 dbus_set_record(const gchar* id)
 {
-    DEBUG("dbus_set_record %s\n", id);
+  DEBUG("dbus_set_record %s\n", id);
 
-    GError* error = NULL;
-    org_sflphone_SFLphone_CallManager_set_recording (
-            callManagerProxy,
-            id,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_CallManager_set_recording(callManagerProxy, id, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-
-    gboolean
+gboolean
 dbus_get_is_recording(const callable_obj_t * c)
 {
-    DEBUG("dbus_get_is_recording %s\n", c->_callID);
-    GError* error = NULL;
-    gboolean isRecording;
-    org_sflphone_SFLphone_CallManager_get_is_recording (
-            callManagerProxy,
-            c->_callID,
-            &isRecording,
-            &error);
-    if(error)
+  DEBUG("dbus_get_is_recording %s\n", c->_callID);
+  GError* error = NULL;
+  gboolean isRecording;
+  org_sflphone_SFLphone_CallManager_get_is_recording(callManagerProxy,
+      c->_callID, &isRecording, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    //DEBUG("RECORDING: %i",isRecording);
-    return isRecording;
+  //DEBUG("RECORDING: %i",isRecording);
+  return isRecording;
 }
 
-    void
+void
 dbus_set_record_path(const gchar* path)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_record_path (
-            configurationManagerProxy,
-            path,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_record_path(
+      configurationManagerProxy, path, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    gchar*
+gchar*
 dbus_get_record_path(void)
 {
-    GError* error = NULL;
-    gchar *path;
-    org_sflphone_SFLphone_ConfigurationManager_get_record_path (
-            configurationManagerProxy,
-            &path,
-            &error);
-    if(error)
+  GError* error = NULL;
+  gchar *path;
+  org_sflphone_SFLphone_ConfigurationManager_get_record_path(
+      configurationManagerProxy, &path, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return path;
+  return path;
 }
 
-void dbus_set_history_limit (const guint days)
+void
+dbus_set_history_limit(const guint days)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_history_limit(
-            configurationManagerProxy,
-            days,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_history_limit(
+      configurationManagerProxy, days, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-void dbus_set_history_enabled ()
+void
+dbus_set_history_enabled()
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_history_enabled(
-            configurationManagerProxy,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_history_enabled(
+      configurationManagerProxy, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-gchar* dbus_get_history_enabled ()
+gchar*
+dbus_get_history_enabled()
 {
-    gchar* state; 
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_history_enabled(
-            configurationManagerProxy,
-            &state,
-            &error);
-    if(error)
+  gchar* state;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_history_enabled(
+      configurationManagerProxy, &state, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return state;
+  return state;
 }
 
-
-
-guint dbus_get_history_limit (void)
+guint
+dbus_get_history_limit(void)
 {
-    GError* error = NULL;
-    gint days=30;
-    org_sflphone_SFLphone_ConfigurationManager_get_history_limit(
-            configurationManagerProxy,
-            &days,
-            &error);
-    if(error)
+  GError* error = NULL;
+  gint days = 30;
+  org_sflphone_SFLphone_ConfigurationManager_get_history_limit(
+      configurationManagerProxy, &days, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return (guint)days;
+  return (guint) days;
 }
 
-    void
-dbus_start_hidden( void )
+void
+dbus_start_hidden(void)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_start_hidden(
-            configurationManagerProxy,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_start_hidden(
+      configurationManagerProxy, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-
-    int
-dbus_is_start_hidden( void )
+int
+dbus_is_start_hidden(void)
 {
-    GError* error = NULL;
-    int state;
-    org_sflphone_SFLphone_ConfigurationManager_is_start_hidden(
-            configurationManagerProxy,
-            &state,
-            &error);
-    if(error)
+  GError* error = NULL;
+  int state;
+  org_sflphone_SFLphone_ConfigurationManager_is_start_hidden(
+      configurationManagerProxy, &state, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return state;
+  return state;
 }
 
-    int
-dbus_popup_mode( void )
+int
+dbus_popup_mode(void)
 {
-    GError* error = NULL;
-    int state;
-    org_sflphone_SFLphone_ConfigurationManager_popup_mode(
-            configurationManagerProxy,
-            &state,
-            &error);
-    if(error)
+  GError* error = NULL;
+  int state;
+  org_sflphone_SFLphone_ConfigurationManager_popup_mode(
+      configurationManagerProxy, &state, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
-    return state;
+  return state;
 }
 
-    void
-dbus_switch_popup_mode( void )
+void
+dbus_switch_popup_mode(void)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_switch_popup_mode(
-            configurationManagerProxy,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_switch_popup_mode(
+      configurationManagerProxy, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_set_notify( void )
+void
+dbus_set_notify(void)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_notify(
-            configurationManagerProxy,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_notify(
+      configurationManagerProxy, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    guint
-dbus_get_notify( void )
+guint
+dbus_get_notify(void)
 {
-    gint level;
-    GError* error = NULL;
-    if( !org_sflphone_SFLphone_ConfigurationManager_get_notify( configurationManagerProxy,&level, &error) )
+  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)
+      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);
+          ERROR ("Caught remote method (get_notify) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR ("Error while calling get_notify: %s", error->message);
+          ERROR ("Error while calling get_notify: %s", error->message);
         }
-        g_error_free (error);
-        return 0;
+      g_error_free(error);
+      return 0;
     }
-    else{
-        return (guint)level;
+  else
+    {
+      return (guint) level;
     }
 }
 
-    void
-dbus_set_audio_manager( int api )
+void
+dbus_set_audio_manager(int api)
 {
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_audio_manager(
-            configurationManagerProxy,
-            api,
-            &error);
-    if(error)
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_audio_manager(
+      configurationManagerProxy, api, &error);
+  if (error)
     {
-        g_error_free(error);
+      g_error_free(error);
     }
 }
 
-    int
-dbus_get_audio_manager( void )
+int
+dbus_get_audio_manager(void)
 {
-    int api;
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_audio_manager(
-            configurationManagerProxy,
-            &api,
-            &error);
-    if(error)
+  int api;
+  GError* error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_audio_manager(
+      configurationManagerProxy, &api, &error);
+  if (error)
     {
-        ERROR("Error calling dbus_get_audio_manager");
-        g_error_free(error);
+      ERROR("Error calling dbus_get_audio_manager");
+      g_error_free(error);
     }
 
-    return api;
+  return api;
 }
 
 /*
-    void
-dbus_set_sip_address( const gchar* address )
-{
-    GError* error = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_set_sip_address(
-            configurationManagerProxy,
-            address,
-            &error);
-    if(error)
-    {
-        g_error_free(error);
-    }
-}
-*/
+ void
+ dbus_set_sip_address( const gchar* address )
+ {
+ GError* error = NULL;
+ org_sflphone_SFLphone_ConfigurationManager_set_sip_address(
+ configurationManagerProxy,
+ address,
+ &error);
+ if(error)
+ {
+ g_error_free(error);
+ }
+ }
+ */
 
- /*
+/*
 
-    gint
-dbus_get_sip_address( void )
-{
-    GError* error = NULL;
-    gint address;
-    org_sflphone_SFLphone_ConfigurationManager_get_sip_address(
-            configurationManagerProxy,
-            &address,
-            &error);
-    if(error)
-    {
-        g_error_free(error);
-    }
-    return address;
-}
+ gint
+ dbus_get_sip_address( void )
+ {
+ GError* error = NULL;
+ gint address;
+ org_sflphone_SFLphone_ConfigurationManager_get_sip_address(
+ configurationManagerProxy,
+ &address,
+ &error);
+ if(error)
+ {
+ g_error_free(error);
+ }
+ return address;
+ }
  */
 
-GHashTable* dbus_get_addressbook_settings (void) {
+GHashTable*
+dbus_get_addressbook_settings(void)
+{
 
-    GError *error = NULL;
-    GHashTable *results = NULL;
+  GError *error = NULL;
+  GHashTable *results = NULL;
 
-    //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
+  //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
 
-    org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings (configurationManagerProxy, &results, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings(
+      configurationManagerProxy, &results, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
+      g_error_free(error);
     }
 
-    return results;
+  return results;
 }
 
-void dbus_set_addressbook_settings (GHashTable * settings){
+void
+dbus_set_addressbook_settings(GHashTable * settings)
+{
 
-    GError *error = NULL;
+  GError *error = NULL;
 
-    DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
+  DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
 
-    org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings (configurationManagerProxy, settings, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings(
+      configurationManagerProxy, settings, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
+      g_error_free(error);
     }
 }
 
-gchar** dbus_get_addressbook_list (void) {
+gchar**
+dbus_get_addressbook_list(void)
+{
 
-    GError *error = NULL;
-    gchar** array;
+  GError *error = NULL;
+  gchar** array;
 
-    org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list (configurationManagerProxy, &array, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list(
+      configurationManagerProxy, &array, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list");
+      g_error_free(error);
     }
 
-    return array;
+  return array;
 }
 
-void dbus_set_addressbook_list (const gchar** list){
+void
+dbus_set_addressbook_list(const gchar** list)
+{
 
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list(configurationManagerProxy, list, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list(
+      configurationManagerProxy, list, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list");
+      g_error_free(error);
     }
 }
 
-GHashTable* dbus_get_hook_settings (void) {
+GHashTable*
+dbus_get_hook_settings(void)
+{
 
-    GError *error = NULL;
-    GHashTable *results = NULL;
+  GError *error = NULL;
+  GHashTable *results = NULL;
 
-    //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
+  //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
 
-    org_sflphone_SFLphone_ConfigurationManager_get_hook_settings (configurationManagerProxy, &results, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_hook_settings");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_get_hook_settings(
+      configurationManagerProxy, &results, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_hook_settings");
+      g_error_free(error);
     }
 
-    return results;
+  return results;
 }
 
-void dbus_set_hook_settings (GHashTable * settings){
+void
+dbus_set_hook_settings(GHashTable * settings)
+{
 
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_ConfigurationManager_set_hook_settings (configurationManagerProxy, settings, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_hook_settings");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_set_hook_settings(
+      configurationManagerProxy, settings, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_hook_settings");
+      g_error_free(error);
     }
 }
 
-GHashTable* dbus_get_call_details (const gchar *callID)
+GHashTable*
+dbus_get_call_details(const gchar *callID)
 {
-    GError *error = NULL;
-    GHashTable *details = NULL;
+  GError *error = NULL;
+  GHashTable *details = NULL;
 
-    org_sflphone_SFLphone_CallManager_get_call_details (callManagerProxy, callID, &details, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_details");
-        g_error_free (error);
+  org_sflphone_SFLphone_CallManager_get_call_details(callManagerProxy, callID,
+      &details, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_details");
+      g_error_free(error);
     }
 
-    return details;
+  return details;
 }
 
-gchar** dbus_get_call_list (void)
+gchar**
+dbus_get_call_list(void)
 {
-    GError *error = NULL;
-    gchar **list = NULL;
+  GError *error = NULL;
+  gchar **list = NULL;
 
-    org_sflphone_SFLphone_CallManager_get_call_list (callManagerProxy, &list, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_list");
-        g_error_free (error);
+  org_sflphone_SFLphone_CallManager_get_call_list(callManagerProxy, &list,
+      &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_list");
+      g_error_free(error);
     }
 
-    return list;
+  return list;
 }
 
-gchar** dbus_get_conference_list (void)
+gchar**
+dbus_get_conference_list(void)
 {
-    GError *error = NULL;
-    gchar **list = NULL;
+  GError *error = NULL;
+  gchar **list = NULL;
 
-    org_sflphone_SFLphone_CallManager_get_conference_list (callManagerProxy, &list, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_list");
-        g_error_free (error);
+  org_sflphone_SFLphone_CallManager_get_conference_list(callManagerProxy,
+      &list, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_list");
+      g_error_free(error);
     }
 
-    return list;
+  return list;
 }
 
-
-gchar** dbus_get_participant_list (const char * confID)
+gchar**
+dbus_get_participant_list(const char * confID)
 {
-    GError *error = NULL;
-    gchar **list = NULL;
+  GError *error = NULL;
+  gchar **list = NULL;
 
-    DEBUG("get participant list")
+  DEBUG("get participant list")
 
-    org_sflphone_SFLphone_CallManager_get_participant_list (callManagerProxy, confID, &list, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_participant_list");
-        g_error_free (error);
+  org_sflphone_SFLphone_CallManager_get_participant_list(callManagerProxy,
+      confID, &list, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_participant_list");
+      g_error_free(error);
     }
 
-    return list;
+  return list;
 }
 
-
-GHashTable* dbus_get_conference_details (const gchar *confID)
+GHashTable*
+dbus_get_conference_details(const gchar *confID)
 {
-    GError *error = NULL;
-    GHashTable *details = NULL;
+  GError *error = NULL;
+  GHashTable *details = NULL;
 
-    org_sflphone_SFLphone_CallManager_get_conference_details (callManagerProxy, confID, &details, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_details");
-        g_error_free (error);
+  org_sflphone_SFLphone_CallManager_get_conference_details(callManagerProxy,
+      confID, &details, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_details");
+      g_error_free(error);
     }
 
-    return details;
+  return details;
 }
 
-void dbus_set_accounts_order (const gchar* order) {
+void
+dbus_set_accounts_order(const gchar* order)
+{
 
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_ConfigurationManager_set_accounts_order (configurationManagerProxy, order, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_accounts_order");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_set_accounts_order(
+      configurationManagerProxy, order, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_accounts_order");
+      g_error_free(error);
     }
 }
 
-GHashTable* dbus_get_history (void)
+GHashTable*
+dbus_get_history(void)
 {
-    GError *error = NULL;
-    GHashTable *entries = NULL;
+  GError *error = NULL;
+  GHashTable *entries = NULL;
 
-    org_sflphone_SFLphone_ConfigurationManager_get_history (configurationManagerProxy, &entries, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_history");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_get_history(
+      configurationManagerProxy, &entries, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_history");
+      g_error_free(error);
     }
 
-    return entries;
+  return entries;
 }
 
-void dbus_set_history (GHashTable* entries)
+void
+dbus_set_history(GHashTable* entries)
 {
-    GError *error = NULL;
+  GError *error = NULL;
 
-    org_sflphone_SFLphone_ConfigurationManager_set_history (configurationManagerProxy, entries, &error);
-    if (error){
-        ERROR ("Error calling org_sflphone_SFLphone_CallManager_set_history");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_set_history(
+      configurationManagerProxy, entries, &error);
+  if (error)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_CallManager_set_history");
+      g_error_free(error);
     }
 }
 
-    void
-dbus_confirm_sas (const callable_obj_t * c)
+void
+dbus_confirm_sas(const callable_obj_t * c)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_set_sa_sverified ( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_set_sa_sverified(callManagerProxy,
+      c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call setSASVerified() on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call setSASVerified() on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_reset_sas (const callable_obj_t * c)
+void
+dbus_reset_sas(const callable_obj_t * c)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_reset_sa_sverified ( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_reset_sa_sverified(callManagerProxy,
+      c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call resetSASVerified on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call resetSASVerified on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_set_confirm_go_clear (const callable_obj_t * c)
+void
+dbus_set_confirm_go_clear(const callable_obj_t * c)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_set_confirm_go_clear( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_set_confirm_go_clear(callManagerProxy,
+      c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call set_confirm_go_clear on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call set_confirm_go_clear on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    void
-dbus_request_go_clear (const callable_obj_t * c)
+void
+dbus_request_go_clear(const callable_obj_t * c)
 {
-    GError *error = NULL;
-    org_sflphone_SFLphone_CallManager_request_go_clear( callManagerProxy, c->_callID, &error);
-    if (error)
+  GError *error = NULL;
+  org_sflphone_SFLphone_CallManager_request_go_clear(callManagerProxy,
+      c->_callID, &error);
+  if (error)
     {
-        ERROR ("Failed to call request_go_clear on CallManager: %s",
-                error->message);
-        g_error_free (error);
+      ERROR ("Failed to call request_go_clear on CallManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-    gchar**
+gchar**
 dbus_get_supported_tls_method()
 {
-    GError *error = NULL;
-    gchar** array = NULL;
-    org_sflphone_SFLphone_ConfigurationManager_get_supported_tls_method (configurationManagerProxy, &array, &error);
+  GError *error = NULL;
+  gchar** array = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_get_supported_tls_method(
+      configurationManagerProxy, &array, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call get_supported_tls_method() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call get_supported_tls_method() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return array;
+  return array;
 }
 
-GHashTable* dbus_get_tls_settings_default(void) 
+GHashTable*
+dbus_get_tls_settings_default(void)
 {
-    GError *error = NULL;
-    GHashTable *results = NULL;
+  GError *error = NULL;
+  GHashTable *results = NULL;
 
-    org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default(configurationManagerProxy, &results, &error);
-    if (error != NULL){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default(
+      configurationManagerProxy, &results, &error);
+  if (error != NULL)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default");
+      g_error_free(error);
     }
 
-    return results;
+  return results;
 }
 
-
-gchar * dbus_get_address_from_interface_name(gchar* interface)
+gchar *
+dbus_get_address_from_interface_name(gchar* interface)
 {
-    GError *error = NULL;
-    gchar * address;
+  GError *error = NULL;
+  gchar * address;
 
-    org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name ( configurationManagerProxy, interface, &address, &error);
-    if (error != NULL){
-        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name\n");
-        g_error_free (error);
+  org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name(
+      configurationManagerProxy, interface, &address, &error);
+  if (error != NULL)
+    {
+      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name\n");
+      g_error_free(error);
     }
 
-    return address;
+  return address;
 
 }
 
-
-gchar ** dbus_get_all_ip_interface(void)
+gchar **
+dbus_get_all_ip_interface(void)
 {
-    GError *error = NULL;
-    gchar ** array;
+  GError *error = NULL;
+  gchar ** array;
 
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface ( configurationManagerProxy, &array, &error))
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface(
+      configurationManagerProxy, &array, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_all_ip_interface: %s", error->message);
+          ERROR("Error while calling get_all_ip_interface: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
+      g_error_free(error);
+      return NULL;
     }
-    else{
-        DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
-        return array;
+  else
+    {
+      DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
+      return array;
     }
 }
 
-gchar ** dbus_get_all_ip_interface_by_name(void)
+gchar **
+dbus_get_all_ip_interface_by_name(void)
 {
-    GError *error = NULL;
-    gchar ** array;
+  GError *error = NULL;
+  gchar ** array;
 
-    if(!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface_by_name ( configurationManagerProxy, &array, &error))
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface_by_name(
+      configurationManagerProxy, &array, &error))
     {
-        if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
         {
-            ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+          ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name(error), error->message);
         }
-        else
+      else
         {
-            ERROR("Error while calling get_all_ip_interface: %s", error->message);
+          ERROR("Error while calling get_all_ip_interface: %s", error->message);
         }
-        g_error_free (error);
-        return NULL;
+      g_error_free(error);
+      return NULL;
     }
-    else{
-        DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
-        return array;
+  else
+    {
+      DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
+      return array;
     }
 }
 
-guint dbus_get_window_width (void) {
+guint
+dbus_get_window_width(void)
+{
 
-    GError *error = NULL;
-	guint value; 
+  GError *error = NULL;
+  guint value;
 
-	org_sflphone_SFLphone_ConfigurationManager_get_window_width (configurationManagerProxy, &value, &error);
+  org_sflphone_SFLphone_ConfigurationManager_get_window_width(
+      configurationManagerProxy, &value, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call get_window_width() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call get_window_width() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return value;
+  return value;
 }
 
-guint dbus_get_window_height (void) {
+guint
+dbus_get_window_height(void)
+{
 
-    GError *error = NULL;
-	guint value; 
+  GError *error = NULL;
+  guint value;
 
-	org_sflphone_SFLphone_ConfigurationManager_get_window_height (configurationManagerProxy, &value, &error);
+  org_sflphone_SFLphone_ConfigurationManager_get_window_height(
+      configurationManagerProxy, &value, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call get_window_height() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call get_window_height() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-    return value;
+  return value;
 }
 
-void dbus_set_window_width (const guint width) {
+void
+dbus_set_window_width(const guint width)
+{
 
-    GError *error = NULL;
+  GError *error = NULL;
 
-	org_sflphone_SFLphone_ConfigurationManager_set_window_width (configurationManagerProxy, width, &error);
+  org_sflphone_SFLphone_ConfigurationManager_set_window_width(
+      configurationManagerProxy, width, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call set_window_width() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call set_window_width() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
+void
+dbus_set_window_height(const guint height)
+{
 
-void dbus_set_window_height (const guint height) {
-
-    GError *error = NULL;
+  GError *error = NULL;
 
-	org_sflphone_SFLphone_ConfigurationManager_set_window_height (configurationManagerProxy, height, &error);
+  org_sflphone_SFLphone_ConfigurationManager_set_window_height(
+      configurationManagerProxy, height, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call set_window_height() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call set_window_height() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-guint dbus_get_window_position_x (void) {
+guint
+dbus_get_window_position_x(void)
+{
 
-	GError *error = NULL;
-	guint value; 
+  GError *error = NULL;
+  guint value;
 
-	org_sflphone_SFLphone_ConfigurationManager_get_window_position_x (configurationManagerProxy, &value, &error);
+  org_sflphone_SFLphone_ConfigurationManager_get_window_position_x(
+      configurationManagerProxy, &value, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call get_window_position_x() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call get_window_position_x() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-	return value;
+  return value;
 }
 
-guint dbus_get_window_position_y (void) {
+guint
+dbus_get_window_position_y(void)
+{
 
-	GError *error = NULL;
-	guint value; 
+  GError *error = NULL;
+  guint value;
 
-	org_sflphone_SFLphone_ConfigurationManager_get_window_position_y (configurationManagerProxy, &value, &error);
+  org_sflphone_SFLphone_ConfigurationManager_get_window_position_y(
+      configurationManagerProxy, &value, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call get_window_position_y() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call get_window_position_y() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
-	return value;
+  return value;
 }
 
-void dbus_set_window_position_x (const guint posx) {
+void
+dbus_set_window_position_x(const guint posx)
+{
 
-	GError *error = NULL;
+  GError *error = NULL;
 
-	org_sflphone_SFLphone_ConfigurationManager_set_window_position_x (configurationManagerProxy, posx, &error);
+  org_sflphone_SFLphone_ConfigurationManager_set_window_position_x(
+      configurationManagerProxy, posx, &error);
 
-    if (error != NULL) {
-        ERROR ("Failed to call set_window_position_x() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+  if (error != NULL)
+    {
+      ERROR ("Failed to call set_window_position_x() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
 
-void dbus_set_window_position_y (const guint posy) {
+void
+dbus_set_window_position_y(const guint posy)
+{
+
+  GError *error = NULL;
+
+  org_sflphone_SFLphone_ConfigurationManager_set_window_position_y(
+      configurationManagerProxy, posy, &error);
 
-	GError *error = NULL;
+  if (error != NULL)
+    {
+      ERROR ("Failed to call set_window_position_y() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
+    }
+}
 
-	org_sflphone_SFLphone_ConfigurationManager_set_window_position_y (configurationManagerProxy, posy, &error);
+GHashTable*
+dbus_get_shortcuts(void)
+{
+  GError *error = NULL;
+  GHashTable * shortcuts;
+  if (!org_sflphone_SFLphone_ConfigurationManager_get_shortcuts(
+      configurationManagerProxy, &shortcuts, &error))
+    {
+      if (error->domain == DBUS_GERROR && error->code
+          == DBUS_GERROR_REMOTE_EXCEPTION)
+        {
+          ERROR ("Caught remote method (get_shortcuts) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+        }
+      else
+        {
+          ERROR("Error while calling get_shortcuts: %s", error->message);
+        }
+      g_error_free(error);
+      return NULL;
+    }
+  else
+    {
+      return shortcuts;
+    }
+}
 
-    if (error != NULL) {
-        ERROR ("Failed to call set_window_position_y() on ConfigurationManager: %s",
-                error->message);
-        g_error_free (error);
+void
+dbus_set_shortcuts(GHashTable * shortcuts)
+{
+  GError *error = NULL;
+  org_sflphone_SFLphone_ConfigurationManager_set_shortcuts(
+      configurationManagerProxy, shortcuts, &error);
+  if (error)
+    {
+      ERROR ("Failed to call set_shortcuts() on ConfigurationManager: %s",
+          error->message);
+      g_error_free(error);
     }
 }
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index acc961fba4..b30126ea28 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -606,5 +606,7 @@ guint dbus_get_window_position_y (void);
 void dbus_set_window_position_x (const guint posx);
 void dbus_set_window_position_y (const guint posy);
 
+GHashTable* dbus_get_shortcuts(void);
+void dbus_set_shortcuts(GHashTable * shortcuts);
 
 #endif
diff --git a/sflphone-client-gnome/src/main.c b/sflphone-client-gnome/src/main.c
index fffd9a831b..0d7fb98e60 100644
--- a/sflphone-client-gnome/src/main.c
+++ b/sflphone-client-gnome/src/main.c
@@ -29,6 +29,8 @@
 #include <gtk/gtk.h>
 #include <stdlib.h>
 
+#include "shortcuts.h"
+
 /**
  * Stop logging engine
  */
@@ -120,6 +122,8 @@ There is NO WARRANTY, to the extent permitted by law.\n\n");
 	// Update the GUI
 	update_actions ();
         
+	shortcuts_initialize_bindings();
+
     /* start the main loop */
     gtk_main();
     }
@@ -127,6 +131,8 @@ There is NO WARRANTY, to the extent permitted by law.\n\n");
   // Cleanly stop logging
   shutdown_logging();
 
+  shortcuts_destroy_bindings();
+
   return 0;
 }
 
diff --git a/sflphone-common/.cproject b/sflphone-common/.cproject
index 0a0ee533da..2f2b2a83bb 100644
--- a/sflphone-common/.cproject
+++ b/sflphone-common/.cproject
@@ -43,6 +43,9 @@
 </tool>
 </toolChain>
 </folderInfo>
+<sourceEntries>
+<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name=""/>
+</sourceEntries>
 </configuration>
 </storageModule>
 <storageModule moduleId="scannerConfiguration">
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 33f0192c2c..f7a2b79ead 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -548,5 +548,12 @@
       <arg type="as" name="list" direction="out"/>
     </method>
     
+    <method name="getShortcuts">
+      <arg type="a{si}" name="shortcutsMap" direction="out"/>
+    </method>
+    
+    <method name="setShortcuts">
+      <arg type="a{si}" name="shortcutsMap" direction="in"/>
+    </method>
   </interface>
 </node>
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 275800cb54..0e5f759227 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -25,455 +25,480 @@
 #include "../manager.h"
 #include "sip/sipvoiplink.h"
 
-const char* ConfigurationManager::SERVER_PATH = "/org/sflphone/SFLphone/ConfigurationManager";
-
-
-
-ConfigurationManager::ConfigurationManager (DBus::Connection& connection)
-        : DBus::ObjectAdaptor (connection, SERVER_PATH)
-{
-}
-
-
-std::map< std::string, std::string >
-ConfigurationManager::getAccountDetails (const std::string& accountID)
-{
-    return Manager::instance().getAccountDetails (accountID);
-}
-
-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));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_CA_LIST_FILE, ""));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_CERTIFICATE_FILE, ""));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_PRIVATE_KEY_FILE, ""));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_PASSWORD, ""));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_METHOD, "TLSv1"));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_CIPHERS, ""));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_SERVER_NAME, ""));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_VERIFY_SERVER, "true"));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_VERIFY_CLIENT, "true"));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_REQUIRE_CLIENT_CERTIFICATE, "true"));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_SEC, "2"));
-    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_MSEC, "0"));
-
-    return tlsSettingsDefault;
-}
-
-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)));
-
-    std::map<std::string, std::string> tlsSettings;
-    tlsSettings = getTlsSettings (IP2IP_PROFILE);
-    std::copy (tlsSettings.begin(), tlsSettings.end(), std::inserter (ip2ipAccountDetails, ip2ipAccountDetails.end()));
-
-    return ip2ipAccountDetails;
-
-}
-
-void
-ConfigurationManager::setIp2IpDetails (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 (LOCAL_INTERFACE);
-
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, LOCAL_INTERFACE, it->second);
-    }
-
-    it = map_cpy.find (LOCAL_PORT);
-
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, LOCAL_PORT, it->second);
-    }
-
-    it = map_cpy.find (SRTP_ENABLE);
-
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, SRTP_ENABLE, it->second);
-    }
-
-    it = map_cpy.find (SRTP_RTP_FALLBACK);
-
-    if (it != details.end()) {
-        Manager::instance().setConfig(IP2IP_PROFILE, SRTP_RTP_FALLBACK, it->second);
-    }
-
-    it = map_cpy.find (SRTP_KEY_EXCHANGE);
-
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, SRTP_KEY_EXCHANGE, it->second);
-    }
+const char* ConfigurationManager::SERVER_PATH =
+		"/org/sflphone/SFLphone/ConfigurationManager";
+
+ConfigurationManager::ConfigurationManager(DBus::Connection& connection) :
+	DBus::ObjectAdaptor(connection, SERVER_PATH) {
+	shortcutsKeys.push_back("pick_up");
+	shortcutsKeys.push_back("hang_up");
+	shortcutsKeys.push_back("popup_window");
+}
+
+std::map<std::string, std::string> ConfigurationManager::getAccountDetails(
+		const std::string& accountID) {
+	return Manager::instance().getAccountDetails(accountID);
+}
+
+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));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_CA_LIST_FILE, ""));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_CERTIFICATE_FILE, ""));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_PRIVATE_KEY_FILE, ""));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(TLS_PASSWORD,
+			""));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(TLS_METHOD,
+			"TLSv1"));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(TLS_CIPHERS,
+			""));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_SERVER_NAME, ""));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_VERIFY_SERVER, "true"));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_VERIFY_CLIENT, "true"));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_REQUIRE_CLIENT_CERTIFICATE, "true"));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_NEGOTIATION_TIMEOUT_SEC, "2"));
+	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
+			TLS_NEGOTIATION_TIMEOUT_MSEC, "0"));
+
+	return tlsSettingsDefault;
+}
+
+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)));
+
+	std::map<std::string, std::string> tlsSettings;
+	tlsSettings = getTlsSettings(IP2IP_PROFILE);
+	std::copy(tlsSettings.begin(), tlsSettings.end(), std::inserter(
+			ip2ipAccountDetails, ip2ipAccountDetails.end()));
+
+	return ip2ipAccountDetails;
+
+}
+
+void ConfigurationManager::setIp2IpDetails(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(LOCAL_INTERFACE);
+
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_INTERFACE,
+				it->second);
+	}
 
-    it = map_cpy.find (ZRTP_DISPLAY_SAS);
+	it = map_cpy.find(LOCAL_PORT);
 
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, ZRTP_DISPLAY_SAS, it->second);
-    }
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_PORT, it->second);
+	}
 
-    it = map_cpy.find (ZRTP_NOT_SUPP_WARNING);
+	it = map_cpy.find(SRTP_ENABLE);
 
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING, it->second);
-    }
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, SRTP_ENABLE, it->second);
+	}
 
-    it = map_cpy.find (ZRTP_HELLO_HASH);
+	it = map_cpy.find(SRTP_RTP_FALLBACK);
 
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, ZRTP_HELLO_HASH, it->second);
-    }
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, SRTP_RTP_FALLBACK,
+				it->second);
+	}
 
-    it = map_cpy.find (ZRTP_DISPLAY_SAS_ONCE);
+	it = map_cpy.find(SRTP_KEY_EXCHANGE);
 
-    if (it != details.end()) {
-        Manager::instance().setConfig (IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE, it->second);
-    }
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, SRTP_KEY_EXCHANGE,
+				it->second);
+	}
 
-    setTlsSettings (IP2IP_PROFILE, details);
+	it = map_cpy.find(ZRTP_DISPLAY_SAS);
 
-    Manager::instance().saveConfig();
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS,
+				it->second);
+	}
 
-    // Update account details to the client side
-    accountsChanged();
+	it = map_cpy.find(ZRTP_NOT_SUPP_WARNING);
 
-    // Reload account settings from config
-    Manager::instance().getAccount(IP2IP_PROFILE)->loadConfig();
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING,
+				it->second);
+	}
 
-}
+	it = map_cpy.find(ZRTP_HELLO_HASH);
 
-std::map< std::string, std::string >
-ConfigurationManager::getTlsSettings (const std::string& section)
-{
-    std::map<std::string, std::string> tlsSettings;
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_HELLO_HASH,
+				it->second);
+	}
 
-    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)));
-    return tlsSettings;
-}
+	it = map_cpy.find(ZRTP_DISPLAY_SAS_ONCE);
 
-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;
+	if (it != details.end()) {
+		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE,
+				it->second);
+	}
 
-    it = map_cpy.find(TLS_LISTENER_PORT);
-    if(it != details.end()) {
-        Manager::instance().setConfig(section, TLS_LISTENER_PORT, it->second);
-    }
+	setTlsSettings(IP2IP_PROFILE, details);
+
+	Manager::instance().saveConfig();
+
+	// Update account details to the client side
+	accountsChanged();
+
+	// Reload account settings from config
+	Manager::instance().getAccount(IP2IP_PROFILE)->loadConfig();
+
+}
+
+std::map<std::string, std::string> ConfigurationManager::getTlsSettings(
+		const std::string& section) {
+	std::map<std::string, std::string> tlsSettings;
+
+	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)));
+	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);
+	}
 
-    it = map_cpy.find (TLS_ENABLE);
+	it = map_cpy.find(TLS_ENABLE);
 
-    if (it != details.end()) {
-        Manager::instance().setConfig (section, TLS_ENABLE, it->second);
-    }
+	if (it != details.end()) {
+		Manager::instance().setConfig(section, TLS_ENABLE, it->second);
+	}
 
-    it = map_cpy.find (TLS_CA_LIST_FILE);
+	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()) {
+		Manager::instance().setConfig(section, TLS_CA_LIST_FILE, it->second);
+	}
 
-    it = map_cpy.find (TLS_CERTIFICATE_FILE);
+	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()) {
+		Manager::instance().setConfig(section, TLS_CERTIFICATE_FILE, it->second);
+	}
 
-    it = map_cpy.find (TLS_PRIVATE_KEY_FILE);
+	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()) {
+		Manager::instance().setConfig(section, TLS_PRIVATE_KEY_FILE, it->second);
+	}
 
-    it = map_cpy.find (TLS_PASSWORD);
+	it = map_cpy.find(TLS_PASSWORD);
 
-    if (it != map_cpy.end()) {
-        Manager::instance().setConfig (section, TLS_PASSWORD, it->second);
-    }
+	if (it != map_cpy.end()) {
+		Manager::instance().setConfig(section, TLS_PASSWORD, it->second);
+	}
 
-    it = map_cpy.find (TLS_METHOD);
+	it = map_cpy.find(TLS_METHOD);
 
-    if (it != map_cpy.end()) {
-        Manager::instance().setConfig (section, TLS_METHOD, it->second);
-    }
+	if (it != map_cpy.end()) {
+		Manager::instance().setConfig(section, TLS_METHOD, it->second);
+	}
 
-    it = map_cpy.find (TLS_CIPHERS);
+	it = map_cpy.find(TLS_CIPHERS);
 
-    if (it != map_cpy.end()) {
-        Manager::instance().setConfig (section, TLS_CIPHERS, it->second);
-    }
+	if (it != map_cpy.end()) {
+		Manager::instance().setConfig(section, TLS_CIPHERS, it->second);
+	}
 
-    it = map_cpy.find (TLS_SERVER_NAME);
+	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()) {
+		Manager::instance().setConfig(section, TLS_SERVER_NAME, it->second);
+	}
 
-    it = map_cpy.find (TLS_VERIFY_CLIENT);
+	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()) {
+		Manager::instance().setConfig(section, TLS_VERIFY_CLIENT, it->second);
+	}
 
-    it = map_cpy.find (TLS_REQUIRE_CLIENT_CERTIFICATE);
+	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()) {
+		Manager::instance().setConfig(section, TLS_REQUIRE_CLIENT_CERTIFICATE,
+				it->second);
+	}
 
-    it = map_cpy.find (TLS_NEGOTIATION_TIMEOUT_SEC);
+	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()) {
+		Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_SEC,
+				it->second);
+	}
 
-    it = map_cpy.find (TLS_NEGOTIATION_TIMEOUT_MSEC);
+	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()) {
+		Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_MSEC,
+				it->second);
+	}
 
-    Manager::instance().saveConfig();
+	Manager::instance().saveConfig();
 
-    // Update account details to the client side
-    accountsChanged();
+	// Update account details to the client side
+	accountsChanged();
 
 }
 
-std::map< std::string, std::string >
-ConfigurationManager::getCredential (const std::string& accountID, const int32_t& index)
-{
+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();
+	std::string credentialIndex;
+	std::stringstream streamOut;
+	streamOut << index;
+	credentialIndex = streamOut.str();
 
-    std::string section = std::string ("Credential") + std::string (":") + accountID + std::string (":") + credentialIndex;
+	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);
+	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));
+	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;
+	return credentialInformation;
 }
 
-int32_t
-ConfigurationManager::getNumberOfCredential (const std::string& accountID)
-{
-    return Manager::instance().getConfigInt (accountID, CONFIG_CREDENTIAL_NUMBER);
+int32_t ConfigurationManager::getNumberOfCredential(
+		const std::string& accountID) {
+	return Manager::instance().getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER);
 }
 
-void
-ConfigurationManager::setNumberOfCredential (const std::string& accountID, const int32_t& number)
-{
-    if (accountID != AccountNULL || !accountID.empty()) {
-        Manager::instance().setConfig (accountID, CONFIG_CREDENTIAL_NUMBER, number);
-    }
+void ConfigurationManager::setNumberOfCredential(const std::string& accountID,
+		const int32_t& number) {
+	if (accountID != AccountNULL || !accountID.empty()) {
+		Manager::instance().setConfig(accountID, CONFIG_CREDENTIAL_NUMBER,
+				number);
+	}
 }
 
-void
-ConfigurationManager::setCredential (const std::string& accountID, const int32_t& index,
-                                     const std::map< std::string, std::string >& details)
-{
-    Manager::instance().setCredential (accountID, index, details);
+void ConfigurationManager::setCredential(const std::string& accountID,
+		const int32_t& index, const std::map<std::string, std::string>& details) {
+	Manager::instance().setCredential(accountID, index, details);
 }
 
-void
-ConfigurationManager::deleteAllCredential (const std::string& accountID)
-{
-    Manager::instance().deleteAllCredential (accountID);
+void ConfigurationManager::deleteAllCredential(const std::string& accountID) {
+	Manager::instance().deleteAllCredential(accountID);
 }
 
-void
-ConfigurationManager::setAccountDetails (const std::string& accountID,
-        const std::map< std::string, std::string >& details)
-{
-    Manager::instance().setAccountDetails (accountID, details);
+void ConfigurationManager::setAccountDetails(const std::string& accountID,
+		const std::map<std::string, std::string>& details) {
+	Manager::instance().setAccountDetails(accountID, details);
 }
 
-void
-ConfigurationManager::sendRegister (const std::string& accountID, const int32_t& expire)
-{
-    Manager::instance().sendRegister (accountID, expire);
+void ConfigurationManager::sendRegister(const std::string& accountID,
+		const int32_t& expire) {
+	Manager::instance().sendRegister(accountID, expire);
 }
 
-std::string
-ConfigurationManager::addAccount (const std::map< std::string, std::string >& details)
-{
-    return Manager::instance().addAccount (details);
+std::string ConfigurationManager::addAccount(const std::map<std::string,
+		std::string>& details) {
+	return Manager::instance().addAccount(details);
 }
 
-
-void
-ConfigurationManager::removeAccount (const std::string& accoundID)
-{
-    return Manager::instance().removeAccount (accoundID);
+void ConfigurationManager::removeAccount(const std::string& accoundID) {
+	return Manager::instance().removeAccount(accoundID);
 }
 
-std::vector< std::string >
-ConfigurationManager::getAccountList()
-{
-    return Manager::instance().getAccountList();
+std::vector<std::string> ConfigurationManager::getAccountList() {
+	return Manager::instance().getAccountList();
 }
 
 //TODO
-std::vector< std::string >
-ConfigurationManager::getToneLocaleList()
-{
-    std::vector< std::string > ret;
-    return ret;
+std::vector<std::string> ConfigurationManager::getToneLocaleList() {
+	std::vector<std::string> ret;
+	return ret;
 }
 
 //TODO
-std::string
-ConfigurationManager::getVersion()
-{
-    std::string ret ("");
-    return ret;
+std::string ConfigurationManager::getVersion() {
+	std::string ret("");
+	return ret;
 }
 
 //TODO
-std::vector< std::string >
-ConfigurationManager::getRingtoneList()
-{
-    std::vector< std::string >  ret;
-    return ret;
+std::vector<std::string> ConfigurationManager::getRingtoneList() {
+	std::vector<std::string> ret;
+	return ret;
 }
 
-
 /**
  * Send the list of all codecs loaded to the client through DBus.
  * Can stay global, as only the active codecs will be set per accounts
  */
-std::vector<std::string> ConfigurationManager::getCodecList (void) {
+std::vector<std::string> ConfigurationManager::getCodecList(void) {
 
-    std::vector<std::string> list;
+	std::vector<std::string> list;
 
-    CodecsMap codecs = Manager::instance ().getCodecDescriptorMap ().getCodecsMap();
-    CodecsMap::iterator iter = codecs.begin();
+	CodecsMap codecs =
+			Manager::instance().getCodecDescriptorMap().getCodecsMap();
+	CodecsMap::iterator iter = codecs.begin();
 
-    while (iter!=codecs.end()) {
-        std::stringstream ss;
+	while (iter != codecs.end()) {
+		std::stringstream ss;
 
-        if (iter->second != NULL) {
-            ss << iter->first;
-            list.push_back ( (ss.str()).data());
-        }
+		if (iter->second != NULL) {
+			ss << iter->first;
+			list.push_back((ss.str()).data());
+		}
 
-        iter++;
-    }
+		iter++;
+	}
 
-    return list;
+	return list;
 }
 
-std::vector<std::string>
-ConfigurationManager::getSupportedTlsMethod (void)
-{
-    std::vector<std::string> method;
-    method.push_back ("Default");
-    method.push_back ("TLSv1");
-    method.push_back ("SSLv2");
-    method.push_back ("SSLv3");
-    method.push_back ("SSLv23");
-    return method;
+std::vector<std::string> ConfigurationManager::getSupportedTlsMethod(void) {
+	std::vector<std::string> method;
+	method.push_back("Default");
+	method.push_back("TLSv1");
+	method.push_back("SSLv2");
+	method.push_back("SSLv3");
+	method.push_back("SSLv23");
+	return method;
 }
 
+std::vector<std::string> ConfigurationManager::getCodecDetails(
+		const int32_t& payload) {
 
-std::vector<std::string> ConfigurationManager::getCodecDetails (const int32_t& payload) {
-
-    return Manager::instance().getCodecDescriptorMap().getCodecSpecifications (payload);
+	return Manager::instance().getCodecDescriptorMap().getCodecSpecifications(
+			payload);
 }
 
-std::vector<std::string> ConfigurationManager::getActiveCodecList (const std::string& accountID) {
+std::vector<std::string> ConfigurationManager::getActiveCodecList(
+		const std::string& accountID) {
 
-    _debug("Send active codec list for account %s", accountID.c_str ());
+	_debug("Send active codec list for account %s", accountID.c_str ());
 
-    std::vector< std::string > v;
+	std::vector<std::string> v;
 	Account *acc;
 	CodecOrder active;
-    unsigned int i=0;
+	unsigned int i = 0;
 	size_t size;
 
-	acc = Manager::instance ().getAccount (accountID);
+	acc = Manager::instance().getAccount(accountID);
 	if (acc != NULL) {
-		active = acc->getActiveCodecs ();
+		active = acc->getActiveCodecs();
 		size = active.size();
-		while (i<size) {
+		while (i < size) {
 			std::stringstream ss;
 			ss << active[i];
-			v.push_back ( (ss.str()).data());
+			v.push_back((ss.str()).data());
 			i++;
 		}
 	}
 
-    return v;
+	return v;
 
 }
 
-void ConfigurationManager::setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID)
-{
+void ConfigurationManager::setActiveCodecList(
+		const std::vector<std::string>& list, const std::string& accountID) {
 
-    _debug ("ConfigurationManager::setActiveCodecList received");
+	_debug ("ConfigurationManager::setActiveCodecList received");
 
 	Account *acc;
 
 	// Save the codecs list per account
-	acc = Manager::instance ().getAccount (accountID);
+	acc = Manager::instance().getAccount(accountID);
 	if (acc != NULL) {
-		acc->setActiveCodecs (list);
+		acc->setActiveCodecs(list);
 	}
 }
 
@@ -482,391 +507,334 @@ std::vector<std::string> ConfigurationManager::getInputAudioPluginList() {
 
 	std::vector<std::string> v;
 
-    v.push_back ("default");
-    v.push_back ("surround40");
-    v.push_back ("plug:hw");
+	v.push_back("default");
+	v.push_back("surround40");
+	v.push_back("plug:hw");
 
-    return v;
+	return v;
 }
 
 std::vector<std::string> ConfigurationManager::getOutputAudioPluginList() {
 
-    std::vector<std::string> v;
+	std::vector<std::string> v;
 
-    v.push_back (PCM_DEFAULT);
-    v.push_back (PCM_DMIX);
+	v.push_back(PCM_DEFAULT);
+	v.push_back(PCM_DMIX);
 
-    return v;
+	return v;
 }
 
-void
-ConfigurationManager::setInputAudioPlugin (const std::string& audioPlugin)
-{
-    return Manager::instance().setInputAudioPlugin (audioPlugin);
+void ConfigurationManager::setInputAudioPlugin(const std::string& audioPlugin) {
+	return Manager::instance().setInputAudioPlugin(audioPlugin);
 }
 
-void
-ConfigurationManager::setOutputAudioPlugin (const std::string& audioPlugin)
-{
-    return Manager::instance().setOutputAudioPlugin (audioPlugin);
+void ConfigurationManager::setOutputAudioPlugin(const std::string& audioPlugin) {
+	return Manager::instance().setOutputAudioPlugin(audioPlugin);
 }
 
-std::vector< std::string >
-ConfigurationManager::getAudioOutputDeviceList()
-{
-    return Manager::instance().getAudioOutputDeviceList();
+std::vector<std::string> ConfigurationManager::getAudioOutputDeviceList() {
+	return Manager::instance().getAudioOutputDeviceList();
 }
 
-void
-ConfigurationManager::setAudioOutputDevice (const int32_t& index)
-{
-    return Manager::instance().setAudioOutputDevice (index);
+void ConfigurationManager::setAudioOutputDevice(const int32_t& index) {
+	return Manager::instance().setAudioOutputDevice(index);
 }
 
-std::vector< std::string >
-ConfigurationManager::getAudioInputDeviceList()
-{
-    return Manager::instance().getAudioInputDeviceList();
+std::vector<std::string> ConfigurationManager::getAudioInputDeviceList() {
+	return Manager::instance().getAudioInputDeviceList();
 }
 
-void
-ConfigurationManager::setAudioInputDevice (const int32_t& index)
-{
-    return Manager::instance().setAudioInputDevice (index);
+void ConfigurationManager::setAudioInputDevice(const int32_t& index) {
+	return Manager::instance().setAudioInputDevice(index);
 }
 
-std::vector< std::string >
-ConfigurationManager::getCurrentAudioDevicesIndex()
-{
-    return Manager::instance().getCurrentAudioDevicesIndex();
+std::vector<std::string> ConfigurationManager::getCurrentAudioDevicesIndex() {
+	return Manager::instance().getCurrentAudioDevicesIndex();
 }
 
-int32_t
-ConfigurationManager::getAudioDeviceIndex (const std::string& name)
-{
-    return Manager::instance().getAudioDeviceIndex (name);
+int32_t ConfigurationManager::getAudioDeviceIndex(const std::string& name) {
+	return Manager::instance().getAudioDeviceIndex(name);
 }
 
-std::string
-ConfigurationManager::getCurrentAudioOutputPlugin (void)
-{
-    return Manager::instance().getCurrentAudioOutputPlugin();
+std::string ConfigurationManager::getCurrentAudioOutputPlugin(void) {
+	return Manager::instance().getCurrentAudioOutputPlugin();
 }
 
-
-std::vector< std::string >
-ConfigurationManager::getPlaybackDeviceList()
-{
-    std::vector< std::string >  ret;
-    return ret;
+std::vector<std::string> ConfigurationManager::getPlaybackDeviceList() {
+	std::vector<std::string> ret;
+	return ret;
 }
 
-std::vector< std::string >
-ConfigurationManager::getRecordDeviceList()
-{
-    std::vector< std::string >  ret;
-    return ret;
+std::vector<std::string> ConfigurationManager::getRecordDeviceList() {
+	std::vector<std::string> ret;
+	return ret;
 
 }
 
-bool
-ConfigurationManager::isMd5CredentialHashing (void)
-{
-    bool isEnabled = Manager::instance().getConfigBool (PREFERENCES, CONFIG_MD5HASH);
-    return isEnabled;
+bool ConfigurationManager::isMd5CredentialHashing(void) {
+	bool isEnabled = Manager::instance().getConfigBool(PREFERENCES,
+			CONFIG_MD5HASH);
+	return isEnabled;
 }
 
-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);
-    }
+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);
+	}
 }
 
-int32_t
-ConfigurationManager::isIax2Enabled (void)
-{
-    return Manager::instance().isIax2Enabled();
+int32_t ConfigurationManager::isIax2Enabled(void) {
+	return Manager::instance().isIax2Enabled();
 }
 
-void
-ConfigurationManager::ringtoneEnabled (void)
-{
-    Manager::instance().ringtoneEnabled();
+void ConfigurationManager::ringtoneEnabled(void) {
+	Manager::instance().ringtoneEnabled();
 }
 
-int32_t
-ConfigurationManager::isRingtoneEnabled (void)
-{
-    return Manager::instance().isRingtoneEnabled();
+int32_t ConfigurationManager::isRingtoneEnabled(void) {
+	return Manager::instance().isRingtoneEnabled();
 }
 
-std::string
-ConfigurationManager::getRingtoneChoice (void)
-{
-    return Manager::instance().getRingtoneChoice();
+std::string ConfigurationManager::getRingtoneChoice(void) {
+	return Manager::instance().getRingtoneChoice();
 }
 
-void
-ConfigurationManager::setRingtoneChoice (const std::string& tone)
-{
-    Manager::instance().setRingtoneChoice (tone);
+void ConfigurationManager::setRingtoneChoice(const std::string& tone) {
+	Manager::instance().setRingtoneChoice(tone);
 }
 
-std::string
-ConfigurationManager::getRecordPath (void)
-{
-    return Manager::instance().getRecordPath();
+std::string ConfigurationManager::getRecordPath(void) {
+	return Manager::instance().getRecordPath();
 }
 
-void
-ConfigurationManager::setRecordPath (const std::string& recPath)
-{
-    Manager::instance().setRecordPath (recPath);
+void ConfigurationManager::setRecordPath(const std::string& recPath) {
+	Manager::instance().setRecordPath(recPath);
 }
 
-int32_t
-ConfigurationManager::getDialpad (void)
-{
-    return Manager::instance().getDialpad();
+int32_t ConfigurationManager::getDialpad(void) {
+	return Manager::instance().getDialpad();
 }
 
-void
-ConfigurationManager::setDialpad (const bool& display)
-{
-    Manager::instance().setDialpad (display);
+void ConfigurationManager::setDialpad(const bool& display) {
+	Manager::instance().setDialpad(display);
 }
 
-int32_t
-ConfigurationManager::getSearchbar (void)
-{
-    return Manager::instance().getSearchbar();
+int32_t ConfigurationManager::getSearchbar(void) {
+	return Manager::instance().getSearchbar();
 }
 
-void
-ConfigurationManager::setSearchbar (void)
-{
-    Manager::instance().setSearchbar();
+void ConfigurationManager::setSearchbar(void) {
+	Manager::instance().setSearchbar();
 }
 
-int32_t
-ConfigurationManager::getVolumeControls (void)
-{
-    return Manager::instance().getVolumeControls();
+int32_t ConfigurationManager::getVolumeControls(void) {
+	return Manager::instance().getVolumeControls();
 }
 
-void
-ConfigurationManager::setVolumeControls (const bool& display)
-{
-    Manager::instance().setVolumeControls (display);
+void ConfigurationManager::setVolumeControls(const bool& display) {
+	Manager::instance().setVolumeControls(display);
 }
 
-int32_t
-ConfigurationManager::getHistoryLimit (void)
-{
-    return Manager::instance().getHistoryLimit();
+int32_t ConfigurationManager::getHistoryLimit(void) {
+	return Manager::instance().getHistoryLimit();
 }
 
-void
-ConfigurationManager::setHistoryLimit (const int32_t& days)
-{
-    Manager::instance().setHistoryLimit (days);
+void ConfigurationManager::setHistoryLimit(const int32_t& days) {
+	Manager::instance().setHistoryLimit(days);
 }
 
-
-void ConfigurationManager::setHistoryEnabled (void)
-{
-    Manager::instance ().setHistoryEnabled ();
+void ConfigurationManager::setHistoryEnabled(void) {
+	Manager::instance().setHistoryEnabled();
 }
 
-std::string ConfigurationManager::getHistoryEnabled (void)
-{
-    return Manager::instance ().getHistoryEnabled ();
+std::string ConfigurationManager::getHistoryEnabled(void) {
+	return Manager::instance().getHistoryEnabled();
 }
 
-void
-ConfigurationManager::startHidden (void)
-{
-    Manager::instance().startHidden();
+void ConfigurationManager::startHidden(void) {
+	Manager::instance().startHidden();
 }
 
-int32_t
-ConfigurationManager::isStartHidden (void)
-{
-    return Manager::instance().isStartHidden();
+int32_t ConfigurationManager::isStartHidden(void) {
+	return Manager::instance().isStartHidden();
 }
 
-void
-ConfigurationManager::switchPopupMode (void)
-{
-    Manager::instance().switchPopupMode();
+void ConfigurationManager::switchPopupMode(void) {
+	Manager::instance().switchPopupMode();
 }
 
-int32_t
-ConfigurationManager::popupMode (void)
-{
-    return Manager::instance().popupMode();
+int32_t ConfigurationManager::popupMode(void) {
+	return Manager::instance().popupMode();
 }
 
-void
-ConfigurationManager::setNotify (void)
-{
-    Manager::instance().setNotify();
+void ConfigurationManager::setNotify(void) {
+	Manager::instance().setNotify();
 }
 
-int32_t
-ConfigurationManager::getNotify (void)
-{
-    return Manager::instance().getNotify();
+int32_t ConfigurationManager::getNotify(void) {
+	return Manager::instance().getNotify();
 }
 
-void
-ConfigurationManager::setAudioManager (const int32_t& api)
-{
-    Manager::instance().setAudioManager (api);
+void ConfigurationManager::setAudioManager(const int32_t& api) {
+	Manager::instance().setAudioManager(api);
 }
 
-int32_t
-ConfigurationManager::getAudioManager (void)
-{
-    return Manager::instance().getAudioManager();
+int32_t ConfigurationManager::getAudioManager(void) {
+	return Manager::instance().getAudioManager();
 }
 
-void
-ConfigurationManager::setMailNotify (void)
-{
-    Manager::instance().setMailNotify();
+void ConfigurationManager::setMailNotify(void) {
+	Manager::instance().setMailNotify();
 }
 
-int32_t
-ConfigurationManager::getMailNotify (void)
-{
-    return Manager::instance().getMailNotify();
+int32_t ConfigurationManager::getMailNotify(void) {
+	return Manager::instance().getMailNotify();
 }
 
-
-std::map<std::string, int32_t> ConfigurationManager::getAddressbookSettings (void)
-{
-    return Manager::instance().getAddressbookSettings ();
+std::map<std::string, int32_t> ConfigurationManager::getAddressbookSettings(
+		void) {
+	return Manager::instance().getAddressbookSettings();
 }
 
-void ConfigurationManager::setAddressbookSettings (const std::map<std::string, int32_t>& settings)
-{
-    Manager::instance().setAddressbookSettings (settings);
+void ConfigurationManager::setAddressbookSettings(const std::map<std::string,
+		int32_t>& settings) {
+	Manager::instance().setAddressbookSettings(settings);
 }
 
-std::vector< std::string > ConfigurationManager::getAddressbookList (void)
-{
-    return Manager::instance().getAddressbookList();
+std::vector<std::string> ConfigurationManager::getAddressbookList(void) {
+	return Manager::instance().getAddressbookList();
 }
 
-void ConfigurationManager::setAddressbookList (const std::vector< std::string >& list)
-{
-    Manager::instance().setAddressbookList (list);
+void ConfigurationManager::setAddressbookList(
+		const std::vector<std::string>& list) {
+	Manager::instance().setAddressbookList(list);
 }
 
-std::map<std::string,std::string> ConfigurationManager::getHookSettings (void)
-{
-    return Manager::instance().getHookSettings ();
+std::map<std::string, std::string> ConfigurationManager::getHookSettings(void) {
+	return Manager::instance().getHookSettings();
 }
 
-void ConfigurationManager::setHookSettings (const std::map<std::string, std::string>& settings)
-{
-    Manager::instance().setHookSettings (settings);
+void ConfigurationManager::setHookSettings(const std::map<std::string,
+		std::string>& settings) {
+	Manager::instance().setHookSettings(settings);
 }
 
-void  ConfigurationManager::setAccountsOrder (const std::string& order)
-{
-    Manager::instance().setAccountsOrder (order);
+void ConfigurationManager::setAccountsOrder(const std::string& order) {
+	Manager::instance().setAccountsOrder(order);
 }
 
-std::map <std::string, std::string> ConfigurationManager::getHistory (void)
-{
-    return Manager::instance().send_history_to_client ();
+std::map<std::string, std::string> ConfigurationManager::getHistory(void) {
+	return Manager::instance().send_history_to_client();
 }
 
-void ConfigurationManager::setHistory (const std::map <std::string, std::string>& entries)
-{
-    Manager::instance().receive_history_from_client (entries);
+void ConfigurationManager::setHistory(
+		const std::map<std::string, std::string>& entries) {
+	Manager::instance().receive_history_from_client(entries);
 }
 
-std::string
-ConfigurationManager::getAddrFromInterfaceName(const std::string& interface)
-{
+std::string ConfigurationManager::getAddrFromInterfaceName(
+		const std::string& interface) {
 
-    std::string address = SIPVoIPLink::instance("")->getInterfaceAddrFromName(interface);
+	std::string address = SIPVoIPLink::instance("")->getInterfaceAddrFromName(
+			interface);
 
-    return address;
+	return address;
 }
 
-std::vector<std::string> ConfigurationManager::getAllIpInterface (void)
-{
+std::vector<std::string> ConfigurationManager::getAllIpInterface(void) {
 
-    std::vector<std::string> vector;
-    SIPVoIPLink * sipLink = NULL;
-    sipLink = SIPVoIPLink::instance ("");
+	std::vector<std::string> vector;
+	SIPVoIPLink * sipLink = NULL;
+	sipLink = SIPVoIPLink::instance("");
 
-    if (sipLink != NULL) {
-        vector = sipLink->getAllIpInterface();
-    }
+	if (sipLink != NULL) {
+		vector = sipLink->getAllIpInterface();
+	}
 
-    return vector;
+	return vector;
 }
 
-std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName(void)
-{
-    std::vector<std::string> vector;
-    SIPVoIPLink * sipLink = NULL;
-    sipLink = SIPVoIPLink::instance ("");
+std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName(void) {
+	std::vector<std::string> vector;
+	SIPVoIPLink * sipLink = NULL;
+	sipLink = SIPVoIPLink::instance("");
 
-    if (sipLink != NULL) {
-        vector = sipLink->getAllIpInterfaceByName();
-    }
+	if (sipLink != NULL) {
+		vector = sipLink->getAllIpInterfaceByName();
+	}
 
-    return vector;
+	return vector;
 }
 
-int32_t ConfigurationManager::getWindowWidth (void) {
+int32_t ConfigurationManager::getWindowWidth(void) {
 
-	return Manager::instance ().getConfigInt (PREFERENCES, WINDOW_WIDTH);
+	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_WIDTH);
 }
 
-int32_t ConfigurationManager::getWindowHeight (void) {
+int32_t ConfigurationManager::getWindowHeight(void) {
 
-	return Manager::instance ().getConfigInt (PREFERENCES, WINDOW_HEIGHT);
+	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_HEIGHT);
 }
-	
-void ConfigurationManager::setWindowWidth (const int32_t& width) {
 
-	Manager::instance ().setConfig (PREFERENCES, WINDOW_WIDTH, width);
+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);
 }
-	
-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::getWindowPositionX (void) {
 
-	return Manager::instance ().getConfigInt (PREFERENCES, WINDOW_POSITION_X);
+int32_t ConfigurationManager::getWindowPositionY(void) {
+
+	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_POSITION_Y);
 }
 
-int32_t ConfigurationManager::getWindowPositionY (void) {
+void ConfigurationManager::setWindowPositionX(const int32_t& posX) {
 
-	return Manager::instance ().getConfigInt (PREFERENCES, WINDOW_POSITION_Y);
+	Manager::instance().setConfig(PREFERENCES, WINDOW_POSITION_X, posX);
 }
 
-void ConfigurationManager::setWindowPositionX (const int32_t& posX) {
+void ConfigurationManager::setWindowPositionY(const int32_t& posY) {
 
-	Manager::instance ().setConfig (PREFERENCES, WINDOW_POSITION_X, posX);
+	Manager::instance().setConfig(PREFERENCES, WINDOW_POSITION_Y, posY);
 }
 
-void ConfigurationManager::setWindowPositionY (const int32_t& posY) {
+std::map<std::string, int32_t> ConfigurationManager::getShortcuts() {
+
+	std::map<std::string, int> shortcutsMap;
+	int shortcut;
+
+	for (int i = 0; i < shortcutsKeys.size(); i++) {
+		std::string key = shortcutsKeys.at(i);
+		shortcut = Manager::instance().getConfigInt("Shortcuts", key);
+		shortcutsMap.insert(std::pair<std::string, int>(key, shortcut));
+	}
 
-	Manager::instance ().setConfig (PREFERENCES, WINDOW_POSITION_Y, posY);
+	return shortcutsMap;
 }
 
+void ConfigurationManager::setShortcuts(
+		const std::map<std::string, int32_t>& shortcutsMap) {
 
+	std::map<std::string, int> map_cpy = shortcutsMap;
+	std::map<std::string, int>::iterator it;
+
+	for (int i = 0; i < shortcutsKeys.size(); i++) {
+		std::string key = shortcutsKeys.at(i);
+		it = map_cpy.find(key);
+		if (it != shortcutsMap.end()) {
+			Manager::instance().setConfig("Shortcuts", key, it->second);
+		}
+	}
+
+	Manager::instance().saveConfig();
+}
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index 7749fd233a..4c18267c35 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -37,6 +37,9 @@ public:
     ConfigurationManager(DBus::Connection& connection);
     static const char* SERVER_PATH;
 
+private:
+    std::vector<std::string> shortcutsKeys;
+
 public:
 
     std::map< std::string, std::string > getAccountDetails( const std::string& accountID );
@@ -143,6 +146,9 @@ public:
     
     std::vector<std::string> getAllIpInterface(void);
     std::vector<std::string> getAllIpInterfaceByName(void);
+
+    std::map< std::string, int32_t > getShortcuts ();
+    void setShortcuts (const std::map< std::string, int32_t >& shortcutsMap);
 };
 
 
-- 
GitLab


From d1057e027cdd42d48e1c6b98e0e4eb710a1ba295 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Thu, 4 Mar 2010 16:31:43 -0500
Subject: [PATCH 102/160] [#2916] Added missing files

---
 .../src/dbus/shortcutsmanager-introspec.xml   |  38 ++
 sflphone-client-gnome/src/shortcuts.c         | 400 ++++++++++++++++++
 sflphone-client-gnome/src/shortcuts.h         |  78 ++++
 3 files changed, 516 insertions(+)
 create mode 100644 sflphone-client-gnome/src/dbus/shortcutsmanager-introspec.xml
 create mode 100644 sflphone-client-gnome/src/shortcuts.c
 create mode 100644 sflphone-client-gnome/src/shortcuts.h

diff --git a/sflphone-client-gnome/src/dbus/shortcutsmanager-introspec.xml b/sflphone-client-gnome/src/dbus/shortcutsmanager-introspec.xml
new file mode 100644
index 0000000000..89d39efb19
--- /dev/null
+++ b/sflphone-client-gnome/src/dbus/shortcutsmanager-introspec.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" ?>
+<node name="/org/sflphone/SFLphone">
+  <interface name="org.sflphone.SFLphone.ContactManager">
+    
+  <!-- Contacts related methods -->
+  
+    <!-- Called by the client to get all saved contacts -->
+    <method name="getContacts">
+      <arg type="s" name="accountID" direction="in"/>
+      <arg type="a{ss}" name="details" direction="out"/>
+    </method>
+    
+    <!-- Called by the client to save all local contacts -->
+    <method name="setContacts">
+      <arg type="s" name="accountID" direction="in"/>
+      <arg type="a{ss}" name="details" direction="in"/>
+    </method>
+   
+  <!--      ///////////////////////               -->
+
+  <!-- Presence related methods -->
+ 
+    <!-- Called by the client to set its new presence status -->
+    <method name="setPresence">
+      <arg type="s" name="accountID" direction="in"/>
+      <arg type="s" name="presence" direction="in"/>
+      <arg type="s" name="additionalInfo" direction="in"/>
+    </method>
+  
+    <!-- Called by the daemon when a contact presence changes -->
+    <method name="setContactPresence">
+      <arg type="s" name="accountID" direction="in"/>
+      <arg type="s" name="presence" direction="in"/>
+      <arg type="s" name="additionalInfo" direction="in"/>
+    </method>
+
+  </interface>
+</node>
diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
new file mode 100644
index 0000000000..44ba711b23
--- /dev/null
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -0,0 +1,400 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 <string.h>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <X11/Xlib.h>
+#include <X11/XF86keysym.h>
+#include <gdk/gdkx.h>
+#include <dbus/dbus-glib.h>
+
+#include "shortcuts.h"
+#include "mainwindow.h"
+#include "callable_obj.h"
+#include "sflphone_const.h"
+#include "dbus.h"
+
+// used to store accelerator config
+static Accelerator* accelerators_list;
+
+// used to store config (for dbus calls)
+static GHashTable* shortcutsMap;
+
+/*
+ * Callbacks
+ */
+
+static void
+pick_up_callback()
+{
+  sflphone_pick_up();
+}
+
+static void
+hang_up_callback()
+{
+  sflphone_hang_up();
+}
+
+static void
+popup_window_callback()
+{
+  gtk_widget_hide(GTK_WIDGET(get_main_window()));
+  gtk_widget_show(GTK_WIDGET(get_main_window()));
+  gtk_window_move (GTK_WINDOW (get_main_window ()), dbus_get_window_position_x (), dbus_get_window_position_y ());
+}
+
+static void
+default_callback()
+{
+  ERROR("Missing shortcut callback");
+}
+
+/*
+ * return callback corresponding to a specific action
+ */
+static void*
+get_action_callback(const gchar* action)
+{
+  if(strcmp(action, "pick_up") == 0)
+    return pick_up_callback;
+
+  if(strcmp(action, "hang_up") == 0)
+    return hang_up_callback;
+
+  if(strcmp(action, "popup_window") == 0)
+    return popup_window_callback;
+
+  return default_callback;
+}
+
+/*
+ * Handle bindings
+ */
+
+/*
+ * Remove all existing bindings
+ */
+static void
+remove_bindings()
+{
+  GdkDisplay *display;
+  GdkScreen *screen;
+  GdkWindow *root;
+
+  display = gdk_display_get_default();
+
+  int i = 0;
+  int j = 0;
+  while (accelerators_list[i].action != NULL)
+    {
+      if (accelerators_list[i].value != 0)
+        {
+          for (j = 0; j < gdk_display_get_n_screens(display); j++)
+            {
+              screen = gdk_display_get_screen(display, j);
+
+              if (screen != NULL)
+                {
+                  root = gdk_screen_get_root_window(screen);
+                  ungrab_key(accelerators_list[i].value, root);
+                  gdk_window_remove_filter(root, filter_keys, NULL);
+                }
+            }
+        }
+
+      i++;
+    }
+}
+
+/*
+ * Create all bindings, using stored configuration
+ */
+static void
+create_bindings()
+{
+  GdkDisplay *display;
+  GdkScreen *screen;
+  GdkWindow *root;
+
+  display = gdk_display_get_default();
+
+  int i = 0;
+  int j = 0;
+  while (accelerators_list[i].action != NULL)
+    {
+      if (accelerators_list[i].value != 0)
+        {
+          // update value in hashtable (used for dbus calls)
+          g_hash_table_replace(shortcutsMap, g_strdup(accelerators_list[i].action),
+              GINT_TO_POINTER(accelerators_list[i].value));
+
+          // updated GDK bindings
+          for (j = 0; j < gdk_display_get_n_screens(display); j++)
+            {
+              screen = gdk_display_get_screen(display, j);
+
+              if (screen != NULL)
+                {
+                  root = gdk_screen_get_root_window(screen);
+                  grab_key(accelerators_list[i].value, root);
+                  gdk_window_add_filter(root, filter_keys, NULL);
+                }
+            }
+        }
+      i++;
+    }
+}
+
+/*
+ * Initialize a specific binding
+ */
+static void
+initialize_binding(const gchar* action, const guint code)
+{
+  //initialize_shortcuts_keys();
+  int index = 0;
+  while (accelerators_list[index].action != NULL)
+    {
+      if (strcmp(action, accelerators_list[index].action) == 0)
+        {
+          break;
+        }
+      index++;
+    }
+
+  if (accelerators_list[index].action == NULL)
+    {
+      ERROR("Should not happen: cannot find corresponding action");
+      return;
+    }
+
+  // update config value
+  accelerators_list[index].value = code;
+
+  // update bindings
+  create_bindings();
+}
+
+/*
+ * Prepare accelerators list
+ */
+static void
+initialize_accelerators_list()
+{
+  GList* shortcutsKeys = g_hash_table_get_keys(shortcutsMap);
+
+  accelerators_list = (Accelerator*)malloc((g_list_length(shortcutsKeys) + 1) *sizeof(Accelerator));
+
+  GList* shortcutsKeysElement;
+  int index = 0;
+  for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
+      = shortcutsKeysElement->next)
+    {
+      gchar* action = shortcutsKeysElement->data;
+
+      accelerators_list[index].action = g_strdup(action);
+      accelerators_list[index].callback = get_action_callback(action);
+      accelerators_list[index].mask = 0;
+      accelerators_list[index].value = 0;
+
+      index++;
+    }
+
+  // last element must be null
+  accelerators_list[index].action = 0;
+  accelerators_list[index].callback = 0;
+  accelerators_list[index].mask = 0;
+  accelerators_list[index].value = 0;
+}
+
+/*
+ * "Public" functions
+ */
+
+/*
+ * Update current bindings with a new value
+ */
+void
+shortcuts_update_bindings(const guint index, const guint code)
+{
+  // first remove all existing bindings
+  remove_bindings();
+
+  // store new value
+  accelerators_list[index].value = code;
+
+  // recreate all bindings
+  create_bindings();
+
+  // update configuration
+  dbus_set_shortcuts(shortcutsMap);
+}
+
+/*
+ * Initialize bindings with configuration retrieved from dbus
+ */
+void
+shortcuts_initialize_bindings()
+{
+  // get shortcuts stored in config through dbus
+  shortcutsMap = dbus_get_shortcuts();
+
+  // initialize list of keys
+  initialize_accelerators_list();
+
+  // iterate through keys to initialize bindings
+  GList* shortcutsKeys = g_hash_table_get_keys(shortcutsMap);
+  GList* shortcutsKeysElement;
+  for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
+      = shortcutsKeysElement->next)
+    {
+      gchar* key = shortcutsKeysElement->data;
+      int shortcut = (size_t) g_hash_table_lookup(shortcutsMap, key);
+      if(shortcut != 0)
+        initialize_binding(key, shortcut);
+    }
+}
+
+/*
+ * Initialize bindings with configuration retrieved from dbus
+ */
+void
+shortcuts_destroy_bindings()
+{
+  // remove bindings
+  remove_bindings();
+
+  // free pointers
+  int index = 0;
+  while (accelerators_list[index].action != NULL)
+    {
+      g_free(accelerators_list[index].action);
+      index++;
+    }
+  free(accelerators_list);
+}
+
+Accelerator*
+shortcuts_get_list()
+{
+  return accelerators_list;
+}
+
+/*
+ * XLib functions
+ */
+
+/*
+ * filter used when an event is catched
+ */
+static GdkFilterReturn
+filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
+{
+  XEvent *xev;
+  XKeyEvent *key;
+
+  xev = (XEvent *) xevent;
+  if (xev->type != KeyPress)
+    {
+      return GDK_FILTER_CONTINUE;
+    }
+
+  key = (XKeyEvent *) xevent;
+
+  // try to find corresponding action
+  int i = 0;
+  while (accelerators_list[i].action != NULL)
+    {
+      if (accelerators_list[i].value == key->keycode)
+        {
+          DEBUG("catched key for action: %s (%d)", accelerators_list[i].action,
+              accelerators_list[i].value);
+
+          // call associated callback function
+          accelerators_list[i].callback();
+
+          return GDK_FILTER_REMOVE;
+        }
+      i++;
+    }
+
+  DEBUG("Should not be reached :(\n");
+  return GDK_FILTER_CONTINUE;
+}
+
+/*
+ * Remove key "catcher" from GDK layer
+ */
+static void
+ungrab_key(int key_code, GdkWindow *root)
+{
+  gdk_error_trap_push();
+
+  XUngrabKey(GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root));
+  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
+      GDK_WINDOW_XID(root));
+
+  gdk_flush();
+  if (gdk_error_trap_pop())
+    {
+      ERROR("Error ungrabbing key");
+    }
+}
+
+/*
+ * Add key "catcher" to GDK layer
+ */
+static void
+grab_key(int key_code, GdkWindow *root)
+{
+
+  gdk_error_trap_push();
+
+  XGrabKey(GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root), True,
+      GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root), True,
+      GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root), True,
+      GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root), True,
+      GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root),
+      True, GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root),
+      True, GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root),
+      True, GrabModeAsync, GrabModeAsync);
+  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
+      GDK_WINDOW_XID(root), True, GrabModeAsync, GrabModeAsync);
+
+  gdk_flush();
+  if (gdk_error_trap_pop())
+    {
+      ERROR("Error grabbing key");
+    }
+}
diff --git a/sflphone-client-gnome/src/shortcuts.h b/sflphone-client-gnome/src/shortcuts.h
new file mode 100644
index 0000000000..e5e512d5ea
--- /dev/null
+++ b/sflphone-client-gnome/src/shortcuts.h
@@ -0,0 +1,78 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 SHORTCUTS_H_
+#define SHORTCUTS_H_
+
+typedef struct
+{
+  gchar *action;
+  GdkModifierType mask;
+  guint value;
+  void
+  (*callback)(void);
+} Accelerator;
+
+static void
+grab_key(int key_code, GdkWindow *root);
+
+static void
+ungrab_key(int key_code, GdkWindow *root);
+
+static GdkFilterReturn
+filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data);
+
+static void
+remove_bindings();
+
+static void
+create_bindings();
+
+static void
+pick_up_callback();
+
+static void
+hang_up_callback();
+
+static void
+initialize_binding(const gchar* action, const guint code);
+
+static void
+initialize_shortcuts_keys();
+
+static void*
+get_action_callback(const gchar* action);
+
+/*
+ * "Public" functions
+ */
+
+void
+shortcuts_initialize_bindings();
+
+void
+shortcuts_update_bindings(const guint index, const guint code);
+
+void
+shortcuts_destroy_bindings();
+
+Accelerator*
+shortcuts_get_list();
+
+#endif /* SHORTCUTS_H_ */
-- 
GitLab


From 3a0339072f7578aef417683a9df00a40d7109d63 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Mar 2010 17:41:57 -0500
Subject: [PATCH 103/160] [#2536] Very basic functional test script

Start sipp server on 5062
Start sflphoned on 5060
Use pysfphone client to make 10 calls
---
 sippxml/simpleuac.xml                   |  85 +++++
 sippxml/simpleuas.xml                   |  80 +++++
 sippxml/sippusage.txt                   | 460 ++++++++++++++++++++++++
 sippxml/testsuiteuac.sh                 |  27 ++
 tools/pysflphone/pysflphone_testdbus.py |  12 +-
 5 files changed, 660 insertions(+), 4 deletions(-)
 create mode 100644 sippxml/simpleuac.xml
 create mode 100644 sippxml/simpleuas.xml
 create mode 100644 sippxml/sippusage.txt
 create mode 100644 sippxml/testsuiteuac.sh

diff --git a/sippxml/simpleuac.xml b/sippxml/simpleuac.xml
new file mode 100644
index 0000000000..9023856390
--- /dev/null
+++ b/sippxml/simpleuac.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]
+
+     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="180" 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> 
diff --git a/sippxml/simpleuas.xml b/sippxml/simpleuas.xml
new file mode 100644
index 0000000000..b7ef0303b0
--- /dev/null
+++ b/sippxml/simpleuas.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+
+<scenario name="Basic UAS responder">
+
+ <recv request="INVITE" crlf="true">
+ </recv>
+
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+ <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> 
diff --git a/sippxml/sippusage.txt b/sippxml/sippusage.txt
new file mode 100644
index 0000000000..5c19252857
--- /dev/null
+++ b/sippxml/sippusage.txt
@@ -0,0 +1,460 @@
+Usage:
+
+  sipp remote_host[:remote_port] [options]
+
+  Available options:
+
+   -v               : Display version and copyright information.
+
+   -aa              : Enable automatic 200 OK answer for INFO, UPDATE and
+                      NOTIFY messages.
+
+   -auth_uri        : Force the value of the URI for authentication.
+                      By default, the URI is composed of
+                      remote_ip:remote_port.
+
+   -base_cseq       : Start value of [cseq] for each call.
+
+   -bg              : Launch SIPp in background mode.
+
+   -bind_local      : Bind socket to local IP address, i.e. the local IP
+                      address is used as the source IP address.  If SIPp runs
+                      in server mode it will only listen on the local IP
+                      address instead of all IP addresses.
+
+   -buff_size       : Set the send and receive buffer size.
+
+   -calldebug_file  : Set the name of the call debug file.
+
+   -calldebug_overwrite: Overwrite the call debug file (default true).
+
+   -cid_str         : Call ID string (default %u-%p@%s).  %u=call_number,
+                      %s=ip_address, %p=process_number, %%=% (in any order).
+
+   -ci              : Set the local control IP address
+
+   -cp              : Set the local control port number. Default is 8888.
+
+   -d               : Controls the length of calls. More precisely, this
+                      controls the duration of 'pause' instructions in the
+                      scenario, if they do not have a 'milliseconds' section.
+                      Default value is 0 and default unit is milliseconds.
+
+   -deadcall_wait   : How long the Call-ID and final status of calls should be
+                      kept to improve message and error logs (default unit is
+                      ms).
+
+   -default_behaviors: Set the default behaviors that SIPp will use.  Possbile
+                      values are:
+                      - all	Use all default behaviors
+                      - none	Use no default behaviors
+                      - bye	Send byes for aborted calls
+                      - abortunexp	Abort calls on unexpected messages
+                      - pingreply	Reply to ping requests
+                      If a behavior is prefaced with a -, then it is turned
+                      off.  Example: all,-bye
+                      
+
+   -error_file      : Set the name of the error log file.
+
+   -error_overwrite : Overwrite the error log file (default true).
+
+   -f               : Set the statistics report frequency on screen. Default is
+                      1 and default unit is seconds.
+
+   -fd              : Set the statistics dump log report frequency. Default is
+                      60 and default unit is seconds.
+
+   -i               : Set the local IP address for 'Contact:','Via:', and
+                      'From:' headers. Default is primary host IP address.
+                      
+
+   -inf             : Inject values from an external CSV file during calls into
+                      the scenarios.
+                      First line of this file say whether the data is to be
+                      read in sequence (SEQUENTIAL), random (RANDOM), or user
+                      (USER) order.
+                      Each line corresponds to one call and has one or more
+                      ';' delimited data fields. Those fields can be referred
+                      as [field0], [field1], ... in the xml scenario file. 
+                      Several CSV files can be used simultaneously (syntax:
+                      -inf f1.csv -inf f2.csv ...)
+
+   -infindex        : file field
+                      Create an index of file using field.  For example -inf
+                      users.csv -infindex users.csv 0 creates an index on the
+                      first key.
+
+   -ip_field        : Set which field from the injection file contains the IP
+                      address from which the client will send its messages.
+                      If this option is omitted and the '-t ui' option is
+                      present, then field 0 is assumed.
+                      Use this option together with '-t ui'
+
+   -l               : Set the maximum number of simultaneous calls. Once this
+                      limit is reached, traffic is decreased until the number
+                      of open calls goes down. Default:
+                        (3 * call_duration (s) * rate).
+
+   -log_file        : Set the name of the log actions log file.
+
+   -log_overwrite   : Overwrite the log actions log file (default true).
+
+   -lost            : Set the number of packets to lose by default (scenario
+                      specifications override this value).
+
+   -rtcheck         : Select the retransmisison detection method: full
+                      (default) or loose.
+
+   -m               : Stop the test and exit when 'calls' calls are processed
+
+   -mi              : Set the local media IP address (default: local primary
+                      host IP address)
+
+   -master          : 3pcc extended mode: indicates the master number
+
+   -max_recv_loops  : Set the maximum number of messages received read per
+                      cycle. Increase this value for high traffic level.  The
+                      default value is 1000.
+
+   -max_sched_loops : Set the maximum number of calsl run per event loop.
+                      Increase this value for high traffic level.  The default
+                      value is 1000.
+
+   -max_reconnect   : Set the the maximum number of reconnection.
+
+   -max_retrans     : Maximum number of UDP retransmissions before call ends on
+                      timeout.  Default is 5 for INVITE transactions and 7 for
+                      others.
+
+   -max_invite_retrans: Maximum number of UDP retransmissions for invite
+                      transactions before call ends on timeout.
+
+   -max_non_invite_retrans: Maximum number of UDP retransmissions for non-invite
+                      transactions before call ends on timeout.
+
+   -max_log_size    : What is the limit for error and message log file sizes.
+
+   -max_socket      : Set the max number of sockets to open simultaneously.
+                      This option is significant if you use one socket per
+                      call. Once this limit is reached, traffic is distributed
+                      over the sockets already opened. Default value is 50000
+
+   -mb              : Set the RTP echo buffer size (default: 2048).
+
+   -message_file    : Set the name of the message log file.
+
+   -message_overwrite: Overwrite the message log file (default true).
+
+   -mp              : Set the local RTP echo port number. Default is 6000.
+
+   -nd              : No Default. Disable all default behavior of SIPp which
+                      are the following:
+                      - On UDP retransmission timeout, abort the call by
+                        sending a BYE or a CANCEL
+                      - On receive timeout with no ontimeout attribute, abort
+                        the call by sending a BYE or a CANCEL
+                      - On unexpected BYE send a 200 OK and close the call
+                      - On unexpected CANCEL send a 200 OK and close the call
+                      - On unexpected PING send a 200 OK and continue the call
+                      - On any other unexpected message, abort the call by
+                        sending a BYE or a CANCEL
+                      
+
+   -nr              : Disable retransmission in UDP mode.
+
+   -nostdin         : Disable stdin.
+                      
+
+   -p               : Set the local port number.  Default is a random free port
+                      chosen by the system.
+
+   -pause_msg_ign   : Ignore the messages received during a pause defined in
+                      the scenario 
+
+   -periodic_rtd    : Reset response time partition counters each logging
+                      interval.
+
+   -plugin          : Load a plugin.
+
+   -r               : Set the call rate (in calls per seconds).  This value can
+                      bechanged during test by pressing '+','_','*' or '/'.
+                      Default is 10.
+                      pressing '+' key to increase call rate by 1 *
+                      rate_scale,
+                      pressing '-' key to decrease call rate by 1 *
+                      rate_scale,
+                      pressing '*' key to increase call rate by 10 *
+                      rate_scale,
+                      pressing '/' key to decrease call rate by 10 *
+                      rate_scale.
+                      If the -rp option is used, the call rate is calculated
+                      with the period in ms given by the user.
+
+   -rp              : Specify the rate period for the call rate.  Default is 1
+                      second and default unit is milliseconds.  This allows
+                      you to have n calls every m milliseconds (by using -r n
+                      -rp m).
+                      Example: -r 7 -rp 2000 ==> 7 calls every 2 seconds.
+                               -r 10 -rp 5s => 10 calls every 5 seconds.
+
+   -rate_scale      : Control the units for the '+', '-', '*', and '/' keys.
+
+   -rate_increase   : Specify the rate increase every -fd units (default is
+                      seconds).  This allows you to increase the load for each
+                      independent logging period.
+                      Example: -rate_increase 10 -fd 10s
+                        ==> increase calls by 10 every 10 seconds.
+
+   -rate_max        : If -rate_increase is set, then quit after the rate
+                      reaches this value.
+                      Example: -rate_increase 10 -rate_max 100
+                        ==> increase calls by 10 until 100 cps is hit.
+
+   -no_rate_quit    : If -rate_increase is set, do not quit after the rate
+                      reaches -rate_max.
+
+   -recv_timeout    : Global receive timeout. Default unit is milliseconds. If
+                      the expected message is not received, the call times out
+                      and is aborted.
+
+   -send_timeout    : Global send timeout. Default unit is milliseconds. If a
+                      message is not sent (due to congestion), the call times
+                      out and is aborted.
+
+   -sleep           : How long to sleep for at startup. Default unit is
+                      seconds.
+
+   -reconnect_close : Should calls be closed on reconnect?
+
+   -reconnect_sleep : How long (in milliseconds) to sleep between the close and
+                      reconnect?
+
+   -ringbuffer_files: How many error/message files should be kept after
+                      rotation?
+
+   -ringbuffer_size : How large should error/message files be before they get
+                      rotated?
+
+   -rsa             : Set the remote sending address to host:port for sending
+                      the messages.
+
+   -rtp_echo        : Enable RTP echo. RTP/UDP packets received on port defined
+                      by -mp are echoed to their sender.
+                      RTP/UDP packets coming on this port + 2 are also echoed
+                      to their sender (used for sound and video echo).
+
+   -rtt_freq        : freq is mandatory. Dump response times every freq calls
+                      in the log file defined by -trace_rtt. Default value is
+                      200.
+
+   -s               : Set the username part of the resquest URI. Default is
+                      'service'.
+
+   -sd              : Dumps a default scenario (embeded in the sipp executable)
+
+   -sf              : Loads an alternate xml scenario file.  To learn more
+                      about XML scenario syntax, use the -sd option to dump
+                      embedded scenarios. They contain all the necessary help.
+
+   -shortmessage_file: Set the name of the short message log file.
+
+   -shortmessage_overwrite: Overwrite the short message log file (default true).
+
+   -oocsf           : Load out-of-call scenario.
+
+   -oocsn           : Load out-of-call scenario.
+
+   -skip_rlimit     : Do not perform rlimit tuning of file descriptor limits. 
+                      Default: false.
+
+   -slave           : 3pcc extended mode: indicates the slave number
+
+   -slave_cfg       : 3pcc extended mode: indicates the file where the master
+                      and slave addresses are stored
+
+   -sn              : Use a default scenario (embedded in the sipp executable).
+                      If this option is omitted, the Standard SipStone UAC
+                      scenario is loaded.
+                      Available values in this version:
+                      
+                      - 'uac'      : Standard SipStone UAC (default).
+                      - 'uas'      : Simple UAS responder.
+                      - 'regexp'   : Standard SipStone UAC - with regexp and
+                        variables.
+                      - 'branchc'  : Branching and conditional branching in
+                        scenarios - client.
+                      - 'branchs'  : Branching and conditional branching in
+                        scenarios - server.
+                      
+                      Default 3pcc scenarios (see -3pcc option):
+                      
+                      - '3pcc-C-A' : Controller A side (must be started after
+                        all other 3pcc scenarios)
+                      - '3pcc-C-B' : Controller B side.
+                      - '3pcc-A'   : A side.
+                      - '3pcc-B'   : B side.
+                      
+
+   -stat_delimiter  : Set the delimiter for the statistics file
+
+   -stf             : Set the file name to use to dump statistics
+
+   -t               : Set the transport mode:
+                      - u1: UDP with one socket (default),
+                      - un: UDP with one socket per call,
+                      - ui: UDP with one socket per IP address The IP
+                        addresses must be defined in the injection file.
+                      - t1: TCP with one socket,
+                      - tn: TCP with one socket per call,
+                      - l1: TLS with one socket,
+                      - ln: TLS with one socket per call,
+                      - c1: u1 + compression (only if compression plugin
+                        loaded),
+                      - cn: un + compression (only if compression plugin
+                        loaded).  This plugin is not provided with sipp.
+                      
+
+   -timeout         : Global timeout. Default unit is seconds.  If this option
+                      is set, SIPp quits after nb units (-timeout 20s quits
+                      after 20 seconds).
+
+   -timeout_error   : SIPp fails if the global timeout is reached is set
+                      (-timeout option required).
+
+   -timer_resol     : Set the timer resolution. Default unit is milliseconds. 
+                      This option has an impact on timers precision.Small
+                      values allow more precise scheduling but impacts CPU
+                      usage.If the compression is on, the value is set to
+                      50ms. The default value is 10ms.
+
+   -sendbuffer_warn : Produce warnings instead of errors on SendBuffer
+                      failures.
+
+   -trace_msg       : Displays sent and received SIP messages in <scenario file
+                      name>_<pid>_messages.log
+
+   -trace_shortmsg  : Displays sent and received SIP messages as CSV in
+                      <scenario file name>_<pid>_shortmessages.log
+
+   -trace_screen    : Dump statistic screens in the
+                      <scenario_name>_<pid>_      s.log file when quitting
+                      SIPp. Useful to get a final status report in background
+                      mode (-bg option).
+
+   -trace_err       : Trace all unexpected messages in <scenario file
+                      name>_<pid>_errors.log.
+
+   -trace_calldebug : Dumps debugging information about aborted calls to
+                      <scenario_name>_<pid>_calldebug.log file.
+
+   -trace_stat      : Dumps all statistics in <scenario_name>_<pid>.csv file.
+                      Use the '-h stat' option for a detailed description of
+                      the statistics file content.
+
+   -trace_counts    : Dumps individual message counts in a CSV file.
+
+   -trace_rtt       : Allow tracing of all response times in <scenario file
+                      name>_<pid>_rtt.csv.
+
+   -trace_logs      : Allow tracing of <log> actions in <scenario file
+                      name>_<pid>_logs.log.
+
+   -users           : Instead of starting calls at a fixed rate, begin 'users'
+                      calls at startup, and keep the number of calls constant.
+
+   -watchdog_interval: Set gap between watchdog timer firings.  Default is 400.
+
+   -watchdog_reset  : If the watchdog timer has not fired in more than this
+                      time period, then reset the max triggers counters. 
+                      Default is 10 minutes.
+
+   -watchdog_minor_threshold: If it has been longer than this period between watchdog
+                      executions count a minor trip.  Default is 500.
+
+   -watchdog_major_threshold: If it has been longer than this period between watchdog
+                      executions count a major trip.  Default is 3000.
+
+   -watchdog_major_maxtriggers: How many times the major watchdog timer can be tripped
+                      before the test is terminated.  Default is 10.
+
+   -watchdog_minor_maxtriggers: How many times the minor watchdog timer can be tripped
+                      before the test is terminated.  Default is 120.
+
+   -ap              : Set the password for authentication challenges. Default
+                      is 'password
+
+   -tls_cert        : Set the name for TLS Certificate file. Default is
+                      'cacert.pem
+
+   -tls_key         : Set the name for TLS Private Key file. Default is
+                      'cakey.pem'
+
+   -tls_crl         : Set the name for Certificate Revocation List file. If not
+                      specified, X509 CRL is not activated.
+
+   -3pcc            : Launch the tool in 3pcc mode ("Third Party call
+                      control"). The passed ip address is depending on the
+                      3PCC role.
+                      - When the first twin command is 'sendCmd' then this is
+                        the address of the remote twin socket.  SIPp will try to
+                        connect to this address:port to send the twin command
+                        (This instance must be started after all other 3PCC
+                        scenarii).
+                          Example: 3PCC-C-A scenario.
+                      - When the first twin command is 'recvCmd' then this is
+                        the address of the local twin socket. SIPp will open
+                        this address:port to listen for twin command.
+                          Example: 3PCC-C-B scenario.
+
+   -tdmmap          : Generate and handle a table of TDM circuits.
+                      A circuit must be available for the call to be placed.
+                      Format: -tdmmap {0-3}{99}{5-8}{1-31}
+
+   -key             : keyword value
+                      Set the generic parameter named "keyword" to "value".
+
+   -set             : variable value
+                      Set the global variable parameter named "variable" to
+                      "value".
+
+   -dynamicStart    : variable value
+                      Set the start offset of dynamic_id varaiable
+
+   -dynamicMax      : variable value
+                      Set the maximum of dynamic_id variable     
+
+   -dynamicStep     : variable value
+                      Set the increment of dynamic_id variable
+
+Signal handling:
+
+   SIPp can be controlled using posix signals. The following signals
+   are handled:
+   USR1: Similar to press 'q' keyboard key. It triggers a soft exit
+         of SIPp. No more new calls are placed and all ongoing calls
+         are finished before SIPp exits.
+         Example: kill -SIGUSR1 732
+   USR2: Triggers a dump of all statistics screens in
+         <scenario_name>_<pid>_screens.log file. Especially useful 
+         in background mode to know what the current status is.
+         Example: kill -SIGUSR2 732
+
+Exit code:
+
+   Upon exit (on fatal error or when the number of asked calls (-m
+   option) is reached, sipp exits with one of the following exit
+   code:
+    0: All calls were successful
+    1: At least one call failed
+   97: exit on internal command. Calls may have been processed
+   99: Normal exit without calls processed
+   -1: Fatal error
+
+
+Example:
+
+   Run sipp with embedded server (uas) scenario:
+     ./sipp -sn uas
+   On the same host, run sipp with embedded client (uac) scenario
+     ./sipp -sn uac 127.0.0.1
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
new file mode 100644
index 0000000000..9188b130ce
--- /dev/null
+++ b/sippxml/testsuiteuac.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# sleep 5;
+
+SERVERPORT=5062
+
+#start sipp server to receive calls from sflphone
+sipp -sf simpleuas.xml -p ${SERVERPORT} &
+
+#start sflphoned
+/usr/lib/sflphone/sflphoned& 
+
+#wait some time to make sure sflphone is started
+sleep 2;
+
+#run python client and associated script
+python ../tools/pysflphone/pysflphone_testdbus.py
+
+#kill every one
+killall sipp
+killall sflphoned
+
+# function called if CTRL-C detected
+bashtrap()
+{
+    killall sipp
+    killall sflphoned
+}
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 7ff1383f8b..bf25988814 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -1,5 +1,8 @@
 #!/usr/bin/env python
 import time
+import sys
+
+import getopt
 
 from sflphonectrlsimple import SflPhoneCtrlSimple
 
@@ -23,7 +26,7 @@ class SflPhoneTests(SflPhoneCtrlSimple):
     def test_make_iptoip_call(self):
         """Make a call to a server (sipp) on port 5062"""
         i = 0
-        while(i < 50):
+        while(i < 10):
 
             callid = self.Call("sip:test@127.0.0.1:5062")
             time.sleep(0.4)
@@ -72,12 +75,13 @@ class SflPhoneTests(SflPhoneCtrlSimple):
         self.removeAccount(accountID)
         print "Account with ID " + accountID + " removed"
 
+
 sflphone = SflPhoneTests()
 
-sflphone.test_get_allaccounts_methods()
+# sflphone.test_get_allaccounts_methods()
 
 sflphone.test_make_iptoip_call()
 
-sflphone.test_make_account_call()
+# sflphone.test_make_account_call()
 
-sflphone.test_create_account()
+# sflphone.test_create_account()
-- 
GitLab


From d0fe2fe3531c7c59bf06658b1ae125fa40269e18 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 5 Mar 2010 13:05:00 -0500
Subject: [PATCH 104/160] [#2536] Add sipp account registration xml scripts and
 register account

---
 sflphone-common/src/sip/sipvoiplink.cpp     |   5 +-
 sippxml/accountcalluac.xml                  | 161 ++++++++++++++++++++
 sippxml/accountcalluas.xml                  | 159 +++++++++++++++++++
 sippxml/{simpleuac.xml => ip2ipcalluac.xml} |   0
 sippxml/{simpleuas.xml => ip2ipcalluas.xml} |   0
 sippxml/testsuiteuac.sh                     |  38 +++--
 tools/pysflphone/pysflphone_testdbus.py     |  28 ++--
 7 files changed, 369 insertions(+), 22 deletions(-)
 create mode 100644 sippxml/accountcalluac.xml
 create mode 100644 sippxml/accountcalluas.xml
 rename sippxml/{simpleuac.xml => ip2ipcalluac.xml} (100%)
 rename sippxml/{simpleuas.xml => ip2ipcalluas.xml} (100%)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index b22e053aca..a7058bbb7b 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2404,7 +2404,10 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
 
     }
 
-
+    if(listeningAddress == "" || listeningPort == 0) {
+    	_error("UserAgent: Error invalid address for new udp transport");
+    	return !PJ_SUCCESS;
+    }
     //strcpy (tmpIP, listeningAddress.data());
     /* Init published name */
     pj_bzero (&a_name, sizeof (pjsip_host_port));
diff --git a/sippxml/accountcalluac.xml b/sippxml/accountcalluac.xml
new file mode 100644
index 0000000000..2d43c03840
--- /dev/null
+++ b/sippxml/accountcalluac.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forward: 70
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:27182@192.168.50.79:[local_port]>
+      Call-ID: [call_id]
+      CSeq: 1 REGISTER
+      Contact: <sip:27182@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 300
+
+    ]]>
+  </send>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:27182@192.168.50.79:[local_port]>
+      Call-ID: [call_id]
+      CSeq: 1 REGISTER
+      Contact: <sip:27182@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 300
+      [authentication username=27182 password=1234]
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:31416@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:31416@192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      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>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+
+  <!-- Do something different on an optional receive   -->
+  <recv response="403" optional="true" next="1">
+  </recv>
+
+  <recv response="200">
+    <action>
+      <ereg regexp="ua25"
+            search_in="hdr"
+            header="From: "
+            assign_to="8"/>
+    </action>
+  </recv>
+
+  <!-- set variable 8 above on 25th call, send the ACK but skip the pause for it   -->
+  <send next="1" test="8">
+    <![CDATA[
+
+      ACK sip:31416@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:31416@192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <pause milliseconds="5000"/>
+
+  <label id="1"/>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:31416@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:31416@192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 2 BYE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+  <pause milliseconds="4000"/>
+
+
+  <!-- definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
diff --git a/sippxml/accountcalluas.xml b/sippxml/accountcalluas.xml
new file mode 100644
index 0000000000..82158ef0a5
--- /dev/null
+++ b/sippxml/accountcalluas.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="branch_server">
+  <recv request="REGISTER">
+  </recv>
+
+  <send>
+    <![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: 0
+      Expires: 300
+
+    ]]>
+  </send>
+
+  <!-- Set variable 3 if the ua is of the form ua2... -->
+  <recv request="INVITE" crlf="true">
+    <action>
+      <ereg regexp="ua2"
+            search_in="hdr"
+            header="From: "
+            assign_to="3"/>
+    </action>
+  </recv>
+
+  <!-- send 180 then trying if variable 3 is set -->
+  <send next="1" test="3">
+    <![CDATA[
+
+      SIP/2.0 180 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>
+
+  <!-- if not, send a 403 error then skip to wait for a BYE -->
+  <send next="2">
+    <![CDATA[
+
+      SIP/2.0 403 Error
+      [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>
+
+  <label id="1"/>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 100 Trying
+      [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 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-Type: application/sdp
+      Content-Length: 136
+
+      v=0
+      o=user1 53655765 2353687637 IN IP4 127.0.0.1
+      s=-
+      t=0 0
+      c=IN IP4 [media_ip]
+      m=audio [media_port] RTP/AVP 0
+      a=rtpmap:0 PCMU/8000
+
+    ]]>
+  </send>
+
+  <recv request="ACK"
+        optional="true"
+        rtd="true"
+        crlf="true">
+  </recv>
+
+  <label id="2"/>
+
+  <recv request="BYE">
+  </recv>
+
+  <send>
+    <![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: 0
+
+    ]]>
+  </send>
+
+  <!-- Keep the call open for a while in case the 200 is lost to be     -->
+  <!-- able to retransmit it if we receive the BYE again.               -->
+  <pause milliseconds="4000"/>
+
+  <!-- Definition of the response time repartition table (unit is ms)   -->
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <!-- Definition of the call length repartition table (unit is ms)     -->
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
diff --git a/sippxml/simpleuac.xml b/sippxml/ip2ipcalluac.xml
similarity index 100%
rename from sippxml/simpleuac.xml
rename to sippxml/ip2ipcalluac.xml
diff --git a/sippxml/simpleuas.xml b/sippxml/ip2ipcalluas.xml
similarity index 100%
rename from sippxml/simpleuas.xml
rename to sippxml/ip2ipcalluas.xml
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 9188b130ce..9864f1303c 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -3,25 +3,39 @@
 
 SERVERPORT=5062
 
-#start sipp server to receive calls from sflphone
-sipp -sf simpleuas.xml -p ${SERVERPORT} &
+function test_ip2ipcall {
 
-#start sflphoned
-/usr/lib/sflphone/sflphoned& 
+    #start sipp server to receive calls from sflphone
+    sipp -sf ip2ipcalluas.xml -p ${SERVERPORT} &
 
-#wait some time to make sure sflphone is started
-sleep 2;
+    #start sflphoned
+    /usr/lib/sflphone/sflphoned& 
 
-#run python client and associated script
-python ../tools/pysflphone/pysflphone_testdbus.py
+    #wait some time to make sure sflphone is started
+    sleep 2;
 
-#kill every one
-killall sipp
-killall sflphoned
+    #run python client and associated script
+    python ../tools/pysflphone/pysflphone_testdbus.py
+
+    #kill every one
+    killall sipp
+    killall sflphoned
+}
+
+function test_accountcall {
+
+    sipp -sf accountcalluac.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT}
+
+}
 
 # function called if CTRL-C detected
 bashtrap()
 {
     killall sipp
     killall sflphoned
-}
\ No newline at end of file
+}
+
+
+# Here Start the Test suite
+
+test_ip2ipcall
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index bf25988814..47183d6454 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -9,6 +9,7 @@ from sflphonectrlsimple import SflPhoneCtrlSimple
 
 class SflPhoneTests(SflPhoneCtrlSimple):
 
+
     def test_get_allaccounts_methods(self):
 
         for account in self.getAllAccounts():
@@ -55,7 +56,7 @@ class SflPhoneTests(SflPhoneCtrlSimple):
 
 
     def test_create_account(self):
-        """Create a new sip fake account and remove it"""
+        """Create a new sip account"""
 
         CONFIG_ACCOUNT_TYPE = "Account.type"  
 	CONFIG_ACCOUNT_ALIAS = "Account.alias"
@@ -63,25 +64,34 @@ class SflPhoneTests(SflPhoneCtrlSimple):
 	USERNAME = "username"
 	PASSWORD = "password"
 	
-        accDetails = {CONFIG_ACCOUNT_TYPE:"SIP", CONFIG_ACCOUNT_ALIAS:"myNewAccount",
-                      HOSTNAME:"192.168.50.3", USERNAME:"431",
-                      PASSWORD:"alexandre"}
+        accDetails = {CONFIG_ACCOUNT_TYPE:"SIP", CONFIG_ACCOUNT_ALIAS:"testsuiteaccount",
+                      HOSTNAME:"192.168.50.79", USERNAME:"31416",
+                      PASSWORD:"1234"}
 
 
         accountID = self.addAccount(accDetails)
         print "New Account ID " + accountID
-        time.sleep(3)
+
+        return accountID
+
+
+    def test_remove_account(self, accountID):
+        """Remove test account"""
 
         self.removeAccount(accountID)
         print "Account with ID " + accountID + " removed"
 
 
+# Open sflphone and connect to sflphoned through dbus 
 sflphone = SflPhoneTests()
 
-# sflphone.test_get_allaccounts_methods()
+# Test 1: Makke approximately one IP2IP call per second 
+# to a sipp uas on local addrress
+#sflphone.test_make_iptoip_call()
 
-sflphone.test_make_iptoip_call()
 
+# Test 2: 
+accountID = sflphone.test_create_account()
 # sflphone.test_make_account_call()
-
-# sflphone.test_create_account()
+time.sleep(0.3)
+# sflphone.test_remove_account(accountID)
-- 
GitLab


From 601c9508d60c240025abd42522cbfc61d02c26ad Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Fri, 5 Mar 2010 14:50:09 -0500
Subject: [PATCH 105/160] [#2979] Add lucid lynx (ubuntu 10-04) distribution to
 automatic build-system

---
 tools/build-system/launchpad/dput.conf        |  7 +++++++
 .../debian/control.lucid                      | 20 +++++++++++++++++++
 .../sflphone-common/debian/control.lucid      | 19 ++++++++++++++++++
 tools/build-system/setenv.sh                  |  2 +-
 4 files changed, 47 insertions(+), 1 deletion(-)
 create mode 100644 tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid
 create mode 100644 tools/build-system/launchpad/sflphone-common/debian/control.lucid

diff --git a/tools/build-system/launchpad/dput.conf b/tools/build-system/launchpad/dput.conf
index 4d3d15990d..ea85aa390a 100644
--- a/tools/build-system/launchpad/dput.conf
+++ b/tools/build-system/launchpad/dput.conf
@@ -26,3 +26,10 @@ incoming = ~savoirfairelinux/sflphone-nightly/ubuntu/karmic
 login = anonymous
 allow_unsigned_uploads = 0
 
+[sflphone-nightly-lucid]
+fqdn = ppa.launchpad.net
+method = ftp
+incoming = ~savoirfairelinux/sflphone-nightly/ubuntu/lucid
+login = anonymous
+allow_unsigned_uploads = 0
+
diff --git a/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid b/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid
new file mode 100644
index 0000000000..c72878afda
--- /dev/null
+++ b/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid
@@ -0,0 +1,20 @@
+Source: sflphone-client-gnome
+Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
+Section: gnome
+Priority: optional
+Build-Depends: debhelper, libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev, libgnomeui-dev, gnome-doc-utils, rarian-compat
+Standards-Version: 3.7.3
+
+Package: sflphone-client-gnome
+Priority: optional
+Architecture: any
+Depends: sflphone-common (=${source:Version}), libdbus-glib-1-2, libgtk2.0-0, libc6, libglib2.0-0, libdbus-glib-1-2, libnotify1, librsvg2-common, liblog4c3, libebook1.2-9, libgnomeui-0
+Replaces: sflphone
+Conflicts: sflphone
+Homepage: http://www.sflphone.org
+Description: GNOME client for SFLphone
+ Provide a GNOME client for SFLphone.
+ SFLphone is meant to be a robust enterprise-class desktop phone.
+ SFLphone is released under the GNU General Public License.
+ SFLphone is being developed by the global community, and maintained by
+ Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company.
diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.lucid b/tools/build-system/launchpad/sflphone-common/debian/control.lucid
new file mode 100644
index 0000000000..177306ed35
--- /dev/null
+++ b/tools/build-system/launchpad/sflphone-common/debian/control.lucid
@@ -0,0 +1,19 @@
+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
+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
+Replaces: sflphone
+Conflicts: sflphone
+Homepage: http://www.sflphone.org
+Description: SIP and IAX2 compatible softphone - Core
+ SFLphone is meant to be a robust enterprise-class desktop phone.
+ SFLphone is released under the GNU General Public License.
+ SFLphone is being developed by the global community, and maintained by
+ Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company.
diff --git a/tools/build-system/setenv.sh b/tools/build-system/setenv.sh
index ee6bbb068d..a19a22d3ce 100644
--- a/tools/build-system/setenv.sh
+++ b/tools/build-system/setenv.sh
@@ -22,6 +22,6 @@ export REFERENCE_REPOSITORY="${ROOT_DIR}/sflphone-source-repository"
 
 export WORKING_DIR="${ROOT_DIR}/sflphone-build-repository/tools/build-system"
 export LAUNCHPAD_DIR="${WORKING_DIR}/launchpad"
-LAUNCHPAD_DISTRIBUTIONS=( "jaunty" "karmic" )
+LAUNCHPAD_DISTRIBUTIONS=( "jaunty" "karmic" "lucid" )
 export LAUNCHPAD_DISTRIBUTIONS
 
-- 
GitLab


From 8a1ae9bbbd2a5da6684b0ec34b49c8a3337f95dc Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Fri, 5 Mar 2010 16:25:11 -0500
Subject: [PATCH 106/160] [#2916] Added support to disable a shortcut

---
 .../src/config/shortcuts-config.c             | 20 +++++++++++++++++++
 .../src/config/shortcuts-config.h             | 10 +++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/sflphone-client-gnome/src/config/shortcuts-config.c b/sflphone-client-gnome/src/config/shortcuts-config.c
index 91e4d140a9..bffab5f554 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.c
+++ b/sflphone-client-gnome/src/config/shortcuts-config.c
@@ -85,12 +85,15 @@ setup_tree_view(GtkWidget *treeview)
 
   gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
   g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
+  g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
 }
 
 static void
 accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
     GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview)
 {
+  DEBUG("Accel edited");
+
   GtkTreeModel *model;
   GtkTreeIter iter;
 
@@ -105,3 +108,20 @@ accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
   // Update GDK bindings
   shortcuts_update_bindings(atoi(path), code);
 }
+
+static void
+accel_cleared(GtkCellRendererAccel *renderer, gchar *path, GtkTreeView *treeview)
+{
+  DEBUG("Accel cleared");
+
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+
+  // Update treeview
+  model = gtk_tree_view_get_model(treeview);
+  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
+    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
+
+  // Update GDK bindings
+  shortcuts_update_bindings(atoi(path), 0);
+}
diff --git a/sflphone-client-gnome/src/config/shortcuts-config.h b/sflphone-client-gnome/src/config/shortcuts-config.h
index 61306699f0..b7edf5c549 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.h
+++ b/sflphone-client-gnome/src/config/shortcuts-config.h
@@ -34,15 +34,19 @@ enum
 };
 
 GtkWidget*
-create_shortcuts_settings();
+create_shortcuts_settings ();
 
 static void
-setup_tree_view(GtkWidget *treeview);
+setup_tree_view (GtkWidget *treeview);
 
 static void
-accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
+accel_edited (GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
     GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview);
 
+static void
+accel_cleared (GtkCellRendererAccel *renderer, gchar *path,
+    GtkTreeView *treeview);
+
 G_END_DECLS
 
 #endif // _SHORTCUTS_CONFIG
-- 
GitLab


From 34a7ee18749e258ef4c095ed6a7596462f0badde Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Fri, 5 Mar 2010 16:44:53 -0500
Subject: [PATCH 107/160] [#2916] Fixed hashmap update for shortcuts

---
 sflphone-client-gnome/src/shortcuts.c | 171 ++++++++++++++------------
 1 file changed, 89 insertions(+), 82 deletions(-)

diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
index 44ba711b23..e52e5f109b 100644
--- a/sflphone-client-gnome/src/shortcuts.c
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -43,27 +43,28 @@ static GHashTable* shortcutsMap;
  */
 
 static void
-pick_up_callback()
+pick_up_callback ()
 {
-  sflphone_pick_up();
+  sflphone_pick_up ();
 }
 
 static void
-hang_up_callback()
+hang_up_callback ()
 {
-  sflphone_hang_up();
+  sflphone_hang_up ();
 }
 
 static void
-popup_window_callback()
+popup_window_callback ()
 {
-  gtk_widget_hide(GTK_WIDGET(get_main_window()));
-  gtk_widget_show(GTK_WIDGET(get_main_window()));
-  gtk_window_move (GTK_WINDOW (get_main_window ()), dbus_get_window_position_x (), dbus_get_window_position_y ());
+  gtk_widget_hide (GTK_WIDGET(get_main_window()));
+  gtk_widget_show (GTK_WIDGET(get_main_window()));
+  gtk_window_move (GTK_WINDOW (get_main_window ()),
+      dbus_get_window_position_x (), dbus_get_window_position_y ());
 }
 
 static void
-default_callback()
+default_callback ()
 {
   ERROR("Missing shortcut callback");
 }
@@ -72,15 +73,15 @@ default_callback()
  * return callback corresponding to a specific action
  */
 static void*
-get_action_callback(const gchar* action)
+get_action_callback (const gchar* action)
 {
-  if(strcmp(action, "pick_up") == 0)
+  if (strcmp (action, "pick_up") == 0)
     return pick_up_callback;
 
-  if(strcmp(action, "hang_up") == 0)
+  if (strcmp (action, "hang_up") == 0)
     return hang_up_callback;
 
-  if(strcmp(action, "popup_window") == 0)
+  if (strcmp (action, "popup_window") == 0)
     return popup_window_callback;
 
   return default_callback;
@@ -94,13 +95,13 @@ get_action_callback(const gchar* action)
  * Remove all existing bindings
  */
 static void
-remove_bindings()
+remove_bindings ()
 {
   GdkDisplay *display;
   GdkScreen *screen;
   GdkWindow *root;
 
-  display = gdk_display_get_default();
+  display = gdk_display_get_default ();
 
   int i = 0;
   int j = 0;
@@ -108,15 +109,15 @@ remove_bindings()
     {
       if (accelerators_list[i].value != 0)
         {
-          for (j = 0; j < gdk_display_get_n_screens(display); j++)
+          for (j = 0; j < gdk_display_get_n_screens (display); j++)
             {
-              screen = gdk_display_get_screen(display, j);
+              screen = gdk_display_get_screen (display, j);
 
               if (screen != NULL)
                 {
-                  root = gdk_screen_get_root_window(screen);
-                  ungrab_key(accelerators_list[i].value, root);
-                  gdk_window_remove_filter(root, filter_keys, NULL);
+                  root = gdk_screen_get_root_window (screen);
+                  ungrab_key (accelerators_list[i].value, root);
+                  gdk_window_remove_filter (root, filter_keys, NULL);
                 }
             }
         }
@@ -129,13 +130,13 @@ remove_bindings()
  * Create all bindings, using stored configuration
  */
 static void
-create_bindings()
+create_bindings ()
 {
   GdkDisplay *display;
   GdkScreen *screen;
   GdkWindow *root;
 
-  display = gdk_display_get_default();
+  display = gdk_display_get_default ();
 
   int i = 0;
   int j = 0;
@@ -143,23 +144,20 @@ create_bindings()
     {
       if (accelerators_list[i].value != 0)
         {
-          // update value in hashtable (used for dbus calls)
-          g_hash_table_replace(shortcutsMap, g_strdup(accelerators_list[i].action),
-              GINT_TO_POINTER(accelerators_list[i].value));
-
           // updated GDK bindings
-          for (j = 0; j < gdk_display_get_n_screens(display); j++)
+          for (j = 0; j < gdk_display_get_n_screens (display); j++)
             {
-              screen = gdk_display_get_screen(display, j);
+              screen = gdk_display_get_screen (display, j);
 
               if (screen != NULL)
                 {
-                  root = gdk_screen_get_root_window(screen);
-                  grab_key(accelerators_list[i].value, root);
-                  gdk_window_add_filter(root, filter_keys, NULL);
+                  root = gdk_screen_get_root_window (screen);
+                  grab_key (accelerators_list[i].value, root);
+                  gdk_window_add_filter (root, filter_keys, NULL);
                 }
             }
         }
+
       i++;
     }
 }
@@ -168,13 +166,13 @@ create_bindings()
  * Initialize a specific binding
  */
 static void
-initialize_binding(const gchar* action, const guint code)
+initialize_binding (const gchar* action, const guint code)
 {
   //initialize_shortcuts_keys();
   int index = 0;
   while (accelerators_list[index].action != NULL)
     {
-      if (strcmp(action, accelerators_list[index].action) == 0)
+      if (strcmp (action, accelerators_list[index].action) == 0)
         {
           break;
         }
@@ -191,18 +189,19 @@ initialize_binding(const gchar* action, const guint code)
   accelerators_list[index].value = code;
 
   // update bindings
-  create_bindings();
+  create_bindings ();
 }
 
 /*
  * Prepare accelerators list
  */
 static void
-initialize_accelerators_list()
+initialize_accelerators_list ()
 {
-  GList* shortcutsKeys = g_hash_table_get_keys(shortcutsMap);
+  GList* shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
 
-  accelerators_list = (Accelerator*)malloc((g_list_length(shortcutsKeys) + 1) *sizeof(Accelerator));
+  accelerators_list = (Accelerator*) malloc (
+      (g_list_length (shortcutsKeys) + 1) * sizeof(Accelerator));
 
   GList* shortcutsKeysElement;
   int index = 0;
@@ -211,8 +210,8 @@ initialize_accelerators_list()
     {
       gchar* action = shortcutsKeysElement->data;
 
-      accelerators_list[index].action = g_strdup(action);
-      accelerators_list[index].callback = get_action_callback(action);
+      accelerators_list[index].action = g_strdup (action);
+      accelerators_list[index].callback = get_action_callback (action);
       accelerators_list[index].mask = 0;
       accelerators_list[index].value = 0;
 
@@ -234,43 +233,48 @@ initialize_accelerators_list()
  * Update current bindings with a new value
  */
 void
-shortcuts_update_bindings(const guint index, const guint code)
+shortcuts_update_bindings (const guint index, const guint code)
 {
   // first remove all existing bindings
-  remove_bindings();
+  remove_bindings ();
 
   // store new value
   accelerators_list[index].value = code;
 
+  // update value in hashtable (used for dbus calls)
+  g_hash_table_replace (shortcutsMap,
+      g_strdup (accelerators_list[index].action), GINT_TO_POINTER (
+          accelerators_list[index].value));
+
   // recreate all bindings
-  create_bindings();
+  create_bindings ();
 
   // update configuration
-  dbus_set_shortcuts(shortcutsMap);
+  dbus_set_shortcuts (shortcutsMap);
 }
 
 /*
  * Initialize bindings with configuration retrieved from dbus
  */
 void
-shortcuts_initialize_bindings()
+shortcuts_initialize_bindings ()
 {
   // get shortcuts stored in config through dbus
-  shortcutsMap = dbus_get_shortcuts();
+  shortcutsMap = dbus_get_shortcuts ();
 
   // initialize list of keys
-  initialize_accelerators_list();
+  initialize_accelerators_list ();
 
   // iterate through keys to initialize bindings
-  GList* shortcutsKeys = g_hash_table_get_keys(shortcutsMap);
+  GList* shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
   GList* shortcutsKeysElement;
   for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
       = shortcutsKeysElement->next)
     {
       gchar* key = shortcutsKeysElement->data;
-      int shortcut = (size_t) g_hash_table_lookup(shortcutsMap, key);
-      if(shortcut != 0)
-        initialize_binding(key, shortcut);
+      int shortcut = (size_t) g_hash_table_lookup (shortcutsMap, key);
+      if (shortcut != 0)
+        initialize_binding (key, shortcut);
     }
 }
 
@@ -278,23 +282,23 @@ shortcuts_initialize_bindings()
  * Initialize bindings with configuration retrieved from dbus
  */
 void
-shortcuts_destroy_bindings()
+shortcuts_destroy_bindings ()
 {
   // remove bindings
-  remove_bindings();
+  remove_bindings ();
 
   // free pointers
   int index = 0;
   while (accelerators_list[index].action != NULL)
     {
-      g_free(accelerators_list[index].action);
+      g_free (accelerators_list[index].action);
       index++;
     }
-  free(accelerators_list);
+  free (accelerators_list);
 }
 
 Accelerator*
-shortcuts_get_list()
+shortcuts_get_list ()
 {
   return accelerators_list;
 }
@@ -307,7 +311,7 @@ shortcuts_get_list()
  * filter used when an event is catched
  */
 static GdkFilterReturn
-filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
+filter_keys (GdkXEvent *xevent, GdkEvent *event, gpointer data)
 {
   XEvent *xev;
   XKeyEvent *key;
@@ -330,7 +334,7 @@ filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
               accelerators_list[i].value);
 
           // call associated callback function
-          accelerators_list[i].callback();
+          accelerators_list[i].callback ();
 
           return GDK_FILTER_REMOVE;
         }
@@ -345,22 +349,25 @@ filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data)
  * Remove key "catcher" from GDK layer
  */
 static void
-ungrab_key(int key_code, GdkWindow *root)
+ungrab_key (int key_code, GdkWindow *root)
 {
-  gdk_error_trap_push();
-
-  XUngrabKey(GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
+  gdk_error_trap_push ();
+
+  XUngrabKey (GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask,
+      GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | LockMask,
+      GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod5Mask | LockMask,
+      GDK_WINDOW_XID(root));
+  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
       GDK_WINDOW_XID(root));
 
-  gdk_flush();
-  if (gdk_error_trap_pop())
+  gdk_flush ();
+  if (gdk_error_trap_pop ())
     {
       ERROR("Error ungrabbing key");
     }
@@ -370,30 +377,30 @@ ungrab_key(int key_code, GdkWindow *root)
  * Add key "catcher" to GDK layer
  */
 static void
-grab_key(int key_code, GdkWindow *root)
+grab_key (int key_code, GdkWindow *root)
 {
 
-  gdk_error_trap_push();
+  gdk_error_trap_push ();
 
-  XGrabKey(GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root), True,
+  XGrabKey (GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root), True,
       GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root),
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root),
       True, GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root),
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root),
       True, GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root),
+  XGrabKey (GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root),
       True, GrabModeAsync, GrabModeAsync);
-  XGrabKey(GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
+  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
       GDK_WINDOW_XID(root), True, GrabModeAsync, GrabModeAsync);
 
-  gdk_flush();
-  if (gdk_error_trap_pop())
+  gdk_flush ();
+  if (gdk_error_trap_pop ())
     {
       ERROR("Error grabbing key");
     }
-- 
GitLab


From 28a389860f47f86413755e59eed54992d4100747 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Fri, 5 Mar 2010 16:57:29 -0500
Subject: [PATCH 108/160] [#2916] Added actions i18n support and warning
 message

---
 sflphone-client-gnome/src/config/shortcuts-config.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/sflphone-client-gnome/src/config/shortcuts-config.c b/sflphone-client-gnome/src/config/shortcuts-config.c
index bffab5f554..b343f52071 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.c
+++ b/sflphone-client-gnome/src/config/shortcuts-config.c
@@ -25,7 +25,7 @@
 GtkWidget*
 create_shortcuts_settings()
 {
-  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *table;
+  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *label;
   GtkListStore *store;
   GtkTreeIter iter;
   guint i = 0;
@@ -35,6 +35,8 @@ create_shortcuts_settings()
 
   gnome_main_section_new(_("General"), &result_frame);
 
+  label = gtk_label_new(_("Be careful: these shortcuts might override system-wide shortcuts."));
+
   treeview = gtk_tree_view_new();
   setup_tree_view(treeview);
 
@@ -45,7 +47,7 @@ create_shortcuts_settings()
   while (list[i].action != NULL)
     {
       gtk_list_store_append(store, &iter);
-      gtk_list_store_set(store, &iter, ACTION, list[i].action, MASK,
+      gtk_list_store_set(store, &iter, ACTION, _(list[i].action), MASK,
           (gint) list[i].mask, VALUE, XKeycodeToKeysym(GDK_DISPLAY(),
               list[i].value, 0), -1);
       i++;
@@ -55,6 +57,7 @@ create_shortcuts_settings()
   g_object_unref(store);
 
   gtk_container_add(GTK_CONTAINER (result_frame), treeview);
+  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
   gtk_box_pack_start(GTK_BOX(vbox), result_frame, FALSE, FALSE, 0);
 
   gtk_widget_show_all(vbox);
-- 
GitLab


From 64a8b9508f723bfb7abcd46f99cbb089a7536631 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 5 Mar 2010 17:43:45 -0500
Subject: [PATCH 109/160] [#2536] Added an event loop in sflphone python client

---
 sippxml/accountcalluac.xml              | 123 ++++++++++++++----------
 sippxml/testsuiteuac.sh                 |  30 ++++--
 tools/pysflphone/pysflphone_testdbus.py |  19 +++-
 tools/pysflphone/sflphonectrlsimple.py  |  20 +++-
 4 files changed, 131 insertions(+), 61 deletions(-)

diff --git a/sippxml/accountcalluac.xml b/sippxml/accountcalluac.xml
index 2d43c03840..a5ba5ac283 100644
--- a/sippxml/accountcalluac.xml
+++ b/sippxml/accountcalluac.xml
@@ -22,14 +22,14 @@
   <send retrans="500">
     <![CDATA[
 
-      REGISTER sip:192.168.50.79 SIP/2.0
+      REGISTER sip:[remote_ip] SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
       Max-Forward: 70
-      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:27182@192.168.50.79:[local_port]>
-      Call-ID: [call_id]
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]:[remote_port]>
+      Call-ID: REG///[call_id]
       CSeq: 1 REGISTER
-      Contact: <sip:27182@[local_ip]:[local_port]>
+      Contact: <sip:27182@[remote_ip]:[remote_port]>
       Content-Length: 0
       Expires: 300
 
@@ -42,14 +42,14 @@
   <send retrans="500">
     <![CDATA[
 
-      REGISTER sip:192.168.50.79 SIP/2.0
+      REGISTER sip:[remote_ip] SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
       Max-Forwards: 70
-      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:27182@192.168.50.79:[local_port]>
-      Call-ID: [call_id]
-      CSeq: 1 REGISTER
-      Contact: <sip:27182@[local_ip]:[local_port]>
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]:[remote_port]>
+      Call-ID: REG///[call_id]
+      CSeq: 2 REGISTER
+      Contact: <sip:27182@[remote_ip]:[remote_port]>
       Content-Length: 0
       Expires: 300
       [authentication username=27182 password=1234]
@@ -60,16 +60,17 @@
   <recv response="200">
   </recv>
 
+  <pause milliseconds="200"/>
 
   <send retrans="500">
     <![CDATA[
 
-      INVITE sip:31416@192.168.50.79 SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
-      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:31416@192.168.50.79:[remote_port]>
+      INVITE sip:2000@[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]:[remote_port]>
       Call-ID: [call_id]
-      CSeq: 1 INVITE
+      CSeq: 3 INVITE
       Contact: sip:27182@[local_ip]:[local_port]
       Max-Forwards: 70
       Subject: Functional Test
@@ -87,36 +88,73 @@
     ]]>
   </send>
 
-  <recv response="100" optional="true">
+  <recv response="401" auth="true">
   </recv>
 
-  <recv response="180" optional="true">
-  </recv>
+  <pause milliseconds="200"/>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:27182@[remote_ip] SIP/2.0
+      Max-Forwards: 70
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 4 ACK
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:2000@[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:27182@:[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 5 INVITE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Type: application/sdp
+      Content-Length: [len]
+      [authentication username=27182 password=1234]
+
+      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>
 
-  <!-- Do something different on an optional receive   -->
-  <recv response="403" optional="true" next="1">
+  <recv response="100">
   </recv>
 
+  <recv response="180">
+  </recv>
+
+
   <recv response="200">
-    <action>
-      <ereg regexp="ua25"
-            search_in="hdr"
-            header="From: "
-            assign_to="8"/>
-    </action>
   </recv>
 
-  <!-- set variable 8 above on 25th call, send the ACK but skip the pause for it   -->
-  <send next="1" test="8">
+  <send>
     <![CDATA[
 
-      ACK sip:31416@192.168.50.79 SIP/2.0
+      ACK sip:2000@192.168.50.79 SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
       From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:31416@192.168.50.79:[remote_port]>
+      To: <sip:2000@192.168.50.79:[remote_port]>
       Call-ID: [call_id]
-      CSeq: 1 ACK
+      CSeq: 5 ACK
       Contact: sip:27182@[local_ip]:[local_port]
       Max-Forwards: 70
       Subject: Functional Test
@@ -125,19 +163,15 @@
     ]]>
   </send>
 
-  <pause milliseconds="5000"/>
-
-  <label id="1"/>
-
   <send retrans="500">
     <![CDATA[
 
-      BYE sip:31416@192.168.50.79 SIP/2.0
+      BYE sip:2000@192.168.50.79 SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
       From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:31416@192.168.50.79:[remote_port]>
+      To: <sip:2000@192.168.50.79:[remote_port]>
       Call-ID: [call_id]
-      CSeq: 2 BYE
+      CSeq: 6 BYE
       Contact: sip:27182@[local_ip]:[local_port]
       Max-Forwards: 70
       Subject: Functional Test
@@ -146,16 +180,7 @@
     ]]>
   </send>
 
-  <recv response="200" crlf="true">
-  </recv>
-
-  <pause milliseconds="4000"/>
-
-
-  <!-- definition of the response time repartition table (unit is ms)   -->
-  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
 
-  <!-- definition of the call length repartition table (unit is ms)     -->
-  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+  <pause milliseconds="1000"/>
 
 </scenario>
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 9864f1303c..88e58de301 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -5,27 +5,41 @@ SERVERPORT=5062
 
 function test_ip2ipcall {
 
-    #start sipp server to receive calls from sflphone
+    # start sipp server to receive calls from sflphone
     sipp -sf ip2ipcalluas.xml -p ${SERVERPORT} &
 
-    #start sflphoned
+    # start sflphoned
     /usr/lib/sflphone/sflphoned& 
 
-    #wait some time to make sure sflphone is started
+    # wait some time to make sure sflphoned is started
     sleep 2;
 
-    #run python client and associated script
+    # run python client and script to make calls
     python ../tools/pysflphone/pysflphone_testdbus.py
 
-    #kill every one
+    # kill every one
     killall sipp
     killall sflphoned
 }
 
 function test_accountcall {
 
-    sipp -sf accountcalluac.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT}
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
 
+    # wait some time to make sure sflphoned is started
+    #sleep 2;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    #sleep 2;
+
+    # start sipp client and send calls 
+    sipp -sf accountcalluac.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    killall sipp
+    killall sflphoned
 }
 
 # function called if CTRL-C detected
@@ -38,4 +52,6 @@ bashtrap()
 
 # Here Start the Test suite
 
-test_ip2ipcall
\ No newline at end of file
+# test_ip2ipcall
+
+test_accountcall
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 47183d6454..f46a232924 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -4,6 +4,8 @@ import sys
 
 import getopt
 
+from threading import Event 
+
 from sflphonectrlsimple import SflPhoneCtrlSimple
 
 
@@ -82,16 +84,27 @@ class SflPhoneTests(SflPhoneCtrlSimple):
         print "Account with ID " + accountID + " removed"
 
 
+
 # Open sflphone and connect to sflphoned through dbus 
 sflphone = SflPhoneTests()
 
+sflphone.start()
+
 # Test 1: Makke approximately one IP2IP call per second 
 # to a sipp uas on local addrress
 #sflphone.test_make_iptoip_call()
 
 
-# Test 2: 
-accountID = sflphone.test_create_account()
+
+# Test 2: - Create an account on Asterisk
+#         - Wait for incoming calls
+#         - Once a call is received, answer
+#         - The call should then be hung up by caller  
+
+# accountID = sflphone.test_create_account()
 # sflphone.test_make_account_call()
-time.sleep(0.3)
+# time.sleep(0.3)
+
+
+
 # sflphone.test_remove_account(accountID)
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index 6ed51344a7..d73b0ef4e2 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -32,6 +32,7 @@ import time
 import hashlib
 
 from threading import Thread
+from threading import Event
 
 from Errors import *
 
@@ -42,21 +43,23 @@ except ImportError, e:
 	raise SflPhoneError("No python-dbus module found")
 
 
-class SflPhoneCtrlSimple(object):
+class SflPhoneCtrlSimple(Thread):
     """Simple class for controlling SflPhoned through DBUS"""
 
     # list of active calls (known by the client)
     activeCalls = {}
 
     def __init__(self, name=sys.argv[0]):
+        Thread.__init__(self)
        	# current active account
         self.account = None
         # client name
         self.name = name
         # client registered to sflphoned ?
         self.registered = False
-
         self.register()
+	self.event = Event()
+	self.currentCallId = ""
 
 
     def __del__(self):
@@ -139,6 +142,9 @@ class SflPhoneCtrlSimple(object):
     def onIncomingCall(self, account, callid, to):
         print "Incoming call: " + account + ", " + callid + ", " + to
         self.activeCalls[callid] = {'Account': account, 'To': to, 'State': '' }
+	self.currentCallId = callid
+	self.event.set()
+	Answer(callid)
 
     # On call state changed event, set the values for new calls, 
     # or delete the call from the list of active calls
@@ -559,3 +565,13 @@ class SflPhoneCtrlSimple(object):
         m.update(str(t) + str(r))
         callid = m.hexdigest()
 	return callid
+
+
+    def run(self):
+
+        while(True):
+            print "Waiting Event"
+	    self.event.wait()
+	    sflphone.Accept(sflphone.currentCallId)
+	    self.event.clear()
+	    print "Call Accepted"
-- 
GitLab


From 66b08677c5984bdeafee96e0f5d6f56b4e373a3c Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 9 Mar 2010 14:00:26 -0500
Subject: [PATCH 110/160] [#2536] IP2IP call test suite

---
 sippxml/account_uac_send_hangup.xml      | 188 +++++++++++++++++++++++
 sippxml/account_uas_recv_peer_hungup.xml | 141 +++++++++++++++++
 sippxml/ip2ip_uac_send_hangup.xml        |  97 ++++++++++++
 sippxml/ip2ip_uac_send_peer_hungup.xml   |  94 ++++++++++++
 sippxml/ip2ip_uas_recv_hangup.xml        |  82 ++++++++++
 sippxml/ip2ip_uas_recv_peer_hungup.xml   |  80 ++++++++++
 sippxml/testsuiteuac.sh                  | 118 ++++++++++++--
 tools/pysflphone/pysflphone_testdbus.py  | 188 +++++++++++++++++------
 tools/pysflphone/sflphonectrlsimple.py   |  61 ++++++--
 9 files changed, 967 insertions(+), 82 deletions(-)
 create mode 100644 sippxml/account_uac_send_hangup.xml
 create mode 100644 sippxml/account_uas_recv_peer_hungup.xml
 create mode 100644 sippxml/ip2ip_uac_send_hangup.xml
 create mode 100644 sippxml/ip2ip_uac_send_peer_hungup.xml
 create mode 100644 sippxml/ip2ip_uas_recv_hangup.xml
 create mode 100644 sippxml/ip2ip_uas_recv_peer_hungup.xml

diff --git a/sippxml/account_uac_send_hangup.xml b/sippxml/account_uac_send_hangup.xml
new file mode 100644
index 0000000000..b07251cb21
--- /dev/null
+++ b/sippxml/account_uac_send_hangup.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forward: 70
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]:[remote_port]>
+      Call-ID: REG///[call_id]
+      CSeq: 1 REGISTER
+      Contact: <sip:27182@[remote_ip]:[remote_port]>
+      Content-Length: 0
+      Expires: 300
+
+    ]]>
+  </send>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]:[remote_port]>
+      Call-ID: REG///[call_id]
+      CSeq: 2 REGISTER
+      Contact: <sip:27182@[remote_ip]:[remote_port]>
+      Content-Length: 0
+      Expires: 300
+      [authentication username=27182 password=1234]
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+  <pause milliseconds="200"/>
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:2000@[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 3 INVITE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      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>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <pause milliseconds="200"/>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:27182@[remote_ip] SIP/2.0
+      Max-Forwards: 70
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 4 ACK
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:2000@[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:27182@:[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 5 INVITE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Type: application/sdp
+      Content-Length: [len]
+      [authentication username=27182 password=1234]
+
+      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">
+  </recv>
+
+  <recv response="180">
+  </recv>
+
+
+  <recv response="200">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:2000@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:2000@192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 5 ACK
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:2000@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:2000@192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 6 BYE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+  <pause milliseconds="1000"/>
+
+</scenario>
diff --git a/sippxml/account_uas_recv_peer_hungup.xml b/sippxml/account_uas_recv_peer_hungup.xml
new file mode 100644
index 0000000000..cfa9acb151
--- /dev/null
+++ b/sippxml/account_uas_recv_peer_hungup.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forward: 70
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]:[remote_port]>
+      Call-ID: REG///[call_id]
+      CSeq: 1 REGISTER
+      Contact: <sip:27182@[remote_ip]:[remote_port]>
+      Content-Length: 0
+      Expires: 300
+
+    ]]>
+  </send>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]:[remote_port]>
+      Call-ID: REG///[call_id]
+      CSeq: 2 REGISTER
+      Contact: <sip:27182@[remote_ip]:[remote_port]>
+      Content-Length: 0
+      Expires: 300
+      [authentication username=27182 password=1234]
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+
+  <recv request="INVITE">
+  </recv>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <send>
+   <![CDATA[
+
+     SIP/2.0 180 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>
+
+  <pause milliseconds="200"/>
+
+  <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-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>
+
+  <recv request="ACK">
+  </recv>
+
+  <recv request="BYE">
+  </recv>
+
+  <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-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>
+
+</scenario>
diff --git a/sippxml/ip2ip_uac_send_hangup.xml b/sippxml/ip2ip_uac_send_hangup.xml
new file mode 100644
index 0000000000..b38cf17361
--- /dev/null
+++ b/sippxml/ip2ip_uac_send_hangup.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      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>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="180">
+  </recv>
+
+
+  <recv response="200">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 2 ACK
+      Contact: sip:[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 3 BYE
+      Contact: sip:[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+  <pause milliseconds="1000"/>
+
+</scenario>
diff --git a/sippxml/ip2ip_uac_send_peer_hungup.xml b/sippxml/ip2ip_uac_send_peer_hungup.xml
new file mode 100644
index 0000000000..3ffd02a372
--- /dev/null
+++ b/sippxml/ip2ip_uac_send_peer_hungup.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="1000">
+    <![CDATA[
+
+      INVITE sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:[remote_ip]:[remote_port]>;tag=[call_number]
+      To: <sip:[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      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>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="180">
+  </recv>
+
+  <recv response="200">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 2 ACK
+      Contact: sip:[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <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="1000"/>
+
+</scenario>
diff --git a/sippxml/ip2ip_uas_recv_hangup.xml b/sippxml/ip2ip_uas_recv_hangup.xml
new file mode 100644
index 0000000000..571dda97cc
--- /dev/null
+++ b/sippxml/ip2ip_uas_recv_hangup.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+
+<scenario name="Basic UAS responder">
+
+ <recv request="INVITE" crlf="true">
+ </recv>
+
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 180 Ringing
+     [last_Via:]
+     [last_From:]
+     [last_To:];tag=[call_number]
+     [last_Call-ID:]
+     [last_CSeq:]
+     Contact: <sip:127.0.1.1:5062;transport=[transport]>
+     Content-Length: 0
+
+   ]]>
+ </send>
+
+ <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-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>
+
+
+ <recv request="ACK">
+ </recv>
+
+ <pause milliseconds="500"/>
+
+ <send retrans="500">
+    <![CDATA[
+
+      BYE sip:127.0.0.1:5060;transport=[transport] SIP/2.0
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      CSeq: [cseq] BYE
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+ <recv response="200">
+ </recv>
+
+ <pause milliseconds="1000"/>
+
+
+ <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+ <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario> 
diff --git a/sippxml/ip2ip_uas_recv_peer_hungup.xml b/sippxml/ip2ip_uas_recv_peer_hungup.xml
new file mode 100644
index 0000000000..4b615f216c
--- /dev/null
+++ b/sippxml/ip2ip_uas_recv_peer_hungup.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+
+<scenario name="Basic UAS responder">
+
+ <recv request="INVITE" crlf="true">
+ </recv>
+
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+ <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> 
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 88e58de301..c63983c1e0 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -3,46 +3,124 @@
 
 SERVERPORT=5062
 
-function test_ip2ipcall {
+function test_ip2ip_send_hangup {
 
     # start sipp server to receive calls from sflphone
-    sipp -sf ip2ipcalluas.xml -p ${SERVERPORT} &
+    sipp -sf ip2ip_uas_recv_peer_hungup.xml -p ${SERVERPORT}
 
     # start sflphoned
-    /usr/lib/sflphone/sflphoned& 
+    # /usr/lib/sflphone/sflphoned& 
 
     # wait some time to make sure sflphoned is started
-    sleep 2;
+    # sleep 1;
 
     # run python client and script to make calls
-    python ../tools/pysflphone/pysflphone_testdbus.py
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
 
     # kill every one
-    killall sipp
-    killall sflphoned
+    # bashtrap
 }
 
-function test_accountcall {
+function test_ip2ip_send_peer_hungup {
+
+    # start sipp server to receive calls from sflphone and then hangup
+    sipp -sf ip2ip_uas_recv_hangup.xml -p ${SERVERPORT}
 
     # start sflphoned
     # /usr/lib/sflphone/sflphoned& 
 
     # wait some time to make sure sflphoned is started
-    #sleep 2;
+    # sleep 1;
 
+    # run python client and script to make calls
     # python ../tools/pysflphone/pysflphone_testdbus.py &
 
-    #sleep 2;
+    # kill every one
+    bashtrap 
+}
+
+
+function test_ip2ip_recv_hangup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
 
     # start sipp client and send calls 
-    sipp -sf accountcalluac.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+    sipp -sf ip2ip_uac_send_peer_hungup.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT} -l 1
 
     # kill every one
-    killall sipp
-    killall sflphoned
+    # bashtrap 
+}
+
+function test_ip2ip_recv_peer_hungup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # start sipp client and send calls 
+    sipp -sf ip2ip_uac_send_hangup.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    # bashtrap 
+}
+
+function test_account_send_hangup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # start sipp client and send calls 
+    sipp -sf account_uas_recv_peer_hungup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    # bashtrap
+}
+
+function test_account_recv_peer_hungup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # start sipp client and send calls 
+    sipp -sf account_uac_send_hangup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    # bashtrap
 }
 
-# function called if CTRL-C detected
+# function called if CTRL-C detected 
 bashtrap()
 {
     killall sipp
@@ -50,8 +128,14 @@ bashtrap()
 }
 
 
-# Here Start the Test suite
+# ============================ Test Suite ============================
 
-# test_ip2ipcall
+# SCENARIO 1: Normal flow calls (IP2IP)
+# test_ip2ip_send_hangup
+# test_ip2ip_send_peer_hungup
+# test_ip2ip_recv_hangup
+# test_ip2ip_recv_peer_hungup
 
-test_accountcall
\ No newline at end of file
+# SCENARIO X: Normal flow calls (Account)
+test_account_send_hangup
+# test_account_recv_peer_hungup
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index f46a232924..563b683456 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -1,16 +1,38 @@
 #!/usr/bin/env python
+import signal
+
 import time
 import sys
 
 import getopt
+import gtk
 
-from threading import Event 
+from threading import Thread
+from threading import Event
 
+print "Import SFLphone"
 from sflphonectrlsimple import SflPhoneCtrlSimple
 
+# def killhandler(signum, frame):
+#     raise IOError("Couldn't open device!")
+
+# signal.signal(signal.SIGKILL, killhandler)
+
+def acceptOnIncomingCall(sflphone):
+    time.sleep(0.2)
+    sflphone.Accept(sflphone.currentCallId)
+
+def acceptOnIncomingCallHangup(sflphone):
+    time.sleep(0.2)
+    sflphone.Accept(sflphone.currentCallId)
+    time.sleep(0.5)
+    sflphone.HangUp(sflphone.currentCallId)
 
-class SflPhoneTests(SflPhoneCtrlSimple):
+class SflPhoneTests():
 
+    def __init__(self, sfl):
+        print "Create test instance"
+        self.sflphone = sfl
 
     def test_get_allaccounts_methods(self):
 
@@ -26,37 +48,6 @@ class SflPhoneTests(SflPhoneCtrlSimple):
         for account in self.getAllIaxAccounts():
             print "  " + account
 
-    def test_make_iptoip_call(self):
-        """Make a call to a server (sipp) on port 5062"""
-        i = 0
-        while(i < 10):
-
-            callid = self.Call("sip:test@127.0.0.1:5062")
-            time.sleep(0.4)
-            
-            self.HangUp(callid)            
-            time.sleep(0.4)
-
-            i = i+1
-
-    def test_make_account_call(self):
-        """Register an account on a remote server and make several calls"""
-
-        self.setAccount("Account:1258495784");
-        time.sleep(3)
-
-        i = 0
-        while(i < 50):
-
-            callid = self.Call("5000")
-            time.sleep(0.4)
-
-            self.HangUp(callid)
-            time.sleep(0.4)
-
-            i = i+1
-
-
     def test_create_account(self):
         """Create a new sip account"""
 
@@ -71,7 +62,7 @@ class SflPhoneTests(SflPhoneCtrlSimple):
                       PASSWORD:"1234"}
 
 
-        accountID = self.addAccount(accDetails)
+        accountID = self.sflphone.addAccount(accDetails)
         print "New Account ID " + accountID
 
         return accountID
@@ -80,31 +71,130 @@ class SflPhoneTests(SflPhoneCtrlSimple):
     def test_remove_account(self, accountID):
         """Remove test account"""
 
-        self.removeAccount(accountID)
+        self.sflphone.removeAccount(accountID)
         print "Account with ID " + accountID + " removed"
 
 
+    def test_ip2ip_send_hangup(self):
+        """Make a call to a server (sipp) on port 5062"""
+        i = 0
+        while(i < 10):
 
-# Open sflphone and connect to sflphoned through dbus 
-sflphone = SflPhoneTests()
+            callid = self.sflphone.Call("sip:test@127.0.0.1:5062")
+            time.sleep(0.5)
+            
+            self.sflphone.HangUp(callid)            
+            time.sleep(0.5)
 
-sflphone.start()
+            i = i+1
 
-# Test 1: Makke approximately one IP2IP call per second 
-# to a sipp uas on local addrress
-#sflphone.test_make_iptoip_call()
+        del self.sflphone
 
 
+    def test_ip2ip_send_peer_hungup(self):
+        """Make a call to a server (sipp) on port 5062"""
+        i = 0
+        while(i < 1):
 
-# Test 2: - Create an account on Asterisk
-#         - Wait for incoming calls
-#         - Once a call is received, answer
-#         - The call should then be hung up by caller  
+            callid = self.sflphone.Call("sip:test@127.0.0.1:5062")
+            time.sleep(1.0)
+
+            i = i+1
 
-# accountID = sflphone.test_create_account()
-# sflphone.test_make_account_call()
-# time.sleep(0.3)
+        del self.sflphone
 
 
+    def test_ip2ip_recv_hangup(self):
+        """Wait for calls, answer then hangup"""
+
+        # Add callback for this test
+        self.sflphone.onIncomingCall_cb = acceptOnIncomingCallHangup
+
+        # Start Glib mainloop
+        self.sflphone.start()
+
+    def test_ip2ip_recv_peer_hungup(self):
+        """Wait for calls, answer, peer hangup"""
+        # Add callback for this test
+        self.sflphone.onIncomingCall_cb = acceptOnIncomingCall
+
+        # Start Glib mainloop
+        self.sflphone.start()
+
+    def test_account_send_hangup(self):
+        """Send new account call, hangup once peer answered"""
+        print "test account send hangup"
+        i = 0
+        while(i < 10):
+
+            callid = self.sflphone.Call("27182")
+            time.sleep(0.5)
+            
+            self.sflphone.HangUp(callid)            
+            time.sleep(0.5)
+
+            i = i+1
+        print "account hangup done"
+
+        del self.sflphone
+
+    def test_account_recv_call_peer_hungup(self):
+        """Register an account and wait for incoming calls"""
+
+        # Add callback for this test
+        self.sflphone.onIncomingCall_cb = acceptOnIncomingCall
+
+        # Start Glib mainloop
+        self.sflphone.start()
+
+    
+
+#    def test_account_send_call_peer_hungup(self):
+#        """Register an account on a remote server and make several calls"""
+#
+#        self.setAccount("Account:1258495784");
+#        time.sleep(3)
+#
+#        i = 0
+#        while(i < 50):
+#
+#            callid = self.Call("5000")
+#            time.sleep(0.4)
+#
+#            self.HangUp(callid)
+#            time.sleep(0.4)
+#
+#            i = i+1
+
+
+
+# Open sflphone and connect to sflphoned through dbus
+sflphone = SflPhoneCtrlSimple(True)
+
+# Init test suite 
+testsuite = SflPhoneTests(sflphone)
+
+# Register the first account available, should be the test account
+sflphone.setFirstRegisteredAccount();
+
+
+# SCENARIO 1: IP2IP Normal flow calls
+
+# Test 1: - Send an IP2IP call
+#         - Hangup
+# testsuite.test_ip2ip_send_hangup()
+# testsuite.test_ip2ip_send_peer_hungup()
+# testsuite.test_ip2ip_recv_hangup()
+# testsuite.test_ip2ip_recv_peer_hungup()
+
+
+
+# SCENARIO 2: IP2IP Normal flow calls
+
+# Test 1: - Create an account on Asterisk
+#         - Wait for incoming calls
+#         - Answer
+#         - Call is hanged up by calle
+testsuite.test_account_send_hangup()
+# testsuite.test_account_recv_call_peer_hungup()
 
-# sflphone.test_remove_account(accountID)
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index d73b0ef4e2..a073e6ca04 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -23,8 +23,10 @@ import os
 import random
 from traceback import print_exc
 
+import gtk
 import gobject
 from gobject import GObject
+from gobject import MainLoop
 
 import getopt
 
@@ -44,13 +46,18 @@ except ImportError, e:
 
 
 class SflPhoneCtrlSimple(Thread):
-    """Simple class for controlling SflPhoned through DBUS"""
+    """ Simple class for controlling SflPhoned through DBUS
+
+        If option testSuite (ts) is put to true, 
+	simple actions are implemented on incoming call.
+    """ 
 
     # list of active calls (known by the client)
     activeCalls = {}
 
-    def __init__(self, name=sys.argv[0]):
-        Thread.__init__(self)
+    def __init__(self, test=False, name=sys.argv[0]):
+        print "Create SFLphone instance"
+	Thread.__init__(self)
        	# current active account
         self.account = None
         # client name
@@ -58,13 +65,19 @@ class SflPhoneCtrlSimple(Thread):
         # client registered to sflphoned ?
         self.registered = False
         self.register()
-	self.event = Event()
 	self.currentCallId = ""
+	self.loop = MainLoop()
+
+	self.test = test
+	self.onIncomingCall_cb = None
+	self.event = Event()
+	
 
 
     def __del__(self):
         if self.registered:
             self.unregister()
+	self.loop.quit()
 
 
     def register(self):
@@ -112,11 +125,13 @@ class SflPhoneCtrlSimple(Thread):
             raise SPdaemonError("Client registration failed")
 
         try:
+            print "Adding Incoming call method"
             proxy_callmgr.connect_to_signal('incomingCall', self.onIncomingCall)
             proxy_callmgr.connect_to_signal('callStateChanged', self.onCallStateChanged)
         except dbus.DBusException, e:
             print e
-			
+
+
 
     def unregister(self):
 
@@ -134,6 +149,21 @@ class SflPhoneCtrlSimple(Thread):
         return self.registered
 
 
+    def getEvent(self):
+        return self.event
+
+    def wait(self):
+        self.event.wait()
+
+    def isSet(self):
+        self.event.isSet()
+
+    def set(self):
+        self.event.set()
+
+    def clear(self):
+        self.event.clear()
+
     #
     # Signal handling
     #
@@ -143,8 +173,14 @@ class SflPhoneCtrlSimple(Thread):
         print "Incoming call: " + account + ", " + callid + ", " + to
         self.activeCalls[callid] = {'Account': account, 'To': to, 'State': '' }
 	self.currentCallId = callid
-	self.event.set()
-	Answer(callid)
+
+	if(self.test):
+            # TODO fix this bug in daemon, cannot answer too fast
+            time.sleep(0.5)
+	    if self.onIncomingCall_cb(self) is not None:
+                self.onIncomingCall_cb(self)
+	
+
 
     # On call state changed event, set the values for new calls, 
     # or delete the call from the list of active calls
@@ -520,7 +556,7 @@ class SflPhoneCtrlSimple(Thread):
 
         if callid is None or callid == "":
             raise SflPhoneError("Invalid callID")
-
+	
         self.callmanager.accept(callid)
 
 
@@ -566,12 +602,5 @@ class SflPhoneCtrlSimple(Thread):
         callid = m.hexdigest()
 	return callid
 
-
     def run(self):
-
-        while(True):
-            print "Waiting Event"
-	    self.event.wait()
-	    sflphone.Accept(sflphone.currentCallId)
-	    self.event.clear()
-	    print "Call Accepted"
+        self.loop.run()
-- 
GitLab


From da57d49fb0eb127ea17a8150db1ed46675f5c64a Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 9 Mar 2010 17:23:59 -0500
Subject: [PATCH 111/160] [#2536] Handle account calls with/without reinvite

---
 sippxml/account_uac_send_hangup.xml      |  14 +-
 sippxml/account_uac_send_peer_hungup.xml | 196 +++++++++++++++++++++++
 sippxml/account_uas_recv_hangup.xml      | 121 ++++++++++++++
 sippxml/account_uas_recv_peer_hungup.xml |  75 ++++-----
 sippxml/account_uas_register.xml         |  63 ++++++++
 sippxml/testsuiteuac.sh                  |  58 ++++++-
 tools/pysflphone/pysflphone_testdbus.py  |  53 +++---
 7 files changed, 504 insertions(+), 76 deletions(-)
 create mode 100644 sippxml/account_uac_send_peer_hungup.xml
 create mode 100644 sippxml/account_uas_recv_hangup.xml
 create mode 100644 sippxml/account_uas_register.xml

diff --git a/sippxml/account_uac_send_hangup.xml b/sippxml/account_uac_send_hangup.xml
index b07251cb21..7a35a65df0 100644
--- a/sippxml/account_uac_send_hangup.xml
+++ b/sippxml/account_uac_send_hangup.xml
@@ -24,12 +24,12 @@
 
       REGISTER sip:[remote_ip] SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forward: 70
-      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]:[remote_port]>
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]>
       Call-ID: REG///[call_id]
       CSeq: 1 REGISTER
-      Contact: <sip:27182@[remote_ip]:[remote_port]>
+      Contact: <sip:27182@[local_ip]:[local_port]>
       Content-Length: 0
       Expires: 300
 
@@ -45,11 +45,11 @@
       REGISTER sip:[remote_ip] SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
       Max-Forwards: 70
-      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]:[remote_port]>
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]>
       Call-ID: REG///[call_id]
       CSeq: 2 REGISTER
-      Contact: <sip:27182@[remote_ip]:[remote_port]>
+      Contact: <sip:27182@[local_ip]:[local_port]>
       Content-Length: 0
       Expires: 300
       [authentication username=27182 password=1234]
diff --git a/sippxml/account_uac_send_peer_hungup.xml b/sippxml/account_uac_send_peer_hungup.xml
new file mode 100644
index 0000000000..c79e2f348a
--- /dev/null
+++ b/sippxml/account_uac_send_peer_hungup.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]>
+      Call-ID: REG///[call_id]
+      CSeq: 1 REGISTER
+      Contact: <sip:27182@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 300
+
+    ]]>
+  </send>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]>
+      Call-ID: REG///[call_id]
+      CSeq: 2 REGISTER
+      Contact: <sip:27182@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 300
+      [authentication username=27182 password=1234]
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+  <pause milliseconds="200"/>
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:2000@[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]>
+      Call-ID: [call_id]
+      CSeq: 3 INVITE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      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>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <pause milliseconds="200"/>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:27182@[remote_ip] SIP/2.0
+      Max-Forwards: 70
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]>
+      Call-ID: [call_id]
+      CSeq: 4 ACK
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:2000@[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:27182@:[remote_ip]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]>
+      Call-ID: [call_id]
+      CSeq: 5 INVITE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Type: application/sdp
+      Content-Length: [len]
+      [authentication username=27182 password=1234]
+
+      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">
+  </recv>
+
+  <recv response="180">
+  </recv>
+
+
+  <recv response="200">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:2000@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:2000@[remote_ip]>
+      Call-ID: [call_id]
+      CSeq: 5 ACK
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="BYE">
+  </recv>
+
+
+  <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-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>
+
+  <pause milliseconds="1000"/>
+
+</scenario>
diff --git a/sippxml/account_uas_recv_hangup.xml b/sippxml/account_uas_recv_hangup.xml
new file mode 100644
index 0000000000..101e6f4c97
--- /dev/null
+++ b/sippxml/account_uas_recv_hangup.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <recv request="INVITE">
+  </recv>
+
+  <send>
+   <![CDATA[
+
+     SIP/2.0 180 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>
+
+  <pause milliseconds="200"/>
+
+  <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-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>
+
+  <recv request="ACK">
+  </recv>
+
+  <recv request="INVITE">
+  </recv>
+
+  <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-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>
+
+  <recv request="ACK">
+  </recv>
+
+  <pause milliseconds="500"/>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:2000@192.168.50.79 SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: <sip:27182@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:2000@192.168.50.79:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 6 BYE
+      Contact: sip:27182@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+</scenario>
diff --git a/sippxml/account_uas_recv_peer_hungup.xml b/sippxml/account_uas_recv_peer_hungup.xml
index cfa9acb151..e1a0562bf2 100644
--- a/sippxml/account_uas_recv_peer_hungup.xml
+++ b/sippxml/account_uas_recv_peer_hungup.xml
@@ -19,54 +19,9 @@
 
 <scenario name="accountcall_client">
 
-  <send retrans="500">
-    <![CDATA[
-
-      REGISTER sip:[remote_ip] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forward: 70
-      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]:[remote_port]>
-      Call-ID: REG///[call_id]
-      CSeq: 1 REGISTER
-      Contact: <sip:27182@[remote_ip]:[remote_port]>
-      Content-Length: 0
-      Expires: 300
-
-    ]]>
-  </send>
-
-  <recv response="401" auth="true">
-  </recv>
-
-  <send retrans="500">
-    <![CDATA[
-
-      REGISTER sip:[remote_ip] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forwards: 70
-      From: <sip:27182@[remote_ip]:[remote_port]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]:[remote_port]>
-      Call-ID: REG///[call_id]
-      CSeq: 2 REGISTER
-      Contact: <sip:27182@[remote_ip]:[remote_port]>
-      Content-Length: 0
-      Expires: 300
-      [authentication username=27182 password=1234]
-
-    ]]>
-  </send>
-
-  <recv response="200">
-  </recv>
-
-
   <recv request="INVITE">
   </recv>
 
-  <recv response="401" auth="true">
-  </recv>
-
   <send>
    <![CDATA[
 
@@ -111,6 +66,36 @@
   <recv request="ACK">
   </recv>
 
+  <recv request="INVITE">
+  </recv>
+
+  <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-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>
+
+  <recv request="ACK">
+  </recv>
+
   <recv request="BYE">
   </recv>
 
diff --git a/sippxml/account_uas_register.xml b/sippxml/account_uas_register.xml
new file mode 100644
index 0000000000..e4ebb81227
--- /dev/null
+++ b/sippxml/account_uas_register.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]>
+      Call-ID: REG///[call_id]
+      CSeq: 1 REGISTER
+      Contact: <sip:27182@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 300
+
+    ]]>
+  </send>
+
+  <recv response="401" auth="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      REGISTER sip:[remote_ip] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      Max-Forwards: 70
+      From: <sip:27182@[remote_ip]>;tag=[call_number]
+      To: <sip:27182@[remote_ip]>
+      Call-ID: REG///[call_id]
+      CSeq: 2 REGISTER
+      Contact: <sip:27182@[local_ip]:[local_port]>
+      Content-Length: 0
+      Expires: 300
+      [authentication username=27182 password=1234]
+
+    ]]>
+  </send>
+
+  <recv response="200">
+  </recv>
+
+</scenario>
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index c63983c1e0..42a45db683 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -93,6 +93,9 @@ function test_account_send_hangup {
     # wait some time to make sure client is bound
     # sleep 1;
 
+    # process only one registration
+    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+
     # start sipp client and send calls 
     sipp -sf account_uas_recv_peer_hungup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
 
@@ -100,6 +103,52 @@ function test_account_send_hangup {
     # bashtrap
 }
 
+function test_account_send_peer_hungup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # process only one registration
+    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+
+    # start sipp client and send calls 
+    sipp -sf account_uas_recv_hangup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    # bashtrap
+}
+
+function test_account_recv_hangup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # process only one registration
+    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+
+    # start sipp client and send calls 
+    sipp -sf account_uac_send_peer_hungup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    # bashtrap
+}
+
 function test_account_recv_peer_hungup {
 
     # start sflphoned
@@ -113,6 +162,9 @@ function test_account_recv_peer_hungup {
     # wait some time to make sure client is bound
     # sleep 1;
 
+    # process only one registration
+#    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+
     # start sipp client and send calls 
     sipp -sf account_uac_send_hangup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
 
@@ -137,5 +189,7 @@ bashtrap()
 # test_ip2ip_recv_peer_hungup
 
 # SCENARIO X: Normal flow calls (Account)
-test_account_send_hangup
-# test_account_recv_peer_hungup
\ No newline at end of file
+# test_account_send_hangup
+# test_account_send_peer_hungup
+# test_account_recv_hangup
+test_account_recv_peer_hungup
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 563b683456..733fbf5bf3 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -113,6 +113,7 @@ class SflPhoneTests():
         # Start Glib mainloop
         self.sflphone.start()
 
+
     def test_ip2ip_recv_peer_hungup(self):
         """Wait for calls, answer, peer hangup"""
         # Add callback for this test
@@ -121,6 +122,7 @@ class SflPhoneTests():
         # Start Glib mainloop
         self.sflphone.start()
 
+
     def test_account_send_hangup(self):
         """Send new account call, hangup once peer answered"""
         print "test account send hangup"
@@ -134,37 +136,42 @@ class SflPhoneTests():
             time.sleep(0.5)
 
             i = i+1
-        print "account hangup done"
 
         del self.sflphone
 
-    def test_account_recv_call_peer_hungup(self):
+
+    def test_account_send_peer_hungup(self):
+        """Send new account call, hangup once peer answered"""
+        print "test account send hangup"
+        i = 0
+        while(i < 10):
+
+            callid = self.sflphone.Call("27182")
+            time.sleep(1.0)
+
+            i = i+1
+
+        del self.sflphone
+
+
+    def test_account_recv_hangup(self):
         """Register an account and wait for incoming calls"""
 
         # Add callback for this test
-        self.sflphone.onIncomingCall_cb = acceptOnIncomingCall
+        self.sflphone.onIncomingCall_cb = acceptOnIncomingCallHangup
 
         # Start Glib mainloop
         self.sflphone.start()
 
-    
 
-#    def test_account_send_call_peer_hungup(self):
-#        """Register an account on a remote server and make several calls"""
-#
-#        self.setAccount("Account:1258495784");
-#        time.sleep(3)
-#
-#        i = 0
-#        while(i < 50):
-#
-#            callid = self.Call("5000")
-#            time.sleep(0.4)
-#
-#            self.HangUp(callid)
-#            time.sleep(0.4)
-#
-#            i = i+1
+    def test_account_recv_peer_hungup(self):
+        """Register an account and wait for incoming calls"""
+
+        # Add callback for this test
+        self.sflphone.onIncomingCall_cb = acceptOnIncomingCall
+
+        # Start Glib mainloop
+        self.sflphone.start()
 
 
 
@@ -195,6 +202,8 @@ sflphone.setFirstRegisteredAccount();
 #         - Wait for incoming calls
 #         - Answer
 #         - Call is hanged up by calle
-testsuite.test_account_send_hangup()
-# testsuite.test_account_recv_call_peer_hungup()
+# testsuite.test_account_send_hangup()
+# testsuite.test_account_send_peer_hungup()
+# testsuite.test_account_recv_hangup()
+testsuite.test_account_recv_peer_hungup()
 
-- 
GitLab


From dac99c98f16fdd2449e0f4d5121560cc3c17b724 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 9 Mar 2010 17:47:04 -0500
Subject: [PATCH 112/160] [#2536] No need to have registration in account_uac
 scripts

---
 sippxml/account_uac_send_hangup.xml      | 41 ------------------------
 sippxml/account_uac_send_peer_hungup.xml | 41 ------------------------
 sippxml/testsuiteuac.sh                  |  2 +-
 3 files changed, 1 insertion(+), 83 deletions(-)

diff --git a/sippxml/account_uac_send_hangup.xml b/sippxml/account_uac_send_hangup.xml
index 7a35a65df0..8971769c59 100644
--- a/sippxml/account_uac_send_hangup.xml
+++ b/sippxml/account_uac_send_hangup.xml
@@ -19,47 +19,6 @@
 
 <scenario name="accountcall_client">
 
-  <send retrans="500">
-    <![CDATA[
-
-      REGISTER sip:[remote_ip] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forwards: 70
-      From: <sip:27182@[remote_ip]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]>
-      Call-ID: REG///[call_id]
-      CSeq: 1 REGISTER
-      Contact: <sip:27182@[local_ip]:[local_port]>
-      Content-Length: 0
-      Expires: 300
-
-    ]]>
-  </send>
-
-  <recv response="401" auth="true">
-  </recv>
-
-  <send retrans="500">
-    <![CDATA[
-
-      REGISTER sip:[remote_ip] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forwards: 70
-      From: <sip:27182@[remote_ip]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]>
-      Call-ID: REG///[call_id]
-      CSeq: 2 REGISTER
-      Contact: <sip:27182@[local_ip]:[local_port]>
-      Content-Length: 0
-      Expires: 300
-      [authentication username=27182 password=1234]
-
-    ]]>
-  </send>
-
-  <recv response="200">
-  </recv>
-
   <pause milliseconds="200"/>
 
   <send retrans="500">
diff --git a/sippxml/account_uac_send_peer_hungup.xml b/sippxml/account_uac_send_peer_hungup.xml
index c79e2f348a..716da9dd6d 100644
--- a/sippxml/account_uac_send_peer_hungup.xml
+++ b/sippxml/account_uac_send_peer_hungup.xml
@@ -19,47 +19,6 @@
 
 <scenario name="accountcall_client">
 
-  <send retrans="500">
-    <![CDATA[
-
-      REGISTER sip:[remote_ip] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forwards: 70
-      From: <sip:27182@[remote_ip]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]>
-      Call-ID: REG///[call_id]
-      CSeq: 1 REGISTER
-      Contact: <sip:27182@[local_ip]:[local_port]>
-      Content-Length: 0
-      Expires: 300
-
-    ]]>
-  </send>
-
-  <recv response="401" auth="true">
-  </recv>
-
-  <send retrans="500">
-    <![CDATA[
-
-      REGISTER sip:[remote_ip] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      Max-Forwards: 70
-      From: <sip:27182@[remote_ip]>;tag=[call_number]
-      To: <sip:27182@[remote_ip]>
-      Call-ID: REG///[call_id]
-      CSeq: 2 REGISTER
-      Contact: <sip:27182@[local_ip]:[local_port]>
-      Content-Length: 0
-      Expires: 300
-      [authentication username=27182 password=1234]
-
-    ]]>
-  </send>
-
-  <recv response="200">
-  </recv>
-
   <pause milliseconds="200"/>
 
   <send retrans="500">
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 42a45db683..e131139e88 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -163,7 +163,7 @@ function test_account_recv_peer_hungup {
     # sleep 1;
 
     # process only one registration
-#    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
 
     # start sipp client and send calls 
     sipp -sf account_uac_send_hangup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
-- 
GitLab


From b3605548273396ecd64e851668e0a6e493143fc7 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Mar 2010 14:40:43 -0500
Subject: [PATCH 113/160] [#2536] Parse From tag from previous transaction and
 use it for BYE request

---
 sflphone-common/src/sip/sipvoiplink.cpp |  2 ++
 sippxml/ip2ip_uas_recv_hangup.xml       | 42 +++++++++++++++++++++----
 sippxml/ip2ip_uas_recv_peer_hungup.xml  |  5 +--
 sippxml/testsuiteuac.sh                 |  8 ++---
 tools/pysflphone/pysflphone_testdbus.py |  4 +--
 5 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index a7058bbb7b..a2755680a0 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -921,6 +921,8 @@ SIPVoIPLink::peerHungup (const CallID& id)
     pjsip_tx_data *tdata = NULL;
     SIPCall* call;
 
+    _info("SIP: Peer hungup");
+
     call = getSIPCall (id);
 
     if (call==0) {
diff --git a/sippxml/ip2ip_uas_recv_hangup.xml b/sippxml/ip2ip_uas_recv_hangup.xml
index 571dda97cc..0b411fd3a5 100644
--- a/sippxml/ip2ip_uas_recv_hangup.xml
+++ b/sippxml/ip2ip_uas_recv_hangup.xml
@@ -16,7 +16,7 @@
      [last_To:];tag=[call_number]
      [last_Call-ID:]
      [last_CSeq:]
-     Contact: <sip:127.0.1.1:5062;transport=[transport]>
+     Contact: <sip:[local_ip]:[local_port];transport=[transport]>
      Content-Length: 0
 
    ]]>
@@ -48,20 +48,50 @@
 
 
  <recv request="ACK">
+   
+   <action>
+    <ereg regexp="tag=.*" search_in="hdr" header="From:" check_it="true" assign_to="1" />
+  </action>
+  
  </recv>
 
  <pause milliseconds="500"/>
 
+ <!--
+ <send retrans="500">
+    <![CDATA[
+
+      BYE sip:[service] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:test@[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:alexandresavard@alexandresavard-desktop>;[$1]
+      [last_Call-ID:]
+      CSeq: [cseq] BYE
+      Contact: <sip:test@[local_ip]:[local_port]>
+      Max-Forwards: 70
+      Subject: Functional Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+  -->
+
+ <!-- [last_From:] -->
+ <!-- [last_To:] -->
+
+ <!-- From: <sip:test@[local_ip]:[local_port]>;tag=[call_number] -->
+ <!-- To: <sip:alexandresavard@alexandresavard-desktop>;[$1] -->
+ 
  <send retrans="500">
     <![CDATA[
 
-      BYE sip:127.0.0.1:5060;transport=[transport] SIP/2.0
-      [last_Via:]
-      [last_From:]
-      [last_To:]
+      BYE sip:[service] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
+      From: <sip:[local_ip]:[local_port]>;tag=[call_number]
+      To: <sip:[remote_ip]:[remote_port]>;[$1]
       [last_Call-ID:]
       CSeq: [cseq] BYE
-      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Contact: <sip:test@[local_ip]:[local_port]>
       Max-Forwards: 70
       Subject: Functional Test
       Content-Length: 0
diff --git a/sippxml/ip2ip_uas_recv_peer_hungup.xml b/sippxml/ip2ip_uas_recv_peer_hungup.xml
index 4b615f216c..9f2721f5dc 100644
--- a/sippxml/ip2ip_uas_recv_peer_hungup.xml
+++ b/sippxml/ip2ip_uas_recv_peer_hungup.xml
@@ -46,10 +46,7 @@
    ]]>
 </send>
 
- <recv request="ACK"
-       optional="true"
-       rtd="true"
-       crlf="true">
+ <recv request="ACK" optional="true" rtd="true" crlf="true">
  </recv>
 
  <recv request="BYE">
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index e131139e88..a5a92cb369 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -6,7 +6,7 @@ SERVERPORT=5062
 function test_ip2ip_send_hangup {
 
     # start sipp server to receive calls from sflphone
-    sipp -sf ip2ip_uas_recv_peer_hungup.xml -p ${SERVERPORT}
+    sipp -sf ip2ip_uas_recv_peer_hungup.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT}
 
     # start sflphoned
     # /usr/lib/sflphone/sflphoned& 
@@ -24,7 +24,7 @@ function test_ip2ip_send_hangup {
 function test_ip2ip_send_peer_hungup {
 
     # start sipp server to receive calls from sflphone and then hangup
-    sipp -sf ip2ip_uas_recv_hangup.xml -p ${SERVERPORT}
+    sipp -sf ip2ip_uas_recv_hangup.xml 127.0.0.1:5060 -s 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT}
 
     # start sflphoned
     # /usr/lib/sflphone/sflphoned& 
@@ -184,7 +184,7 @@ bashtrap()
 
 # SCENARIO 1: Normal flow calls (IP2IP)
 # test_ip2ip_send_hangup
-# test_ip2ip_send_peer_hungup
+test_ip2ip_send_peer_hungup
 # test_ip2ip_recv_hangup
 # test_ip2ip_recv_peer_hungup
 
@@ -192,4 +192,4 @@ bashtrap()
 # test_account_send_hangup
 # test_account_send_peer_hungup
 # test_account_recv_hangup
-test_account_recv_peer_hungup
\ No newline at end of file
+# test_account_recv_peer_hungup
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 733fbf5bf3..ba31aec08b 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -190,7 +190,7 @@ sflphone.setFirstRegisteredAccount();
 # Test 1: - Send an IP2IP call
 #         - Hangup
 # testsuite.test_ip2ip_send_hangup()
-# testsuite.test_ip2ip_send_peer_hungup()
+testsuite.test_ip2ip_send_peer_hungup()
 # testsuite.test_ip2ip_recv_hangup()
 # testsuite.test_ip2ip_recv_peer_hungup()
 
@@ -205,5 +205,5 @@ sflphone.setFirstRegisteredAccount();
 # testsuite.test_account_send_hangup()
 # testsuite.test_account_send_peer_hungup()
 # testsuite.test_account_recv_hangup()
-testsuite.test_account_recv_peer_hungup()
+# testsuite.test_account_recv_peer_hungup()
 
-- 
GitLab


From e445b3c823e553d4fdb2d0ebf56dd84e57e96d31 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Mar 2010 15:54:33 -0500
Subject: [PATCH 114/160] [#2536] Fix small issue for sipp script

---
 sippxml/account_uas_recv_peer_hungup.xml |  5 ++--
 sippxml/ip2ip_uac_send_hangup.xml        |  9 ++++---
 sippxml/ip2ip_uac_send_peer_hungup.xml   |  2 +-
 sippxml/ip2ip_uas_recv_hangup.xml        | 31 +++---------------------
 sippxml/testsuiteuac.sh                  |  4 +--
 tools/pysflphone/pysflphone_testdbus.py  | 12 ++++-----
 6 files changed, 21 insertions(+), 42 deletions(-)

diff --git a/sippxml/account_uas_recv_peer_hungup.xml b/sippxml/account_uas_recv_peer_hungup.xml
index e1a0562bf2..c91230c7fc 100644
--- a/sippxml/account_uas_recv_peer_hungup.xml
+++ b/sippxml/account_uas_recv_peer_hungup.xml
@@ -37,8 +37,6 @@
    ]]>
   </send>
 
-  <pause milliseconds="200"/>
-
   <send retrans="500">
    <![CDATA[
 
@@ -69,6 +67,9 @@
   <recv request="INVITE">
   </recv>
 
+  <pause milliseconds="200">
+  </recv>
+
   <send retrans="500">
    <![CDATA[
 
diff --git a/sippxml/ip2ip_uac_send_hangup.xml b/sippxml/ip2ip_uac_send_hangup.xml
index b38cf17361..49cc63fca0 100644
--- a/sippxml/ip2ip_uac_send_hangup.xml
+++ b/sippxml/ip2ip_uac_send_hangup.xml
@@ -53,15 +53,18 @@
 
 
   <recv response="200">
+    <action>
+      <ereg regexp="tag=.*" search_in="hdr" header="To:" check_it="true" assign_to="1" />
+    </action>
   </recv>
 
   <send>
     <![CDATA[
 
-      ACK sip:192.168.50.79 SIP/2.0
+      ACK sip:[remote_ip] SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
       From: <sip:[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:192.168.50.79:[remote_port]>
+      To: <sip:[remote_ip]:[remote_port]>;tag=[$1]
       Call-ID: [call_id]
       CSeq: 2 ACK
       Contact: sip:[local_ip]:[local_port]
@@ -78,7 +81,7 @@
       BYE sip:192.168.50.79 SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
       From: <sip:[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:192.168.50.79:[remote_port]>
+      To: <sip:[remote_ip]:[remote_port]>;tag=[$1]
       Call-ID: [call_id]
       CSeq: 3 BYE
       Contact: sip:[local_ip]:[local_port]
diff --git a/sippxml/ip2ip_uac_send_peer_hungup.xml b/sippxml/ip2ip_uac_send_peer_hungup.xml
index 3ffd02a372..4e811e3826 100644
--- a/sippxml/ip2ip_uac_send_peer_hungup.xml
+++ b/sippxml/ip2ip_uac_send_peer_hungup.xml
@@ -60,7 +60,7 @@
       ACK sip:192.168.50.79 SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
       From: <sip:[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:192.168.50.79:[remote_port]>
+      To: <sip:[remote_ip]:[remote_port]>
       Call-ID: [call_id]
       CSeq: 2 ACK
       Contact: sip:[local_ip]:[local_port]
diff --git a/sippxml/ip2ip_uas_recv_hangup.xml b/sippxml/ip2ip_uas_recv_hangup.xml
index 0b411fd3a5..4e86b47480 100644
--- a/sippxml/ip2ip_uas_recv_hangup.xml
+++ b/sippxml/ip2ip_uas_recv_hangup.xml
@@ -46,41 +46,16 @@
    ]]>
  </send>
 
+ <!-- tag from From: header is required to build the To: header in 
+   -- Bye request. --> 
 
- <recv request="ACK">
-   
+ <recv request="ACK">   
    <action>
     <ereg regexp="tag=.*" search_in="hdr" header="From:" check_it="true" assign_to="1" />
   </action>
-  
  </recv>
 
  <pause milliseconds="500"/>
-
- <!--
- <send retrans="500">
-    <![CDATA[
-
-      BYE sip:[service] SIP/2.0
-      Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch]
-      From: <sip:test@[local_ip]:[local_port]>;tag=[call_number]
-      To: <sip:alexandresavard@alexandresavard-desktop>;[$1]
-      [last_Call-ID:]
-      CSeq: [cseq] BYE
-      Contact: <sip:test@[local_ip]:[local_port]>
-      Max-Forwards: 70
-      Subject: Functional Test
-      Content-Length: 0
-
-    ]]>
-  </send>
-  -->
-
- <!-- [last_From:] -->
- <!-- [last_To:] -->
-
- <!-- From: <sip:test@[local_ip]:[local_port]>;tag=[call_number] -->
- <!-- To: <sip:alexandresavard@alexandresavard-desktop>;[$1] -->
  
  <send retrans="500">
     <![CDATA[
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index a5a92cb369..50f7fe8eaa 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -184,12 +184,12 @@ bashtrap()
 
 # SCENARIO 1: Normal flow calls (IP2IP)
 # test_ip2ip_send_hangup
-test_ip2ip_send_peer_hungup
+# test_ip2ip_send_peer_hungup
 # test_ip2ip_recv_hangup
 # test_ip2ip_recv_peer_hungup
 
 # SCENARIO X: Normal flow calls (Account)
-# test_account_send_hangup
+test_account_send_hangup
 # test_account_send_peer_hungup
 # test_account_recv_hangup
 # test_account_recv_peer_hungup
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index ba31aec08b..517e1cda02 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -127,17 +127,17 @@ class SflPhoneTests():
         """Send new account call, hangup once peer answered"""
         print "test account send hangup"
         i = 0
-        while(i < 10):
+        while(i < 1):
 
             callid = self.sflphone.Call("27182")
-            time.sleep(0.5)
+            time.sleep(1.0)
             
             self.sflphone.HangUp(callid)            
-            time.sleep(0.5)
+            time.sleep(1.0)
 
             i = i+1
 
-        del self.sflphone
+        # del self.sflphone
 
 
     def test_account_send_peer_hungup(self):
@@ -190,7 +190,7 @@ sflphone.setFirstRegisteredAccount();
 # Test 1: - Send an IP2IP call
 #         - Hangup
 # testsuite.test_ip2ip_send_hangup()
-testsuite.test_ip2ip_send_peer_hungup()
+# testsuite.test_ip2ip_send_peer_hungup()
 # testsuite.test_ip2ip_recv_hangup()
 # testsuite.test_ip2ip_recv_peer_hungup()
 
@@ -202,7 +202,7 @@ testsuite.test_ip2ip_send_peer_hungup()
 #         - Wait for incoming calls
 #         - Answer
 #         - Call is hanged up by calle
-# testsuite.test_account_send_hangup()
+testsuite.test_account_send_hangup()
 # testsuite.test_account_send_peer_hungup()
 # testsuite.test_account_recv_hangup()
 # testsuite.test_account_recv_peer_hungup()
-- 
GitLab


From 658b7c0ee4d9eb7fb5d4f9f5f6961418319e6b9d Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 10 Mar 2010 17:13:35 -0500
Subject: [PATCH 115/160] [#2536] Functional test, Hold / off Hold

---
 sippxml/ip2ip_uas_recv_hold_offhold.xml | 187 ++++++++++++++++++++++++
 sippxml/testsuiteuac.sh                 |  30 +++-
 tools/pysflphone/pysflphone_testdbus.py |  57 +++++++-
 tools/pysflphone/sflphonectrlsimple.py  |  16 +-
 4 files changed, 273 insertions(+), 17 deletions(-)
 create mode 100644 sippxml/ip2ip_uas_recv_hold_offhold.xml

diff --git a/sippxml/ip2ip_uas_recv_hold_offhold.xml b/sippxml/ip2ip_uas_recv_hold_offhold.xml
new file mode 100644
index 0000000000..568a97a9e6
--- /dev/null
+++ b/sippxml/ip2ip_uas_recv_hold_offhold.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+
+<scenario name="UAS HOLD/OFFHOLD">
+
+ <!-- Receive a new call -->
+
+ <recv request="INVITE" crlf="true">
+   <action>
+    <ereg regexp="sendrecv" search_in="body" check_it="true" assign_to="1"/> 
+    <log message="Media is [$1]"/>
+   </action>
+ </recv>
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+ <recv request="ACK" optional="true" rtd="true" crlf="true">
+ </recv>
+
+ <!-- This call is now on HOLD: sendonly tell to PBX to send music on hold-->
+
+ <recv request="INVITE" crlf="true">
+   <action>
+    <ereg regexp="sendonly" search_in="body" check_it="true" assign_to="2"/>
+    <log message="Media is [$2]"/>
+   </action>
+ </recv>
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+ <recv request="ACK" optional="true" rtd="true" crlf="true">
+ </recv>
+
+ <!-- OFFHOLD this call -->
+
+ <recv request="INVITE" crlf="true">
+   <action>
+    <ereg regexp="sendrecv" search_in="body" check_it="true" assign_to="3"/>
+    <log message="Media is [$3]"/>
+   </action>
+ </recv>
+
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+ <recv request="ACK" optional="true" rtd="true" crlf="true">
+ </recv>
+
+ <!-- Hangup this call -->
+
+ <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> 
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 50f7fe8eaa..4ea5d5e16e 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -172,6 +172,27 @@ function test_account_recv_peer_hungup {
     # bashtrap
 }
 
+
+function test_ip2ip_send_hold_offhold {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # start sipp client and send calls 
+    sipp -sf ip2ip_uas_recv_hold_offhold.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT}
+    # kill every one
+    # bashtrap
+}
+
+
 # function called if CTRL-C detected 
 bashtrap()
 {
@@ -188,8 +209,11 @@ bashtrap()
 # test_ip2ip_recv_hangup
 # test_ip2ip_recv_peer_hungup
 
-# SCENARIO X: Normal flow calls (Account)
-test_account_send_hangup
+# SCENARIO 2: Normal flow calls (Account)
+# test_account_send_hangup
 # test_account_send_peer_hungup
 # test_account_recv_hangup
-# test_account_recv_peer_hungup
\ No newline at end of file
+# test_account_recv_peer_hungup
+
+# SCENARIO 3: Hold/offHoldcalls (Account)
+test_ip2ip_send_hold_offhold
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 517e1cda02..c8ba34b096 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -174,6 +174,27 @@ class SflPhoneTests():
         self.sflphone.start()
 
 
+    def test_ip2ip_send_hold_offhold(self):
+        """Send new call, hold this call, offhold, hangup"""
+        i = 0
+        while(i < 10):
+
+            callid = self.sflphone.Call("sip:test@127.0.0.1:5062")
+            time.sleep(0.5)
+
+            self.sflphone.Hold(callid)
+            time.sleep(0.5)
+
+            self.sflphone.UnHold(callid)
+            time.sleep(0.5)
+            
+            self.sflphone.HangUp(callid)            
+            time.sleep(0.5)
+
+            i = i+1
+
+        del self.sflphone
+
 
 # Open sflphone and connect to sflphoned through dbus
 sflphone = SflPhoneCtrlSimple(True)
@@ -190,20 +211,44 @@ sflphone.setFirstRegisteredAccount();
 # Test 1: - Send an IP2IP call
 #         - Hangup
 # testsuite.test_ip2ip_send_hangup()
+
+# Test 2: - Send an IP2IP call
+#         - Peer Hangup
 # testsuite.test_ip2ip_send_peer_hungup()
+
+# Test 3: - Receive an IP2IP call
+#         - Hangup
 # testsuite.test_ip2ip_recv_hangup()
+
+# Test 4: - Receive an IP2IP call
+#         - Peer Hangup
 # testsuite.test_ip2ip_recv_peer_hungup()
 
 
 
-# SCENARIO 2: IP2IP Normal flow calls
+# SCENARIO 2: ACCOUNT Normal flow calls
+
+# Test 1: - Send an ACCOUNT call
+#         - Hangup
+# testsuite.test_account_send_hangup()
 
-# Test 1: - Create an account on Asterisk
-#         - Wait for incoming calls
-#         - Answer
-#         - Call is hanged up by calle
-testsuite.test_account_send_hangup()
+# Test 2: - Send an ACCOUNT call
+#         - Peer Hangup
 # testsuite.test_account_send_peer_hungup()
+
+# Test 3: - Receive an ACCOUNT call
+#         - Hangup
 # testsuite.test_account_recv_hangup()
+
+# Test 4: - Receive an ACCOUNT call
+#         - Peer Hangup
 # testsuite.test_account_recv_peer_hungup()
 
+
+# SCENARIO 3: IP2IP Call, HOLD/OFFHOLD
+
+# Test 1: - Send an IP2IP call
+#         - Put this call on HOLD
+#         - Off HOLD this call
+#         - Hangup
+testsuite.test_ip2ip_send_hold_offhold()
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index a073e6ca04..b765821a14 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -562,11 +562,11 @@ class SflPhoneCtrlSimple(Thread):
 
     def Hold(self, callid):
         """Hold a call identified by a CallID"""
-        if not self.account:
-            self.setFirstRegisteredAccount()
+        # if not self.account:
+        #    self.setFirstRegisteredAccount()
 
-        if not self.isAccountRegistered():
-            raise SflPhoneError("Can't hold a call without a registered account")
+        # if not self.isAccountRegistered():
+        #    raise SflPhoneError("Can't hold a call without a registered account")
 
         if callid is None or callid == "":
             raise SflPhoneError("Invalid callID")
@@ -576,11 +576,11 @@ class SflPhoneCtrlSimple(Thread):
 
     def UnHold(self, callid):
         """Unhold an incoming call identified by a CallID"""
-        if not self.account:
-            self.setFirstRegisteredAccount()
+        # if not self.account:
+        #    self.setFirstRegisteredAccount()
 
-        if not self.isAccountRegistered():
-            raise SflPhoneError("Can't unhold a call without a registered account")
+        # if not self.isAccountRegistered():
+        #    raise SflPhoneError("Can't unhold a call without a registered account")
 
         if callid is None or callid == "":
             raise SflPhoneError("Invalid callID")
-- 
GitLab


From 5a462a7421a001ea88989c66b207b793ab4faf83 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 11 Mar 2010 13:02:17 -0500
Subject: [PATCH 116/160] [#2536] Test transfer calling using sipp

---
 sippxml/account_uas_receive_transfer.xml | 101 +++++++++++++++++
 sippxml/account_uas_recv_transfered.xml  | 132 +++++++++++++++++++++++
 sippxml/tempscript.sh                    |   5 +
 sippxml/testsuiteuac.sh                  |  42 +++++++-
 tools/pysflphone/pysflphone_testdbus.py  |  31 +++++-
 tools/pysflphone/sflphonectrlsimple.py   |  10 +-
 6 files changed, 310 insertions(+), 11 deletions(-)
 create mode 100644 sippxml/account_uas_receive_transfer.xml
 create mode 100644 sippxml/account_uas_recv_transfered.xml
 create mode 100644 sippxml/tempscript.sh

diff --git a/sippxml/account_uas_receive_transfer.xml b/sippxml/account_uas_receive_transfer.xml
new file mode 100644
index 0000000000..80a875fbf7
--- /dev/null
+++ b/sippxml/account_uas_receive_transfer.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <recv request="INVITE">
+  </recv>
+
+  <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+  <recv request="ACK">
+  </recv>
+
+  <recv request="INVITE">
+  </recv>
+
+  <pause milliseconds="200">
+  </recv>
+
+  <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-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>
+
+  <recv request="ACK">
+  </recv>
+
+
+</scenario>
diff --git a/sippxml/account_uas_recv_transfered.xml b/sippxml/account_uas_recv_transfered.xml
new file mode 100644
index 0000000000..210f5621b4
--- /dev/null
+++ b/sippxml/account_uas_recv_transfered.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 2 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.,                                    -->
+<!-- 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA             -->
+
+
+<scenario name="accountcall_client">
+
+  <recv request="INVITE">
+  </recv>
+
+  <send>
+   <![CDATA[
+
+     SIP/2.0 180 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 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-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>
+
+  <recv request="ACK">
+  </recv>
+
+  <recv request="INVITE">
+  </recv>
+
+  <pause milliseconds="200">
+  </recv>
+
+  <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-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>
+
+  <recv request="ACK">
+  </recv>
+
+
+  <!-- 
+
+  <recv request="BYE">
+  </recv>
+
+  <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-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>
+
+  -->
+
+</scenario>
diff --git a/sippxml/tempscript.sh b/sippxml/tempscript.sh
new file mode 100644
index 0000000000..090a058ed8
--- /dev/null
+++ b/sippxml/tempscript.sh
@@ -0,0 +1,5 @@
+SERVERPORT=5064
+
+sipp -sf account_uas_register_bis.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+
+sipp -sf account_uas_receive_transfer.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
\ No newline at end of file
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 4ea5d5e16e..be94552443 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -3,6 +3,7 @@
 
 SERVERPORT=5062
 
+# SCENARIO 1 Test 1
 function test_ip2ip_send_hangup {
 
     # start sipp server to receive calls from sflphone
@@ -21,6 +22,7 @@ function test_ip2ip_send_hangup {
     # bashtrap
 }
 
+# SCENARIO 1 Test 2
 function test_ip2ip_send_peer_hungup {
 
     # start sipp server to receive calls from sflphone and then hangup
@@ -40,6 +42,7 @@ function test_ip2ip_send_peer_hungup {
 }
 
 
+# SCENARIO 1 Test 3
 function test_ip2ip_recv_hangup {
 
     # start sflphoned
@@ -60,6 +63,8 @@ function test_ip2ip_recv_hangup {
     # bashtrap 
 }
 
+
+# SCENARIO 1 Test 4
 function test_ip2ip_recv_peer_hungup {
 
     # start sflphoned
@@ -80,6 +85,7 @@ function test_ip2ip_recv_peer_hungup {
     # bashtrap 
 }
 
+# SCENARIO 2 Test 1
 function test_account_send_hangup {
 
     # start sflphoned
@@ -103,6 +109,7 @@ function test_account_send_hangup {
     # bashtrap
 }
 
+# SCENARIO 2 Test 2
 function test_account_send_peer_hungup {
 
     # start sflphoned
@@ -126,6 +133,7 @@ function test_account_send_peer_hungup {
     # bashtrap
 }
 
+# SCENARIO 2 Test 3
 function test_account_recv_hangup {
 
     # start sflphoned
@@ -149,6 +157,7 @@ function test_account_recv_hangup {
     # bashtrap
 }
 
+# SCENARIO 2 Test 4
 function test_account_recv_peer_hungup {
 
     # start sflphoned
@@ -172,7 +181,7 @@ function test_account_recv_peer_hungup {
     # bashtrap
 }
 
-
+# SCENARIO 3 Test 1
 function test_ip2ip_send_hold_offhold {
 
     # start sflphoned
@@ -192,6 +201,30 @@ function test_ip2ip_send_hold_offhold {
     # bashtrap
 }
 
+# SCENARIO 4 Test 1
+function test_account_send_transfer {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # process only one registration
+    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+
+    # start sipp client and send calls 
+    sipp -sf account_uas_recv_transfered.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+
+    # kill every one
+    # bashtrap
+}
+
 
 # function called if CTRL-C detected 
 bashtrap()
@@ -215,5 +248,8 @@ bashtrap()
 # test_account_recv_hangup
 # test_account_recv_peer_hungup
 
-# SCENARIO 3: Hold/offHoldcalls (Account)
-test_ip2ip_send_hold_offhold
\ No newline at end of file
+# SCENARIO 3: Hold/offHold calls (Account)
+# test_ip2ip_send_hold_offhold
+
+# SCENARIO 4:  Transfer calls (Account)
+test_account_send_transfer
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index c8ba34b096..3e7c97f0b0 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -125,7 +125,7 @@ class SflPhoneTests():
 
     def test_account_send_hangup(self):
         """Send new account call, hangup once peer answered"""
-        print "test account send hangup"
+
         i = 0
         while(i < 1):
 
@@ -142,7 +142,7 @@ class SflPhoneTests():
 
     def test_account_send_peer_hungup(self):
         """Send new account call, hangup once peer answered"""
-        print "test account send hangup"
+
         i = 0
         while(i < 10):
 
@@ -196,6 +196,23 @@ class SflPhoneTests():
         del self.sflphone
 
 
+    def test_account_send_transfer(self):
+        """Send new calls, transfer it to a new instance"""
+
+        i = 0
+        while(i < 1):
+
+            callid = self.sflphone.Call("27182")
+            time.sleep(1.0)
+            
+            self.sflphone.Transfer(callid,"14142")
+            # self.sflphone.HangUp(callid)            
+            # time.sleep(1.0)
+
+            i = i+1
+
+
+
 # Open sflphone and connect to sflphoned through dbus
 sflphone = SflPhoneCtrlSimple(True)
 
@@ -251,4 +268,12 @@ sflphone.setFirstRegisteredAccount();
 #         - Put this call on HOLD
 #         - Off HOLD this call
 #         - Hangup
-testsuite.test_ip2ip_send_hold_offhold()
+# testsuite.test_ip2ip_send_hold_offhold()
+
+
+# SCENARIO 4: IP2IP Call, HOLD/OFFHOLD
+
+# Test 1: - Send an IP2IP call
+#         - Transfer this call to another sipp instance
+#         - Hangup
+testsuite.test_account_send_transfer()
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index b765821a14..a19d4ab090 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -518,13 +518,13 @@ class SflPhoneCtrlSimple(Thread):
 	self.callmanager.hangUp(callid)
 
 
-    def Transfert(self, callid, to):
+    def Transfer(self, callid, to):
         """Transfert a call identified by a CallID"""
-        if not self.account:
-            self.setFirstRegisteredAccount()
+        # if not self.account:
+        #    self.setFirstRegisteredAccount()
 
-        if not self.isAccountRegistered():
-            raise SflPhoneError("Can't transfert a call without a registered account")
+        # if not self.isAccountRegistered():
+        #     raise SflPhoneError("Can't transfert a call without a registered account")
 
         if callid is None or callid == "":
             raise SflPhoneError("Invalid callID")
-- 
GitLab


From 3fa2d53ffa7ef8a9ab44b8932be6b198025d9a71 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Thu, 11 Mar 2010 14:45:24 -0500
Subject: [PATCH 117/160] [#2916] Added duplicate shortcut keys protection

---
 .../src/config/shortcuts-config.c             | 25 +++++++++---
 sflphone-client-gnome/src/shortcuts.c         | 38 +++++++++++++++----
 sflphone-client-gnome/src/shortcuts.h         | 33 ++++++++--------
 3 files changed, 69 insertions(+), 27 deletions(-)

diff --git a/sflphone-client-gnome/src/config/shortcuts-config.c b/sflphone-client-gnome/src/config/shortcuts-config.c
index b343f52071..06eb1839a9 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.c
+++ b/sflphone-client-gnome/src/config/shortcuts-config.c
@@ -26,7 +26,7 @@ GtkWidget*
 create_shortcuts_settings()
 {
   GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *label;
-  GtkListStore *store;
+
   GtkTreeIter iter;
   guint i = 0;
 
@@ -40,7 +40,7 @@ create_shortcuts_settings()
   treeview = gtk_tree_view_new();
   setup_tree_view(treeview);
 
-  store = gtk_list_store_new(COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT);
+  GtkListStore *store = gtk_list_store_new(COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT);
 
   Accelerator* list = shortcuts_get_list();
 
@@ -100,14 +100,29 @@ accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
   GtkTreeModel *model;
   GtkTreeIter iter;
 
-  // Update treeview
+  Accelerator* list = shortcuts_get_list();
   model = gtk_tree_view_get_model(treeview);
+  gint code = XKeysymToKeycode(GDK_DISPLAY(), accel_key);
+
+  // Disable existing binding if key already used
+  int i = 0;
+  gtk_tree_model_get_iter_first(model, &iter);
+  while (list[i].action != NULL)
+      {
+          if(list[i].value == code)
+            {
+              gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
+              WARN("This key was already affected");
+            }
+          gtk_tree_model_iter_next(model, &iter);
+          i++;
+      }
+
+  // Update treeview
   if (gtk_tree_model_get_iter_from_string(model, &iter, path))
     gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, (gint) mask, VALUE,
         accel_key, -1);
 
-  gint code = XKeysymToKeycode(GDK_DISPLAY(), accel_key);
-
   // Update GDK bindings
   shortcuts_update_bindings(atoi(path), code);
 }
diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
index e52e5f109b..c87d9b8cc9 100644
--- a/sflphone-client-gnome/src/shortcuts.c
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -225,6 +225,35 @@ initialize_accelerators_list ()
   accelerators_list[index].value = 0;
 }
 
+static void
+update_bindings_data(const guint index, const guint code)
+{
+    // we need to be sure this code is not already affected
+    // to another action
+    int i = 0;
+    while (accelerators_list[i].action != NULL)
+      {
+        if(accelerators_list[i].value == code)
+          {
+            // disable old binding
+            accelerators_list[i].value = 0;
+
+            // update config table
+            g_hash_table_replace (shortcutsMap,
+                  g_strdup (accelerators_list[i].action), GINT_TO_POINTER (0));
+          }
+        i++;
+      }
+
+  // store new value
+  accelerators_list[index].value = code;
+
+  // update value in hashtable (used for dbus calls)
+  g_hash_table_replace (shortcutsMap,
+      g_strdup (accelerators_list[index].action), GINT_TO_POINTER (
+          accelerators_list[index].value));
+}
+
 /*
  * "Public" functions
  */
@@ -238,13 +267,8 @@ shortcuts_update_bindings (const guint index, const guint code)
   // first remove all existing bindings
   remove_bindings ();
 
-  // store new value
-  accelerators_list[index].value = code;
-
-  // update value in hashtable (used for dbus calls)
-  g_hash_table_replace (shortcutsMap,
-      g_strdup (accelerators_list[index].action), GINT_TO_POINTER (
-          accelerators_list[index].value));
+  // update data
+  update_bindings_data(index, code);
 
   // recreate all bindings
   create_bindings ();
diff --git a/sflphone-client-gnome/src/shortcuts.h b/sflphone-client-gnome/src/shortcuts.h
index e5e512d5ea..dcad5019eb 100644
--- a/sflphone-client-gnome/src/shortcuts.h
+++ b/sflphone-client-gnome/src/shortcuts.h
@@ -26,53 +26,56 @@ typedef struct
   GdkModifierType mask;
   guint value;
   void
-  (*callback)(void);
+  (*callback) (void);
 } Accelerator;
 
 static void
-grab_key(int key_code, GdkWindow *root);
+grab_key (int key_code, GdkWindow *root);
 
 static void
-ungrab_key(int key_code, GdkWindow *root);
+ungrab_key (int key_code, GdkWindow *root);
 
 static GdkFilterReturn
-filter_keys(GdkXEvent *xevent, GdkEvent *event, gpointer data);
+filter_keys (GdkXEvent *xevent, GdkEvent *event, gpointer data);
 
 static void
-remove_bindings();
+remove_bindings ();
 
 static void
-create_bindings();
+create_bindings ();
 
 static void
-pick_up_callback();
+pick_up_callback ();
 
 static void
-hang_up_callback();
+hang_up_callback ();
 
 static void
-initialize_binding(const gchar* action, const guint code);
+initialize_binding (const gchar* action, const guint code);
 
 static void
-initialize_shortcuts_keys();
+initialize_shortcuts_keys ();
 
 static void*
-get_action_callback(const gchar* action);
+get_action_callback (const gchar* action);
+
+static void
+update_bindings_data (const guint index, const guint code);
 
 /*
  * "Public" functions
  */
 
 void
-shortcuts_initialize_bindings();
+shortcuts_initialize_bindings ();
 
 void
-shortcuts_update_bindings(const guint index, const guint code);
+shortcuts_update_bindings (const guint index, const guint code);
 
 void
-shortcuts_destroy_bindings();
+shortcuts_destroy_bindings ();
 
 Accelerator*
-shortcuts_get_list();
+shortcuts_get_list ();
 
 #endif /* SHORTCUTS_H_ */
-- 
GitLab


From eb3f8dd2bb84d7310eff4ecac1637e95061cd85f Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Thu, 11 Mar 2010 17:54:51 -0500
Subject: [PATCH 118/160] [#2916] Added toggle pick up and toggle hold actions

---
 sflphone-client-gnome/src/shortcuts.c         | 102 ++++++++++++++----
 sflphone-client-gnome/src/shortcuts.h         |   6 ++
 .../src/dbus/configurationmanager.cpp         |   2 +
 sflphone-common/src/managerimpl.cpp           |   4 +-
 4 files changed, 94 insertions(+), 20 deletions(-)

diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
index c87d9b8cc9..9ebad5c1b2 100644
--- a/sflphone-client-gnome/src/shortcuts.c
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -42,6 +42,39 @@ static GHashTable* shortcutsMap;
  * Callbacks
  */
 
+static void
+toggle_pick_up_hang_up_callback ()
+{
+  callable_obj_t * selectedCall = calltab_get_selected_call (active_calltree);
+  conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+  g_print("toggle_pick_up_hang_up_callback\n");
+
+  if (selectedCall)
+    {
+      switch (selectedCall->_state)
+        {
+      case CALL_STATE_DIALING:
+      case CALL_STATE_INCOMING:
+      case CALL_STATE_TRANSFERT:
+        sflphone_pick_up ();
+        break;
+      case CALL_STATE_HOLD:
+      case CALL_STATE_CURRENT:
+      case CALL_STATE_RECORD:
+      case CALL_STATE_RINGING:
+        sflphone_hang_up ();
+        break;
+        }
+    }
+  else if (selectedConf)
+    {
+      dbus_hang_up_conference (selectedConf);
+    }
+  else
+    sflphone_pick_up ();
+}
+
 static void
 pick_up_callback ()
 {
@@ -54,6 +87,33 @@ hang_up_callback ()
   sflphone_hang_up ();
 }
 
+static void
+toggle_hold_callback ()
+{
+  callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+  conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+  if (selectedCall)
+    {
+      switch (selectedCall->_state)
+        {
+      case CALL_STATE_CURRENT:
+      case CALL_STATE_RECORD:
+        g_print("on hold\n");
+        sflphone_on_hold();
+        break;
+      case CALL_STATE_HOLD:
+        g_print("off hold\n");
+        sflphone_off_hold();
+        break;
+        }
+    }
+  else if (selectedConf)
+    dbus_hold_conference (selectedConf);
+  else
+    ERROR("Should not happen");
+}
+
 static void
 popup_window_callback ()
 {
@@ -84,6 +144,12 @@ get_action_callback (const gchar* action)
   if (strcmp (action, "popup_window") == 0)
     return popup_window_callback;
 
+  if (strcmp (action, "toggle_pick_up_hang_up") == 0)
+    return toggle_pick_up_hang_up_callback;
+
+  if (strcmp (action, "toggle_hold") == 0)
+    return toggle_hold_callback;
+
   return default_callback;
 }
 
@@ -226,24 +292,24 @@ initialize_accelerators_list ()
 }
 
 static void
-update_bindings_data(const guint index, const guint code)
+update_bindings_data (const guint index, const guint code)
 {
-    // we need to be sure this code is not already affected
-    // to another action
-    int i = 0;
-    while (accelerators_list[i].action != NULL)
-      {
-        if(accelerators_list[i].value == code)
-          {
-            // disable old binding
-            accelerators_list[i].value = 0;
-
-            // update config table
-            g_hash_table_replace (shortcutsMap,
-                  g_strdup (accelerators_list[i].action), GINT_TO_POINTER (0));
-          }
-        i++;
-      }
+  // we need to be sure this code is not already affected
+  // to another action
+  int i = 0;
+  while (accelerators_list[i].action != NULL)
+    {
+      if (accelerators_list[i].value == code)
+        {
+          // disable old binding
+          accelerators_list[i].value = 0;
+
+          // update config table
+          g_hash_table_replace (shortcutsMap, g_strdup (
+              accelerators_list[i].action), GINT_TO_POINTER (0));
+        }
+      i++;
+    }
 
   // store new value
   accelerators_list[index].value = code;
@@ -268,7 +334,7 @@ shortcuts_update_bindings (const guint index, const guint code)
   remove_bindings ();
 
   // update data
-  update_bindings_data(index, code);
+  update_bindings_data (index, code);
 
   // recreate all bindings
   create_bindings ();
diff --git a/sflphone-client-gnome/src/shortcuts.h b/sflphone-client-gnome/src/shortcuts.h
index dcad5019eb..3bc1a44cdb 100644
--- a/sflphone-client-gnome/src/shortcuts.h
+++ b/sflphone-client-gnome/src/shortcuts.h
@@ -50,6 +50,12 @@ pick_up_callback ();
 static void
 hang_up_callback ();
 
+static void
+toggle_pick_up_hang_up_callback ();
+
+static void
+toggle_hold_callback ();
+
 static void
 initialize_binding (const gchar* action, const guint code);
 
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 6c4be309b1..b243157e77 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -33,6 +33,8 @@ ConfigurationManager::ConfigurationManager(DBus::Connection& connection) :
 	shortcutsKeys.push_back("pick_up");
 	shortcutsKeys.push_back("hang_up");
 	shortcutsKeys.push_back("popup_window");
+	shortcutsKeys.push_back("toggle_pick_up_hang_up");
+	shortcutsKeys.push_back("toggle_hold");
 }
 
 std::map<std::string, std::string> ConfigurationManager::getAccountDetails(
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 2e0934d170..af885c9964 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -727,7 +727,7 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 	// AudioLayer* audiolayer = getAudioDriver();
 
 	if (nbCalls <= 1) {
-		_debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+		_debug ("    refuseCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
 
 		AudioLayer* audiolayer = getAudioDriver();
 		audiolayer->stopStream();
@@ -744,7 +744,7 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 		accountid = getAccountFromCall(id);
 
 		if (accountid == AccountNULL) {
-			_debug ("! Manager OffHold Call: Call doesn't exists");
+			_debug ("! Manager refuseCall: Call doesn't exists");
 			return false;
 		}
 
-- 
GitLab


From 6be81ab0653a29e791ed2f3f4d66fa75fe0dc3b3 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 12 Mar 2010 17:09:31 -0500
Subject: [PATCH 119/160] [#3021] Cleanup tone generation

---
 sflphone-common/src/audio/sound/Makefile.am   |  2 -
 sflphone-common/src/audio/sound/tone.cpp      | 73 ++++++++++++++---
 sflphone-common/src/audio/sound/tone.h        | 18 +++++
 .../src/audio/sound/tonegenerator.cpp         | 60 --------------
 .../src/audio/sound/tonegenerator.h           | 81 -------------------
 sflphone-common/src/sip/sipvoiplink.cpp       |  2 +-
 6 files changed, 83 insertions(+), 153 deletions(-)
 delete mode 100644 sflphone-common/src/audio/sound/tonegenerator.cpp
 delete mode 100644 sflphone-common/src/audio/sound/tonegenerator.h

diff --git a/sflphone-common/src/audio/sound/Makefile.am b/sflphone-common/src/audio/sound/Makefile.am
index 37d7ddc61e..10e9960b7a 100644
--- a/sflphone-common/src/audio/sound/Makefile.am
+++ b/sflphone-common/src/audio/sound/Makefile.am
@@ -5,14 +5,12 @@ noinst_LTLIBRARIES = libsound.la
 libsound_la_SOURCES = \
 		audiofile.cpp \
 		tone.cpp \
-		tonegenerator.cpp \
 		tonelist.cpp \
 		dtmf.cpp \
 		dtmfgenerator.cpp
 
 noinst_HEADERS = \
 	audiofile.h \
-	tonegenerator.h \
 	tone.h \
 	tonelist.h \
 	dtmfgenerator.h \
diff --git a/sflphone-common/src/audio/sound/tone.cpp b/sflphone-common/src/audio/sound/tone.cpp
index d8849cbf32..7f60f1ecca 100644
--- a/sflphone-common/src/audio/sound/tone.cpp
+++ b/sflphone-common/src/audio/sound/tone.cpp
@@ -28,8 +28,12 @@
 #include <cstdlib>
 #include <strings.h>
 
-Tone::Tone (const std::string& definition, unsigned int sampleRate) : AudioLoop(), _sampleRate (sampleRate)
+#define TABLE_LENGTH 4096
+double TWOPI = 2 * M_PI;
+
+Tone::Tone (const std::string& definition, unsigned int sampleRate) : AudioLoop(), _sampleRate (sampleRate), _xhigher(0.0), _xlower(0.0)
 {
+	fillWavetable();
     genBuffer (definition); // allocate memory with definition parameter
 }
 
@@ -101,6 +105,7 @@ Tone::genBuffer (const std::string& definition)
             }
 
             // Generate SAMPLING_RATE samples of sinus, buffer is the result
+            _debug("genSin(%d, %d)", freq1, freq2);
             genSin (bufferPos, freq1, freq2, count);
 
             // To concatenate the different buffers for each section.
@@ -124,20 +129,70 @@ Tone::genBuffer (const std::string& definition)
     bufferPos=0;
 }
 
+void
+Tone::fillWavetable()
+{
+	double tableSize = (double)TABLE_LENGTH;
+
+	for(int i = 0; i < TABLE_LENGTH; i++) {
+		_wavetable[i] = sin( ((double)i / (tableSize - 1.0)) * TWOPI );
+	}
+}
+
+double
+Tone::interpolate(double x)
+{
+	int xi_0, xi_1;
+	double yi_0, yi_1, A, B;
+
+	xi_0 = (int)x;
+	xi_1 = xi_0+1;
+
+	yi_0  =_wavetable[xi_0];
+	yi_1 = _wavetable[xi_1];
+
+	A = (x - xi_0);
+	B = 1.0 - A;
+
+	return A*yi_0 + B*yi_1;
+}
+
 void
 Tone::genSin (SFLDataFormat* buffer, int frequency1, int frequency2, int nb)
 {
+	_xhigher = 0.0;
+	_xlower = 0.0;
 
-    double pi2 = 6.28318520;
-    double var1 = pi2 * (double) frequency1 / (double) _sampleRate;
-    double var2 = pi2 * (double) frequency2 / (double) _sampleRate;
+	double sr = (double)_sampleRate;
+	double tableSize = (double)TABLE_LENGTH;
 
-    // softer
-    double amp = (double) SFLDataAmplitude;
+	 double N_h = sr / (double) (frequency1);
+	 double N_l = sr / (double)  (frequency2);
 
-    for (int t = 0; t < nb; t++) {
-        buffer[t] = (SFLDataFormat) (amp * ( (sin (var1 * t) + sin (var2 * t))));
-    }
+	 double dx_h = tableSize / N_h;
+	 double dx_l = tableSize / N_l;
+
+	 double x_h = _xhigher;
+	 double x_l = _xlower;
+
+	 double amp = (double)SFLDataAmplitude;
+
+	 for (int t = 0; t < nb; t ++) {
+		 buffer[t] = (int16)(amp*(interpolate(x_h) + interpolate(x_l)));
+		 x_h += dx_h;
+		 x_l += dx_l;
+
+		 if(x_h > tableSize) {
+			 x_h -= tableSize;
+		}
+
+		 if(x_l > tableSize) {
+			 x_l -= tableSize;
+		}
+	 }
+
+	 _xhigher = x_h;
+	 _xlower = x_l;
 
 }
 
diff --git a/sflphone-common/src/audio/sound/tone.h b/sflphone-common/src/audio/sound/tone.h
index a725059dcf..94be60a0b8 100644
--- a/sflphone-common/src/audio/sound/tone.h
+++ b/sflphone-common/src/audio/sound/tone.h
@@ -28,6 +28,8 @@
 #define TONE_NBTONE 4
 #define TONE_NBCOUNTRY 7
 
+#define TABLE_LENGTH 4096
+
 /**
  * @file tone.h
  * @brief Tone sample (dial, busy, ring, congestion)
@@ -65,6 +67,17 @@ public:
    */
   void genSin(SFLDataFormat* buffer, int frequency1, int frequency2, int nb);
 
+  /**
+   *
+   */
+  void fillWavetable(void);
+
+  /**
+   *
+   */
+  double interpolate(double x);
+
+
 private:
 
   /**
@@ -75,6 +88,11 @@ private:
 
   /** Sample rate */
   unsigned int _sampleRate;
+
+  double _wavetable[TABLE_LENGTH];
+
+  double _xhigher;
+  double _xlower;
 };
 
 #endif // __TONE_H__
diff --git a/sflphone-common/src/audio/sound/tonegenerator.cpp b/sflphone-common/src/audio/sound/tonegenerator.cpp
deleted file mode 100644
index dcdbb6be07..0000000000
--- a/sflphone-common/src/audio/sound/tonegenerator.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- *  Copyright (C) 2004-2005 Savoir-Faire Linux inc.
- *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
- *  Author: Laurielle Lea <laurielle.lea@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 <fstream>
-#include <math.h>
-#include <stdlib.h>
-
-#include "tonegenerator.h"
-#include "global.h"
-
-int AMPLITUDE = 32767;
-
-///////////////////////////////////////////////////////////////////////////////
-// ToneGenerator implementation
-///////////////////////////////////////////////////////////////////////////////
-
-ToneGenerator::ToneGenerator (unsigned int sampleRate) : sample (NULL), freq1(), freq2(), time(), totalbytes(), _sampleRate (sampleRate)
-{
-}
-
-ToneGenerator::~ToneGenerator (void)
-{
-}
-
-/**
- * Calculate superposition of 2 sinus
- *
- */
-void
-ToneGenerator::generateSin (int lowerfreq, int higherfreq, int16* ptr, int len) const
-{
-    double var1, var2;
-
-    var1 = (double) 2 * (double) M_PI * (double) higherfreq / (double) _sampleRate;
-    var2 = (double) 2 * (double) M_PI * (double) lowerfreq / (double) _sampleRate;
-
-    double amp = (double) (AMPLITUDE >> 2);
-
-    for (int t = 0; t < len; t++) {
-        ptr[t] = (int16) (amp * ( (sin (var1 * t) + sin (var2 * t))));
-    }
-}
-
diff --git a/sflphone-common/src/audio/sound/tonegenerator.h b/sflphone-common/src/audio/sound/tonegenerator.h
deleted file mode 100644
index ce1ad56e61..0000000000
--- a/sflphone-common/src/audio/sound/tonegenerator.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  Copyright (C) 2004-2006 Savoir-Faire Linux inc.
- *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
- *  Author: Laurielle Lea <laurielle.lea@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 __TONE_GENERATOR_H__
-#define __TONE_GENERATOR_H__
-
-#include <string>
-#include <cc++/thread.h>
-
-#include "global.h"
-
-/**
- * @file tonegenerator.h
- * @brief Sine generator to create tone with string definition
- */
-
-class ToneGenerator {
-  public:
-    /**
-     * Constructor
-     * @param sampleRate  The sample rate of the generated samples
-     */
-    ToneGenerator (unsigned int sampleRate);
-    
-    /**
-     * Destructor
-     */
-    ~ToneGenerator (void);
-
-    /**
-     * Calculate sinus with superposition of 2 frequencies
-     * @param lowerfreq	Lower frequency
-     * @param higherfreq  Higher frequency
-     * @param ptr For result buffer
-     * @param len The length of the data to be generated
-     */
-    void generateSin	(int, int, int16 *, int len) const;
-
-
-    ///////////////////////////
-    // Public members variable
-    //////////////////////////
-    int16 *sample;
-    int freq1, freq2;
-    int time;
-    int totalbytes;
-
-  private:
-    // Copy Constructor
-    ToneGenerator(const ToneGenerator& rh);
-
-    // Assignment Operator
-    ToneGenerator& operator=( const ToneGenerator& rh);
-
-    /*
-     * Initialisation of the supported tones according to the countries.
-     */
-    void		initTone (void);
-
-    int16 _buf[SIZEBUF];
-    int _sampleRate;
-};
-
-#endif // __TONE_GENRATOR_H__
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index a2755680a0..022cdcbe0c 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3478,7 +3478,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     // No need to go any further on incoming ACK
     if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD) {
         _info("UserAgent: received an ACK");
-	return true;
+        return true;
     }
 
     // Handle the incoming call invite in this function
-- 
GitLab


From f61ed84f5c4d2c7caf1f21220849af8a43bf23b8 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 12 Mar 2010 17:10:21 -0500
Subject: [PATCH 120/160] [#3007] Lock the mainloop when flush pulseaudio
 streams

---
 sflphone-common/src/audio/pulseaudio/pulselayer.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index 7a1664ec90..3f754c8df1 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -357,12 +357,17 @@ PulseLayer::stopStream (void)
 {
 
 	_info("Audio: Stop audio stream");
+
+	pa_threaded_mainloop_lock (m);
+
 	if(playback)
 	    pa_stream_flush (playback->pulseStream(), NULL, NULL);
 
 	if(record)
 	    pa_stream_flush (record->pulseStream(), NULL, NULL);
 
+	pa_threaded_mainloop_unlock (m);
+
 	disconnectAudioStream();
 }
 
-- 
GitLab


From 742a76938e037032723f373f1120c9b5efac2905 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Mon, 15 Mar 2010 10:18:00 -0400
Subject: [PATCH 121/160] [#2535] Cleaned daemon unit tests

---
 sflphone-common/src/managerimpl.cpp         |    2 +-
 sflphone-common/src/managerimpl.h           |    2 +-
 sflphone-common/test/Makefile.am            |  176 +-
 sflphone-common/test/README                 |    1 -
 sflphone-common/test/TestMain.cpp           |   12 -
 sflphone-common/test/accounttest.cpp        |   42 +
 sflphone-common/test/accounttest.h          |   36 +
 sflphone-common/test/audiolayerTest.cpp     |  221 ---
 sflphone-common/test/audiolayerTest.h       |   92 -
 sflphone-common/test/audiorecorderTest.cpp  |   61 -
 sflphone-common/test/audiorecorderTest.h    |   73 -
 sflphone-common/test/configurationTest.cpp  |  146 --
 sflphone-common/test/configurationTest.h    |  108 --
 sflphone-common/test/history-sample         |   21 -
 sflphone-common/test/history-sample.tpl     |   20 -
 sflphone-common/test/historyTest.cpp        |  211 ---
 sflphone-common/test/historyTest.h          |   93 -
 sflphone-common/test/hookmanagerTest.cpp    |   57 -
 sflphone-common/test/hookmanagerTest.h      |   74 -
 sflphone-common/test/hooksTest.h            |   68 -
 sflphone-common/test/main.cpp               |   58 +
 sflphone-common/test/mainbufferTest.cpp     | 1772 -------------------
 sflphone-common/test/mainbufferTest.h       |  136 --
 sflphone-common/test/numbercleanerTest.cpp  |  126 --
 sflphone-common/test/numbercleanerTest.h    |  102 --
 sflphone-common/test/pluginmanagerTest.cpp  |  111 --
 sflphone-common/test/pluginmanagerTest.h    |   94 -
 sflphone-common/test/rtpTest.cpp            |  239 ---
 sflphone-common/test/rtpTest.h              |  123 --
 sflphone-common/test/run-tests              |   24 -
 sflphone-common/test/sdesnegotiatorTest.cpp |  226 ---
 sflphone-common/test/sdesnegotiatorTest.h   |  119 --
 sflphone-common/test/sflphonedrc-sample     |   74 -
 sflphone-common/test/validator.cpp          |   22 +
 sflphone-common/test/validator.h            |   21 +
 35 files changed, 211 insertions(+), 4552 deletions(-)
 delete mode 100644 sflphone-common/test/README
 delete mode 100644 sflphone-common/test/TestMain.cpp
 create mode 100644 sflphone-common/test/accounttest.cpp
 create mode 100644 sflphone-common/test/accounttest.h
 delete mode 100644 sflphone-common/test/audiolayerTest.cpp
 delete mode 100644 sflphone-common/test/audiolayerTest.h
 delete mode 100644 sflphone-common/test/audiorecorderTest.cpp
 delete mode 100644 sflphone-common/test/audiorecorderTest.h
 delete mode 100644 sflphone-common/test/configurationTest.cpp
 delete mode 100644 sflphone-common/test/configurationTest.h
 delete mode 100644 sflphone-common/test/history-sample
 delete mode 100644 sflphone-common/test/history-sample.tpl
 delete mode 100644 sflphone-common/test/historyTest.cpp
 delete mode 100644 sflphone-common/test/historyTest.h
 delete mode 100644 sflphone-common/test/hookmanagerTest.cpp
 delete mode 100644 sflphone-common/test/hookmanagerTest.h
 delete mode 100644 sflphone-common/test/hooksTest.h
 create mode 100644 sflphone-common/test/main.cpp
 delete mode 100644 sflphone-common/test/mainbufferTest.cpp
 delete mode 100644 sflphone-common/test/mainbufferTest.h
 delete mode 100644 sflphone-common/test/numbercleanerTest.cpp
 delete mode 100644 sflphone-common/test/numbercleanerTest.h
 delete mode 100644 sflphone-common/test/pluginmanagerTest.cpp
 delete mode 100644 sflphone-common/test/pluginmanagerTest.h
 delete mode 100644 sflphone-common/test/rtpTest.cpp
 delete mode 100644 sflphone-common/test/rtpTest.h
 delete mode 100755 sflphone-common/test/run-tests
 delete mode 100644 sflphone-common/test/sdesnegotiatorTest.cpp
 delete mode 100644 sflphone-common/test/sdesnegotiatorTest.h
 delete mode 100644 sflphone-common/test/sflphonedrc-sample
 create mode 100644 sflphone-common/test/validator.cpp
 create mode 100644 sflphone-common/test/validator.h

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index af885c9964..e5efbdee68 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -3858,7 +3858,7 @@ std::string ManagerImpl::addAccount (
 	if (_dbus)
 		_dbus->getConfigurationManager()->accountsChanged();
 
-	return newAccountID;
+	return accountID.str();
 }
 
 void ManagerImpl::deleteAllCredential (const AccountID& accountID) {
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index c2938844f8..3e3b822c3d 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -1299,7 +1299,7 @@ class ManagerImpl {
     // 
     ConferenceMap _conferencemap;
 
-   
+
 
 private:
 
diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am
index e3679eb678..46a90e6ccf 100644
--- a/sflphone-common/test/Makefile.am
+++ b/sflphone-common/test/Makefile.am
@@ -1,9 +1,34 @@
 include ../globals.mak
 
-
-noinst_PROGRAMS = numbercleanerTester pluginmanagerTester hookmanagerTester audiolayerTester historyTester mainbufferTester sdesnegotiatorTester #rtpTester
-
-OBJECT_FILES= \
+TESTS = main
+check_PROGRAMS = $(TESTS)
+main_CXXFLAGS = $(CPPUNIT_CFLAGS)
+main_LDADD = $(LLIBS)
+main_LDFLAGS = -ldl
+main_SOURCES = main.cpp \
+	validator.cpp \
+	validator.h \
+	accounttest.h \
+	accounttest.cpp
+
+
+
+
+
+LLIBS=$(CPPUNIT_LIBS) \
+	../src/libsflphone.la  \
+	$(ZEROCONFLIB) \
+	$(LIB_DNSSD) \
+	@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\
@@ -26,145 +51,4 @@ OBJECT_FILES= \
 	../src/plug-in/pluginmanager.o \
 	../src/plug-in/audiorecorder/audiorecord.o \
 	../src/audio/samplerateconverter.o \
-        ../src/history/historymanager.o
-	../
-
-numbercleanerTester_SOURCES = \
-		numbercleanerTest.h \
-		numbercleanerTest.cpp \
-		TestMain.cpp
-
-numbercleanerTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
-
-pluginmanagerTester_SOURCES = \
-		pluginmanagerTest.h \
-		pluginmanagerTest.cpp \
-		TestMain.cpp
-
-pluginmanagerTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
-
-hookmanagerTester_SOURCES = \
-		hookmanagerTest.cpp \
-		TestMain.cpp
-
-hookmanagerTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
-
-audiolayerTester_SOURCES = \
-		audiolayerTest.h \
-		audiolayerTest.cpp \
-		TestMain.cpp
-
-audiolayerTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
-
-historyTester_SOURCES = \
-		historyTest.h \
-		historyTest.cpp \
-		TestMain.cpp
-
-historyTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
-
-
-mainbufferTester_SOURCES = \
-		mainbufferTest.h \
-		mainbufferTest.cpp \
-		TestMain.cpp
-
-mainbufferTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
-
-sdesnegotiatorTester_SOURCES = \
-		sdesnegotiatorTest.h \
-		sdesnegotiatorTest.cpp \
-		TestMain.cpp
-
-sdesnegotiatorTester_LDADD = \
-		../src/libsflphone.la  \
-		$(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@CPPUNIT_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@CCGNU2_LIBS@ \
-		@CCRTP_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		@libssl_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		$(PJSIP_LIBS) \
-		$(OBJECT_FILES)
+    ../src/history/historymanager.o
\ No newline at end of file
diff --git a/sflphone-common/test/README b/sflphone-common/test/README
deleted file mode 100644
index d090ea2cea..0000000000
--- a/sflphone-common/test/README
+++ /dev/null
@@ -1 +0,0 @@
-The daemon has to be recompiled before compiling the unitary tests.
diff --git a/sflphone-common/test/TestMain.cpp b/sflphone-common/test/TestMain.cpp
deleted file mode 100644
index d6e9f932bf..0000000000
--- a/sflphone-common/test/TestMain.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <cppunit/TextTestRunner.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-
-int main (int argc, const char* argv[])
-{
-    CppUnit::TextTestRunner runner;
-    runner.addTest (CppUnit::TestFactoryRegistry::getRegistry().makeTest());
-
-    return runner.run();
-
-}
-
diff --git a/sflphone-common/test/accounttest.cpp b/sflphone-common/test/accounttest.cpp
new file mode 100644
index 0000000000..c4e645cb9f
--- /dev/null
+++ b/sflphone-common/test/accounttest.cpp
@@ -0,0 +1,42 @@
+/*
+ *  Copyright (C) 2004-2007 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 <cppunit/extensions/HelperMacros.h>
+#include <map>
+#include "accounttest.h"
+#include "manager.h"
+#include "logger.h"
+#include "validator.h"
+
+CPPUNIT_TEST_SUITE_REGISTRATION( AccountTest );
+
+void AccountTest::TestAddRemove(void) {
+
+	std::map<std::string, std::string> details;
+	details[CONFIG_ACCOUNT_TYPE] = "SIP";
+	details[CONFIG_ACCOUNT_ENABLE] = "false";
+
+	std::string accountId = Manager::instance().addAccount(details);
+	CPPUNIT_ASSERT(Validator::isNotNull(accountId));
+	CPPUNIT_ASSERT(Manager::instance().accountExists(accountId));
+
+	Manager::instance().removeAccount(accountId);
+
+	CPPUNIT_ASSERT(!Manager::instance().accountExists(accountId));
+}
diff --git a/sflphone-common/test/accounttest.h b/sflphone-common/test/accounttest.h
new file mode 100644
index 0000000000..6422684adb
--- /dev/null
+++ b/sflphone-common/test/accounttest.h
@@ -0,0 +1,36 @@
+/*
+ *  Copyright (C) 2004-2007 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 ACCOUNTTEST_H_
+#define ACCOUNTTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+class AccountTest : public CppUnit::TestFixture {
+
+  CPPUNIT_TEST_SUITE( AccountTest );
+  CPPUNIT_TEST( TestAddRemove );
+  CPPUNIT_TEST_SUITE_END();
+
+ public:
+  void TestAddRemove(void);
+};
+
+#endif /* ACCOUNTTEST_H_ */
diff --git a/sflphone-common/test/audiolayerTest.cpp b/sflphone-common/test/audiolayerTest.cpp
deleted file mode 100644
index 962bb8fc4b..0000000000
--- a/sflphone-common/test/audiolayerTest.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-
-#include "audiolayerTest.h"
-
-#include <unistd.h>
-
-
-using std::cout;
-using std::endl;
-
-
-
-void AudioLayerTest::setUp()
-{
-
-    // Instanciate the manager
-    Manager::instance().init();
-    Manager::instance().initConfigFile();
-
-    // _audiodriver = Manager::instance().getAudioDriver();
-
-    // std::string alsaPlugin;
-    // AlsaLayer *alsalayer;
-
-    // int numCardIn, numCardOut, sampleRate, frameSize;
-    // layer = _audiodriver->getLayerType();
-
-    /*
-    alsaPlugin = Manager::instance().getConfigString( AUDIO , ALSA_PLUGIN );
-    numCardIn  = Manager::instance().getConfigInt( AUDIO , ALSA_CARD_ID_IN );
-    numCardOut = Manager::instance().getConfigInt( AUDIO , ALSA_CARD_ID_OUT );
-    sampleRate = Manager::instance().getConfigInt( AUDIO , ALSA_SAMPLE_RATE );
-    if (sampleRate <=0 || sampleRate > 48000) {
-        sampleRate = 44100;
-    }
-    frameSize = Manager::instance().getConfigInt(AUDIO, ALSA_FRAME_SIZE );
-    */
-
-    // get a pointer to the audio layer
-    // _audiodriver = Manager::instance().getAudioDriver();
-
-}
-
-void AudioLayerTest::testAudioLayerConfig()
-{
-    int sampling_rate = Manager::instance().getConfigInt (AUDIO, AUDIO_SAMPLE_RATE);
-    int frame_size = Manager::instance().getConfigInt (AUDIO, ALSA_FRAME_SIZE);
-    frame_size = 0; // frame size in config not used anymore
-
-    int layer = Manager::instance().getAudioDriver()->getLayerType();
-
-    if (layer != ALSA)
-        Manager::instance().switchAudioManager();
-
-    CPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getSampleRate() == sampling_rate);
-
-    CPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getFrameSize() == frame_size);
-}
-
-void AudioLayerTest::testAudioLayerSwitch()
-{
-
-    _debug ("---------- AudioLayerTest::testAudioLayerSwitch ---------------------------");
-
-
-    int previous_layer = Manager::instance().getAudioDriver()->getLayerType();
-
-    for (int i = 0; i < 2; i++) {
-        _debug ("---------- AudioLayerTest::testAudioLayerSwitch - %i -------------",i);
-        Manager::instance().switchAudioManager();
-
-        if (previous_layer == ALSA) {
-            CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == PULSEAUDIO);
-        } else {
-            CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == ALSA);
-        }
-
-        previous_layer = Manager::instance().getAudioDriver()->getLayerType();
-
-        usleep (100000);
-    }
-}
-
-
-
-void AudioLayerTest::testPulseConnect()
-{
-
-    _debug ("---------- AudioLayerTest::testPulseConnect ---------------------------");
-
-    ManagerImpl* manager;
-    manager = &Manager::instance();
-
-    // _pulselayer = new PulseLayer (manager);
-    _pulselayer = (PulseLayer*) Manager::instance().getAudioDriver();
-
-    CPPUNIT_ASSERT (_pulselayer->getLayerType() == PULSEAUDIO);
-
-    std::string alsaPlugin;
-    int numCardIn, numCardOut, sampleRate, frameSize;
-
-    alsaPlugin = manager->getConfigString (AUDIO , ALSA_PLUGIN);
-    numCardIn  = manager->getConfigInt (AUDIO , ALSA_CARD_ID_IN);
-    numCardOut = manager->getConfigInt (AUDIO , ALSA_CARD_ID_OUT);
-    sampleRate = manager->getConfigInt (AUDIO , AUDIO_SAMPLE_RATE);
-    frameSize = manager->getConfigInt (AUDIO, ALSA_FRAME_SIZE);
-
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
-    CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
-
-    _pulselayer->setErrorMessage (-1);
-
-    try {
-        CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true);
-    } catch (...) {
-        _debug ("Exception occured wile opening device! ");
-    }
-
-    usleep (100000);
-
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
-    CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
-
-    // CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
-    // CPPUNIT_ASSERT (_pulselayer->getRecordStream()->pulseStream() != NULL);
-
-    // Must return Access failure "PA_ERR_ACCESS" == 2
-    // CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 2);
-    // CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 2);
-    _debug ("-------------------------- \n");
-    _pulselayer->startStream ();
-
-    // usleep(1000000);
-
-
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
-
-    // Must return No error "PA_OK" == 1
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
-    CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
-
-    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()->getStreamState() == 1);
-    CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
-
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true);
-    CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true);
-
-    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
-    CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
-
-    // usleep(1000000);
-    CPPUNIT_ASSERT (_pulselayer->disconnectAudioStream() == true);
-
-}
-
-
-void AudioLayerTest::testAlsaConnect()
-{
-
-    _debug ("---------- AudioLayerTest::testAlsaConnect ---------------------------");
-
-    int layer = Manager::instance().getAudioDriver()->getLayerType();
-
-    std::string alsaPlugin;
-
-    if (layer != ALSA) {
-        Manager::instance().switchAudioManager();
-        usleep (100000);
-    }
-
-    // _audiolayer = Manager::instance().getAudioDriver();
-
-    // CPPUNIT_ASSERT(_audiolayer->closeLayer() == true);
-    // usleep(100000);
-
-    // delete _audiolayer; _audiolayer == NULL;
-
-    Manager::instance().setConfig (PREFERENCES, CONFIG_AUDIO, ALSA);
-
-
-    // _audiolayer->setErrorMessage(-1);
-    // CPPUNIT_ASSERT(Manager::instance().initAudioDriver() == true);
-
-    // _audiolayer = Manager::instance().getAudioDriver();
-
-    // CPPUNIT_ASSERT(_audiolayer->getLayerType() == ALSA);
-
-}
-
-void AudioLayerTest::tearDown()
-{
-    // Delete the audio recorder module
-    // delete _ar; _ar = NULL;
-}
diff --git a/sflphone-common/test/audiolayerTest.h b/sflphone-common/test/audiolayerTest.h
deleted file mode 100644
index 7bda91c508..0000000000
--- a/sflphone-common/test/audiolayerTest.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "manager.h"
-
-#include "config/config.h"
-#include "user_cfg.h"
-
-#include "audio/audiolayer.h"
-#include "audio/alsa/alsalayer.h"
-#include "audio/pulseaudio/pulselayer.h"
-
-/*
- * @file audiorecorderTest.cpp  
- * @brief       Regroups unitary tests related to the plugin manager.
- */
-
-#ifndef _AUDIOLAYER_TEST_
-#define _AUDIOLAYER_TEST_
-
-
-
-class AudioLayerTest : public CppUnit::TestCase {
-
-    /*
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( AudioLayerTest );
-        CPPUNIT_TEST( testAudioLayerConfig );
-        // CPPUNIT_TEST( testAudioLayerSwitch );
-        CPPUNIT_TEST( testPulseConnect );
-        // CPPUNIT_TEST( testAlsaConnect );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-        AudioLayerTest() : CppUnit::TestCase("Audio Layer Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown();
-
-        void testAudioLayerConfig();
-        void testAudioLayerSwitch();
-        void testPulseConnect();
-        void testAlsaConnect();
-
-    private:
-
-        ManagerImpl* manager;
-        
-        PulseLayer* _pulselayer;
-       
-        int layer;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( AudioLayerTest );
-
-#endif
diff --git a/sflphone-common/test/audiorecorderTest.cpp b/sflphone-common/test/audiorecorderTest.cpp
deleted file mode 100644
index d4dda35db6..0000000000
--- a/sflphone-common/test/audiorecorderTest.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-
-#include "audiorecorderTest.h"
-
-using std::cout;
-using std::endl;
-
-void AudioRecorderTest::setUp()
-{
-    // Instanciate the object
-    _ar = new AudioRecord();
-}
-
-void AudioRecorderTest::testRecordData()
-{
-
-    /*
-      FILE_TYPE ft = FILE_WAV;
-      SOUND_FORMAT sf = INT16;
-      _ar->setSndSamplingRate(44100);
-      _ar->openFile("theWavFile.wav",ft,sf);
-
-      cout << "file opened!";
-
-      SFLDataFormat buf [2];
-      for (SFLDataFormat i = -32768; i < 32767; i++ ){
-        buf[0] = i;
-        buf[1] = i;
-        _ar->recData(buf,2);
-      }
-
-      _ar->closeFile();
-    */
-}
-
-void AudioRecorderTest::tearDown()
-{
-    // Delete the audio recorder module
-    delete _ar;
-    _ar = NULL;
-}
diff --git a/sflphone-common/test/audiorecorderTest.h b/sflphone-common/test/audiorecorderTest.h
deleted file mode 100644
index 216b657079..0000000000
--- a/sflphone-common/test/audiorecorderTest.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "plug-in/pluginmanager.h"
-#include "plug-in/audiorecorder/audiorecord.h"
-
-/*
- * @file audiorecorderTest.cpp  
- * @brief       Regroups unitary tests related to the plugin manager.
- */
-
-#ifndef _AUDIORECORDER_TEST_
-#define _AUDIORECORDER_TEST_
-
-class AudioRecorderTest : public CppUnit::TestCase {
-
-    /*
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( AudioRecorderTest );
-        CPPUNIT_TEST( testRecordData );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-        AudioRecorderTest() : CppUnit::TestCase("Audio Recorder Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown();
-
-        void testRecordData();
-        
-    private:
-        AudioRecord *_ar;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( AudioRecorderTest );
-
-#endif
diff --git a/sflphone-common/test/configurationTest.cpp b/sflphone-common/test/configurationTest.cpp
deleted file mode 100644
index 1819c92db1..0000000000
--- a/sflphone-common/test/configurationTest.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- *  Copyright (C) 2008 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-
-#include "configurationTest.h"
-
-using std::cout;
-using std::endl;
-
-void ConfigurationTest::setUp()
-{
-    // Load the default configuration
-    Manager::instance().initConfigFile();
-}
-
-void ConfigurationTest::testDefaultValueAudio()
-{
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_CARD_ID_IN) == ALSA_DFT_CARD) ;
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_CARD_ID_OUT) == ALSA_DFT_CARD);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_SAMPLE_RATE) == DFT_SAMPLE_RATE);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_FRAME_SIZE) == DFT_FRAME_SIZE) ;
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_PLUGIN) == PCM_DEFAULT);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, VOLUME_SPKR) == DFT_VOL_SPKR_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, VOLUME_MICRO) == DFT_VOL_MICRO_STR);
-}
-
-void ConfigurationTest::testDefaultValuePreferences()
-{
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, ZONE_TONE) == DFT_ZONE);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_DIALPAD) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_RINGTONE) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_SEARCHBAR) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_START) == NO_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_POPUP) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_NOTIFY) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_MAIL_NOTIFY) == NO_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_VOLUME) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, REGISTRATION_EXPIRE) == DFT_EXPIRE_VALUE);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_AUDIO) == DFT_AUDIO_MANAGER);
-
-}
-
-void ConfigurationTest::testDefaultValueSignalisation()
-{
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , SYMMETRIC) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PLAY_DTMF) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PLAY_TONES) == YES_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PULSE_LENGTH) == DFT_PULSE_LENGTH_STR);
-    CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , SEND_DTMF_AS) == SIP_INFO_STR);
-}
-
-void ConfigurationTest::testLoadSIPAccount()
-{
-
-    AccountMap accounts;
-    Account *current;
-    std::ostringstream ss;
-    int nb_account; // Must be 1
-
-    // Load the account from the user file
-    nb_account = Manager::instance().loadAccountMap();
-    CPPUNIT_ASSERT_EQUAL (1, nb_account);
-    // Save the account information
-    accounts = Manager::instance()._accountMap;
-
-    AccountMap::iterator iter = accounts.begin();
-    CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == true);
-
-    while (iter != accounts.end()) {
-        current = iter->second;
-        CPPUNIT_ASSERT (iter->first == current->getAccountID());
-        CPPUNIT_ASSERT (0 ==  current->getVoIPLink());
-        iter++;
-    }
-}
-
-void ConfigurationTest::testUnloadSIPAccount()
-{
-
-    AccountMap accounts;
-
-    // Load the accounts from the user file
-    Manager::instance().loadAccountMap();
-    // Unload the accounts
-    Manager::instance().unloadAccountMap();
-    // Save the account information
-    accounts = Manager::instance()._accountMap;
-
-    AccountMap::iterator iter = accounts.begin();
-    CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == false);
-
-    if (iter != accounts.end()) {
-        CPPUNIT_FAIL ("Unload account map failed\n");
-    }
-}
-
-void ConfigurationTest::testInitVolume()
-{
-
-    Manager::instance().initVolume();
-
-    CPPUNIT_ASSERT (Manager::instance().getConfigInt (AUDIO, VOLUME_SPKR) == Manager::instance().getSpkrVolume());
-    CPPUNIT_ASSERT (Manager::instance().getConfigInt (AUDIO, VOLUME_MICRO) == Manager::instance().getMicVolume());
-}
-
-void ConfigurationTest::testInitAudioDriver()
-{
-
-    // Load the audio driver
-    Manager::instance().initAudioDriver();
-
-    // Check the creation
-
-    if (Manager::instance().getAudioDriver() == NULL)
-        CPPUNIT_FAIL ("Error while loading audio layer");
-
-    // Check if it has been created with the right type
-    if (Manager::instance().getConfigInt (PREFERENCES, CONFIG_AUDIO) == ALSA)
-        CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), ALSA);
-    else if (Manager::instance().getConfigInt (PREFERENCES, CONFIG_AUDIO) == PULSEAUDIO)
-        CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), PULSEAUDIO);
-    else
-        CPPUNIT_FAIL ("Wrong audio layer type");
-}
-
-void ConfigurationTest::testSelectAudioDriver()
-{
-}
diff --git a/sflphone-common/test/configurationTest.h b/sflphone-common/test/configurationTest.h
deleted file mode 100644
index 87828521ee..0000000000
--- a/sflphone-common/test/configurationTest.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *  Copyright (C) 2008 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "manager.h"
-#include "audio/audiolayer.h"
-#include "global.h"
-#include "user_cfg.h"
-
-/*
- * @file configurationTest.cpp  
- * @brief       Regroups unitary tests related to the user configuration.
- *              Check if the default configuration has been successfully loaded
- */
-
-#ifndef _CONFIGURATION_TEST_
-#define _CONFIGURATION_TEST_
-
-class ConfigurationTest : public CppUnit::TestCase {
-
-    /*
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( ConfigurationTest );
-        CPPUNIT_TEST( testDefaultValueAudio );
-        CPPUNIT_TEST( testDefaultValuePreferences );
-        CPPUNIT_TEST( testDefaultValueSignalisation ); 
-        CPPUNIT_TEST( testLoadSIPAccount );
-        CPPUNIT_TEST( testUnloadSIPAccount );
-        CPPUNIT_TEST( testInitVolume );
-        CPPUNIT_TEST( testInitAudioDriver );
-        CPPUNIT_TEST( testSelectAudioDriver );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-        ConfigurationTest() : CppUnit::TestCase("Configuration Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown(){
-            // Not much to do
-        }
-
-        /*
-         * Unit tests related to the audio preferences
-         */
-        void testDefaultValueAudio();
-            
-        /*
-         * Unit tests related to the global settings
-         */
-        void testDefaultValuePreferences();
-
-        /*
-         * Unit tests related to the global settings
-         */
-        void testDefaultValueSignalisation();
-        
-        /*
-         * Try to load one SIP account.
-         * So be sure to have only one SIP account so that the test could succeed
-         */
-        void testLoadSIPAccount();
-        void testUnloadSIPAccount();
-    
-        void testInitVolume(); 
-
-        void testInitAudioDriver();
-        void testSelectAudioDriver();
-
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( ConfigurationTest );
-
-#endif
diff --git a/sflphone-common/test/history-sample b/sflphone-common/test/history-sample
deleted file mode 100644
index a6f39f4ed3..0000000000
--- a/sflphone-common/test/history-sample
+++ /dev/null
@@ -1,21 +0,0 @@
-[144562436]
-accountid=
-name=Savoir-faire Linux
-number=514-276-5468
-timestamp_stop=144562458
-type=0
-
-[747638685]
-accountid=Account:1239059899
-name=Emmanuel Milou
-number=136
-timestamp_stop=747638765
-type=2
-
-[775354456]
-accountid=Account:43789459478
-name=
-number=5143848557
-timestamp_stop=775354987
-type=1
-
diff --git a/sflphone-common/test/history-sample.tpl b/sflphone-common/test/history-sample.tpl
deleted file mode 100644
index 221e449538..0000000000
--- a/sflphone-common/test/history-sample.tpl
+++ /dev/null
@@ -1,20 +0,0 @@
-[144562436]
-number=514-276-5468
-name=Savoir-faire Linux
-type=0
-timestamp_stop=144562458
-accountid=
-
-[747638685]
-name=Emmanuel Milou
-timestamp_stop=747638765
-number=136
-type=2
-accountid=Account:1239059899
-
-[775354456]
-number=5143848557
-name=
-timestamp_stop=775354987
-type=1
-accountid=Account:43789459478
diff --git a/sflphone-common/test/historyTest.cpp b/sflphone-common/test/historyTest.cpp
deleted file mode 100644
index b21179bb78..0000000000
--- a/sflphone-common/test/historyTest.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-
-#include "historyTest.h"
-#include "manager.h"
-
-using std::cout;
-using std::endl;
-
-#define HISTORY_SAMPLE  "history-sample"
-#define HISTORY_SAMPLE_SIZE     3
-#define CONFIG_SAMPLE   "sflphonedrc-sample"
-#define HUGE_HISTORY_LIMIT      20000
-
-void HistoryTest::setUp()
-{
-    // Instanciate the cleaner singleton
-    history = new HistoryManager ();
-}
-
-void HistoryTest::test_create_history_path ()
-{
-
-    int result;
-    char *cpath;
-    std::string path;
-
-    cpath = getenv ("XDG_DATA_HOME");
-    (cpath != NULL) ? path = std::string (cpath) : path = std::string (HOMEDIR) + "/.local/share/sflphone/history";
-
-    result = history->create_history_path ();
-    CPPUNIT_ASSERT (result == 0);
-    CPPUNIT_ASSERT (!history->is_loaded ());
-    CPPUNIT_ASSERT (history->_history_path == path);
-}
-
-void HistoryTest::test_load_history_from_file ()
-{
-    bool res;
-    Conf::ConfigTree history_list;
-
-    history->create_history_path ();
-    res = history->load_history_from_file (&history_list);
-
-    CPPUNIT_ASSERT (history->is_loaded ());
-    CPPUNIT_ASSERT (res == true);
-}
-
-void HistoryTest::test_load_history_items_map ()
-{
-    std::string path;
-    int nb_items;
-    Conf::ConfigTree history_list;
-
-    history->set_history_path (HISTORY_SAMPLE);
-    history->load_history_from_file (&history_list);
-    nb_items = history->load_history_items_map (&history_list, HUGE_HISTORY_LIMIT);
-    CPPUNIT_ASSERT (nb_items == HISTORY_SAMPLE_SIZE);
-    CPPUNIT_ASSERT (history->get_history_size () == HISTORY_SAMPLE_SIZE);
-}
-
-void HistoryTest::test_save_history_items_map ()
-{
-    std::string path;
-    int nb_items_loaded, nb_items_saved;
-    Conf::ConfigTree history_list, history_list2;
-
-    history->set_history_path (HISTORY_SAMPLE);
-    history->load_history_from_file (&history_list);
-    nb_items_loaded = history->load_history_items_map (&history_list, HUGE_HISTORY_LIMIT);
-    nb_items_saved = history->save_history_items_map (&history_list2);
-    CPPUNIT_ASSERT (nb_items_loaded == nb_items_saved);
-}
-
-void HistoryTest::test_save_history_to_file ()
-{
-    std::string path;
-    Conf::ConfigTree history_list, history_list2;
-    std::map <std::string, std::string> res;
-    std::map <std::string, std::string>::iterator iter;
-
-    history->set_history_path (HISTORY_SAMPLE);
-    history->load_history_from_file (&history_list);
-    history->load_history_items_map (&history_list, HUGE_HISTORY_LIMIT);
-    history->save_history_items_map (&history_list2);
-    CPPUNIT_ASSERT (history->save_history_to_file (&history_list2));
-}
-
-void HistoryTest::test_get_history_serialized ()
-{
-    std::map <std::string, std::string> res;
-    std::map <std::string, std::string>::iterator iter;
-    std::string tmp;
-
-    // Load the sample user config
-    Manager::instance().initConfigFile (true, CONFIG_SAMPLE);
-    Manager::instance().loadAccountMap ();
-
-    CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
-    res = history->get_history_serialized ();
-    CPPUNIT_ASSERT (res.size() ==HISTORY_SAMPLE_SIZE);
-
-    // Warning - If you change the history-sample file, you must change the following lines also so that the tests could work
-    // The reference here is the file history-sample in this test directory
-    // The serialized form is: calltype%to%from%callid
-
-    // Check the first
-    tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-    CPPUNIT_ASSERT (tmp == res ["144562436"]);
-
-    tmp = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-    CPPUNIT_ASSERT (tmp == res ["747638685"]);
-
-    // the account ID does not correspond to a loaded account
-    tmp = "1|5143848557|empty|775354987|empty";
-    CPPUNIT_ASSERT (tmp == res ["775354456"]);
-}
-
-void HistoryTest::test_set_serialized_history ()
-{
-    // We build a map to have an efficient test
-    std::map <std::string, std::string> map_test;
-    std::string tmp;
-    Conf::ConfigTree history_list;
-
-    map_test["144562436"] = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-    map_test["747638685"] = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-    map_test["775354456"] = "1|5143848557|empty|775354987|Account:43789459478";
-
-    CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
-    // We use a large history limit to be able to interpret results
-    CPPUNIT_ASSERT (history->set_serialized_history (map_test, HUGE_HISTORY_LIMIT) == 3);
-    CPPUNIT_ASSERT (history->get_history_size () == 3);
-
-    map_test.clear ();
-    map_test = history->get_history_serialized ();
-    CPPUNIT_ASSERT (map_test.size() ==3);
-
-    // Check the first
-    tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-    CPPUNIT_ASSERT (tmp == map_test ["144562436"]);
-
-    tmp = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-    CPPUNIT_ASSERT (tmp == map_test ["747638685"]);
-
-    // the account ID does not correspond to a loaded account
-    tmp = "1|5143848557|empty|775354987|empty";
-    CPPUNIT_ASSERT (tmp == map_test ["775354456"]);
-
-    history->save_history_items_map (&history_list);
-    CPPUNIT_ASSERT (history->save_history_to_file (&history_list));
-}
-
-void HistoryTest::test_set_serialized_history_with_limit ()
-{
-    // We build a map to have an efficient test
-    std::map <std::string, std::string> map_test;
-    std::string tmp;
-    Conf::ConfigTree history_list;
-    time_t current, day=86400; // One day in unix timestamp
-    std::stringstream current_1, current_2, current_3;
-
-    (void) time (&current);
-    current_1 << (current - 2*day) << std::endl;
-    current_2 << (current - 5*day) << std::endl;
-    current_3 << (current - 11*day) << std::endl;
-
-    map_test[current_1.str () ] = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-    map_test[current_2.str () ] = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-    map_test[current_3.str () ] = "1|5143848557|empty|775354987|Account:43789459478";
-
-    CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
-    // We use different value of history limit
-    // 10 days - the last entry should not be saved
-    CPPUNIT_ASSERT (history->set_serialized_history (map_test, 10) == 2);
-    CPPUNIT_ASSERT (history->get_history_size () == 2);
-
-    //  4 days - the two last entries should not be saved
-    CPPUNIT_ASSERT (history->set_serialized_history (map_test, 4) == 1);
-    CPPUNIT_ASSERT (history->get_history_size () == 1);
-
-    //  1 day - no entry should not be saved
-    CPPUNIT_ASSERT (history->set_serialized_history (map_test, 1) == 0);
-    CPPUNIT_ASSERT (history->get_history_size () == 0);
-}
-
-void HistoryTest::tearDown()
-{
-    // Delete the history object
-    delete history;
-    history=0;
-}
diff --git a/sflphone-common/test/historyTest.h b/sflphone-common/test/historyTest.h
deleted file mode 100644
index 38ac517c9f..0000000000
--- a/sflphone-common/test/historyTest.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "history/historymanager.h"
-
-/*
- * @file historyTest.h  
- * @brief       Regroups unitary tests related to the phone number cleanup function.
- */
-
-#ifndef _HISTORY_TEST_
-#define _HISTORY_TEST_
-
-class HistoryTest : public CppUnit::TestCase {
-
-   /**
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE (HistoryTest);
-        CPPUNIT_TEST (test_create_history_path);
-        CPPUNIT_TEST (test_load_history_from_file);
-        CPPUNIT_TEST (test_load_history_items_map);
-        CPPUNIT_TEST (test_save_history_items_map);
-        CPPUNIT_TEST (test_save_history_to_file);
-        CPPUNIT_TEST (test_get_history_serialized);
-        CPPUNIT_TEST (test_set_serialized_history);
-        CPPUNIT_TEST (test_set_serialized_history_with_limit);
-    CPPUNIT_TEST_SUITE_END ();
-
-    public:
-        HistoryTest() : CppUnit::TestCase("History Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        void test_create_history_path ();
-
-        void test_load_history_from_file ();
-
-        void test_load_history_items_map ();
-
-        void test_save_history_items_map ();
-
-        void test_save_history_to_file ();
-    
-        void test_get_history_serialized ();
-
-        void test_set_serialized_history ();
-
-        void test_set_serialized_history_with_limit ();
-            
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown ();
-
-    private:
-        HistoryManager *history;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( HistoryTest );
-
-#endif
diff --git a/sflphone-common/test/hookmanagerTest.cpp b/sflphone-common/test/hookmanagerTest.cpp
deleted file mode 100644
index 817533a927..0000000000
--- a/sflphone-common/test/hookmanagerTest.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-#include <dlfcn.h>
-
-#include "hookmanagerTest.h"
-
-using std::cout;
-using std::endl;
-
-
-void HookManagerTest::setUp()
-{
-    // Instanciate the hook manager singleton
-    urlhook = new UrlHook ();
-}
-
-void HookManagerTest::testAddAction ()
-{
-
-    int status;
-
-    status = urlhook->addAction ("http://www.google.ca/?arg1=arg1&arg2=nvls&x=2&y=45&z=1", "x-www-browser");
-    CPPUNIT_ASSERT (status == 0);
-}
-
-void HookManagerTest::testLargeUrl ()
-{
-
-    std::string url;
-    std::cout << url.max_size() << std::endl;
-}
-
-void HookManagerTest::tearDown()
-{
-    // Delete the hook manager object
-    delete urlhook;
-    urlhook=0;
-}
diff --git a/sflphone-common/test/hookmanagerTest.h b/sflphone-common/test/hookmanagerTest.h
deleted file mode 100644
index 9c7464125d..0000000000
--- a/sflphone-common/test/hookmanagerTest.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "hooks/urlhook.h"
-
-/*
- * @file hookmanagerTest.cpp  
- * @brief       Regroups unitary tests related to the hook manager.
- */
-
-#ifndef _HOOKMANAGER_TEST_
-#define _HOOKMANAGER_TEST_
-
-class HookManagerTest : public CppUnit::TestCase {
-
-   /**
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE (HookManagerTest);
-        CPPUNIT_TEST (testAddAction);
-        CPPUNIT_TEST (testLargeUrl);
-    CPPUNIT_TEST_SUITE_END ();
-
-    public:
-        HookManagerTest() : CppUnit::TestCase("Hook Manager Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        void testAddAction ();
-
-        void testLargeUrl ();
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown ();
-
-    private:
-        UrlHook *urlhook;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( HookManagerTest );
-
-#endif
diff --git a/sflphone-common/test/hooksTest.h b/sflphone-common/test/hooksTest.h
deleted file mode 100644
index a08e7e3ecd..0000000000
--- a/sflphone-common/test/hooksTest.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-/*
- * @file hooksTest.cpp  
- * @brief       Regroups unitary tests related to the hooks.
- */
-
-#ifndef _HOOKS_TEST_
-#define _HOOKS_TEST_
-
-class HooksTest : public CppUnit::TestCase {
-
-   /**
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE (HooksTest);
-        CPPUNIT_TEST ();
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-        HooksTest() : CppUnit::TestCase("Hooks implementation Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown ();
-
-        void testUnloadPlugins ();
-
-    private:
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION (HooksTest);
-
-#
diff --git a/sflphone-common/test/main.cpp b/sflphone-common/test/main.cpp
new file mode 100644
index 0000000000..3dda5ada70
--- /dev/null
+++ b/sflphone-common/test/main.cpp
@@ -0,0 +1,58 @@
+/*
+ *  Copyright (C) 2004-2007 Savoir-Faire Linux inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 "accounttest.h"
+#include "logger.h"
+#include "global.h"
+#include "manager.h"
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TextTestRunner.h>
+
+int RunTests(void) {
+	Manager::instance().initConfigFile();
+	Manager::instance().init();
+
+	Logger::setDebugMode(true);
+	Logger::setConsoleLog(true);
+
+	// Get the top level suite from the registry
+	CppUnit::Test *suite =
+			CppUnit::TestFactoryRegistry::getRegistry().makeTest();
+
+	// Adds the test to the list of test to run
+	// CppUnit::TextUi::TestRunner runner;
+	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));
+	// Run the tests.
+	bool wasSucessful = runner.run();
+
+	// Return error code 1 if the one of test failed.
+	return wasSucessful ? 0 : 1;
+
+	Manager::instance().terminate();
+}
+
+int main(void) {
+	return RunTests();
+}
diff --git a/sflphone-common/test/mainbufferTest.cpp b/sflphone-common/test/mainbufferTest.cpp
deleted file mode 100644
index 830ff2c769..0000000000
--- a/sflphone-common/test/mainbufferTest.cpp
+++ /dev/null
@@ -1,1772 +0,0 @@
-/*
- *  Copyright (C) 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 <stdio.h>
-#include <sstream>
-#include <ccrtp/rtp.h>
-#include <assert.h>
-#include <string>
-#include <cstring>
-#include <math.h>
-#include <dlfcn.h>
-#include <iostream>
-#include <sstream>
-
-
-#include "mainbufferTest.h"
-
-#include <unistd.h>
-
-
-using std::cout;
-using std::endl;
-
-
-void MainBufferTest::setUp()
-{
-
-
-}
-
-
-void MainBufferTest::tearDown()
-{
-
-}
-
-
-void MainBufferTest::testRingBufferCreation()
-{
-    _debug ("MainBufferTest::testRingBufferCreation()");
-
-    CallID test_id = "1234";
-    CallID null_id = "null id";
-
-    RingBuffer* test_ring_buffer;
-    RingBufferMap::iterator iter;
-
-    // test mainbuffer ringbuffer map size
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    test_ring_buffer = _mainbuffer.createRingBuffer (test_id);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
-
-    // test _mainbuffer.getRingBuffer method
-    CPPUNIT_ASSERT (test_ring_buffer != NULL);
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (null_id) == NULL);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id) == test_ring_buffer);
-
-    // test _mainbuffer _ringBufferMap
-    iter = _mainbuffer._ringBufferMap.find (null_id);
-    CPPUNIT_ASSERT (iter == _mainbuffer._ringBufferMap.end());
-    iter = _mainbuffer._ringBufferMap.find (test_id);
-    CPPUNIT_ASSERT (iter->first == test_id);
-    CPPUNIT_ASSERT (iter->second == test_ring_buffer);
-    CPPUNIT_ASSERT (iter->second == _mainbuffer.getRingBuffer (test_id));
-
-    // test creating twice a buffer (should not create it)
-    _mainbuffer.createRingBuffer (test_id);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id) == test_ring_buffer);
-
-    // test remove ring buffer
-    CPPUNIT_ASSERT (_mainbuffer.removeRingBuffer (null_id) == true);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
-    CPPUNIT_ASSERT (_mainbuffer.removeRingBuffer (test_id) == true);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id) == NULL);
-
-    iter = _mainbuffer._ringBufferMap.find (test_id);
-    CPPUNIT_ASSERT (iter == _mainbuffer._ringBufferMap.end());
-
-}
-
-
-void MainBufferTest::testRingBufferReadPointer()
-{
-    _debug ("MainBufferTest::testRingBufferReadPointer()");
-
-    CallID call_id = "call id";
-    CallID read_id = "read id";
-    CallID null_id = "null id";
-    CallID other_id = "other id";
-
-    RingBuffer* test_ring_buffer;
-
-    // test ring buffer read pointers (one per participant)
-    test_ring_buffer = _mainbuffer.createRingBuffer (call_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == (int) NULL);
-
-    // create a read pointer
-    test_ring_buffer->createReadPointer (read_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (null_id) == (int) NULL);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == 0);
-
-    // store read pointer
-    test_ring_buffer->storeReadPointer (4, read_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == 4);
-
-    // recreate the same read pointer (should not add a pointer neither chage its value)
-    test_ring_buffer->createReadPointer (read_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    test_ring_buffer->storeReadPointer (8, read_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == 8);
-
-    // test getSmallest read pointer (to get the length available to put data in the buffer)
-    test_ring_buffer->createReadPointer (other_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
-    test_ring_buffer->storeReadPointer (4, other_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getSmallestReadPointer() == 4);
-
-    // remove read pointers
-    test_ring_buffer->removeReadPointer (other_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    test_ring_buffer->removeReadPointer (read_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
-}
-
-
-void MainBufferTest::testCallIDSet()
-{
-    _debug ("MainBufferTest::testCallIDSet()");
-
-    CallID test_id = "set id";
-    CallID false_id = "false set id";
-    // CallIDSet* callid_set = 0;
-
-    CallIDMap::iterator iter_map;
-    CallIDSet::iterator iter_set;
-
-    CallID call_id_1 = "call id 1";
-    CallID call_id_2 = "call id 2";
-
-    // test initial settings
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map ==_mainbuffer._callIDMap.end());
-
-    // test callidset creation
-    CPPUNIT_ASSERT (_mainbuffer.createCallIDSet (test_id) == true);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 1);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map->first == test_id);
-    CPPUNIT_ASSERT (iter_map->second == _mainbuffer.getCallIDSet (test_id));
-
-    CPPUNIT_ASSERT (_mainbuffer.getCallIDSet (false_id) == NULL);
-    CPPUNIT_ASSERT (_mainbuffer.getCallIDSet (test_id) != NULL);
-
-
-    // Test callIDSet add call_ids
-    _mainbuffer.addCallIDtoSet (test_id, call_id_1);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map->second->size() == 1);
-    iter_set = iter_map->second->find (call_id_1);
-    CPPUNIT_ASSERT (*iter_set == call_id_1);
-
-    // test add second call id to set
-    _mainbuffer.addCallIDtoSet (test_id, call_id_2);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map->second->size() == 2);
-    iter_set = iter_map->second->find (call_id_2);
-    CPPUNIT_ASSERT (*iter_set == call_id_2);
-
-    // test add a call id twice
-    _mainbuffer.addCallIDtoSet (test_id, call_id_2);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map->second->size() == 2);
-    iter_set = iter_map->second->find (call_id_2);
-    CPPUNIT_ASSERT (*iter_set == call_id_2);
-
-    // test remove a call id
-    _mainbuffer.removeCallIDfromSet (test_id, call_id_2);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map->second->size() == 1);
-    iter_set = iter_map->second->find (call_id_1);
-    CPPUNIT_ASSERT (*iter_set == call_id_1);
-    iter_set = iter_map->second->find (call_id_2);
-    CPPUNIT_ASSERT (iter_set == iter_map->second->end());
-
-    // test remove a call id twice
-    _mainbuffer.removeCallIDfromSet (test_id, call_id_2);
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map->second->size() == 1);
-    iter_set = iter_map->second->find (call_id_1);
-    CPPUNIT_ASSERT (*iter_set == call_id_1);
-    iter_set = iter_map->second->find (call_id_2);
-    CPPUNIT_ASSERT (iter_set == iter_map->second->end());
-
-    // Test removeCallIDSet
-    CPPUNIT_ASSERT (_mainbuffer.removeCallIDSet (false_id) == false);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 1);
-    CPPUNIT_ASSERT (_mainbuffer.removeCallIDSet (test_id) == true);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-
-    iter_map = _mainbuffer._callIDMap.find (test_id);
-    CPPUNIT_ASSERT (iter_map ==_mainbuffer._callIDMap.end());
-
-
-}
-
-
-void MainBufferTest::testRingBufferInt()
-{
-
-    _debug ("MainBufferTest::testRingbufferInt()");
-
-    // CallID test_id = "test_int";
-
-    int testint1 = 12;
-    int testint2 = 13;
-    int init_put_size;
-
-
-    // test with default ring buffer
-    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (default_id);
-
-    // initial state
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
-
-    // add some data
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
-
-    // add some other data
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
-
-    int testget = (int) NULL;
-
-    // get some data (without any read pointers)
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int)) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 2*sizeof (int));
-    CPPUNIT_ASSERT (testget == (int) NULL);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
-
-    // get some data (with a read pointer)
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
-    test_ring_buffer->createReadPointer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
-
-    // add some data
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 2*sizeof (int));
-
-    // add some other data
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 2*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int), 100, default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (int));
-    CPPUNIT_ASSERT (testget == testint1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 3*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (testget == testint2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 4*sizeof (int));
-
-
-    // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (int));
-
-
-    test_ring_buffer->flush();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 5*sizeof (int));
-
-    // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 5*sizeof (int));
-
-    test_ring_buffer->Discard (sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 6*sizeof (int));
-
-
-}
-
-
-void MainBufferTest::testRingBufferNonDefaultID()
-{
-
-    _debug ("MainBufferTest::testRingBufferNonDefaultID()");
-
-    CallID test_id = "test_int";
-
-    int testint1 = 12;
-    int testint2 = 13;
-    int init_put_size;
-
-
-    // test putData, getData with arbitrary read pointer id
-    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (default_id);
-    test_ring_buffer->createReadPointer (test_id);
-
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (default_id) == 0);
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (default_id) == 0);
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (default_id) == 0);
-
-    int testget;
-
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int), 100,  test_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (testget == testint1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int), 100, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (testget == testint2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 2*sizeof (int));
-
-
-    // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == sizeof (int));
-
-
-    test_ring_buffer->flush (test_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 3*sizeof (int));
-
-    // test flush data
-    init_put_size = test_ring_buffer->AvailForPut();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 3*sizeof (int));
-
-    test_ring_buffer->Discard (sizeof (int), test_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 4*sizeof (int));
-
-    test_ring_buffer->removeReadPointer (test_id);
-
-}
-
-
-void MainBufferTest::testRingBufferFloat()
-{
-
-    _debug ("MainBufferTest::testRingBufferFloat()");
-
-    float testfloat1 = 12.5;
-    float testfloat2 = 13.4;
-
-    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (default_id);
-    test_ring_buffer->createReadPointer (default_id);
-
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testfloat1, sizeof (float)) == sizeof (float));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (float));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testfloat2, sizeof (float)) == sizeof (float));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (float));
-
-    float testget;
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (float)) == sizeof (float));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (float));
-    CPPUNIT_ASSERT (testget == testfloat1);
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (float)) == sizeof (float));
-    CPPUNIT_ASSERT (testget == testfloat2);
-    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testfloat1, sizeof (float)) == sizeof (float));
-    test_ring_buffer->flush();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-
-}
-
-
-void MainBufferTest::testTwoPointer()
-{
-
-    _debug ("MainBufferTest::testTwoPointer()");
-
-
-    RingBuffer* input_buffer = _mainbuffer.createRingBuffer (default_id);
-    input_buffer->createReadPointer (default_id);
-    RingBuffer* output_buffer = _mainbuffer.getRingBuffer (default_id);
-
-    int test_input = 12;
-    int test_output;
-
-    CPPUNIT_ASSERT (input_buffer->Put (&test_input, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (output_buffer->Get (&test_output, sizeof (float)) == sizeof (float));
-    CPPUNIT_ASSERT (test_input == test_output);
-
-}
-
-void MainBufferTest::testBindUnbindBuffer()
-{
-
-    _debug ("MainBufferTest::testBindUnbindBuffer()");
-
-    CallID test_id1 = "bind unbind 1";
-    CallID test_id2 = "bind unbind 2";
-
-    RingBufferMap::iterator iter_buffer;
-    CallIDMap::iterator iter_idset;
-    CallIDSet::iterator iter_id;
-
-    ReadPointer::iterator iter_readpointer;
-
-    RingBuffer* ringbuffer;
-
-    // test initial state with no ring brffer created
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
-
-    // bind test_id1 with default_id (both buffer not already created)
-    _mainbuffer.bindCallID (test_id1);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer->first == default_id);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
-
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    ringbuffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-
-    // unbind test_id1 with default_id
-    _mainbuffer.unBindCallID (test_id1);
-
-    _debug ("%i", (int) (_mainbuffer._ringBufferMap.size()));
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id) == NULL);
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id1) == NULL);
-
-
-    // bind test_id2 with default_id (default_id already created)
-    // calling it twice not supposed to break anything
-    _mainbuffer.bindCallID (test_id1, default_id);
-    _mainbuffer.bindCallID (test_id1, default_id);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
-    iter_idset = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
-
-    _mainbuffer.bindCallID (test_id2, default_id);
-    _mainbuffer.bindCallID (test_id2, default_id);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer->first == default_id);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id2);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id2));
-
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-    iter_id = iter_idset->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_id == test_id2);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    ringbuffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    // bind test_id1 with test_id2 (both testid1 and test_id2 already created)
-    // calling it twice not supposed to break anything
-    _mainbuffer.bindCallID (test_id1, test_id2);
-    _mainbuffer.bindCallID (test_id1, test_id2);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer->first == default_id);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id2);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id2));
-
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-    iter_id = iter_idset->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_id == test_id2);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-    iter_id = iter_idset->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_id == test_id2);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-
-    ringbuffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    // unbind test_id1 with test_id2
-    // calling it twice not supposed to break anything
-    _mainbuffer.unBindCallID (test_id1, test_id2);
-    _mainbuffer.unBindCallID (test_id1, test_id2);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer->first == default_id);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id2);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id2));
-
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-    iter_id = iter_idset->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_id == test_id2);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    ringbuffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-
-
-    _debug ("ok1");
-
-    // unbind test_id1 with test_id2
-    // calling it twice not supposed to break anything
-    _mainbuffer.unBindCallID (default_id, test_id2);
-    _mainbuffer.unBindCallID (default_id, test_id2);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer->first == default_id);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
-
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-    iter_id = iter_idset->second->find (test_id2);
-    CPPUNIT_ASSERT (iter_id == iter_idset->second->end());
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
-
-    ringbuffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
-
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id2) == NULL);
-
-
-    _mainbuffer.unBindCallID (default_id, test_id1);
-
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-
-    // test unbind all function
-    _mainbuffer.bindCallID (default_id, test_id1);
-    _mainbuffer.bindCallID (default_id, test_id2);
-    _mainbuffer.bindCallID (test_id1, test_id2);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-
-    _mainbuffer.unBindAll (test_id2);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
-    CPPUNIT_ASSERT (iter_buffer->first == default_id);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
-    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
-
-    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
-
-    iter_idset = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_id == test_id1);
-    iter_id = iter_idset->second->find (test_id2);
-    CPPUNIT_ASSERT (iter_id == iter_idset->second->end());
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
-    iter_id = iter_idset->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_id == default_id);
-
-    iter_idset = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
-
-    ringbuffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
-
-    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (ringbuffer != NULL);
-    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
-    iter_readpointer = ringbuffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
-
-
-}
-
-void MainBufferTest::testGetPutDataByID()
-{
-
-    _debug ("MainBufferTest::testGetPutData()");
-
-    CallID test_id = "getData putData";
-    CallID false_id = "false id";
-
-    _mainbuffer.bindCallID (test_id);
-
-    int test_input1 = 12;
-    int test_input2 = 13;
-    int test_output;
-
-    int avail_for_put_testid;
-    int avail_for_put_defaultid;
-
-    // put by default_id get by test_id without preleminary put
-    avail_for_put_defaultid = _mainbuffer.availForPut();
-    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (default_id, test_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, default_id, test_id) == 0);
-
-    // put by default_id, get by test_id
-    CPPUNIT_ASSERT (_mainbuffer.availForPut() == avail_for_put_defaultid);
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForPut() == (avail_for_put_defaultid - (int) sizeof (int)));
-    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (default_id, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, default_id, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (default_id, test_id) == 0);
-    CPPUNIT_ASSERT (test_input1 == test_output);
-
-    // get by default_id without preliminary input
-    avail_for_put_testid = _mainbuffer.availForPut (test_id);
-    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (test_id, default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, test_id, default_id) == 0);
-
-    // pu by test_id get by test_id
-    CPPUNIT_ASSERT (_mainbuffer.availForPut (test_id) == avail_for_put_defaultid);
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input2, sizeof (int), 100, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (test_id, default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, test_id, default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (test_id, default_id) == 0);
-    CPPUNIT_ASSERT (test_input2 == test_output);
-
-    // put/get by false id
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input2, sizeof (int), 100, false_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_input2, sizeof (int), 100, false_id, false_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_input2, sizeof (int), 100, default_id, false_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_input2, sizeof (int), 100, false_id, default_id) == 0);
-
-    _mainbuffer.unBindCallID (test_id);
-
-}
-
-
-
-void MainBufferTest::testGetPutData()
-{
-
-    _debug ("MainBufferTest::testGetDataAndCallID()");
-
-    CallID test_id = "incoming rtp session";
-
-    _mainbuffer.bindCallID (test_id);
-
-    int test_input1 = 12;
-    int test_input2 = 13;
-    int test_output;
-
-    int avail_for_put_testid;
-    int avail_for_put_defaultid;
-
-    // get by test_id without preleminary put
-    avail_for_put_defaultid = _mainbuffer.availForPut();
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100,  test_id) == 0);
-
-    // put by default_id, get by test_id
-    CPPUNIT_ASSERT (_mainbuffer.availForPut() == avail_for_put_defaultid);
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int), 100) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForPut() == (avail_for_put_defaultid - (int) sizeof (int)));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
-    CPPUNIT_ASSERT (test_input1 == test_output);
-
-    // get by default_id without preleminary put
-    avail_for_put_testid = _mainbuffer.availForPut (test_id);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet() == 0);
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int)) == 0);
-
-    // put by test_id, get by default_id
-    CPPUNIT_ASSERT (_mainbuffer.availForPut (test_id) == avail_for_put_testid);
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input2, sizeof (int), 100, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForPut (test_id) == (avail_for_put_testid - (int) sizeof (int)));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet() == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet() == 0);
-    CPPUNIT_ASSERT (test_input2 == test_output);
-
-    _mainbuffer.unBindCallID (test_id);
-
-}
-
-
-void MainBufferTest::testDiscardFlush()
-{
-
-    _debug ("MainBufferTest::testDiscardFlush()");
-
-    CallID test_id = "flush discard";
-    // _mainbuffer.createRingBuffer(test_id);
-    _mainbuffer.bindCallID (test_id);
-
-    int test_input1 = 12;
-    // int test_output_size;
-    // int init_size;
-
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int), 100, test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet() == sizeof (int));
-    _mainbuffer.discard (sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet() == 0);
-
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
-    _mainbuffer.discard (sizeof (int), test_id);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
-
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id)->getReadPointer (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id)->getReadPointer (test_id) == 0);
-
-
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int), 100) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == 0);
-
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == sizeof (int));
-
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == 0);
-    _mainbuffer.discard (sizeof (int), test_id);
-    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
-
-    // _mainbuffer.removeRingBuffer(test_id);
-    _mainbuffer.unBindCallID (test_id);
-
-}
-
-
-void MainBufferTest::testReadPointerInit()
-{
-
-    _debug ("MainBufferTest::testReadPointerInit()");
-
-    CallID test_id = "test read pointer init";
-    // RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer(test_id);
-
-    _mainbuffer.bindCallID (test_id);
-
-    RingBuffer* test_ring_buffer = _mainbuffer.getRingBuffer (test_id);
-
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
-    test_ring_buffer->storeReadPointer (30);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 30);
-
-    test_ring_buffer->createReadPointer (test_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 0);
-    test_ring_buffer->storeReadPointer (10, test_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 10);
-    test_ring_buffer->removeReadPointer (test_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == (int) NULL);
-    test_ring_buffer->removeReadPointer ("false id");
-
-    // _mainbuffer.removeRingBuffer(test_id);
-    _mainbuffer.unBindCallID (test_id);
-}
-
-
-void MainBufferTest::testRingBufferSeveralPointers()
-{
-
-    _debug ("MainBufferTest::testRingBufferSeveralPointers");
-
-    CallID test_id = "test multiple read pointer";
-    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (test_id);
-
-    CallID test_pointer1 = "test pointer 1";
-    CallID test_pointer2 = "test pointer 2";
-
-    test_ring_buffer->createReadPointer (test_pointer1);
-    test_ring_buffer->createReadPointer (test_pointer2);
-
-    int testint1 = 12;
-    int testint2 = 13;
-    int testint3 = 14;
-    int testint4 = 15;
-
-    int testoutput;
-
-    int initPutLen = test_ring_buffer->AvailForPut();
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 2*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint3, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 3*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == 3*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == 3*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 3*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 3*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint4, sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 4*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 4* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == 4*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == 4*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 4*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 4*sizeof (int));
-
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (testoutput == testint1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 4* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 3*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 4*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer2) == sizeof (int));
-    CPPUNIT_ASSERT (testoutput == testint1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 3*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 3*sizeof (int));
-
-    // AvailForPut() is ok but AvailForGet(default_id) is not ok
-    // However, we should no be alowed to read in our own ring buffer
-    // if we are either an AudioLayer or and RTP session
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 4*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (testoutput == testint2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 3*sizeof (int));
-
-    // AvailForPut() is ok but AvailForGet(default_id) is not ok
-    // However, we should no be alowed to read in our own ring buffer
-    // if we are either an AudioLayer or and RTP session
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 4*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer2) == sizeof (int));
-    CPPUNIT_ASSERT (testoutput == testint2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 2*sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 2*sizeof (int));
-
-    // AvailForPut() is ok but AvailForGet(default_id) is not ok
-    // However, we should no be alowed to read in our own ring buffer
-    // if we are either an AudioLayer or and RTP session
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 4*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Discard (sizeof (int), test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 2*sizeof (int));
-
-    CPPUNIT_ASSERT (test_ring_buffer->Discard (sizeof (int), test_pointer2) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - (int) sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == sizeof (int));
-
-
-    test_ring_buffer->removeReadPointer (test_pointer1);
-    test_ring_buffer->removeReadPointer (test_pointer2);
-
-    _mainbuffer.removeRingBuffer (test_id);
-}
-
-
-
-void MainBufferTest::testConference()
-{
-
-    _debug ("MainBufferTest::testConference()");
-
-    CallID test_id1 = "participant A";
-    CallID test_id2 = "participant B";
-    RingBuffer* test_ring_buffer;
-
-    RingBufferMap::iterator iter_ringbuffermap;
-    ReadPointer::iterator iter_readpointer;
-    CallIDMap::iterator iter_callidmap;
-    CallIDSet::iterator iter_callidset;
-
-
-
-    // test initial setup
-    // ringbuffers
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer == NULL);
-
-    // callidmap
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_callidmap == _mainbuffer._callIDMap.end());
-
-
-    // test bind Participant A with default
-    _mainbuffer.bindCallID (test_id1);
-    // ringbuffers
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    // callidmap
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
-    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_callidmap->first == default_id);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_callidset == test_id1);
-    iter_callidmap = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_callidmap->first == test_id1);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_callidset == default_id);
-
-    // test bind Participant B with default
-    _mainbuffer.bindCallID (test_id2);
-    // ringbuffers
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
-    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    // callidmap
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_callidmap->first == default_id);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
-    iter_callidset = iter_callidmap->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_callidset == test_id1);
-    iter_callidset = iter_callidmap->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_callidset == test_id2);
-    iter_callidmap = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_callidmap->first == test_id1);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_callidset == default_id);
-    iter_callidmap = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_callidmap->first == test_id2);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
-    iter_callidset = iter_callidmap->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_callidset == default_id);
-
-
-    // test bind Participant A with Participant B
-    _mainbuffer.bindCallID (test_id1, test_id2);
-    // ringbuffers
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
-    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
-    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
-    CPPUNIT_ASSERT (iter_readpointer->second == 0);
-    // callidmap
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
-    CPPUNIT_ASSERT (iter_callidmap->first == default_id);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
-    iter_callidset = iter_callidmap->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_callidset == test_id1);
-    iter_callidset = iter_callidmap->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_callidset == test_id2);
-    iter_callidmap = _mainbuffer._callIDMap.find (test_id1);
-    CPPUNIT_ASSERT (iter_callidmap->first == test_id1);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
-    iter_callidset = iter_callidmap->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_callidset == default_id);
-    iter_callidset = iter_callidmap->second->find (test_id2);
-    CPPUNIT_ASSERT (*iter_callidset == test_id2);
-    iter_callidmap = _mainbuffer._callIDMap.find (test_id2);
-    CPPUNIT_ASSERT (iter_callidmap->first == test_id2);
-    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
-    iter_callidset = iter_callidmap->second->find (default_id);
-    CPPUNIT_ASSERT (*iter_callidset == default_id);
-    iter_callidset = iter_callidmap->second->find (test_id1);
-    CPPUNIT_ASSERT (*iter_callidset == test_id1);
-
-
-    // test putData default
-    int testint = 12;
-    int init_put_defaultid;
-    int init_put_id1;
-    int init_put_id2;
-
-    init_put_defaultid = _mainbuffer.getRingBuffer (default_id)->AvailForPut();
-    init_put_id1 = _mainbuffer.getRingBuffer (test_id1)->AvailForPut();
-    init_put_id2 = _mainbuffer.getRingBuffer (test_id2)->AvailForPut();
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
-    // put data test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget (get data even if some participant missing)
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id1) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget (get data even if some participant missing)
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-
-
-    int test_output;
-
-    // test getData default id (audio layer)
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100) == sizeof (int));
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    // test getData test_id1 (audio layer)
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100, test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    // test getData test_id2 (audio layer)
-    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100, test_id2) == sizeof (int));
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_defaultid);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
-
-
-    // test putData default (for discarting)
-    init_put_defaultid = _mainbuffer.getRingBuffer (default_id)->AvailForPut();
-    init_put_id1 = _mainbuffer.getRingBuffer (test_id1)->AvailForPut();
-    init_put_id2 = _mainbuffer.getRingBuffer (test_id2)->AvailForPut();
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
-    // put data test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id1) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-
-    // test discardData default id (audio layer)
-    CPPUNIT_ASSERT (_mainbuffer.discard (sizeof (int)) == sizeof (int));
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    // test discardData test_id1 (audio layer)
-    CPPUNIT_ASSERT (_mainbuffer.discard (sizeof (int), test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    // test discardData test_id2 (audio layer)
-    CPPUNIT_ASSERT (_mainbuffer.discard (sizeof (int), test_id2) == sizeof (int));
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_defaultid);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
-
-
-    // test putData default (for flushing)
-    init_put_defaultid = _mainbuffer.getRingBuffer (default_id)->AvailForPut();
-    init_put_id1 = _mainbuffer.getRingBuffer (test_id1)->AvailForPut();
-    init_put_id2 = _mainbuffer.getRingBuffer (test_id2)->AvailForPut();
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
-    // put data test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id1) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    //putdata test ring buffers
-    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-
-    // test flush default id (audio layer)
-    _mainbuffer.flush();
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    _debug ("%i", test_ring_buffer->putLen());
-    test_ring_buffer->debug();
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    // test flush test_id1 (audio layer)
-    _mainbuffer.flush (test_id1);
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
-    // test flush test_id2 (audio layer)
-    _mainbuffer.flush (test_id2);
-    CPPUNIT_ASSERT (test_output == (testint + testint));
-    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_defaultid);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
-    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
-    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
-    // test mainbuffer availforget
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
-    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
-
-
-    _mainbuffer.unBindCallID (test_id1, test_id2);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
-
-    _mainbuffer.unBindCallID (test_id1);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
-
-    _mainbuffer.unBindCallID (test_id2);
-    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
-    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
-
-
-}
diff --git a/sflphone-common/test/mainbufferTest.h b/sflphone-common/test/mainbufferTest.h
deleted file mode 100644
index 330228f9a9..0000000000
--- a/sflphone-common/test/mainbufferTest.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *  Copyright (C) 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.
- */
-
-// 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"
-
-
-
-/*
- * @file audiorecorderTest.cpp  
- * @brief       Regroups unitary tests related to the plugin manager.
- */
-
-#ifndef _MAINBUFFER_TEST_
-#define _MAINBUFFER_TEST_
-
-
-
-class MainBufferTest : public CppUnit::TestCase {
-
-    /*
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( MainBufferTest );
-       CPPUNIT_TEST( testRingBufferCreation );
-       CPPUNIT_TEST( testRingBufferReadPointer );
-       CPPUNIT_TEST( testCallIDSet );
-       CPPUNIT_TEST( testRingBufferInt );
-       CPPUNIT_TEST( testRingBufferNonDefaultID );
-       CPPUNIT_TEST( testRingBufferFloat );
-       CPPUNIT_TEST( testTwoPointer );
-       CPPUNIT_TEST( testBindUnbindBuffer );
-       CPPUNIT_TEST( testGetPutDataByID );
-       CPPUNIT_TEST( testGetPutData );
-       CPPUNIT_TEST( testDiscardFlush );
-       CPPUNIT_TEST( testReadPointerInit );
-       CPPUNIT_TEST( testRingBufferSeveralPointers );
-       CPPUNIT_TEST( testConference );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-
-        MainBufferTest() : CppUnit::TestCase("Audio Layer Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown();
-
-        void testRingBufferCreation();
-
-	void testRingBufferReadPointer();
-
-	void testCallIDSet();
-
-	void testRingBufferInt();
-
-	void testRingBufferNonDefaultID();
-
-	void testRingBufferFloat();
-
-	void testTwoPointer();
-
-	void testBindUnbindBuffer();
-
-	void testGetPutDataByID();
-
-	void testGetPutData();
-
-	void testAvailForGetPut();
-
-	void testDiscardFlush();
-
-	void testReadPointerInit();
-
-	void testRingBufferSeveralPointers();
-
-	void testConference();
-
-    private:
-
-	MainBuffer _mainbuffer;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( MainBufferTest );
-
-#endif
diff --git a/sflphone-common/test/numbercleanerTest.cpp b/sflphone-common/test/numbercleanerTest.cpp
deleted file mode 100644
index 03dca41604..0000000000
--- a/sflphone-common/test/numbercleanerTest.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-#include <dlfcn.h>
-
-#include "numbercleanerTest.h"
-
-#define NUMBER_TEST_1   "514 333 4444"
-#define NUMBER_TEST_2   "514-333-4444"
-#define NUMBER_TEST_3   "(514) 333 4444"
-#define NUMBER_TEST_4   "(514)-333-4444"
-#define NUMBER_TEST_5   "(514) 333-4444"
-#define NUMBER_TEST_6   "514 333  4444"
-#define NUMBER_TEST_7   "ext 136"
-#define NUMBER_TEST_8   "514 333  4444 ext. 136"
-#define NUMBER_TEST_9   "514 333  4444 ext 136"
-#define NUMBER_TEST_10   "136"
-
-#define VALID_NUMBER                "5143334444"
-#define VALID_PREPENDED_NUMBER      "95143334444"
-#define VALID_EXTENSION             "136"
-
-using std::cout;
-using std::endl;
-
-
-void NumberCleanerTest::setUp()
-{
-    // Instanciate the cleaner singleton
-    cleaner = new NumberCleaner ();
-}
-
-void NumberCleanerTest::test_format_1 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_1) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_2 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_2) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_3 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_3) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_4 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_4) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_5 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_5) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_6 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_6) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_7 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_7) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_8 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_8) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_9 (void)
-{
-
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_9) == VALID_NUMBER);
-}
-
-void NumberCleanerTest::test_format_10 (void)
-{
-
-    cleaner->set_phone_number_prefix ("9");
-    CPPUNIT_ASSERT (cleaner->get_phone_number_prefix () == "9");
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_1) == VALID_PREPENDED_NUMBER);
-}
-
-void NumberCleanerTest::test_format_11 (void)
-{
-
-    cleaner->set_phone_number_prefix ("9");
-    CPPUNIT_ASSERT (cleaner->get_phone_number_prefix () == "9");
-    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_10) == VALID_EXTENSION);
-}
-
-void NumberCleanerTest::tearDown()
-{
-    // Delete the cleaner object
-    delete cleaner;
-    cleaner=0;
-}
diff --git a/sflphone-common/test/numbercleanerTest.h b/sflphone-common/test/numbercleanerTest.h
deleted file mode 100644
index 3af6ab8c92..0000000000
--- a/sflphone-common/test/numbercleanerTest.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "numbercleaner.h"
-// #include "../src/conference.h"
-/*
- * @file numbercleanerTest.cpp  
- * @brief       Regroups unitary tests related to the phone number cleanup function.
- */
-
-#ifndef _NUMBERCLEANER_TEST_
-#define _NUMBERCLEANER_TEST_
-
-class NumberCleanerTest : public CppUnit::TestCase {
-
-   /**
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE (NumberCleanerTest);
-        CPPUNIT_TEST (test_format_1);
-        CPPUNIT_TEST (test_format_2);
-        CPPUNIT_TEST (test_format_3);
-        CPPUNIT_TEST (test_format_4);
-        CPPUNIT_TEST (test_format_5);
-        CPPUNIT_TEST (test_format_6);
-        CPPUNIT_TEST (test_format_7);
-        CPPUNIT_TEST (test_format_8);
-        CPPUNIT_TEST (test_format_9);
-        CPPUNIT_TEST (test_format_10);
-        CPPUNIT_TEST (test_format_11);
-    CPPUNIT_TEST_SUITE_END ();
-
-    public:
-        NumberCleanerTest() : CppUnit::TestCase("Hook Manager Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        void test_format_1 ();
-
-        void test_format_2 ();
-
-        void test_format_3 ();
-
-        void test_format_4 ();
-        
-        void test_format_5 ();
-
-        void test_format_6 ();
-        
-        void test_format_7 ();
-        
-        void test_format_8 ();
-
-        void test_format_9 ();
-        
-        void test_format_10 ();
-
-        void test_format_11 ();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown ();
-
-    private:
-        NumberCleaner *cleaner;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( NumberCleanerTest );
-
-#endif
diff --git a/sflphone-common/test/pluginmanagerTest.cpp b/sflphone-common/test/pluginmanagerTest.cpp
deleted file mode 100644
index 86b4890c6f..0000000000
--- a/sflphone-common/test/pluginmanagerTest.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
-#include <sstream>
-#include <dlfcn.h>
-
-#include "pluginmanagerTest.h"
-
-using std::cout;
-using std::endl;
-
-#define PLUGIN_TEST_DIR  "/usr/lib/sflphone/plugins/"
-#define PLUGIN_TEST_DESC  "mytest"
-#define PLUGIN_TEST_NAME  "/usr/lib/sflphone/plugins/libplugintest.so"
-
-
-void PluginManagerTest::setUp()
-{
-    // Instanciate the plugin manager singleton
-    _pm = PluginManager::instance();
-    library = 0;
-    plugin = 0;
-}
-
-void PluginManagerTest::testLoadDynamicLibrary()
-{
-    CPPUNIT_ASSERT (_pm->loadDynamicLibrary (PLUGIN_TEST_NAME) != NULL);
-}
-
-void PluginManagerTest::testUnloadDynamicLibrary()
-{
-    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
-    CPPUNIT_ASSERT (library != NULL);
-    CPPUNIT_ASSERT (_pm->unloadDynamicLibrary (library) == 0);
-}
-
-void PluginManagerTest::testInstanciatePlugin()
-{
-    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
-    CPPUNIT_ASSERT (library != NULL);
-    CPPUNIT_ASSERT (_pm->instanciatePlugin (library, &plugin) == 0);
-    CPPUNIT_ASSERT (plugin!=NULL);
-}
-
-void PluginManagerTest::testInitPlugin()
-{
-
-    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
-    CPPUNIT_ASSERT (library != NULL);
-    CPPUNIT_ASSERT (_pm->instanciatePlugin (library, &plugin) == 0);
-    CPPUNIT_ASSERT (plugin!=NULL);
-    CPPUNIT_ASSERT (plugin->getPluginName() == PLUGIN_TEST_DESC);
-}
-
-void PluginManagerTest::testRegisterPlugin()
-{
-    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
-    CPPUNIT_ASSERT (library != NULL);
-    CPPUNIT_ASSERT (_pm->instanciatePlugin (library, &plugin) == 0);
-    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == false);
-    CPPUNIT_ASSERT (_pm->registerPlugin (plugin, library) == 0);
-    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
-}
-
-void PluginManagerTest::testLoadPlugins ()
-{
-    CPPUNIT_ASSERT (_pm->loadPlugins (PLUGIN_TEST_DIR) == 0);
-    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
-}
-
-void PluginManagerTest::testUnloadPlugins ()
-{
-    CPPUNIT_ASSERT (_pm->loadPlugins (PLUGIN_TEST_DIR) == 0);
-    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
-    CPPUNIT_ASSERT (_pm->unloadPlugins () == 0);
-    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == false);
-}
-
-void PluginManagerTest::tearDown()
-{
-    // Delete the plugin manager object
-    delete _pm;
-    _pm=0;
-
-    if (plugin)
-        delete plugin;
-
-    plugin = 0;
-
-    if (library)
-        delete library;
-
-    library = 0;
-}
diff --git a/sflphone-common/test/pluginmanagerTest.h b/sflphone-common/test/pluginmanagerTest.h
deleted file mode 100644
index 293311b6d2..0000000000
--- a/sflphone-common/test/pluginmanagerTest.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// Cppunit import
-#include <cppunit/extensions/HelperMacros.h>
-#include <cppunit/TestCaller.h>
-#include <cppunit/TestCase.h>
-#include <cppunit/TestSuite.h>
-
-#include <assert.h>
-
-// Application import
-#include "plug-in/pluginmanager.h"
-#include "plug-in/librarymanager.h"
-#include "plug-in/plugin.h"
-
-/*
- * @file pluginManagerTest.cpp  
- * @brief       Regroups unitary tests related to the plugin manager.
- */
-
-#ifndef _PLUGINMANAGER_TEST_
-#define _PLUGINMANAGER_TEST_
-
-class PluginManagerTest : public CppUnit::TestCase {
-
-   /**
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( PluginManagerTest );
-        CPPUNIT_TEST( testLoadDynamicLibrary );
-        CPPUNIT_TEST( testUnloadDynamicLibrary );
-        CPPUNIT_TEST( testInstanciatePlugin );
-        CPPUNIT_TEST( testInitPlugin );
-        CPPUNIT_TEST( testRegisterPlugin );
-        CPPUNIT_TEST( testLoadPlugins );
-        CPPUNIT_TEST( testUnloadPlugins );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-        PluginManagerTest() : CppUnit::TestCase("Plugin Manager Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown ();
-
-        void testLoadDynamicLibrary ();
-        
-        void testUnloadDynamicLibrary ();
-
-        void testInstanciatePlugin ();
-
-        void testInitPlugin ();
-
-        void testRegisterPlugin ();
-
-        void testLoadPlugins ();
-
-        void testUnloadPlugins ();
-
-    private:
-        PluginManager *_pm;
-        LibraryManager *library;
-        Plugin *plugin;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( PluginManagerTest );
-
-#endif
diff --git a/sflphone-common/test/rtpTest.cpp b/sflphone-common/test/rtpTest.cpp
deleted file mode 100644
index 31dfcc8166..0000000000
--- a/sflphone-common/test/rtpTest.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Alexandre Savarda <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 <stdio.h>
-#include <sstream>
-#include <ccrtp/rtp.h>
-#include <assert.h>
-#include <string>
-#include <cstring>
-#include <math.h>
-#include <dlfcn.h>
-#include <iostream>
-#include <sstream>
-
-
-#include "rtpTest.h"
-
-#include <unistd.h>
-
-
-using std::cout;
-using std::endl;
-
-
-void RtpTest::setUp()
-{
-
-    _debug ("------ Set up rtp test------");
-
-    Manager::instance().initConfigFile();
-    Manager::instance().init();
-
-    pjsipInit();
-
-    CallID cid = "123456";
-
-    sipcall = new SIPCall (cid, Call::Incoming, _pool);
-
-    sipcall->setLocalIp ("127.0.0.1");
-    sipcall->setLocalAudioPort (RANDOM_LOCAL_PORT);
-    sipcall->setLocalExternAudioPort (RANDOM_LOCAL_PORT);
-
-
-}
-
-bool RtpTest::pjsipInit()
-{
-
-    // Create memory cache for pool
-    pj_caching_pool_init (&_cp, &pj_pool_factory_default_policy, 0);
-
-    // Create memory pool for application.
-    _pool = pj_pool_create (&_cp.factory, "rtpTest", 4000, 4000, NULL);
-
-    if (!_pool) {
-        _debug ("----- RtpTest: Could not initialize pjsip memory pool ------");
-        return PJ_ENOMEM;
-    }
-
-    return true;
-
-}
-
-
-void RtpTest::testRtpInitClose()
-{
-
-    audiortp = new AudioSymmetricRtpSession (Manager::instance(), sipcall);
-
-    _debug ("------ void RtpTest::testRtpInit() ------");
-
-    try {
-
-        _debug ("-------- Open Rtp Session ----------");
-        audiortp->createNewSession (sipcall);
-
-    } catch (...) {
-
-        _debug ("!!! Exception occured while Oppenning Rtp !!!");
-
-    }
-
-    CPPUNIT_ASSERT (audiortp != NULL);
-
-
-    audiortp->_RTXThread->computeCodecFrameSize (320,8000);
-
-    // computeNbByteAudioLayer
-
-    _debug ("------ Finilize Rtp Initialization ------ ");
-
-
-    _debug ("------ RtpTest::testRtpClose() ------");
-
-    try {
-        _debug ("------ Close Rtp Session -------");
-        CPPUNIT_ASSERT (audiortp->closeRtpSession());
-
-    } catch (...) {
-
-        _debug ("!!! Exception occured while closing Rtp !!!");
-
-    }
-
-    delete audiortp;
-
-    audiortp = NULL;
-
-}
-
-void RtpTest::testRtpThread()
-{
-
-    audiortp = new AudioRtp();
-
-    _debug ("-------- Open Rtp Session ----------");
-
-    try {
-
-        audiortp->createNewSession (sipcall);
-
-    } catch (...) {
-
-        _debug ("!!! Exception occured while Oppenning Rtp !!!");
-
-    }
-
-    _debug ("------ void RtpTest::testRtpThread ------");
-
-    CPPUNIT_ASSERT (audiortp->_RTXThread->computeCodecFrameSize (160,8000) == 20.0f);
-    CPPUNIT_ASSERT (audiortp->_RTXThread->computeCodecFrameSize (320,16000) == 20.0f);
-    CPPUNIT_ASSERT (audiortp->_RTXThread->computeCodecFrameSize (882,44100) == 20.0f);
-
-    // 20 ms at 44.1 khz corespond to 882 samples (1764 byte)
-    CPPUNIT_ASSERT (audiortp->_RTXThread->computeNbByteAudioLayer (20.f) == 1764);
-
-    _debug ("------ Close Rtp Session -------");
-
-    try {
-
-        CPPUNIT_ASSERT (audiortp->closeRtpSession());
-
-    } catch (...) {
-
-        _debug ("!!! Exception occured while closing Rtp !!!");
-
-    }
-
-    delete audiortp;
-
-    audiortp = NULL;
-}
-
-
-
-void RtpTest::testRtpResampling()
-{
-
-    int nbSample = 50;
-    int rsmpl_nbSample = 0;
-
-    SFLDataFormat *data = new SFLDataFormat[1024];
-    SFLDataFormat *rsmpl_data = new SFLDataFormat[1024];
-
-    for (int i = 0; i < nbSample; i++)
-        data[i] = i;
-
-
-    audiortp = new AudioRtp();
-
-    _debug ("-------- Open Rtp Session ----------");
-
-    try {
-
-        audiortp->createNewSession (sipcall);
-
-    } catch (...) {
-
-        _debug ("!!! Exception occured while Oppenning Rtp !!!");
-
-    }
-
-    _debug ("------ void RtpTest::testRtpResampling ------");
-
-    CPPUNIT_ASSERT (0 == 0);
-    rsmpl_nbSample = audiortp->_RTXThread->reSampleData (data, rsmpl_data, 8000, nbSample, UP_SAMPLING);
-    _debug ("ORIGINAL DATA SET");
-
-    for (int i = 0; i < nbSample; i++)
-        printf ("  %i=>%i  ", i, data[i]);
-
-    _debug ("RESAMPLED DATA SET");
-
-    for (int i = 0; i < rsmpl_nbSample; i++)
-        printf ("  %i=>%i  ", i, rsmpl_data[i]);
-
-    printf ("");
-
-
-    _debug ("------ Close Rtp Session -------");
-
-    try {
-
-        CPPUNIT_ASSERT (audiortp->closeRtpSession());
-
-    } catch (...) {
-
-        _debug ("!!! Exception occured while closing Rtp !!!");
-
-    }
-
-    delete audiortp;
-
-    audiortp = NULL;
-}
-
-
-void RtpTest::tearDown()
-{
-
-    delete sipcall;
-    sipcall = NULL;
-}
diff --git a/sflphone-common/test/rtpTest.h b/sflphone-common/test/rtpTest.h
deleted file mode 100644
index 9e7c39ec6a..0000000000
--- a/sflphone-common/test/rtpTest.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *  Copyright (C) 2009 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@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.
- */
-
-// 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/audiortp/AudioRtpSession.h"
-#include "audio/audiortp/AudioSymmetricRtpSession.h"
-#include "call.h"
-#include "sip/sipcall.h"
-#include "sip/sipvoiplink.h"
-
-#include "config/config.h"
-#include "user_cfg.h"
-
-using namespace sfl;
-
-/*
- * @file audiorecorderTest.cpp  
- * @brief       Regroups unitary tests related to the plugin manager.
- */
-
-#ifndef _RTP_TEST_
-#define _RTP_TEST_
-
-class AudioSymmetricRtpSession;
-class AudioRtpSession;
-class AudioRtpRTX;
-class SIPVoIPLink;
-
-class RtpTest : public CppUnit::TestCase {
-
-    /*
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( RtpTest );
-        CPPUNIT_TEST( testRtpInitClose );
-	CPPUNIT_TEST( testRtpThread );
-	CPPUNIT_TEST( testRtpResampling );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-
-        RtpTest() : CppUnit::TestCase("Audio Layer Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown();
-
-	bool pjsipInit();
-
-        void testRtpInitClose();
-
-	void testRtpThread();
-
-	void testRtpResampling();
-
-
-    private:
-
-	enum CallType {Incoming, Outgoing};
-
-        ManagerImpl* manager;
-
-        AudioSymmetricRtpSession *audiortp;
-
-	AudioRtpRTX *rtpthread;
-
-	SIPCall *sipcall;
-
-	pj_caching_pool _cp;
-
-	pj_pool_t *_pool;
-
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( RtpTest );
-
-#endif
diff --git a/sflphone-common/test/run-tests b/sflphone-common/test/run-tests
deleted file mode 100755
index 9b5d01405c..0000000000
--- a/sflphone-common/test/run-tests
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-myname="`basename $0`"
-failures=0
-
-for f in *
-do
-    # Skip ourself
-    if [ "$f" = "$myname" ]; then
-        continue
-    fi
-
-    if [ -x "$f" ]; then
-        echo
-        echo "=== Running [$f] test ==="
-        # Warning, libCppUnit returns 0 on failure.
-        ./"$f" && {
-            echo Warning: Failure in $f.
-            failures=$((failures+1))
-        }
-    fi
-done
-
-echo "Tests finshed, there were $failures failures."
diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp
deleted file mode 100644
index 54f7f4b5ec..0000000000
--- a/sflphone-common/test/sdesnegotiatorTest.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- *  Copyright (C) 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 <stdio.h>
-#include <sstream>
-#include <ccrtp/rtp.h>
-#include <assert.h>
-#include <string>
-#include <cstring>
-#include <math.h>
-#include <dlfcn.h>
-#include <iostream>
-#include <sstream>
-
-
-#include "sdesnegotiatorTest.h"
-
-#include <unistd.h>
-
-
-using std::cout;
-using std::endl;
-
-
-void SdesNegotiatorTest::setUp()
-{
-    
-}
-
-
-void SdesNegotiatorTest::tearDown()
-{
-
-}
-
-void SdesNegotiatorTest::testTagPattern()
-{
-    std::string subject = "a=crypto:4"; 
-
-    pattern = new sfl::Pattern("^a=crypto:(?P<tag>[0-9]{1,9})");
-    *pattern << subject;
-
-    CPPUNIT_ASSERT(pattern->matches());
-    CPPUNIT_ASSERT(pattern->group("tag").compare("4") == 0);
-
-    delete pattern;
-    pattern = NULL;
-}
-
-
-void SdesNegotiatorTest::testCryptoSuitePattern()
-{
-    std::string subject = "AES_CM_128_HMAC_SHA1_80"; 
-
-    pattern = new sfl::Pattern("(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \
-			       "AES_CM_128_HMAC_SHA1_32|"		\
-			       "F8_128_HMAC_SHA1_80|"			\
-			       "[A-Za-z0-9_]+)");
-    *pattern << subject;
-
-    CPPUNIT_ASSERT(pattern->matches());
-    CPPUNIT_ASSERT(pattern->group("cryptoSuite").compare("AES_CM_128_HMAC_SHA1_80") == 0);
-
-    delete pattern;
-    pattern = NULL;
-}
-
-
-void SdesNegotiatorTest::testKeyParamsPattern()
-{
-
-    std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32";
-
-    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-			       "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
-			       "(2\\^(?P<lifetime>[0-9]+)\\|"		\
-			       "(?P<mkiValue>[0-9]+)\\:"		\
-			       "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
-
-    *pattern << subject;
-
-    pattern->matches();
-    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
-    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
-== 0);
-    CPPUNIT_ASSERT(pattern->group("lifetime").compare("20")== 0);
-    CPPUNIT_ASSERT(pattern->group("mkiValue").compare("1")== 0);
-    CPPUNIT_ASSERT(pattern->group("mkiLength").compare("32")== 0);
-
-    delete pattern;
-    pattern = NULL;
-}
-
-
-void SdesNegotiatorTest::testKeyParamsPatternWithoutMKI()
-{
-
-    std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj";
-
-    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-                               "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)" \
-                               "(\\|2\\^(?P<lifetime>[0-9]+)\\|"                \
-                               "(?P<mkiValue>[0-9]+)\\:"                \
-                               "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
-
-    *pattern << subject;
-    pattern->matches();
-    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
-    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
-== 0);
-
-    delete pattern;
-    pattern = NULL;
-}
-
-
-/**
- * Make sure that all the fields can be extracted
- * properly from the syntax. 
- */
-void SdesNegotiatorTest::testNegotiation()
-{
-     // Add a new SDES crypto line to be processed. 
-    remoteOffer = new std::vector<std::string>();
-    remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"));
-    remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32"));
-	
-    // Register the local capabilities.
-    localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>();
-    for(int i = 0; i < 3; i++) {
-        localCapabilities->push_back(sfl::CryptoSuites[i]);
-    }
-
-    sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer);
-
-    CPPUNIT_ASSERT(sdesnego->negotiate());
-    // CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32")==0);
-
-    delete remoteOffer;
-    remoteOffer = NULL;
-
-    delete localCapabilities;
-    localCapabilities = NULL;
-
-    delete sdesnego;
-    sdesnego = NULL;
-}
-
-/**
- * Make sure that unproperly formatted crypto lines are rejected.
- */
-void SdesNegotiatorTest::testComponent()
-{
-    // Register the local capabilities.
-    std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
-	
-    //Support all the CryptoSuites
-    for(int i = 0; i < 3; i++) {
-        capabilities->push_back(sfl::CryptoSuites[i]);
-    }
-	
-    // Make sure that if a component is missing, negotiate will fail
-    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32");
-    std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
-    cryptoOffer->push_back(cryptoLine);	
-
-    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
-
-    CPPUNIT_ASSERT(negotiator->negotiate() == false);
-}
-
-
-
-/**
- * Make sure that most simple case does not fail.
- */
-void SdesNegotiatorTest::testMostSimpleCase()
-{
-    // Register the local capabilities.
-    std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
-
-    //Support all the CryptoSuites
-    for(int i = 0; i < 3; i++) {
-        capabilities->push_back(sfl::CryptoSuites[i]);
-    }
-
-    // Make sure taht this case works (since it's default for most application)
-    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd");
-    std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
-    cryptoOffer->push_back(cryptoLine);	
-
-    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
-
-    CPPUNIT_ASSERT(negotiator->negotiate() == true);
-
-    CPPUNIT_ASSERT(negotiator->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0);
-    CPPUNIT_ASSERT(negotiator->getKeyMethod().compare("inline") == 0);
-    CPPUNIT_ASSERT(negotiator->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0);
-    CPPUNIT_ASSERT(negotiator->getLifeTime().compare("")== 0);
-    CPPUNIT_ASSERT(negotiator->getMkiValue().compare("")== 0);
-    CPPUNIT_ASSERT(negotiator->getMkiLength().compare("")== 0);
-
-    delete capabilities; capabilities = NULL;
-    delete cryptoOffer; cryptoOffer = NULL;
-    delete negotiator; negotiator = NULL;
-
-    
-}
-
-
diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h
deleted file mode 100644
index f3e73f6c2f..0000000000
--- a/sflphone-common/test/sdesnegotiatorTest.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *  Copyright (C) 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.
- */
-
-// 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>
-
-#include <vector>
-
-// pjsip import
-#include <pjsip.h>
-#include <pjlib.h>
-#include <pjsip_ua.h>
-#include <pjlib-util.h>
-#include <pjnath/stun_config.h>
-
-// Application import
-#include "sip/SdesNegotiator.h"
-#include "sip/Pattern.h"
-// #include "config/config.h"
-// #include "user_cfg.h"
-
-
-
-/*
- * @file sdesnegotiationTest.cpp  
- * @brief       Regroups unitary tests related to the plugin manager.
- */
-
-#ifndef _SDESNEGOTIATOR_TEST_
-#define _SDESNEGOTIATOR_TEST_
-
-
-
-class SdesNegotiatorTest : public CppUnit::TestCase {
-
-    /*
-     * Use cppunit library macros to add unit test the factory
-     */
-    CPPUNIT_TEST_SUITE( SdesNegotiatorTest );
-    CPPUNIT_TEST( testTagPattern );
-    CPPUNIT_TEST( testCryptoSuitePattern );
-    CPPUNIT_TEST( testKeyParamsPattern );
-    CPPUNIT_TEST( testKeyParamsPatternWithoutMKI );
-    CPPUNIT_TEST( testNegotiation );
-    CPPUNIT_TEST( testMostSimpleCase );
-    CPPUNIT_TEST_SUITE_END();
-
-    public:
-
-        SdesNegotiatorTest() : CppUnit::TestCase("Sdes Tests") {}
-        
-        /*
-         * Code factoring - Common resources can be initialized here.
-         * This method is called by unitcpp before each test
-         */
-        void setUp();
-
-        /*
-         * Code factoring - Common resources can be released here.
-         * This method is called by unitcpp after each test
-         */
-        inline void tearDown();
-
-		void testTagPattern();
-
-		void testCryptoSuitePattern();
-
-		void testKeyParamsPattern();
-		
-        void testKeyParamsPatternCiscoStyle();
-
-		void testKeyParamsPatternWithoutMKI();
-
-		void testNegotiation();
-		
-		void testComponent();
-
-		void testMostSimpleCase();
-
-    private:
-
-		sfl::Pattern *pattern;
-
-		sfl::SdesNegotiator *sdesnego;
-
-		std::vector<std::string> *remoteOffer;
-
-		std::vector<sfl::CryptoSuiteDefinition> *localCapabilities;
-};
-
-/* Register our test module */
-CPPUNIT_TEST_SUITE_REGISTRATION( SdesNegotiatorTest );
-
-#endif
diff --git a/sflphone-common/test/sflphonedrc-sample b/sflphone-common/test/sflphonedrc-sample
deleted file mode 100644
index 6d0064a7c5..0000000000
--- a/sflphone-common/test/sflphonedrc-sample
+++ /dev/null
@@ -1,74 +0,0 @@
-[Account:1239059899]
-Account.alias=1260@sip.sflphone.org
-Account.enable=1
-Account.type=SIP
-hostname=sflphone.org
-password=NIPAgmLo
-username=1260
-
-[Account:1243544046]
-Account.alias=Manu
-Account.enable=1
-Account.mailbox=*97
-Account.type=SIP
-hostname=192.168.50.3
-password=sfl-137pw
-username=137
-
-[Addressbook]
-Addressbook.contact_photo=0
-Addressbook.enable=1
-Addressbook.list=1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/
-Addressbook.max_results=25
-Addressbook.phone_business=1
-Addressbook.phone_home=0
-Addressbook.phone_mobile=0
-
-[Audio]
-Alsa.cardID_In=0
-Alsa.cardID_Out=0
-Alsa.framesize=20
-Alsa.plugin=default
-Alsa.sampleRate=44100
-Record.path=/home/emilou
-Rings.ringChoice=/usr/share/sflphone/ringtones/konga.ul
-Volume.micro=100
-Volume.speakers=100
-
-[Hooks]
-Hooks.iax2_enabled=0
-Hooks.phone_number_add_prefix=
-Hooks.phone_number_enabled=0
-Hooks.sip_enabled=0
-Hooks.url_command=x-www-browser
-Hooks.url_sip_field=X-sflphone-url
-
-[Preferences]
-Accounts.order=Account:1243544046/Account:1239138829/
-Audio.api=1
-Dialpad.display=0
-History.enabled=1
-History.limit=30
-History.maxCalls=20
-Notify.all=1
-Notify.mails=0
-Options.zoneToneChoice=North America
-Pulseaudio.volumeCtrl=1
-Registration.expire=180
-Ringtones.enable=1
-SIP.portNum=5060
-Searchbar.display=1
-Start.hidden=0
-Volume.display=0
-Window.popup=0
-Zeroconf.enable=0
-
-[VoIPLink]
-DTMF.playDtmf=1
-DTMF.playTones=1
-DTMF.pulseLength=250
-DTMF.sendDTMFas=0
-STUN.enable=0
-STUN.server=stun.sflphone.org
-VoIPLink.symmetric=1
-
diff --git a/sflphone-common/test/validator.cpp b/sflphone-common/test/validator.cpp
new file mode 100644
index 0000000000..6f34e3102f
--- /dev/null
+++ b/sflphone-common/test/validator.cpp
@@ -0,0 +1,22 @@
+/*
+ * validator.cpp
+ *
+ *  Created on: 2010-03-12
+ *      Author: jb
+ */
+
+#include "validator.h"
+
+bool Validator::isNumber(std::string str) {
+	unsigned int i = 0;
+	if (!str.empty() && (str[i] == '-' || str[i] == '+'))
+		i++;
+	return string::npos == str.find_first_not_of(".eE0123456789", i);
+}
+
+bool Validator::isNotNull(std::string str) {
+	if(!str.empty())
+		return true;
+	else
+		return false;
+}
diff --git a/sflphone-common/test/validator.h b/sflphone-common/test/validator.h
new file mode 100644
index 0000000000..363e3c9aef
--- /dev/null
+++ b/sflphone-common/test/validator.h
@@ -0,0 +1,21 @@
+/*
+ * validator.h
+ *
+ *  Created on: 2010-03-12
+ *      Author: jb
+ */
+
+#ifndef VALIDATOR_H_
+#define VALIDATOR_H_
+
+#include <string>
+#include <iostream>
+
+using namespace std;
+
+class Validator {
+  public:
+	static bool isNumber(std::string str);
+	static bool isNotNull(std::string str);
+};
+#endif /* VALIDATOR_H_ */
-- 
GitLab


From ef435ab76710176ba1bc9527dfdbafaa231ee8ee Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 16 Mar 2010 12:40:56 -0400
Subject: [PATCH 122/160] [#3030] Keep call activer when receiving error
 message on call transfer

---
 sflphone-common/src/managerimpl.cpp     | 24 ++++-----
 sflphone-common/src/sip/sipvoiplink.cpp | 70 ++++++++-----------------
 2 files changed, 33 insertions(+), 61 deletions(-)

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 2e0934d170..5fc21e09a7 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -650,13 +650,15 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
 	AccountID accountid;
 	bool returnValue;
 
+	_info("Manager: Transfer Call\n");
+
 	stopTone();
 
 	CallID current_call_id = getCurrentCallId();
 
 	if (participToConference(call_id)) {
 
-		_debug("Particip to a conference\n");
+		_info("Manager: Particip to a conference\n");
 
 		Conference *conf = getConferenceFromCallID(call_id);
 
@@ -668,8 +670,6 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
 		}
 	} else {
 
-		_debug("Do not Particip to a conference\n");
-
 		// we are not participating to a conference, current call switched to ""
 		if (!isConference(current_call_id))
 			switchCall("");
@@ -685,7 +685,7 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
 		accountid = getAccountFromCall(call_id);
 
 		if (accountid == AccountNULL) {
-			_debug ("! Manager Transfer Call: Call doesn't exists");
+			_warn ("Manager: Call doesn't exists");
 			return false;
 		}
 
@@ -696,18 +696,21 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
 
 	removeWaitingCall(call_id);
 
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
-
 	return returnValue;
 }
 
 void ManagerImpl::transferFailed () {
+
+	_debug("UserAgent: Transfer failed");
+
 	if (_dbus)
 		_dbus->getCallManager()->transferFailed();
 }
 
 void ManagerImpl::transferSucceded () {
+
+	_debug("UserAgent: Transfer succeded");
+
 	if (_dbus)
 		_dbus->getCallManager()->transferSucceded();
 
@@ -1713,7 +1716,7 @@ void ManagerImpl::peerHungupCall (const CallID& call_id) {
 	AccountID account_id;
 	bool returnValue;
 
-	_debug ("ManagerImpl::peerHungupCall(%s)", call_id.c_str());
+	_debug ("Manager: Peer hungup call %s", call_id.c_str());
 
 	// store the current call id
 	CallID current_call_id = getCurrentCallId();
@@ -1745,11 +1748,6 @@ void ManagerImpl::peerHungupCall (const CallID& call_id) {
 
 		account_id = getAccountFromCall(call_id);
 
-		if (account_id == AccountNULL) {
-			_debug ("peerHungupCall: Call doesn't exists");
-			return;
-		}
-
 		returnValue = getAccountLink(account_id)->peerHungup(call_id);
 	}
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 022cdcbe0c..fa0e1c3cc6 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -921,12 +921,12 @@ SIPVoIPLink::peerHungup (const CallID& id)
     pjsip_tx_data *tdata = NULL;
     SIPCall* call;
 
-    _info("SIP: Peer hungup");
+    _info("UserAgent: Peer hungup");
 
     call = getSIPCall (id);
 
     if (call==0) {
-        _debug ("! SIP Error: Call doesn't exist");
+        _warn ("UserAgent: Call doesn't exist");
         return false;
     }
 
@@ -949,7 +949,7 @@ SIPVoIPLink::peerHungup (const CallID& id)
 
     // Release RTP thread
     if (Manager::instance().isCurrentCall (id)) {
-        _debug ("* SIP Info: Stopping AudioRTP for hangup");
+        _debug ("UserAgent: Stopping AudioRTP for hangup");
         call->getAudioRtp()->stop();
     }
 
@@ -1110,7 +1110,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id));
 
     if (account == NULL) {
-        _debug ("SIPVoIPLink::transfer account is null. Returning.");
+        _warn ("UserAgent: Transfer account is null. Returning.");
         return false;
     }
 
@@ -1128,7 +1128,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
         pj_cstr (&pjDest, dest.c_str());
     }
 
-    _debug ("Transfering to %s", dest.c_str());
+    _info ("UserAgent: Transfering to %s", dest.c_str());
 
     /* Create xfer client subscription. */
     pj_bzero (&xfer_cb, sizeof (xfer_cb));
@@ -1137,7 +1137,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
     status = pjsip_xfer_create_uac (call->getInvSession()->dlg, &xfer_cb, &sub);
 
     if (status != PJ_SUCCESS) {
-        _debug ("UserAgent: Unable to create xfer -- %d", status);
+        _warn ("UserAgent: Unable to create xfer -- %d", status);
         return false;
     }
 
@@ -1171,7 +1171,13 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
 
 bool SIPVoIPLink::transferStep2 (SIPCall* call)
 {
+	_debug("================= TRansfer Step 2 =============");;
+
+	// Signal client to hangup
+	// DBusManager::instance().getCallManager()->callStateChanged(call->getCallId(), "HUNGUP");
+
     call->getAudioRtp()->stop();
+
     return true;
 }
 
@@ -1492,7 +1498,10 @@ SIPVoIPLink::SIPCallServerFailure (SIPCall *call)
 void
 SIPVoIPLink::SIPCallClosed (SIPCall *call)
 {
+	_info("UserAgent: Closing call");
+
     if (!call) {
+		_warn("UserAgent: Error: CAll pointer is NULL\n");
         return;
     }
 
@@ -1500,16 +1509,14 @@ SIPVoIPLink::SIPCallClosed (SIPCall *call)
 
     if (Manager::instance().isCurrentCall (id)) {
         call->setAudioStart (false);
-        _debug ("* SIP Info: Stopping AudioRTP when closing");
+        _debug ("UserAgent: Stopping AudioRTP when closing");
         call->getAudioRtp()->stop();
     }
 
-    _debug ("After close RTP");
-
     Manager::instance().peerHungupCall (id);
     terminateOneCall (id);
     removeCall (id);
-    _debug ("After remove call ID");
+
 }
 
 void
@@ -1520,7 +1527,7 @@ SIPVoIPLink::SIPCallReleased (SIPCall *call)
     }
 
     // if we are here.. something when wrong before...
-    _debug ("SIP call release");
+    _debug ("UserAgent: SIP call release");
 
     CallID id = call->getCallId();
 
@@ -3315,9 +3322,8 @@ void call_on_forked (pjsip_inv_session *inv, pjsip_event *e)
 
 void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e)
 {
-    _debug("call_on_tsx_changed to state %s", transactionStateMap[tsx->state]);
+    _debug("UserAgent: Transaction changed to state %s", transactionStateMap[tsx->state]);
 
-    
 
     if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING &&
             pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) {
@@ -3337,7 +3343,7 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
 
                 if (request.find (method_name) != (size_t)-1) {
 
-                    _debug ("%s", pjsip_rx_data_get_info (r_data));
+                    _debug ("UserAgent: %s", pjsip_rx_data_get_info (r_data));
 
                     pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data);
 
@@ -3817,8 +3823,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata)
      * request.
      */
     ref_by_hdr = (pjsip_hdr*)
-                 pjsip_msg_find_hdr_by_name (rdata->msg_info.msg, &str_ref_by,
-                                             NULL);
+    pjsip_msg_find_hdr_by_name (rdata->msg_info.msg, &str_ref_by, NULL);
 
     /* Notify callback */
     code = PJSIP_SC_ACCEPTED;
@@ -4004,7 +4009,6 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
      * When subscription is accepted (got 200/OK to REFER), check if
      * subscription suppressed.
      */
-
     if (pjsip_evsub_get_state (sub) == PJSIP_EVSUB_STATE_ACCEPTED) {
 
         _debug ("Transfer accepted! Waiting for notifications. ");
@@ -4059,23 +4063,15 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
 
             rdata = event->body.tsx_state.src.rdata;
 
-
             /* Check if there's body */
             msg = rdata->msg_info.msg;
             body = msg->body;
 
             if (!body) {
-                // if (call->getCallConfiguration () == Call::IPtoIP) {
-                //   _debug("UserAgent: IptoIp NOTIFY without message body");
-                // }
-                // else{
                 _debug ("UserAgent: Warning! Received NOTIFY without message body");
                 return;
-                // }
             }
 
-
-
             /* Check for appropriate content */
             if (pj_stricmp2 (&body->content_type.type, "message") != 0 ||
                     pj_stricmp2 (&body->content_type.subtype, "sipfrag") != 0) {
@@ -4107,34 +4103,12 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         }
 
 
-        if (event->body.rx_msg.rdata->msg_info.msg_buf != NULL) {
-            request = event->body.rx_msg.rdata->msg_info.msg_buf;
-
-            if ( (int) request.find (noresource) != -1) {
-                _debug ("UserAgent: NORESOURCE for transfer!");
-                link->transferStep2 (call);
-                pjsip_evsub_terminate (sub, PJ_TRUE);
-
-                Manager::instance().transferFailed();
-                return;
-            }
-
-            if ( (int) request.find (ringing) != -1) {
-                _debug ("UserAgent: transfered call RINGING!");
-                link->transferStep2 (call);
-                pjsip_evsub_terminate (sub, PJ_TRUE);
-
-                Manager::instance().transferSucceded();
-                return;
-            }
-        }
-
-
         /* Notify application */
         is_last = (pjsip_evsub_get_state (sub) ==PJSIP_EVSUB_STATE_TERMINATED);
 
         cont = !is_last;
 
+		_debug("UserAgent: Notification status line: %d", status_line.code);
         if (status_line.code/100 == 2) {
 
             _debug ("UserAgent: Try to stop rtp!");
-- 
GitLab


From df8974d76bd3d6c46acd3c2a6ba2f4dfddc69bc8 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 16 Mar 2010 13:58:55 -0400
Subject: [PATCH 123/160] [#3030] Fix NOTIFY/INFO determination in
 call_on_tsx_changed

---
 sflphone-common/src/sip/sipvoiplink.cpp | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index fa0e1c3cc6..448f659e9e 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3338,12 +3338,19 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
 
             if (r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) {
 
-                std::string method_name = "INFO";
-                std::string request =  r_data->msg_info.msg->line.req.method.name.ptr;
+                std::string method_info = "INFO";
+                std::string method_notify = "NOTIFY";
+                // std::string request =  r_data->msg_info.msg->line.req.method.name.ptr;
+                std::string request =  pjsip_rx_data_get_info (r_data);
 
-                if (request.find (method_name) != (size_t)-1) {
+			    _debug("UserAgent: %s", request.c_str());
 
-                    _debug ("UserAgent: %s", pjsip_rx_data_get_info (r_data));
+			    if(request.find (method_notify) != (size_t)-1) {
+			    	_debug("We got a NOTIFY!!!!!!!!!!!!!!!!!!!");
+			    }
+
+				// Must reply 200 OK on SIP INFO request
+			    else if (request.find (method_info) != (size_t)-1) {
 
                     pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data);
 
-- 
GitLab


From 21906d6dbebf29a01d7477e6a573336aaa3f642b Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 16 Mar 2010 14:17:06 -0400
Subject: [PATCH 124/160] [#3030] Exact identification of incoming Notification
 in xfre_func_cb

Previously identified using this test

/* This better be a NOTIFY request */
if (event->type == PJSIP_EVENT_TSX_STATE &&
    event->body.tsx_state.type == PJSIP_EVENT_RX_MSG) {
---
 sflphone-common/src/sip/sipvoiplink.cpp | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 448f659e9e..1daf7587fe 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -4018,7 +4018,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
      */
     if (pjsip_evsub_get_state (sub) == PJSIP_EVSUB_STATE_ACCEPTED) {
 
-        _debug ("Transfer accepted! Waiting for notifications. ");
+        _debug ("UserAgent: Transfer received, waiting for notifications. ");
 
     }
 
@@ -4034,13 +4034,6 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         pj_bool_t cont;
         pj_status_t status;
 
-        std::string noresource;
-        std::string ringing;
-        std::string request;
-
-        noresource = "noresource";
-        ringing = "Ringing";
-
 
         SIPVoIPLink *link = reinterpret_cast<SIPVoIPLink *> (pjsip_evsub_get_mod_data (sub, _mod_ua.id));
 
@@ -4061,10 +4054,14 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         }
 
 
+        pjsip_rx_data* r_data = event->body.rx_msg.rdata;
+
+        std::string method_notify = "NOTIFY";
+        std::string request =  pjsip_rx_data_get_info (r_data);
 
         /* This better be a NOTIFY request */
-        if (event->type == PJSIP_EVENT_TSX_STATE &&
-                event->body.tsx_state.type == PJSIP_EVENT_RX_MSG) {
+        if (r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD &&
+        	 request.find(method_notify) != (size_t)-1) {
 
             pjsip_rx_data *rdata;
 
@@ -4105,7 +4102,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         SIPCall *call = dynamic_cast<SIPCall *> (link->getCall (Manager::instance().getCurrentCallId()));
 
         if (!call) {
-            _debug ("UserAgent: Call doesn't exit!");
+            _warn ("UserAgent: Call doesn't exit!");
             return;
         }
 
-- 
GitLab


From a56bedeb7f00d093bef05ae9e9f1b5285d8a3300 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 16 Mar 2010 15:28:55 -0400
Subject: [PATCH 125/160] [#3030] Use SIP callid header to retreive transfered
 call in xfer_func_cb

---
 sflphone-common/src/sip/sipcall.h       |  2 +
 sflphone-common/src/sip/sipvoiplink.cpp | 63 +++++++++++++++----------
 2 files changed, 41 insertions(+), 24 deletions(-)

diff --git a/sflphone-common/src/sip/sipcall.h b/sflphone-common/src/sip/sipcall.h
index f2d93259da..7d14936729 100644
--- a/sflphone-common/src/sip/sipcall.h
+++ b/sflphone-common/src/sip/sipcall.h
@@ -97,9 +97,11 @@ class SIPCall : public Call
     void setTid(int tid) { _tid = tid; } 
 
     void setXferSub(pjsip_evsub* sub) {_xferSub = sub;}
+
     pjsip_evsub *getXferSub() {return _xferSub;}
     
     void setInvSession(pjsip_inv_session* inv) {_invSession = inv;}
+
     pjsip_inv_session *getInvSession() {return _invSession;}
     
     Sdp* getLocalSDP (void) { return _local_sdp; }
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 1daf7587fe..7e8c766331 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -50,6 +50,8 @@
 #include <sys/ioctl.h>
 #include <linux/if.h>
 
+#include <map>
+
 #define CAN_REINVITE        1
 
 static char * invitationStateMap[] = {
@@ -79,9 +81,17 @@ struct result {
     pjsip_server_addresses  servers;
 };
 
+/** The default transport (5060) */
 pjsip_transport *_localUDPTransport = NULL;
+
+/** The local tls listener */
 pjsip_tpfactory *_localTlsListener = NULL;
 
+/** A map to retreive SFLphone internal call id
+ *  Given a SIP call ID (usefull for transaction sucha as transfer)*/
+std::map<std::string, CallID> transferCallID;
+
+
 const pj_str_t STR_USER_AGENT = { (char*) "User-Agent", 10 };
 
 /**************** EXTERN VARIABLES AND FUNCTIONS (callbacks) **************************/
@@ -1109,13 +1119,13 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
     account_id = Manager::instance().getAccountFromCall (id);
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id));
 
-    if (account == NULL) {
-        _warn ("UserAgent: Transfer account is null. Returning.");
+    if (!account) {
+        _error("UserAgent: Error: Transfer account is null. Returning.");
         return false;
     }
 
-    if (call==0) {
-        _debug ("! SIP Failure: Call doesn't exist");
+    if (!call) {
+        _error ("UserAgent: Error: Call doesn't exist");
         return false;
     }
 
@@ -1143,7 +1153,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
 
     /* Associate this voiplink of call with the client subscription
      * We can not just associate call with the client subscription
-     * because after this function, we can not find the cooresponding
+     * because after this function, we can no find the cooresponding
      * voiplink from the call any more. But the voiplink is useful!
      */
     pjsip_evsub_set_mod_data (sub, getModId(), this);
@@ -1154,15 +1164,21 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
     status = pjsip_xfer_initiate (sub, &pjDest, &tdata);
 
     if (status != PJ_SUCCESS) {
-        _debug ("UserAgent: Unable to create REFER request -- %d", status);
+        _error ("UserAgent: Unable to create REFER request -- %d", status);
         return false;
     }
 
+    // Put SIP call id in map in order to retrieve call during transfer callback
+    std::string callidtransfer(call->getInvSession()->dlg->call_id->id.ptr, call->getInvSession()->dlg->call_id->id.slen);
+    _debug("%s", callidtransfer.c_str());
+    transferCallID.insert(std::pair<std::string, CallID>(callidtransfer, call->getCallId()));
+
+
     /* Send. */
     status = pjsip_xfer_send_request (sub, tdata);
 
     if (status != PJ_SUCCESS) {
-        _debug ("UserAgent: Unable to send REFER request -- %d", status);
+        _error ("UserAgent: Unable to send REFER request -- %d", status);
         return false;
     }
 
@@ -4027,6 +4043,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
      */
     else if (pjsip_evsub_get_state (sub) == PJSIP_EVSUB_STATE_ACTIVE ||
              pjsip_evsub_get_state (sub) == PJSIP_EVSUB_STATE_TERMINATED) {
+
         pjsip_msg *msg;
         pjsip_msg_body *body;
         pjsip_status_line status_line;
@@ -4047,9 +4064,9 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
 
         }
 
+        /* Application is not interested with call progress status */
         if (!link || !event) {
-            /* Application is not interested with call progress status */
-            _debug ("UserAgent: Either link or event is empty!");
+            _warn ("UserAgent: Either link or event is empty in transfer callback");
             return;
         }
 
@@ -4063,46 +4080,44 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         if (r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD &&
         	 request.find(method_notify) != (size_t)-1) {
 
-            pjsip_rx_data *rdata;
-
-            rdata = event->body.tsx_state.src.rdata;
-
             /* Check if there's body */
-            msg = rdata->msg_info.msg;
+            msg = r_data->msg_info.msg;
             body = msg->body;
 
             if (!body) {
-                _debug ("UserAgent: Warning! Received NOTIFY without message body");
+                _warn ("UserAgent: Warning! Received NOTIFY without message body");
                 return;
             }
 
             /* Check for appropriate content */
             if (pj_stricmp2 (&body->content_type.type, "message") != 0 ||
                     pj_stricmp2 (&body->content_type.subtype, "sipfrag") != 0) {
-                _debug ("UserAgent: Warning! Received NOTIFY with non message/sipfrag content");
+                _warn ("UserAgent: Warning! Received NOTIFY without message/sipfrag content");
                 return;
             }
 
             /* Try to parse the content */
-            status = pjsip_parse_status_line ( (char*) body->data, body->len,
-                                               &status_line);
+            status = pjsip_parse_status_line ( (char*) body->data, body->len, &status_line);
 
             if (status != PJ_SUCCESS) {
-                _debug ("UserAgent: Warning! Received NOTIFY with invalid message/sipfrag content");
+                _warn ("UserAgent: Warning! Received NOTIFY with invalid message/sipfrag content");
                 return;
             }
 
         } else {
-            _debug ("UserAgent: Set code to 500!");
+            _error ("UserAgent: Error: Set code to 500 during transfer");
             status_line.code = 500;
             status_line.reason = *pjsip_get_status_text (500);
         }
 
-        // Get current call
-        SIPCall *call = dynamic_cast<SIPCall *> (link->getCall (Manager::instance().getCurrentCallId()));
+        // Get call coresponding to this transaction
+        std::string transferID(r_data->msg_info.cid->id.ptr, r_data->msg_info.cid->id.slen);
+        std::map<std::string, CallID>::iterator it = transferCallID.find(transferID);
+        CallID cid = it->second;
+        SIPCall *call = dynamic_cast<SIPCall *> (link->getCall (cid));
 
         if (!call) {
-            _warn ("UserAgent: Call doesn't exit!");
+            _warn ("UserAgent: Call with id %s doesn't exit!", Manager::instance().getCurrentCallId().c_str());
             return;
         }
 
@@ -4115,7 +4130,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
 		_debug("UserAgent: Notification status line: %d", status_line.code);
         if (status_line.code/100 == 2) {
 
-            _debug ("UserAgent: Try to stop rtp!");
+        	_debug ("UserAgent: Received 200 OK, stop call!");
             pjsip_tx_data *tdata;
 
             status = pjsip_inv_end_session (call->getInvSession(), PJSIP_SC_GONE, NULL, &tdata);
-- 
GitLab


From f31aa8f4fa97a8ec03eb319f6dae2024ff1aeda0 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 16 Mar 2010 15:44:31 -0400
Subject: [PATCH 126/160] [#3030] Close call in transferStep2

---
 sflphone-common/src/sip/sipvoiplink.cpp | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 7e8c766331..2309c86923 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1187,12 +1187,11 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
 
 bool SIPVoIPLink::transferStep2 (SIPCall* call)
 {
-	_debug("================= TRansfer Step 2 =============");;
 
-	// Signal client to hangup
-	// DBusManager::instance().getCallManager()->callStateChanged(call->getCallId(), "HUNGUP");
+	// TODO is this the best way to proceed?
+	Manager::instance().peerHungupCall(call->getCallId());
+
 
-    call->getAudioRtp()->stop();
 
     return true;
 }
@@ -3356,15 +3355,14 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
 
                 std::string method_info = "INFO";
                 std::string method_notify = "NOTIFY";
-                // std::string request =  r_data->msg_info.msg->line.req.method.name.ptr;
+
                 std::string request =  pjsip_rx_data_get_info (r_data);
 
 			    _debug("UserAgent: %s", request.c_str());
 
 			    if(request.find (method_notify) != (size_t)-1) {
-			    	_debug("We got a NOTIFY!!!!!!!!!!!!!!!!!!!");
-			    }
 
+			    }
 				// Must reply 200 OK on SIP INFO request
 			    else if (request.find (method_info) != (size_t)-1) {
 
@@ -4117,7 +4115,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         SIPCall *call = dynamic_cast<SIPCall *> (link->getCall (cid));
 
         if (!call) {
-            _warn ("UserAgent: Call with id %s doesn't exit!", Manager::instance().getCurrentCallId().c_str());
+            _warn ("UserAgent:  Call with id %s doesn't exit!", cid.c_str());
             return;
         }
 
@@ -4130,7 +4128,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
 		_debug("UserAgent: Notification status line: %d", status_line.code);
         if (status_line.code/100 == 2) {
 
-        	_debug ("UserAgent: Received 200 OK, stop call!");
+        	_debug ("UserAgent: Received 200 OK on call transfered, stop call!");
             pjsip_tx_data *tdata;
 
             status = pjsip_inv_end_session (call->getInvSession(), PJSIP_SC_GONE, NULL, &tdata);
-- 
GitLab


From 5e380ffa1495feeb8a214a16e50b14933582caba Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Tue, 16 Mar 2010 18:11:05 -0400
Subject: [PATCH 127/160] [#2536] Make teswt suite more generic, fix small
 timing issue

---
 sippxml/account_uas_recv_hangup.xml     |  2 -
 sippxml/testsuiteuac.sh                 | 97 ++++++++++++++++++-------
 tools/pysflphone/pysflphone_testdbus.py | 58 ++++++++++-----
 3 files changed, 112 insertions(+), 45 deletions(-)

diff --git a/sippxml/account_uas_recv_hangup.xml b/sippxml/account_uas_recv_hangup.xml
index 101e6f4c97..94bea47042 100644
--- a/sippxml/account_uas_recv_hangup.xml
+++ b/sippxml/account_uas_recv_hangup.xml
@@ -96,8 +96,6 @@
   <recv request="ACK">
   </recv>
 
-  <pause milliseconds="500"/>
-
   <send retrans="500">
     <![CDATA[
 
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index be94552443..1ed0db4165 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -1,17 +1,22 @@
 #!/bin/bash
-# sleep 5;
 
-SERVERPORT=5062
+
+LOCALPORT=5062
+LOCALIP_lo=127.0.0.1
+LOCALIP_eth0=192.168.50.182
+
+REMOTEADDR_lo=127.0.0.1:5060
+REMOTEADDR_ast=192.168.50.79
 
 # SCENARIO 1 Test 1
 function test_ip2ip_send_hangup {
 
-    # start sipp server to receive calls from sflphone
-    sipp -sf ip2ip_uas_recv_peer_hungup.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT}
-
     # start sflphoned
     # /usr/lib/sflphone/sflphoned& 
 
+    # start sipp server to receive calls from sflphone
+    sipp -sf ip2ip_uas_recv_peer_hungup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT}
+
     # wait some time to make sure sflphoned is started
     # sleep 1;
 
@@ -25,12 +30,12 @@ function test_ip2ip_send_hangup {
 # SCENARIO 1 Test 2
 function test_ip2ip_send_peer_hungup {
 
-    # start sipp server to receive calls from sflphone and then hangup
-    sipp -sf ip2ip_uas_recv_hangup.xml 127.0.0.1:5060 -s 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT}
-
     # start sflphoned
     # /usr/lib/sflphone/sflphoned& 
 
+    # start sipp server to receive calls from sflphone and then hangup
+    sipp -sf ip2ip_uas_recv_hangup.xml ${REMOTEADDR_lo} -s ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT}
+
     # wait some time to make sure sflphoned is started
     # sleep 1;
 
@@ -57,7 +62,7 @@ function test_ip2ip_recv_hangup {
     # sleep 1;
 
     # start sipp client and send calls 
-    sipp -sf ip2ip_uac_send_peer_hungup.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT} -l 1
+    sipp -sf ip2ip_uac_send_peer_hungup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
 
     # kill every one
     # bashtrap 
@@ -79,7 +84,7 @@ function test_ip2ip_recv_peer_hungup {
     # sleep 1;
 
     # start sipp client and send calls 
-    sipp -sf ip2ip_uac_send_hangup.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT} -l 1
+    sipp -sf ip2ip_uac_send_hangup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
 
     # kill every one
     # bashtrap 
@@ -100,10 +105,10 @@ function test_account_send_hangup {
     # sleep 1;
 
     # process only one registration
-    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+    sipp -sf account_uas_register.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 1
 
     # start sipp client and send calls 
-    sipp -sf account_uas_recv_peer_hungup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+    sipp -sf account_uas_recv_peer_hungup.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1
 
     # kill every one
     # bashtrap
@@ -124,10 +129,10 @@ function test_account_send_peer_hungup {
     # sleep 1;
 
     # process only one registration
-    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+    sipp -sf account_uas_register.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 1
 
     # start sipp client and send calls 
-    sipp -sf account_uas_recv_hangup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+    sipp -sf account_uas_recv_hangup.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1
 
     # kill every one
     # bashtrap
@@ -148,11 +153,10 @@ function test_account_recv_hangup {
     # sleep 1;
 
     # process only one registration
-    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+    sipp -sf account_uas_register.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 1
 
     # start sipp client and send calls 
-    sipp -sf account_uac_send_peer_hungup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
-
+    sipp -sf account_uac_send_peer_hungup.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 10
     # kill every one
     # bashtrap
 }
@@ -172,10 +176,10 @@ function test_account_recv_peer_hungup {
     # sleep 1;
 
     # process only one registration
-    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+    sipp -sf account_uas_register.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 1
 
     # start sipp client and send calls 
-    sipp -sf account_uac_send_hangup.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+    sipp -sf account_uac_send_hangup.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 10
 
     # kill every one
     # bashtrap
@@ -196,7 +200,7 @@ function test_ip2ip_send_hold_offhold {
     # sleep 1;
 
     # start sipp client and send calls 
-    sipp -sf ip2ip_uas_recv_hold_offhold.xml 127.0.0.1:5060 -i 127.0.0.1 -p ${SERVERPORT}
+    sipp -sf ip2ip_uas_recv_hold_offhold.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT}
     # kill every one
     # bashtrap
 }
@@ -216,10 +220,10 @@ function test_account_send_transfer {
     # sleep 1;
 
     # process only one registration
-    sipp -sf account_uas_register.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1 -m 1
+    sipp -sf account_uas_register.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1 -m 1
 
     # start sipp client and send calls 
-    sipp -sf account_uas_recv_transfered.xml 192.168.50.79 -i 192.168.50.182 -p ${SERVERPORT} -l 1
+    sipp -sf account_uas_recv_transfered.xml ${REMOTEADDR_ast} -i ${LOCALIP_eth0} -p ${LOCALPORT} -l 1
 
     # kill every one
     # bashtrap
@@ -236,20 +240,61 @@ bashtrap()
 
 # ============================ Test Suite ============================
 
-# SCENARIO 1: Normal flow calls (IP2IP)
+
+
+# SCENARIO 1: (IP2IP) Normal flow calls
+
+# Test 1: - Send an IP2IP call
+#         - Hangup
 # test_ip2ip_send_hangup
+
+# Test 2: - Send an IP2IP call
+#         - Peer Hangup
 # test_ip2ip_send_peer_hungup
+
+# Test 3: - Receive an IP2IP call
+#         - Hangup
 # test_ip2ip_recv_hangup
+
+# Test 4: - Receive an IP2IP call
+#         - Peer Hangup
 # test_ip2ip_recv_peer_hungup
 
-# SCENARIO 2: Normal flow calls (Account)
+
+
+# SCENARIO 2: (ACCOUNT) Normal flow calls
+
+# Test 1: - Send an ACCOUNT call
+#         - Hangup
 # test_account_send_hangup
+
+# Test 2: - Send an ACCOUNT call
+#         - Peer Hangup
 # test_account_send_peer_hungup
+
+# Test 3: - Receive an ACCOUNT call
+#         - Hangup
 # test_account_recv_hangup
+
+# Test 4: - Receive an ACCOUNT call
+#         - Peer Hangup
 # test_account_recv_peer_hungup
 
+
+
 # SCENARIO 3: Hold/offHold calls (Account)
-# test_ip2ip_send_hold_offhold
+
+# Test 1: - Send an IP2IP call
+#         - Put this call on HOLD
+#         - Off HOLD this call
+#         - Hangup
+test_ip2ip_send_hold_offhold
+
+
 
 # SCENARIO 4:  Transfer calls (Account)
-test_account_send_transfer
\ No newline at end of file
+
+# Test 1: - Send an IP2IP call
+#         - Transfer this call to another sipp instance
+#         - Hangup
+# test_account_send_transfer
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 3e7c97f0b0..a1c909c531 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -13,21 +13,29 @@ from threading import Event
 print "Import SFLphone"
 from sflphonectrlsimple import SflPhoneCtrlSimple
 
-# def killhandler(signum, frame):
-#     raise IOError("Couldn't open device!")
+# Define remote IP address constant
+REMOTEADDR_lo="127.0.0.1:5062"
 
-# signal.signal(signal.SIGKILL, killhandler)
+# Defines phone numbers
+PHONE1="27182"
+PHONE2="31416"
+PHONE3="14142"
 
+# Define function callback to emulate UA behavior on
+# recieving a call
 def acceptOnIncomingCall(sflphone):
     time.sleep(0.2)
     sflphone.Accept(sflphone.currentCallId)
 
+# Define function callback to emulate UA behavior on
+# receiving a call and hanging up
 def acceptOnIncomingCallHangup(sflphone):
     time.sleep(0.2)
     sflphone.Accept(sflphone.currentCallId)
     time.sleep(0.5)
     sflphone.HangUp(sflphone.currentCallId)
 
+
 class SflPhoneTests():
 
     def __init__(self, sfl):
@@ -75,12 +83,13 @@ class SflPhoneTests():
         print "Account with ID " + accountID + " removed"
 
 
+    # SCENARIO 1 Test 1
     def test_ip2ip_send_hangup(self):
         """Make a call to a server (sipp) on port 5062"""
         i = 0
         while(i < 10):
 
-            callid = self.sflphone.Call("sip:test@127.0.0.1:5062")
+            callid = self.sflphone.Call("sip:test@" + REMOTEADDR_lo)
             time.sleep(0.5)
             
             self.sflphone.HangUp(callid)            
@@ -91,19 +100,21 @@ class SflPhoneTests():
         del self.sflphone
 
 
+    # SCENARIO 1 Test 2
     def test_ip2ip_send_peer_hungup(self):
         """Make a call to a server (sipp) on port 5062"""
         i = 0
-        while(i < 1):
+        while(i < 10):
 
-            callid = self.sflphone.Call("sip:test@127.0.0.1:5062")
+            callid = self.sflphone.Call("sip:test@" + REMOTEADDR_lo)
             time.sleep(1.0)
 
             i = i+1
 
         del self.sflphone
 
-
+    
+    # SCENARIO 1 Test 3
     def test_ip2ip_recv_hangup(self):
         """Wait for calls, answer then hangup"""
 
@@ -114,6 +125,7 @@ class SflPhoneTests():
         self.sflphone.start()
 
 
+    # SCENARIO 1 Test 4
     def test_ip2ip_recv_peer_hungup(self):
         """Wait for calls, answer, peer hangup"""
         # Add callback for this test
@@ -123,30 +135,32 @@ class SflPhoneTests():
         self.sflphone.start()
 
 
+    # SCENARIO 2 Test 1
     def test_account_send_hangup(self):
         """Send new account call, hangup once peer answered"""
 
         i = 0
-        while(i < 1):
+        while(i < 10):
 
-            callid = self.sflphone.Call("27182")
-            time.sleep(1.0)
+            callid = self.sflphone.Call(PHONE1)
+            time.sleep(0.2)
             
             self.sflphone.HangUp(callid)            
-            time.sleep(1.0)
+            time.sleep(0.2)
 
             i = i+1
 
         # del self.sflphone
 
 
+    # SCENARIO 2 Test 2
     def test_account_send_peer_hungup(self):
         """Send new account call, hangup once peer answered"""
 
         i = 0
         while(i < 10):
 
-            callid = self.sflphone.Call("27182")
+            callid = self.sflphone.Call(PHONE1)
             time.sleep(1.0)
 
             i = i+1
@@ -154,6 +168,7 @@ class SflPhoneTests():
         del self.sflphone
 
 
+    # SCENARIO 2 Test 3 
     def test_account_recv_hangup(self):
         """Register an account and wait for incoming calls"""
 
@@ -164,6 +179,7 @@ class SflPhoneTests():
         self.sflphone.start()
 
 
+    # SCENARIO 2 Test 4 
     def test_account_recv_peer_hungup(self):
         """Register an account and wait for incoming calls"""
 
@@ -174,12 +190,13 @@ class SflPhoneTests():
         self.sflphone.start()
 
 
+    # SCENARIO 3 Test 1
     def test_ip2ip_send_hold_offhold(self):
         """Send new call, hold this call, offhold, hangup"""
         i = 0
         while(i < 10):
 
-            callid = self.sflphone.Call("sip:test@127.0.0.1:5062")
+            callid = self.sflphone.Call("sip:test@" + REMOTEADDR_lo)
             time.sleep(0.5)
 
             self.sflphone.Hold(callid)
@@ -196,16 +213,17 @@ class SflPhoneTests():
         del self.sflphone
 
 
+    # SCENARIO 4 Test 1
     def test_account_send_transfer(self):
         """Send new calls, transfer it to a new instance"""
 
         i = 0
         while(i < 1):
 
-            callid = self.sflphone.Call("27182")
+            callid = self.sflphone.Call(PHONE1)
             time.sleep(1.0)
             
-            self.sflphone.Transfer(callid,"14142")
+            self.sflphone.Transfer(callid,PHONE3)
             # self.sflphone.HangUp(callid)            
             # time.sleep(1.0)
 
@@ -223,6 +241,10 @@ testsuite = SflPhoneTests(sflphone)
 sflphone.setFirstRegisteredAccount();
 
 
+# ============================ Test Suite ============================
+
+
+
 # SCENARIO 1: IP2IP Normal flow calls
 
 # Test 1: - Send an IP2IP call
@@ -262,13 +284,15 @@ sflphone.setFirstRegisteredAccount();
 # testsuite.test_account_recv_peer_hungup()
 
 
+
 # SCENARIO 3: IP2IP Call, HOLD/OFFHOLD
 
 # Test 1: - Send an IP2IP call
 #         - Put this call on HOLD
 #         - Off HOLD this call
 #         - Hangup
-# testsuite.test_ip2ip_send_hold_offhold()
+testsuite.test_ip2ip_send_hold_offhold()
+
 
 
 # SCENARIO 4: IP2IP Call, HOLD/OFFHOLD
@@ -276,4 +300,4 @@ sflphone.setFirstRegisteredAccount();
 # Test 1: - Send an IP2IP call
 #         - Transfer this call to another sipp instance
 #         - Hangup
-testsuite.test_account_send_transfer()
+# testsuite.test_account_send_transfer()
-- 
GitLab


From 851c1b8b948fb4ad6e6072b81e3c1a09b5e830f9 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 17 Mar 2010 13:42:52 -0400
Subject: [PATCH 128/160] [#3040] Fix removing callid from calllist at early
 stage during transfer

Transfer may fail, so we better wait to receive NOTIFY 200 OK
---
 sflphone-common/src/managerimpl.cpp | 70 +++++++++--------------------
 1 file changed, 21 insertions(+), 49 deletions(-)

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 5fc21e09a7..6cc2ed84a2 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -376,7 +376,9 @@ bool ManagerImpl::answerCall (const CallID& call_id) {
 
 //THREAD=Main
 bool ManagerImpl::hangupCall (const CallID& call_id) {
-	_debug ("ManagerImpl::hangupCall(%s)", call_id.c_str());
+
+	_info("Manager: Hangup call %s", call_id.c_str());
+
 	PulseLayer *pulselayer;
 	AccountID account_id;
 	bool returnValue = true;
@@ -387,7 +389,7 @@ bool ManagerImpl::hangupCall (const CallID& call_id) {
 	stopTone();
 
 	/* Broadcast a signal over DBus */
-	_debug ("    hangupCall: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str());
+	_debug ("Manager: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str());
 
 	if (_dbus)
 		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
@@ -419,7 +421,7 @@ bool ManagerImpl::hangupCall (const CallID& call_id) {
 
 		if (account_id == AccountNULL) {
 
-			_debug ("! Manager Hangup Call: Call doesn't exists");
+			_error ("Manager: Error: account id is NULL in hangup");
 			returnValue = false;
 		} else {
 
@@ -434,7 +436,7 @@ bool ManagerImpl::hangupCall (const CallID& call_id) {
 
 	// stop streams
 	if (audiolayer && (nbCalls <= 0)) {
-		_debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+		_debug ("Manager: stop audio stream, ther is only %i call(s) remaining", nbCalls);
 		audiolayer->stopStream();
 	}
 
@@ -446,7 +448,8 @@ bool ManagerImpl::hangupCall (const CallID& call_id) {
 }
 
 bool ManagerImpl::hangupConference (const ConfID& id) {
-	_debug ("ManagerImpl::hangupConference()");
+
+	_debug ("Manager: Hangup conference %s", id.c_str());
 
 	Conference *conf;
 	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
@@ -463,7 +466,7 @@ bool ManagerImpl::hangupConference (const ConfID& id) {
 		ParticipantSet::iterator iter_participant = participants.begin();
 
 		while (iter_participant != participants.end()) {
-			_debug ("ManagerImpl::hangupConference participant %s", (*iter_participant).c_str());
+			_debug ("Manager: Hangup onference participant %s", (*iter_participant).c_str());
 
 			hangupCall(*iter_participant);
 
@@ -518,13 +521,12 @@ bool ManagerImpl::onHoldCall (const CallID& call_id) {
 	AccountID account_id;
 	bool returnValue;
 
-	_debug ("ManagerImpl::onHoldCall(%s)", call_id.c_str());
+	_debug ("Manager:  Put call %s on hold", call_id.c_str());
 
 	stopTone();
 
 	CallID current_call_id = getCurrentCallId();
 
-	_debug ("    onHoldCall: try to put call %s on hold", call_id.c_str());
 
 	/* Direct IP to IP call */
 
@@ -537,7 +539,7 @@ bool ManagerImpl::onHoldCall (const CallID& call_id) {
 		account_id = getAccountFromCall(call_id);
 
 		if (account_id == AccountNULL) {
-			_debug ("    onHoldCall: Account ID %s or callid %s doesn't exists", account_id.c_str(), call_id.c_str());
+			_debug ("Manager: Account ID %s or callid %s doesn't exists in call onHold", account_id.c_str(), call_id.c_str());
 			return false;
 		}
 
@@ -568,7 +570,7 @@ bool ManagerImpl::offHoldCall (const CallID& call_id) {
 
 	is_rec = false;
 
-	_debug ("ManagerImpl::offHoldCall(%s)", call_id.c_str());
+	_debug ("Manager: Put call %s off hold", call_id.c_str());
 
 	stopTone();
 
@@ -580,11 +582,9 @@ bool ManagerImpl::offHoldCall (const CallID& call_id) {
 		// if this is not a conferenceand this and is not a conference participant
 		if (!isConference(current_call_id) && !participToConference(
 				current_call_id)) {
-			_debug ("    offHoldCall: put current call (%s) on hold", current_call_id.c_str());
 			onHoldCall(current_call_id);
 		} else if (isConference(current_call_id) && !participToConference(
 				call_id)) {
-			_debug ("    offHoldCall Put current conference (%s) on hold", current_call_id.c_str());
 			detachParticipant(default_id, current_call_id);
 		}
 	}
@@ -603,11 +603,11 @@ bool ManagerImpl::offHoldCall (const CallID& call_id) {
 		account_id = getAccountFromCall(call_id);
 
 		if (account_id == AccountNULL) {
-			_debug ("Manager OffHold Call: Call doesn't exists");
+			_warn ("Manager: Error: Call doesn't exists in off hold");
 			return false;
 		}
 
-		_debug ("Setting OFFHOLD, Account %s, callid %s", account_id.c_str(), call_id.c_str());
+		_debug ("Manager: Setting offhold, Account %s, callid %s", account_id.c_str(), call_id.c_str());
 
 		is_rec = getAccountLink(account_id)->getCall(call_id)->isRecording();
 		returnValue = getAccountLink(account_id)->offhold(call_id);
@@ -636,12 +636,6 @@ bool ManagerImpl::offHoldCall (const CallID& call_id) {
 		_audiodriver->flushMain();
 	}
 
-	// codecName = getCurrentCodecName (call_id);
-	// _debug("ManagerImpl::hangupCall(): broadcast codec name %s ",codecName.c_str());
-
-	// if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id,codecName.c_str());
-
-
 	return returnValue;
 }
 
@@ -650,39 +644,18 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
 	AccountID accountid;
 	bool returnValue;
 
-	_info("Manager: Transfer Call\n");
-
-	stopTone();
+	_info("Manager: Transfer call %s\n", call_id.c_str());
 
 	CallID current_call_id = getCurrentCallId();
 
-	if (participToConference(call_id)) {
-
-		_info("Manager: Particip to a conference\n");
-
-		Conference *conf = getConferenceFromCallID(call_id);
-
-		if (conf != NULL) {
-			// remove this participant
-			removeParticipant(call_id);
-
-			processRemainingParticipant(current_call_id, conf);
-		}
-	} else {
-
-		// we are not participating to a conference, current call switched to ""
-		if (!isConference(current_call_id))
-			switchCall("");
-	}
-
-	/* Direct IP to IP call */
+	// Direct IP to IP call
 	if (getConfigFromCall(call_id) == Call::IPtoIP) {
-		returnValue
-				= SIPVoIPLink::instance(AccountNULL)-> transfer(call_id, to);
+		returnValue = SIPVoIPLink::instance(AccountNULL)-> transfer(call_id, to);
 	}
-	/* Classic call, attached to an account */
+	// Classic call, attached to an account
 	else {
-		accountid = getAccountFromCall(call_id);
+
+	accountid = getAccountFromCall(call_id);
 
 		if (accountid == AccountNULL) {
 			_warn ("Manager: Call doesn't exists");
@@ -691,9 +664,9 @@ bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
 
 		returnValue = getAccountLink(accountid)->transfer(call_id, to);
 
-		removeCallAccount(call_id);
 	}
 
+	// remove waiting call in case we make transfer without even answer
 	removeWaitingCall(call_id);
 
 	return returnValue;
@@ -3937,7 +3910,6 @@ bool ManagerImpl::removeCallAccount (const CallID& callID) {
 	if (_callAccountMap.erase(callID)) {
 		return true;
 	}
-
 	return false;
 }
 
-- 
GitLab


From 7cc106b6d1c8ff3f98464e7be23bd339169d4768 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 17 Mar 2010 15:32:35 -0400
Subject: [PATCH 129/160] [#3014] New test for Call Refuse

---
 sippxml/ip2ip_uac_send_hangup.xml       |  2 -
 sippxml/ip2ip_uac_send_peer_hungup.xml  |  2 -
 sippxml/testsuiteuac.sh                 | 55 ++++++++++++++-----------
 tools/pysflphone/pysflphone_testdbus.py | 39 +++++++++++++++---
 tools/pysflphone/sflphonectrlsimple.py  |  8 ++--
 5 files changed, 67 insertions(+), 39 deletions(-)

diff --git a/sippxml/ip2ip_uac_send_hangup.xml b/sippxml/ip2ip_uac_send_hangup.xml
index 49cc63fca0..8b801eb494 100644
--- a/sippxml/ip2ip_uac_send_hangup.xml
+++ b/sippxml/ip2ip_uac_send_hangup.xml
@@ -95,6 +95,4 @@
   <recv response="200">
   </recv>
 
-  <pause milliseconds="1000"/>
-
 </scenario>
diff --git a/sippxml/ip2ip_uac_send_peer_hungup.xml b/sippxml/ip2ip_uac_send_peer_hungup.xml
index 4e811e3826..048b0d8a06 100644
--- a/sippxml/ip2ip_uac_send_peer_hungup.xml
+++ b/sippxml/ip2ip_uac_send_peer_hungup.xml
@@ -89,6 +89,4 @@
    ]]>
  </send>
 
-  <pause milliseconds="1000"/>
-
 </scenario>
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 1ed0db4165..9e993dfeb8 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -62,29 +62,7 @@ function test_ip2ip_recv_hangup {
     # sleep 1;
 
     # start sipp client and send calls 
-    sipp -sf ip2ip_uac_send_peer_hungup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
-
-    # kill every one
-    # bashtrap 
-}
-
-
-# SCENARIO 1 Test 4
-function test_ip2ip_recv_peer_hungup {
-
-    # start sflphoned
-    # /usr/lib/sflphone/sflphoned& 
-
-    # wait some time to make sure sflphoned is started
-    # sleep 1;
-
-    # python ../tools/pysflphone/pysflphone_testdbus.py &
-
-    # wait some time to make sure client is bound
-    # sleep 1;
-
-    # start sipp client and send calls 
-    sipp -sf ip2ip_uac_send_hangup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
+    sipp -sf ip2ip_uac_send_peer_hungup.xmlip2ip_uac_send_hangup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
 
     # kill every one
     # bashtrap 
@@ -230,6 +208,26 @@ function test_account_send_transfer {
 }
 
 
+# SCENARIO 5 Test 1
+function test_ip2ip_send_refused {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # start sipp server to receive calls from sflphone and then hangup
+    sipp -sf ip2ip_uac_send_refused.xml ${REMOTEADDR_lo} -s ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # run python client and script to make calls
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # kill every one
+    bashtrap 
+}
+
+
 # function called if CTRL-C detected 
 bashtrap()
 {
@@ -288,7 +286,7 @@ bashtrap()
 #         - Put this call on HOLD
 #         - Off HOLD this call
 #         - Hangup
-test_ip2ip_send_hold_offhold
+# test_ip2ip_send_hold_offhold
 
 
 
@@ -297,4 +295,11 @@ test_ip2ip_send_hold_offhold
 # Test 1: - Send an IP2IP call
 #         - Transfer this call to another sipp instance
 #         - Hangup
-# test_account_send_transfer
\ No newline at end of file
+# test_account_send_transfer
+
+
+#SCENARIO 5: Refuse call (IP2IP)
+
+# Test 1: - Receive a call
+#         - Refuse (hangup without answer)
+test_ip2ip_send_refused
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index a1c909c531..933f8736c9 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -21,21 +21,29 @@ PHONE1="27182"
 PHONE2="31416"
 PHONE3="14142"
 
+
 # Define function callback to emulate UA behavior on
-# recieving a call
+# recieving a call (peer hangup))
 def acceptOnIncomingCall(sflphone):
-    time.sleep(0.2)
+
     sflphone.Accept(sflphone.currentCallId)
 
+
 # Define function callback to emulate UA behavior on
 # receiving a call and hanging up
 def acceptOnIncomingCallHangup(sflphone):
-    time.sleep(0.2)
-    sflphone.Accept(sflphone.currentCallId)
-    time.sleep(0.5)
+    
+    sflphone.Accept(sflphone.currentCallId)    
     sflphone.HangUp(sflphone.currentCallId)
 
 
+# Define function callback to emulate UA behavior on
+# refusing a call
+def refuseOnIncomingCall(sflphone):
+    # time.sleep(0.5)
+    sflphone.Refuse(sflphone.currentCallId)
+
+
 class SflPhoneTests():
 
     def __init__(self, sfl):
@@ -230,6 +238,17 @@ class SflPhoneTests():
             i = i+1
 
 
+    # SCENARIO 5 Test 1 
+    def test_ip2ip_recv_refuse(self):
+        """Receive an incoming IP2IP call, refuse it"""
+
+        # Add callback for this test
+        self.sflphone.onIncomingCall_cb = refuseOnIncomingCall
+
+        # Start Glib mainloop
+        self.sflphone.start()
+
+
 
 # Open sflphone and connect to sflphoned through dbus
 sflphone = SflPhoneCtrlSimple(True)
@@ -291,7 +310,7 @@ sflphone.setFirstRegisteredAccount();
 #         - Put this call on HOLD
 #         - Off HOLD this call
 #         - Hangup
-testsuite.test_ip2ip_send_hold_offhold()
+# testsuite.test_ip2ip_send_hold_offhold()
 
 
 
@@ -301,3 +320,11 @@ testsuite.test_ip2ip_send_hold_offhold()
 #         - Transfer this call to another sipp instance
 #         - Hangup
 # testsuite.test_account_send_transfer()
+
+
+
+# SCENARIO 5: IP2IP Call, Refuse
+
+# Test 1: - Receive an incoming call
+#         - Hangup without answer
+testsuite.test_ip2ip_recv_refuse()
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index a19d4ab090..df298ce791 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -534,11 +534,11 @@ class SflPhoneCtrlSimple(Thread):
 
     def Refuse(self, callid):
         """Refuse an incoming call identified by a CallID"""
-        if not self.account:
-            self.setFirstRegisteredAccount()
+        # if not self.account:
+        #     self.setFirstRegisteredAccount()
 
-        if not self.isAccountRegistered():
-            raise SflPhoneError("Can't refuse a call without a registered account")
+        # if not self.isAccountRegistered():
+        #     raise SflPhoneError("Can't refuse a call without a registered account")
 
         if callid is None or callid == "":
             raise SflPhoneError("Invalid callID")
-- 
GitLab


From e03caede39d044d432f65a4eb41118cbc50a8800 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 17 Mar 2010 16:40:20 -0400
Subject: [PATCH 130/160] [#3045] Init the gobject thread before starting glib
 Mainloop in test suite

---
 tools/pysflphone/sflphonectrlsimple.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index df298ce791..a92ee307dd 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -66,6 +66,7 @@ class SflPhoneCtrlSimple(Thread):
         self.registered = False
         self.register()
 	self.currentCallId = ""
+
 	self.loop = MainLoop()
 
 	self.test = test
@@ -603,4 +604,9 @@ class SflPhoneCtrlSimple(Thread):
 	return callid
 
     def run(self):
-        self.loop.run()
+        gobject.threads_init()
+        # self.loop.run()
+	context = self.loop.get_context()
+
+	while 1:
+            context.iteration(True)
-- 
GitLab


From 34075aa9a87985cbac0920f98d3937ad7473d108 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 18 Mar 2010 15:21:34 -0400
Subject: [PATCH 131/160] [#3014] Don't delete call in call_state_cahnged when
 refusing an incoming call

This is done in SIPVoipLink::refuse method
---
 sflphone-common/src/dbus/callmanager.cpp |   4 +-
 sflphone-common/src/managerimpl.cpp      | 101 ++++++++---------
 sflphone-common/src/sip/sipcall.cpp      |   6 +-
 sflphone-common/src/sip/sipvoiplink.cpp  | 136 ++++++++++++-----------
 tools/pysflphone/sflphonectrlsimple.py   |   2 +
 5 files changed, 126 insertions(+), 123 deletions(-)

diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp
index 1c30ef9755..36b5aa87a9 100644
--- a/sflphone-common/src/dbus/callmanager.cpp
+++ b/sflphone-common/src/dbus/callmanager.cpp
@@ -77,14 +77,14 @@ CallManager::placeCallFirstAccount (const std::string& callID,
 void
 CallManager::refuse (const std::string& callID)
 {
-    _debug ("CallManager::refuse received");
+    _debug ("CallManager: refuse received");
     Manager::instance().refuseCall (callID);
 }
 
 void
 CallManager::accept (const std::string& callID)
 {
-    _debug ("CallManager::accept received");
+    _debug ("CallManager: accept received");
     Manager::instance().answerCall (callID);
 }
 
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 6cc2ed84a2..2bb011d642 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -486,6 +486,8 @@ bool ManagerImpl::cancelCall (const CallID& id) {
 	AccountID accountid;
 	bool returnValue;
 
+	_debug("Manager: Cancel call");
+
 	stopTone();
 
 	/* Direct IP to IP call */
@@ -694,6 +696,8 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 	AccountID accountid;
 	bool returnValue;
 
+	_debug("Manager: Refuse call %s", id.c_str());
+
 	CallID current_call_id = getCurrentCallId();
 
 	stopTone();
@@ -703,12 +707,14 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 	// AudioLayer* audiolayer = getAudioDriver();
 
 	if (nbCalls <= 1) {
-		_debug ("    hangupCall: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+		_debug ("Manager: Stop audio stream, ther is only %i  call(s) remaining", nbCalls);
 
 		AudioLayer* audiolayer = getAudioDriver();
 		audiolayer->stopStream();
 	}
 
+	_debug("OK");
+
 	/* Direct IP to IP call */
 
 	if (getConfigFromCall(id) == Call::IPtoIP) {
@@ -720,7 +726,7 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 		accountid = getAccountFromCall(id);
 
 		if (accountid == AccountNULL) {
-			_debug ("! Manager OffHold Call: Call doesn't exists");
+			_warn ("Manager: Call doesn't exists");
 			return false;
 		}
 
@@ -728,6 +734,7 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 
 		removeCallAccount(id);
 	}
+	_debug("OK");
 
 	// if the call was outgoing or established, we didn't refuse it
 	// so the method did nothing
@@ -736,9 +743,6 @@ bool ManagerImpl::refuseCall (const CallID& id) {
 
 		if (_dbus)
 			_dbus->getCallManager()->callStateChanged(id, "HUNGUP");
-
-		// if(current_call_id.compare("") != 0)
-		// switchCall ("");
 	}
 
 	return returnValue;
@@ -1518,18 +1522,24 @@ bool ManagerImpl::incomingCallWaiting () {
 }
 
 void ManagerImpl::addWaitingCall (const CallID& id) {
+
 	ost::MutexLock m(_waitingCallMutex);
 	_waitingCall.insert(id);
 	_nbIncomingWaitingCall++;
+
+	_info("Manager: Add waiting call %s (%d calls)", id.c_str(), _nbIncomingWaitingCall);
 }
 
 void ManagerImpl::removeWaitingCall (const CallID& id) {
+
 	ost::MutexLock m(_waitingCallMutex);
 	// should return more than 1 if it erase a call
 
 	if (_waitingCall.erase(id)) {
 		_nbIncomingWaitingCall--;
 	}
+
+	_info("Manager: Remove waiting call %s (%d calls)", id.c_str(), _nbIncomingWaitingCall);
 }
 
 bool ManagerImpl::isWaitingCall (const CallID& id) {
@@ -1547,29 +1557,29 @@ bool ManagerImpl::isWaitingCall (const CallID& id) {
 ////////////////////////////////////////////////////////////////////////////////
 // SipEvent Thread
 bool ManagerImpl::incomingCall (Call* call, const AccountID& accountId) {
-	PulseLayer *pulselayer;
+
 	std::string from, number, display_name, display;
 
+	if(!call)
+		_error("Manager: Error: no call at this point");
+
 	stopTone();
 
-	_debug ("Incoming call %s for account %s", call->getCallId().data(), accountId.c_str());
+	_debug ("Manager: Incoming call %s for account %s", call->getCallId().data(), accountId.c_str());
 
 	associateCallToAccount(call->getCallId(), accountId);
 
 	// If account is null it is an ip to ip call
-
 	if (accountId == AccountNULL) {
-
 		associateConfigToCall(call->getCallId(), Call::IPtoIP);
-	} else {
+	}
+	else {
 		// strip sip: which is not required and bring confusion with ip to ip calls
 		// when placing new call from history (if call is IAX, do nothing)
 		std::string peerNumber = call->getPeerNumber();
 
 		int startIndex = peerNumber.find("sip:");
 
-		// if "sip:" is found => it is not an IAX call
-
 		if (startIndex != (int) string::npos) {
 			std::string strippedPeerNumber = peerNumber.substr(startIndex + 4);
 			call->setPeerNumber(strippedPeerNumber);
@@ -1577,32 +1587,23 @@ bool ManagerImpl::incomingCall (Call* call, const AccountID& accountId) {
 
 	}
 
-	_debug ("ManagerImpl::incomingCall :: hasCurrentCall() %i ", hasCurrentCall());
-
 	if (!hasCurrentCall()) {
+		_debug ("Manager: Has no current call");
 
 		call->setConnectionState(Call::Ringing);
 		ringtone();
-		// switchCall (call->getCallId());
 
 	}
-
-	/*
-	 else {
-	 addWaitingCall(call->getCallId());
-	 }
-	 */
+	else {
+		_debug ("Manager: has current call");
+	}
 
 	addWaitingCall(call->getCallId());
 
 	from = call->getPeerName();
-
 	number = call->getPeerNumber();
-
 	display_name = call->getDisplayName();
 
-	// _debug(    "incomingCall from: %s, number: %s, display_name: %s", from.c_str(), number.c_str(), display_name.c_str());
-
 	if (from != "" && number != "") {
 		from.append(" <");
 		from.append(number);
@@ -1613,33 +1614,15 @@ bool ManagerImpl::incomingCall (Call* call, const AccountID& accountId) {
 		from.append(">");
 	}
 
-	/*
-	 CallIDSet::iterator iter = _waitingCall.begin();
-	 while (iter != _waitingCall.end()) {
-	 CallID ident = *iter;
-	 _debug("ManagerImpl::incomingCall :: CALL iteration: %s ",ident.c_str());
-	 ++iter;
-	 }
-	 */
-
 	/* Broadcast a signal over DBus */
-	_debug ("From: %s, Number: %s, DisplayName: %s", from.c_str(), number.c_str(), display_name.c_str());
+	_debug ("Manager: From: %s, Number: %s, Display Name: %s", from.c_str(), number.c_str(), display_name.c_str());
 
 	display = display_name;
-
 	display.append(" ");
-
 	display.append(from);
 
 	if (_dbus)
-		_dbus->getCallManager()->incomingCall(accountId, call->getCallId(),
-				display.c_str());
-
-	//if (_dbus) _dbus->getCallManager()->callStateChanged(call->getCallId(), "INCOMING");
-
-	if (_audiodriver->getLayerType() == PULSEAUDIO) {
-		pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-	}
+		_dbus->getCallManager()->incomingCall(accountId, call->getCallId(), display.c_str());
 
 	return true;
 }
@@ -1916,7 +1899,8 @@ void ManagerImpl::ringback () {
  * Multi Thread
  */
 void ManagerImpl::ringtone () {
-	_debug ("ManagerImpl::ringtone");
+
+	_debug ("Manager: Start ringtone");
 	std::string ringchoice;
 	AudioLayer *audiolayer;
 	AudioCodec *codecForTone;
@@ -1925,7 +1909,7 @@ void ManagerImpl::ringtone () {
 
 	if (isRingtoneEnabled()) {
 
-		_debug ("  Tone is enabled");
+		_debug ("Manager: Tone is enabled");
 		//TODO Comment this because it makes the daemon crashes since the main thread
 		//synchronizes the ringtone thread.
 
@@ -1940,10 +1924,12 @@ void ManagerImpl::ringtone () {
 
 		audiolayer = getAudioDriver();
 
-		layer = audiolayer->getLayerType();
-
-		if (audiolayer == 0)
+		if (!audiolayer) {
+			_error("Manager: Error: no audio layer in ringtone");
 			return;
+		}
+
+		layer = audiolayer->getLayerType();
 
 		samplerate = audiolayer->getSampleRate();
 
@@ -4068,18 +4054,19 @@ ManagerImpl::getAccount (const AccountID& accountID) {
 
 AccountID ManagerImpl::getAccountIdFromNameAndServer (
 		const std::string& userName, const std::string& server) {
+
 	AccountMap::iterator iter;
 	SIPAccount *account;
-	_debug ("getAccountIdFromNameAndServer : username = %s , server = %s", userName.c_str(), server.c_str());
+
+	_info ("Manager : username = %s , server = %s", userName.c_str(), server.c_str());
 	// Try to find the account id from username and server name by full match
 
 	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-		_debug ("for : account = %s", iter->first.c_str());
 		account = dynamic_cast<SIPAccount *> (iter->second);
 
 		if (account != NULL) {
 			if (account->fullMatch(userName, server)) {
-				_debug ("Matching accountId in request is a fullmatch");
+				_debug ("Manager: Matching account id in request is a fullmatch %s@%s", userName.c_str(), server.c_str());
 				return iter->first;
 			}
 		}
@@ -4091,7 +4078,7 @@ AccountID ManagerImpl::getAccountIdFromNameAndServer (
 
 		if (account != NULL) {
 			if (account->hostnameMatch(server)) {
-				_debug ("Matching accountId in request with hostname");
+				_debug ("Manager: Matching account id in request with hostname %s", server.c_str());
 				return iter->first;
 			}
 		}
@@ -4103,12 +4090,14 @@ AccountID ManagerImpl::getAccountIdFromNameAndServer (
 
 		if (account != NULL) {
 			if (account->userMatch(userName)) {
-				_debug ("Matching accountId in request with username");
+				_debug ("Manager: Matching account id in request with username %s", userName.c_str());
 				return iter->first;
 			}
 		}
 	}
 
+	 _debug ("Manager: Username %s or server %s doesn't match any account, using IP2IP", userName.c_str(), server.c_str());
+
 	// Failed again! return AccountNULL
 	return AccountNULL;
 }
@@ -4232,7 +4221,7 @@ bool ManagerImpl::associateConfigToCall (const CallID& callID,
 
 	if (getConfigFromCall(callID) == CallConfigNULL) { // nothing with the same ID
 		_callConfigMap[callID] = config;
-		_debug ("Associate Call %s with config %i", callID.data(), config);
+		_debug ("Manager: Associate call %s with config %i", callID.c_str(), config);
 		return true;
 	} else {
 		return false;
diff --git a/sflphone-common/src/sip/sipcall.cpp b/sflphone-common/src/sip/sipcall.cpp
index d1e22660c6..9ed7f7a90e 100644
--- a/sflphone-common/src/sip/sipcall.cpp
+++ b/sflphone-common/src/sip/sipcall.cpp
@@ -33,17 +33,19 @@ SIPCall::SIPCall (const CallID& id, Call::CallType type, pj_pool_t *pool) : Call
         , _invSession (NULL)
         , _local_sdp (0)
 {
+	_debug ("SIPCall: Create new call %s", id.c_str());
+
     _local_sdp = new Sdp (pool);
-    _debug ("SIPCALL::Constructor for this class is called ");
 }
 
 SIPCall::~SIPCall()
 {
+	_debug ("SIPCall: Delete call");
+
     delete _audiortp;
     _audiortp = 0;
     delete _local_sdp;
     _local_sdp = 0;
-    _debug ("SIPCALL::Destructor for this class is called ");
 }
 
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 2309c86923..bf8e43e6d0 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -352,6 +352,7 @@ SIPVoIPLink::terminateSIPCall()
 void
 SIPVoIPLink::terminateOneCall (const CallID& id)
 {
+	_debug("UserAgent: Terminate call %s", id.c_str());
 
     SIPCall *call = getSIPCall (id);
 
@@ -396,7 +397,7 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
     struct in_addr *addr_in;
 
     if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
-        _debug("UserAgent: getInterfaceAddrFromName error could not open socket\n");
+        _error("UserAgent: Error: could not open socket");
 
     memset (&ifr, 0, sizeof (struct ifreq));
 
@@ -404,7 +405,7 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
     ifr.ifr_addr.sa_family = AF_INET;
 
     if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0)
-        _debug("UserAgent: getInterfaceAddrFromName use default interface (0.0.0.0)\n");
+        _debug("UserAgent: Use default interface (0.0.0.0)");
     
     saddr_in = (struct sockaddr_in *)&ifr.ifr_addr;
     addr_in = &(saddr_in->sin_addr);
@@ -974,15 +975,15 @@ SIPVoIPLink::peerHungup (const CallID& id)
 bool
 SIPVoIPLink::cancel (const CallID& id)
 {
+	_info ("UserAgent: Cancel call %s", id.c_str());
+
     SIPCall* call = getSIPCall (id);
 
-    if (call==0) {
-        _debug ("! SIP Error: Call doesn't exist");
+    if (!call) {
+        _warn("UserAgent: Error: Call doesn't exist");
         return false;
     }
 
-    _debug ("- SIP Action: Cancel call %s [cid: %3d]", id.data(), call->getCid());
-
     terminateOneCall (id);
     removeCall (id);
 
@@ -1203,17 +1204,18 @@ SIPVoIPLink::refuse (const CallID& id)
     pj_status_t status;
     pjsip_tx_data *tdata;
 
+    _debug("UserAgent: Refuse call %s", id.c_str());
 
     call = getSIPCall (id);
 
     if (call==0) {
-        _debug ("Call doesn't exist");
+        _error ("UserAgent: Error: Call doesn't exist");
         return false;
     }
 
     // can't refuse outgoing call or connected
     if (!call->isIncoming() || call->getConnectionState() == Call::Connected) {
-        _debug ("It's not an incoming call, or it's already answered");
+        _debug ("UserAgent: Call %s is not in state incoming, or is already answered");
         return false;
     }
 
@@ -1232,6 +1234,8 @@ SIPVoIPLink::refuse (const CallID& id)
 
     terminateOneCall (id);
 
+    _debug("UserAgent: Refuse call completed");
+
     return true;
 }
 
@@ -1499,7 +1503,7 @@ void
 SIPVoIPLink::SIPCallServerFailure (SIPCall *call)
 {
     if (call != 0) {
-        _debug ("Server error!");
+        _error ("UserAgent: Error: Server error!");
         CallID id = call->getCallId();
         Manager::instance().callFailure (id);
         terminateOneCall (id);
@@ -2987,7 +2991,7 @@ void set_voicemail_info (AccountID account, pjsip_msg_body *body)
 void SIPVoIPLink::handle_reinvite (SIPCall *call)
 {
 
-    _debug ("UserAgent: handle_reinvite");
+    _debug ("UserAgent: Handle reinvite");
     /*
     // Close the previous RTP session
     call->getAudioRtp()->stop ();
@@ -3010,7 +3014,7 @@ void SIPVoIPLink::handle_reinvite (SIPCall *call)
 // This callback is called when the invite session state has changed
 void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
 {
-    _debug ("call_on_state_changed to state %s", invitationStateMap[inv->state]);
+    _debug ("UserAgent: Call state changed to %s", invitationStateMap[inv->state]);
 
     pjsip_rx_data *rdata;
     pj_status_t status;
@@ -3055,7 +3059,6 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         pjsip_evsub_state ev_state = PJSIP_EVSUB_STATE_ACTIVE;
 
         switch (call->getInvSession()->state) {
-                // switch (inv->state) {
 
             case PJSIP_INV_STATE_NULL:
 
@@ -3094,9 +3097,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
             pjsip_tx_data *tdata;
             pj_status_t status;
 
-            status = pjsip_xfer_notify (call->getXferSub(),
-                                        ev_state, st_code,
-                                        NULL, &tdata);
+            status = pjsip_xfer_notify (call->getXferSub(), ev_state, st_code, NULL, &tdata);
 
             if (status != PJ_SUCCESS) {
                 _debug ("UserAgent: Unable to create NOTIFY -- %d", status);
@@ -3170,9 +3171,12 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
 
                 break;
 
-            case PJSIP_SC_NOT_FOUND:            /* peer not found */
+            case PJSIP_SC_DECLINE:
+            	_debug("UserAgent: Call %s is declined", call->getCallId().c_str());
+				// if (inv->role == PJSIP_ROLE_UAS)
+				break;
 
-            case PJSIP_SC_DECLINE:				/* We have been ignored */
+            case PJSIP_SC_NOT_FOUND:            /* peer not found */
 
             case PJSIP_SC_REQUEST_TIMEOUT:      /* request timeout */
 
@@ -3187,6 +3191,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
             case PJSIP_SC_FORBIDDEN:
 
             case PJSIP_SC_REQUEST_PENDING:
+
                 accId = Manager::instance().getAccountFromCall (call->getCallId());
                 link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId));
 
@@ -3207,7 +3212,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
 // This callback is called after SDP offer/answer session has completed.
 void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 {
-    _debug ("UserAgent: Call on media update");
+    _debug ("UserAgent: Call media update");
 
     const pjmedia_sdp_session *local_sdp;
     const pjmedia_sdp_session *remote_sdp;
@@ -3337,8 +3342,9 @@ void call_on_forked (pjsip_inv_session *inv, pjsip_event *e)
 
 void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e)
 {
-    _debug("UserAgent: Transaction changed to state %s", transactionStateMap[tsx->state]);
+	assert(tsx);
 
+    _debug("UserAgent: Transaction changed to state %s", transactionStateMap[tsx->state]);
 
     if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING &&
             pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) {
@@ -3348,10 +3354,14 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
 
         if (e && e->body.rx_msg.rdata) {
 
+
+        	_debug("Event");
             pjsip_tx_data* t_data;
             pjsip_rx_data* r_data = e->body.rx_msg.rdata;
 
-            if (r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) {
+            if (r_data && r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) {
+
+            	_debug("R_data");
 
                 std::string method_info = "INFO";
                 std::string method_notify = "NOTIFY";
@@ -3373,6 +3383,8 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
             }
         }
     }
+
+    _debug("OK: ransaction changed to state");
 }
 
 void regc_cb (struct pjsip_regc_cbparam *param)
@@ -3502,18 +3514,18 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     std::string method_name;
     std::string request;
 
+
+    _info("UserAgent: Receiving REQUEST using transport: %s %s (refcnt=%d)",
+    	   rdata->tp_info.transport->obj_name,
+    	   rdata->tp_info.transport->info,
+    	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
+
     // No need to go any further on incoming ACK
     if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD) {
         _info("UserAgent: received an ACK");
         return true;
     }
 
-    // Handle the incoming call invite in this function
-    _info("UserAgent: Receiving REQUEST using transport: %s %s (refcnt=%d)",
-	   rdata->tp_info.transport->obj_name,
-	   rdata->tp_info.transport->info,
-	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
-
     /* First, let's got the username and server name from the invite.
      * We will use them to detect which account is the callee.
      */
@@ -3523,13 +3535,10 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     userName = std::string (sip_uri->user.ptr, sip_uri->user.slen);
     server = std::string (sip_uri->host.ptr, sip_uri->host.slen);
 
-    _debug ("UserAgent: mod_on_rx_request: %s@%s", userName.c_str(), server.c_str());
-
     // Get the account id of callee from username and server
     account_id = Manager::instance().getAccountIdFromNameAndServer (userName, server);
 
     /* If we don't find any account to receive the call */
-
     if (account_id == AccountNULL) {
         _debug ("UserAgent: Username %s doesn't match any account, using IP2IP!",userName.c_str());
     }
@@ -3562,7 +3571,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         displayName = std::string ("");
     }
 
-    _debug ("UserAgent: The receiver is : %s@%s", userName.data(), server.data());
+    _debug ("UserAgent: The receiver is: %s@%s", userName.data(), server.data());
     _debug ("UserAgent: The callee account id is %s", account_id.c_str());
 
     /* Now, it is the time to find the information of the caller */
@@ -3580,6 +3589,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     // Get the server voicemail notification
     // Catch the NOTIFY message
     if (rdata->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) {
+
         method_name = "NOTIFY";
         // Retrieve all the message. Should contains only the method name but ...
         request =  rdata->msg_info.msg->line.req.method.name.ptr;
@@ -3616,10 +3626,10 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     get_remote_sdp_from_offer (rdata, &r_sdp);
     if(account->getActiveCodecs().empty()) {
-	_warn ("UserAgent: Error: No active codec");
-	pj_strdup2 (_pool, &reason, "no active codec");
+    	_warn ("UserAgent: Error: No active codec");
+    	pj_strdup2 (_pool, &reason, "no active codec");
         pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_NOT_ACCEPTABLE_HERE , 
-				       &reason, NULL, NULL);
+        		                                              &reason, NULL, NULL);
         return true;
     }
 
@@ -3658,13 +3668,14 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     id = Manager::instance().getNewCallID();
 
     call = new SIPCall (id, Call::Incoming, _pool);
-    /* If an error occured at the call creation */
+
+    // If an error occured at the call creation
     if (!call) {
         _warn("UserAgent: Error: Unable to create an incoming call");
-	pj_strdup2 (_pool, &reason, "unable to create an incoming call");
+        pj_strdup2 (_pool, &reason, "unable to create an incoming call");
         pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
 				       &reason, NULL, NULL);
-	return false;
+        return false;
     }
 
     std::string addrToUse, addrSdp ="0.0.0.0";
@@ -3676,17 +3687,17 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         // May use the published address as well
 
         addrToUse = SIPVoIPLink::instance("")->getInterfaceAddrFromName(account->getLocalInterface ());
-	account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = addrToUse;		
-	// Set the appropriate transport to have the right VIA header
-	link->init_transport_selector (account->getAccountTransport (), &tp);
+        account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = addrToUse;
+        // Set the appropriate transport to have the right VIA header
+        link->init_transport_selector (account->getAccountTransport (), &tp);
 
-	if(account->getAccountTransport()) {
+        if(account->getAccountTransport()) {
 
-	    _debug("UserAgent: Process INVITE request using transport: %s %s (refcnt=%i)",
-		   account->getAccountTransport()->obj_name,
-		   account->getAccountTransport()->info,
-		   (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
-	}
+        	_debug("UserAgent: SIP transport for this account: %s %s (refcnt=%i)",
+        	account->getAccountTransport()->obj_name,
+        	account->getAccountTransport()->info,
+        	(int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+        }
 
     }
 
@@ -3707,22 +3718,6 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     call->initRecFileName();
 
-    // Notify UI there is an incoming call
-
-    _debug ("UserAgent: Add call to account link");
-
-    if (Manager::instance().incomingCall (call, account_id)) {
-        // Add this call to the callAccountMap in ManagerImpl
-        Manager::instance().getAccountLink (account_id)->addCall (call);
-    } else {
-        // Fail to notify UI
-        delete call; call = NULL;
-        _warn ("UserAgent: Fail to notify UI!");
-	pj_strdup2 (_pool, &reason, "fail to notify ui");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
-				       &reason, NULL, NULL);
-        return false;
-    }
 
     // Have to do some stuff with the SDP
     // Set the codec map, IP, peer number and so on... for the SIPCall object
@@ -3758,7 +3753,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         pj_strdup2 (_pool, &reason, "fail to create uas dialog");
         pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
 				       &reason, NULL, NULL);
-        return true;
+        return false;
     }
 
     // Specify media capability during invite session creation
@@ -3772,7 +3767,8 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     // Associate the call in the invite session
     inv->mod_data[_mod_ua.id] = call;
 
-    // Send a 180/Ringing response
+    // Send a 180 Ringing response
+    _info ("UserAgent: Send a 180 Ringing response");
     status = pjsip_inv_initial_answer (inv, rdata, PJSIP_SC_RINGING, NULL, NULL, &tdata);
 
     PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
@@ -3787,6 +3783,20 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     // Update the connection state
     call->setConnectionState (Call::Ringing);
 
+    _debug ("UserAgent: Add call to account link");
+    if (Manager::instance().incomingCall (call, account_id)) {
+    	// Add this call to the callAccountMap in ManagerImpl
+    	Manager::instance().getAccountLink (account_id)->addCall (call);
+	} else {
+		// Fail to notify UI
+		delete call; call = NULL;
+		_warn ("UserAgent: Fail to notify UI!");
+		pj_strdup2 (_pool, &reason, "fail to notify ui");
+		pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
+				&reason, NULL, NULL);
+		return false;
+	}
+
     /* Done */
     return true;
 
diff --git a/tools/pysflphone/sflphonectrlsimple.py b/tools/pysflphone/sflphonectrlsimple.py
index a92ee307dd..491e105e82 100755
--- a/tools/pysflphone/sflphonectrlsimple.py
+++ b/tools/pysflphone/sflphonectrlsimple.py
@@ -535,6 +535,7 @@ class SflPhoneCtrlSimple(Thread):
 
     def Refuse(self, callid):
         """Refuse an incoming call identified by a CallID"""
+	print "Refuse call " + callid
         # if not self.account:
         #     self.setFirstRegisteredAccount()
 
@@ -549,6 +550,7 @@ class SflPhoneCtrlSimple(Thread):
 
     def Accept(self, callid):
         """Accept an incoming call identified by a CallID"""
+	print "Accept call " + callid
         if not self.account:
             self.setFirstRegisteredAccount()
 
-- 
GitLab


From 6abb8db9b37e96dfcafd204f8c17a52810447c61 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 18 Mar 2010 15:54:55 -0400
Subject: [PATCH 132/160] [#3020] Restore record tool button when hanging up a
 call

---
 sflphone-client-gnome/src/codeclist.c |  4 ----
 sflphone-client-gnome/src/uimanager.c | 19 +++++++++++++------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index 8887452247..88136547d4 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -290,8 +290,6 @@ void codec_list_update_to_daemon (account_t *acc) {
 	int c = 0;
 	unsigned int i = 0;
 
-	g_print ("List of active codecs :\n");
-	
 	for(i = 0; i < length; i++)
 	{
 		codec_t* currentCodec = codec_list_get_nth (i, acc->codecs);
@@ -301,7 +299,6 @@ void codec_list_update_to_daemon (account_t *acc) {
 			// Save only if active
 			if(currentCodec->is_active)
 			{
-				g_print ("Codec %s\n", currentCodec->name);
 				// Reallocate memory each time more than one active codec is found
 				if(c!=0)
 					codecList = (void*)realloc(codecList, (c+1)*sizeof(void*));
@@ -311,7 +308,6 @@ void codec_list_update_to_daemon (account_t *acc) {
 				// Put payload string in char array
 				sprintf(payload, "%d", currentCodec->_payload);
 				strcpy((char*)*(codecList+c), payload);
-				g_print(" %s", *(codecList+c));
 				c++;
 			}
 		}
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 1042bf0c13..26b35661b5 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -115,6 +115,7 @@ update_actions()
   gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), FALSE);
   gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), FALSE);
   gtk_action_set_sensitive(GTK_ACTION (recordAction), FALSE);
+  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_tooltip_text(GTK_WIDGET (contactButton),
@@ -145,9 +146,9 @@ update_actions()
         }
     }
 
-  // g_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
-  // gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE);
-  // g_signal_handler_unblock ( GTK_OBJECT (transferToolbar), transfertButtonConnId);
+  // g_signal_handler_block (GTK_OBJECT (recordWidget), recordButtonConnId);
+  // gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
+  // g_signal_handler_unblock ( GTK_OBJECT (recordWidget), recordButtonConnId);
 
   callable_obj_t * selectedCall = calltab_get_selected_call(active_calltree);
   conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
@@ -211,9 +212,7 @@ update_actions()
             1);
         gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE);
         gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
-        //gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (holdMenu), gtk_image_new_from_stock (GTK_STOCK_ONHOLD, GTK_ICON_SIZE_MENU));
         gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE);
-        //gtk_action_set_sensitive( GTK_ACTION(newCallMenu),TRUE);
         gtk_action_set_sensitive(GTK_ACTION (recordAction), TRUE);
         gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar),
             2);
@@ -225,6 +224,7 @@ update_actions()
         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:
@@ -546,7 +546,14 @@ call_pick_up(void * foo UNUSED)
 static void
 call_hang_up(void)
 {
-  sflphone_hang_up();
+	/* 
+	 * [#3020]	Restore the record toggle button 
+	 *			We set it to FALSE, as when we hang up a call, the recording is stopped.
+	 */
+	gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
+  
+	sflphone_hang_up();
+
 }
 
 static void
-- 
GitLab


From ecea911ab5ac7953d4bb3e83d2c20d51d0d7ec21 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 18 Mar 2010 16:32:56 -0400
Subject: [PATCH 133/160] [#3050] Call failure only if SFLphone is UAC in
 call_state_change decline

---
 sflphone-common/src/sip/sipvoiplink.cpp | 47 ++++++-------------------
 1 file changed, 11 insertions(+), 36 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index bf8e43e6d0..36901c1e77 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1399,25 +1399,18 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
 
     // Creates URI
     std::string fromUri;
-
     std::string toUri;
-
     std::string contactUri;
 
     fromUri = account->getFromUri();
-
     toUri = call->getPeerNumber(); // expecting a fully well formed sip uri
 
     std::string address = findLocalAddressFromUri (toUri, account->getAccountTransport ());
-
     int port = findLocalPortFromUri (toUri, account->getAccountTransport ());
 
     std::stringstream ss;
-
     std::string portStr;
-
     ss << port;
-
     ss >> portStr;
 
     contactUri = account->getContactHeader (address, portStr);
@@ -1428,15 +1421,12 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
             contactUri.c_str());
 
     pj_str_t pjFrom;
-
     pj_cstr (&pjFrom, fromUri.c_str());
 
     pj_str_t pjContact;
-
     pj_cstr (&pjContact, contactUri.c_str());
 
     pj_str_t pjTo;
-
     pj_cstr (&pjTo, toUri.c_str());
 
     // Create the dialog (UAC)
@@ -1480,7 +1470,6 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
     // decrement transport's ref count
     // pjsip_transport_dec_ref(account->getAccountTransport());
     
-
     status = pjsip_inv_send_msg (inv, tdata);
 
     if (status != PJ_SUCCESS) {
@@ -3156,49 +3145,35 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
 
         _debug ("State: %s. Cause: %.*s", invitationStateMap[inv->state], (int) inv->cause_text.slen, inv->cause_text.ptr);
 
+        accId = Manager::instance().getAccountFromCall (call->getCallId());
+        link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId));
+
+		// Make sure link is valid
+        assert(link);
+
         switch (inv->cause) {
-                /* The call terminates normally - BYE / CANCEL */
 
+            // The call terminates normally - BYE / CANCEL
             case PJSIP_SC_OK:
-
             case PJSIP_SC_REQUEST_TERMINATED:
-                accId = Manager::instance().getAccountFromCall (call->getCallId());
-                link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId));
-
-                if (link) {
-                    link->SIPCallClosed (call);
-                }
-
+                link->SIPCallClosed (call);
                 break;
 
             case PJSIP_SC_DECLINE:
             	_debug("UserAgent: Call %s is declined", call->getCallId().c_str());
-				// if (inv->role == PJSIP_ROLE_UAS)
+				if (inv->role == PJSIP_ROLE_UAC)
+					link->SIPCallServerFailure (call);
 				break;
 
             case PJSIP_SC_NOT_FOUND:            /* peer not found */
-
             case PJSIP_SC_REQUEST_TIMEOUT:      /* request timeout */
-
             case PJSIP_SC_NOT_ACCEPTABLE_HERE:  /* no compatible codecs */
-
             case PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE:
-
             case PJSIP_SC_UNSUPPORTED_MEDIA_TYPE:
-
             case PJSIP_SC_UNAUTHORIZED:
-
             case PJSIP_SC_FORBIDDEN:
-
             case PJSIP_SC_REQUEST_PENDING:
-
-                accId = Manager::instance().getAccountFromCall (call->getCallId());
-                link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId));
-
-                if (link) {
-                    link->SIPCallServerFailure (call);
-                }
-
+                link->SIPCallServerFailure (call);
                 break;
 
             default:
-- 
GitLab


From 1fddf6b78e5709b1f7ab5c27450083959087e0a5 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 19 Mar 2010 12:08:08 -0400
Subject: [PATCH 134/160] [#3052] Fix Celt compile error (from 0.5.1 to 0.7.1)

---
 .../src/audio/codecs/celtcodec.cpp            | 79 +++++++++++++------
 1 file changed, 57 insertions(+), 22 deletions(-)

diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index 8787bd6b6b..59df927ecb 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -26,27 +26,59 @@ class Celt : public AudioCodec
 {
 
     public:
-        Celt (int payload=0)
-                : AudioCodec (payload, "celt") {
-            _clockRate = 44100;
-            _frameSize = 512; // fixed frameSize, TODO: support variable size from 64 to 512
+        Celt (int payload=0)	: AudioCodec (payload, "celt") {
+
+            _clockRate =44100;
+            _frameSize = 512;  // fixed frameSize, TODO: support variable size from 64 to 512
             _channel = 1;
             _bitrate = 0;
             _bandwidth = 0;
+
             initCelt();
+
         }
 
         Celt (const Celt&);
         Celt& operator= (const Celt&);
 
         void initCelt() {
-            printf ("init celt");
+            printf ("Celt: Init Celt codec");
+
+            int error = 0;
+
+            _mode = celt_mode_create (_clockRate, _frameSize, &error);
+
+            if(error != CELT_OK) {
+            	switch(error) {
+            	case CELT_BAD_ARG:
+            		printf("Celt: Error: An (or more) invalid argument (e.g. out of range)\n");
+            		break;
+            	case CELT_INVALID_MODE:
+            		printf("Celt: Error: The mode struct passed is invalid\n");
+            		break;
+            	case CELT_INTERNAL_ERROR:
+            		printf("Celt: Error: An internal error was detected\n");
+            		break;
+            	case CELT_CORRUPTED_DATA:
+            		printf("Celt: Error: The data passed (e.g. compressed data to decoder) is corrupted\n");
+            		break;
+            	case CELT_UNIMPLEMENTED:
+            		printf("Celt: Error: Invalid/unsupported request numbe\n");
+            		break;
+            	case CELT_INVALID_STATE:
+            		printf("Celt: Error: An encoder or decoder structure is invalid or already freed\n");
+            		break;
+            	case CELT_ALLOC_FAIL:
+					printf("Celt: Error: Memory allocation has failed\n");
+					break;
+            	default:
+					printf("Celt: Error");
+            	}
 
-            mode = celt_mode_create (_clockRate, _channel, _frameSize, NULL);
-            // celt_mode_info(mode, CELT_GET_LOOKAHEAD, &skip);
+            }
 
-            if (mode == NULL) {
-                printf ("failed to create a mode");
+            if (_mode == NULL) {
+                printf ("Celt: Error: Failed to create Celt mode");
             }
 
             // bytes_per_packet = 1024;
@@ -58,11 +90,12 @@ class Celt : public AudioCodec
             // celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size);
             // celt_mode_info(mode, CELT_GET_NB_CHANNELS, &_channel);
 
-            enc = celt_encoder_create (mode);
+            _enc = celt_encoder_create (_mode, _channel, &error);
 
-            dec = celt_decoder_create (mode);
+            _dec = celt_decoder_create (_mode, _channel, &error);
 
-            celt_encoder_ctl (enc,CELT_SET_COMPLEXITY (10));
+            celt_encoder_ctl (_enc, CELT_SET_COMPLEXITY (10));
+            celt_decoder_ctl(_dec, CELT_SET_COMPLEXITY (10));
 
         }
 
@@ -72,32 +105,34 @@ class Celt : public AudioCodec
 
         void terminateCelt() {
 
-            celt_encoder_destroy (enc);
-            celt_decoder_destroy (dec);
+            celt_encoder_destroy (_enc);
+            celt_decoder_destroy (_dec);
+
+            celt_mode_destroy(_mode);
         }
 
         virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
             int err = 0;
-            err = celt_decode (dec, src, size, (celt_int16_t*) dst);
-            return _frameSize * sizeof (celt_int16_t);
+            err = celt_decode (_dec, src, size, (celt_int16*) dst);
+            return _frameSize * sizeof (celt_int16);
         }
 
         virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
             int len = 0;
-            len = celt_encode (enc, (celt_int16_t *) src, (celt_int16_t *) src, dst, 512);
+            len = celt_encode (_enc, (celt_int16*) src, (celt_int16 *) src, dst, 512);
             // returns the number of bytes writen
             return len;
         }
 
     private:
 
-        CELTMode *mode;
+        CELTMode *_mode;
 
-        CELTEncoder *enc;
-        CELTDecoder *dec;
+        CELTEncoder *_enc;
+        CELTDecoder *_dec;
 
-        celt_int32_t _celt_frame_size;
-        celt_int32_t skip;
+        celt_int32 _celt_frame_size;
+        celt_int32 skip;
 
 };
 
-- 
GitLab


From 100cb6221ccc12aeb8f3c6726d3a702516adf874 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 19 Mar 2010 14:27:13 -0400
Subject: [PATCH 135/160] [#3052] Fix Celt codec to be compatible with
 freeswitch, 32000 kHz

---
 sflphone-common/src/audio/codecs/Makefile.am   | 2 +-
 sflphone-common/src/audio/codecs/celtcodec.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/src/audio/codecs/Makefile.am b/sflphone-common/src/audio/codecs/Makefile.am
index 230ee7bbc0..e338dc3fb5 100644
--- a/sflphone-common/src/audio/codecs/Makefile.am
+++ b/sflphone-common/src/audio/codecs/Makefile.am
@@ -49,7 +49,7 @@ CELT_LIB = libcodec_celt.so
 libcodec_celt_so_SOURCES = celtcodec.cpp
 libcodec_celt_so_CFLAGS = -fPIC -g -Wall
 libcodec_celt_so_CXXFLAGS = -fPIC -g -Wall
-libcodec_celt_so_LDFLAGS = --shared -lc -lcelt $(CELT_NIMP)
+libcodec_celt_so_LDFLAGS = --shared -lc -lcelt0 $(CELT_NIMP)
 INSTALL_CELT_RULE = install-libcodec_celt_so
 endif
 
diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index 59df927ecb..f68fce2057 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -28,7 +28,7 @@ class Celt : public AudioCodec
     public:
         Celt (int payload=0)	: AudioCodec (payload, "celt") {
 
-            _clockRate =44100;
+            _clockRate = 32000;
             _frameSize = 512;  // fixed frameSize, TODO: support variable size from 64 to 512
             _channel = 1;
             _bitrate = 0;
-- 
GitLab


From 75c9eab2e767241752d2115b37fd9220c26ad1fb Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 19 Mar 2010 14:27:54 -0400
Subject: [PATCH 136/160] [#2929] Cleanup debug messages in Audio Rtp

---
 .../src/audio/audiortp/AudioRtpSession.h      | 73 ++++++++++---------
 1 file changed, 39 insertions(+), 34 deletions(-)

diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index cb0578beaa..7ecfe5ecb9 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -249,7 +249,7 @@ namespace sfl {
     template <typename D>
     AudioRtpSession<D>::~AudioRtpSession()
     {
-        _debug ("Rtp: Delete AudioRtpSession instance");
+        _debug ("RTP: Delete AudioRtpSession instance");
 
         try {
             terminate();
@@ -273,11 +273,9 @@ namespace sfl {
     void AudioRtpSession<D>::initBuffers() 
     {
     	// Set sampling rate, main buffer choose the highest one
-    	// _audiolayer->getMainBuffer()->setInternalSamplingRate(_codecSampleRate);
         _manager->getAudioDriver()->getMainBuffer()->setInternalSamplingRate(_codecSampleRate);
 
         // may be different than one already setted
-        // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
         _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
         // initialize SampleRate converter using AudioLayer's sampling rate
@@ -311,28 +309,33 @@ namespace sfl {
     {
         assert(_ca);
 
+        _debug("RTP: Get audio codec for call %s", _ca->getCallId().c_str());
+
         AudioCodecType pl = (AudioCodecType)_ca->getLocalSDP()->get_session_media()->getPayload();
         _audiocodec = _manager->getCodecDescriptorMap().instantiateCodec(pl);
 
-        if (_audiocodec == NULL) {
-            _debug ("No audiocodec, can't init RTP media");
+        if (!_audiocodec) {
+            _error ("RTP: Error: No audiocodec, can't init RTP media");
             throw AudioRtpSessionException();
         }
 
-        _debug ("Init audio RTP session: codec payload %i", _audiocodec->getPayload());
+        _debug ("RTP: Init codec payload %i", _audiocodec->getPayload());
 
         _codecSampleRate = _audiocodec->getClockRate();
         _codecFrameSize = _audiocodec->getFrameSize();
 
+        _debug("RTP: Codec sampling rate: %d", _codecSampleRate);
+        _debug("RTP: Codec frame size: %d", _codecFrameSize);
+
         //TODO: figure out why this is necessary.
         if (_audiocodec->getPayload() == 9) {
-            _debug ("Setting payload format to G722");
+            _debug ("RTP: Setting payload format to G722");
             static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
         } else if (_audiocodec->hasDynamicPayload()) {
-            _debug ("Setting a dynamic payload format");
+            _debug ("RTP: Setting a dynamic payload format");
             static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
         } else if (!_audiocodec->hasDynamicPayload() && _audiocodec->getPayload() != 9) {
-            _debug ("Setting a static payload format");
+            _debug ("RTP: Setting a static payload format");
             static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
         }
     }
@@ -341,7 +344,7 @@ namespace sfl {
     void AudioRtpSession<D>::setDestinationIpAddress(void)
     {
         if (_ca == NULL) {
-        	_warn ("Rtp: Sipcall is gone.");
+        	_error ("RTP: Sipcall is gone.");
 			throw AudioRtpSessionException();
         }
         
@@ -351,7 +354,7 @@ namespace sfl {
         _remote_ip = ost::InetHostAddress(_ca->getLocalSDP()->get_remote_ip().c_str());
 
         if (!_remote_ip) {
-            _warn("Rtp: Target IP address (%s) is not correct!", 
+            _warn("RTP: Target IP address (%s) is not correct!",
 						_ca->getLocalSDP()->get_remote_ip().data());
             return;
         }
@@ -363,7 +366,7 @@ namespace sfl {
         _ca->getLocalSDP()->get_remote_ip().data(), _remote_port);
 
         if (! static_cast<D*>(this)->addDestination (_remote_ip, _remote_port)) {
-        	_warn("Rtp: Can't add new destination to session!");
+        	_warn("RTP: Can't add new destination to session!");
 			return;
         }
     }
@@ -375,7 +378,7 @@ namespace sfl {
         // This method remove the current destination entry
 
         if(!static_cast<D*>(this)->forgetDestination(_remote_ip, _remote_port, _remote_port+1))
-        	_warn("Rtp: Could not remove previous destination");
+        	_warn("RTP: Could not remove previous destination");
 
         // new destination is stored in call
         // we just need to recall this method
@@ -619,7 +622,7 @@ namespace sfl {
     template <typename D>
     int AudioRtpSession<D>::startRtpThread ()
     {
-        _debug("Starting main thread");
+        _debug("RTP: Starting main thread");
         return start(_mainloopSemaphore);
     }
     
@@ -630,48 +633,50 @@ namespace sfl {
         setSessionTimeouts();
         setSessionMedia();
 
-	initBuffers();
+        initBuffers();
 
-	// Timestamp must be initialized randomly
-	_timestamp = static_cast<D*>(this)->getCurrentTimestamp();
+        // Timestamp must be initialized randomly
+        _timestamp = static_cast<D*>(this)->getCurrentTimestamp();
 
         int sessionWaiting;
         int threadSleep = 0;
 
-        if (_codecSampleRate != 0)
-            { threadSleep = (_codecFrameSize * 1000) / _codecSampleRate; }
-        else
-            { threadSleep = _layerFrameSize; }
+		if (_codecSampleRate != 0){
+			threadSleep = (_codecFrameSize * 1000) / _codecSampleRate;
+		}
+        else {
+        	threadSleep = _layerFrameSize;
+        }
 
         TimerPort::setTimer (threadSleep);
         
         if (_audiolayer == NULL) {
-            _debug("For some unknown reason, audiolayer is null, just as \
-            we were about to start the audio stream");
+            _error("RTP: Error: Audiolayer is null, cannot start the audio stream");
             throw AudioRtpSessionException();
         }
 
-	_ca->setRecordingSmplRate(_audiocodec->getClockRate());
+        _ca->setRecordingSmplRate(_audiocodec->getClockRate());
  
-	// Start audio stream (if not started) AND flush all buffers (main and urgent)
-        _manager->getAudioDriver()->startStream();
+        // Start audio stream (if not started) AND flush all buffers (main and urgent)
+		_manager->getAudioDriver()->startStream();
         static_cast<D*>(this)->startRunning();
 
 
-        _debug ("Entering RTP mainloop for callid %s",_ca->getCallId().c_str());
+        _debug ("RTP: Entering mainloop for call %s",_ca->getCallId().c_str());
 
         while (!testCancel()) {
 
-	    // ost::MutexLock lock(*(_manager->getAudioLayerMutex()));
+        	// ost::MutexLock lock(*(_manager->getAudioLayerMutex()));
 
-	    _manager->getAudioLayerMutex()->enter();
+        	_manager->getAudioLayerMutex()->enter();
 
-	    // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
-	    _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+        	// converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
+        	_converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
-            // Send session
-            sessionWaiting = static_cast<D*>(this)->isWaiting();
 
+        	sessionWaiting = static_cast<D*>(this)->isWaiting();
+
+            // Send session
             if(_eventQueue.size() > 0) {
             	sendDtmfEvent(_eventQueue.front());
             }
@@ -698,7 +703,7 @@ namespace sfl {
             TimerPort::incTimer (threadSleep);
         }
         
-        _debug ("Left RTP main loop for callid %s",_ca->getCallId().c_str());
+        _debug ("RTP: Left main loop for call%s", _ca->getCallId().c_str());
     }
     
 }
-- 
GitLab


From efcb373790a14736a09ce90b3c8ed0f80dddc2a0 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 19 Mar 2010 15:39:49 -0400
Subject: [PATCH 137/160] [#3052] Added speex nb wb bitrate in codec
 description

---
 sflphone-common/src/audio/codecs/speexcodec_nb.cpp | 2 +-
 sflphone-common/src/audio/codecs/speexcodec_wb.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp
index a2603fc827..9099dca71f 100644
--- a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp
+++ b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp
@@ -39,7 +39,7 @@ class Speex : public AudioCodec
             _clockRate = 8000;
             _frameSize = 160; // samples, 20 ms at 8kHz
             _channel = 1;
-            _bitrate = 0;
+            _bitrate = 24;
             _bandwidth = 0;
             initSpeex();
         }
diff --git a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp
index 9d3b618674..28e099791f 100644
--- a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp
+++ b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp
@@ -39,7 +39,7 @@ class Speex : public AudioCodec
             _clockRate = 16000;
             _frameSize = 320; // 20 ms at 16 kHz
             _channel = 1;
-            _bitrate = 0;
+            _bitrate = 42;
             _bandwidth = 0;
             initSpeex();
         }
-- 
GitLab


From bb1a13a0be303f86a0054935a44abd0601917e3f Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Fri, 19 Mar 2010 16:09:18 -0400
Subject: [PATCH 138/160] [#3052] Use Celt 32000 with 320 frame size

---
 sflphone-common/src/audio/codecs/celtcodec.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index f68fce2057..ad7a4eac10 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -29,7 +29,7 @@ class Celt : public AudioCodec
         Celt (int payload=0)	: AudioCodec (payload, "celt") {
 
             _clockRate = 32000;
-            _frameSize = 512;  // fixed frameSize, TODO: support variable size from 64 to 512
+            _frameSize = 320;  // fixed frameSize, TODO: support variable size from 64 to 512
             _channel = 1;
             _bitrate = 0;
             _bandwidth = 0;
-- 
GitLab


From c6d9e386ddbfe0d3a52c32fa3544a7df5bb8e99d Mon Sep 17 00:00:00 2001
From: kde-devel <kde-devel@lepagee-mac.(none)>
Date: Fri, 19 Mar 2010 16:11:32 -0400
Subject: [PATCH 139/160] Add --partial-- support for security. Some value are
 not saved in the sflphoned and the encryption type (TLS, SSLv2 and so on)
 does not save correctly. I am working on that and will commit a fix later.

---
 sflphone-client-kde/CMakeLists.txt            |   2 +-
 .../src/conf/ConfigurationSkeleton.cpp        |  12 +-
 sflphone-client-kde/src/conf/dlgaccounts.cpp  | 142 ++++--
 sflphone-client-kde/src/conf/dlgaccounts.h    |   2 +-
 .../src/conf/dlgaccountsbase.ui               | 470 +++++++++++++++++-
 sflphone-client-kde/src/sflphone_const.h      |  31 +-
 6 files changed, 599 insertions(+), 60 deletions(-)

diff --git a/sflphone-client-kde/CMakeLists.txt b/sflphone-client-kde/CMakeLists.txt
index 65b269cfd0..c16efdcb6e 100644
--- a/sflphone-client-kde/CMakeLists.txt
+++ b/sflphone-client-kde/CMakeLists.txt
@@ -8,7 +8,7 @@ SET(CMAKE_MODULE_PATH "${LOCAL_CMAKE_MODULE_PATH}")
 # --- custom targets: ---
 INCLUDE( ${LOCAL_CMAKE_MODULE_PATH}/TargetDistclean.cmake  REQUIRED)
 
-FIND_PACKAGE ( Kabc REQUIRED )
+#FIND_PACKAGE ( Kabc REQUIRED )
 # FIND_PACKAGE ( PkgConfig REQUIRED )
 FIND_PACKAGE ( KDE4 REQUIRED )
 FIND_PACKAGE ( Qt4 REQUIRED )
diff --git a/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp b/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp
index f2bcf04b8b..991571bbdf 100644
--- a/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp
+++ b/sflphone-client-kde/src/conf/ConfigurationSkeleton.cpp
@@ -61,7 +61,7 @@ void ConfigurationSkeleton::readConfig()
 	////////////////////////
 	
 	//Call history settings
-	setEnableHistory(configurationManager.getHistoryEnabled());
+	//setEnableHistory(configurationManager.getHistoryEnabled()); //TODO uncomment
 	setHistoryMax(configurationManager.getHistoryLimit());
 
 	//SIP port settings
@@ -119,10 +119,10 @@ void ConfigurationSkeleton::readConfig()
 	setAlsaPlugin(configurationManager.getCurrentAudioOutputPlugin());
 	bool ok;
 	QStringList devices = configurationManager.getCurrentAudioDevicesIndex();
-	qDebug() << "inputDevice = " << devices[1];
-	int inputDevice = devices[1].toInt(& ok);
-	if(!ok) qDebug() << "inputDevice is not a number";
-	setAlsaInputDevice(inputDevice);
+	//qDebug() << "inputDevice = " << devices[1]; //TODO uncomment
+	//int inputDevice = devices[1].toInt(& ok); //TODO uncomment
+	//if(!ok) qDebug() << "inputDevice is not a number"; //TODO uncomment
+	//setAlsaInputDevice(inputDevice); //TODO uncomment
 	
 	qDebug() << "outputDevice = " << devices[0];
 	int outputDevice = devices[0].toInt(& ok);
@@ -191,7 +191,7 @@ void ConfigurationSkeleton::writeConfig()
 	qDebug() << "Writing General settings";
 	
 	//Call history settings
-	if(enableHistory() != configurationManager.getHistoryEnabled()) configurationManager.setHistoryEnabled();
+	//TODO if(enableHistory() != configurationManager.getHistoryEnabled()) configurationManager.setHistoryEnabled();
 	configurationManager.setHistoryLimit(historyMax());
 	//SIP port settings
 	configurationManager.setSipPort(sIPPort());
diff --git a/sflphone-client-kde/src/conf/dlgaccounts.cpp b/sflphone-client-kde/src/conf/dlgaccounts.cpp
index 78ac4cf34f..f5d15522b0 100644
--- a/sflphone-client-kde/src/conf/dlgaccounts.cpp
+++ b/sflphone-client-kde/src/conf/dlgaccounts.cpp
@@ -40,35 +40,66 @@ DlgAccounts::DlgAccounts(KConfigDialog *parent)
 	accountList = new AccountList(false);
 	loadAccountList();
 	accountListHasChanged = false;
-	toolButton_accountsApply->setEnabled(false);
+	//toolButton_accountsApply->setEnabled(false);
 	
-	connect(edit1_alias,           SIGNAL(textEdited(const QString &)),
-	        this,                  SLOT(changedAccountList()));
-	connect(edit2_protocol,        SIGNAL(activated(int)),
-	        this,                  SLOT(changedAccountList()));
-	connect(edit3_server,          SIGNAL(textEdited(const QString &)),
-	        this,                  SLOT(changedAccountList()));
-	connect(edit4_user,            SIGNAL(textEdited(const QString &)),
-	        this,                  SLOT(changedAccountList()));
-	connect(edit5_password,        SIGNAL(textEdited(const QString &)),
-	        this,                  SLOT(changedAccountList()));
-	connect(edit6_mailbox,         SIGNAL(textEdited(const QString &)),
-	        this,                  SLOT(changedAccountList()));
-	connect(spinbox_regExpire,     SIGNAL(editingFinished()),
-	        this,                  SLOT(changedAccountList()));
-	connect(checkBox_conformRFC,   SIGNAL(clicked(bool)),
-	        this,                  SLOT(changedAccountList()));
-	connect(button_accountUp,      SIGNAL(clicked()),
-	        this,                  SLOT(changedAccountList()));
-	connect(button_accountDown,    SIGNAL(clicked()),
-	        this,                  SLOT(changedAccountList()));
-	connect(button_accountAdd,     SIGNAL(clicked()),
-	        this,                  SLOT(changedAccountList()));
-	connect(button_accountRemove,  SIGNAL(clicked()),
-	        this,                  SLOT(changedAccountList()));
+	connect(edit1_alias,                    SIGNAL(textEdited(const QString &)),
+	        this,                           SLOT(changedAccountList()));
+	connect(edit2_protocol,                 SIGNAL(activated(int)),
+	        this,                           SLOT(changedAccountList()));
+	connect(edit3_server,                   SIGNAL(textEdited(const QString &)),
+	        this,                           SLOT(changedAccountList()));
+	connect(edit4_user,                     SIGNAL(textEdited(const QString &)),
+	        this,                           SLOT(changedAccountList()));
+	connect(edit5_password,                 SIGNAL(textEdited(const QString &)),
+	        this,                           SLOT(changedAccountList()));
+	connect(edit6_mailbox,                  SIGNAL(textEdited(const QString &)),
+	        this,                           SLOT(changedAccountList()));
+	connect(spinbox_regExpire,              SIGNAL(editingFinished()),
+	        this,                           SLOT(changedAccountList()));
+	connect(checkBox_conformRFC,            SIGNAL(clicked(bool)),
+	        this,                           SLOT(changedAccountList()));
+	connect(button_accountUp,               SIGNAL(clicked()),
+	        this,                           SLOT(changedAccountList()));
+	connect(button_accountDown,             SIGNAL(clicked()),
+	        this,                           SLOT(changedAccountList()));
+	connect(button_accountAdd,              SIGNAL(clicked()),
+	        this,                           SLOT(changedAccountList()));
+	connect(button_accountRemove,           SIGNAL(clicked()),
+	        this,                           SLOT(changedAccountList()));
+        connect(edit_tls_private_key_password,  SIGNAL(textEdited(const QString &)),
+                this,                           SLOT(changedAccountList()));
+        connect(spinbox_tls_listener,           SIGNAL(editingFinished()),
+                this,                           SLOT(changedAccountList()));
+        connect(file_tls_authority,             SIGNAL(textChanged(const QString &)),
+                this,                           SLOT(changedAccountList()));
+        connect(file_tls_endpoint,              SIGNAL(textChanged(const QString &)),
+                this,                           SLOT(changedAccountList()));
+        connect(file_tls_private_key,           SIGNAL(textChanged(const QString &)),
+                this,                           SLOT(changedAccountList()));
+        connect(combo_tls_method,               SIGNAL(currentIndexChanged(int)),
+                this,                           SLOT(changedAccountList()));
+        connect(edit_tls_cipher,                SIGNAL(textEdited(const QString &)),
+                this,                           SLOT(changedAccountList()));
+        connect(edit_tls_outgoing,              SIGNAL(textEdited(const QString &)),
+                this,                           SLOT(changedAccountList()));
+        connect(spinbox_tls_timeout_sec,        SIGNAL(editingFinished()),
+                this,                           SLOT(changedAccountList()));
+        connect(spinbox_tls_timeout_msec,       SIGNAL(editingFinished()),
+                this,                           SLOT(changedAccountList()));
+        connect(check_tls_incoming,             SIGNAL(clicked(bool)),
+                this,                           SLOT(changedAccountList()));
+        connect(check_tls_answer,               SIGNAL(clicked(bool)),
+                this,                           SLOT(changedAccountList()));
+        connect(check_tls_requier_cert,         SIGNAL(clicked(bool)),
+                this,                           SLOT(changedAccountList()));
+        connect(group_security_tls,             SIGNAL(clicked(bool)),
+                this,                           SLOT(changedAccountList()));
 	        
-	connect(&configurationManager, SIGNAL(accountsChanged()),
-	        this,                  SLOT(updateAccountStates()));
+	connect(&configurationManager,          SIGNAL(accountsChanged()),
+	        this,                           SLOT(updateAccountStates()));
+                
+        connect(edit_tls_private_key_password,  SIGNAL(textEdited(const QString &)),
+                this,                  SLOT(changedAccountList()));
 	        
 	
 	connect(this,     SIGNAL(updateButtons()), parent, SLOT(updateButtons()));
@@ -156,6 +187,24 @@ void DlgAccounts::saveAccount(QListWidgetItem * item)
 	account->setAccountDetail(ACCOUNT_RESOLVE_ONCE, checkBox_conformRFC->isChecked() ? "FALSE" : "TRUE");
 	account->setAccountDetail(ACCOUNT_EXPIRE, QString::number(spinbox_regExpire->value()));
 	account->setAccountDetail(ACCOUNT_ENABLED, account->isChecked() ? ACCOUNT_ENABLED_TRUE : ACCOUNT_ENABLED_FALSE);
+        
+        //Security
+        account->setAccountDetail(TLS_PASSWORD,edit_tls_private_key_password->text());
+        account->setAccountDetail(TLS_LISTENER_PORT,QString::number(spinbox_tls_listener->value()));
+        account->setAccountDetail(TLS_CA_LIST_FILE,file_tls_authority->text());
+        account->setAccountDetail(TLS_CERTIFICATE_FILE,file_tls_endpoint->text());
+        account->setAccountDetail(TLS_PRIVATE_KEY_FILE,file_tls_private_key->text());
+        //qDebug() << "\n\n\n\nSET: " << combo_tls_method->currentText() << "\n\n\n";
+        account->setAccountDetail(TLS_METHOD,combo_tls_method->currentText());
+        account->setAccountDetail(TLS_CIPHERS,edit_tls_cipher->text());
+        account->setAccountDetail(TLS_SERVER_NAME,edit_tls_outgoing->text());
+        account->setAccountDetail(TLS_NEGOTIATION_TIMEOUT_SEC,QString::number(spinbox_tls_timeout_sec->value()));
+        account->setAccountDetail(TLS_NEGOTIATION_TIMEOUT_MSEC,QString::number(spinbox_tls_timeout_msec->value()));
+        account->setAccountDetail(TLS_VERIFY_SERVER,check_tls_incoming->isChecked()?"true":"false");
+        account->setAccountDetail(TLS_VERIFY_CLIENT,check_tls_answer->isChecked()?"true":"false");
+        account->setAccountDetail(TLS_REQUIRE_CLIENT_CERTIFICATE,check_tls_requier_cert->isChecked()?"true":"false");
+        account->setAccountDetail(TLS_ENABLE,group_security_tls->isChecked()?"true":"false");
+        account->setAccountDetail(TLS_METHOD, QString::number(combo_security_STRP->currentIndex()));
 }
 
 void DlgAccounts::loadAccount(QListWidgetItem * item)
@@ -186,6 +235,27 @@ void DlgAccounts::loadAccount(QListWidgetItem * item)
 	bool ok;
 	int val = account->getAccountDetail(ACCOUNT_EXPIRE).toInt(&ok);
 	spinbox_regExpire->setValue(ok ? val : ACCOUNT_EXPIRE_DEFAULT);
+        
+        //Security
+        edit_tls_private_key_password->setText( account->getAccountDetail(TLS_PASSWORD ));
+        spinbox_tls_listener->setValue( account->getAccountDetail(TLS_LISTENER_PORT ).toInt());
+        file_tls_authority->setText( account->getAccountDetail(TLS_CA_LIST_FILE ));
+        file_tls_endpoint->setText( account->getAccountDetail(TLS_CERTIFICATE_FILE ));
+        file_tls_private_key->setText( account->getAccountDetail(TLS_PRIVATE_KEY_FILE ));
+        //qDebug() << "\n\n\n\nTHIS: " << account->getAccountDetail(TLS_METHOD ) << "\n\n\n";
+        combo_tls_method->setCurrentIndex( combo_tls_method->findText(account->getAccountDetail(TLS_METHOD )));
+        edit_tls_cipher->setText( account->getAccountDetail(TLS_CIPHERS ));
+        edit_tls_outgoing->setText( account->getAccountDetail(TLS_SERVER_NAME ));
+        spinbox_tls_timeout_sec->setValue( account->getAccountDetail(TLS_NEGOTIATION_TIMEOUT_SEC ).toInt());
+        spinbox_tls_timeout_msec->setValue( account->getAccountDetail(TLS_NEGOTIATION_TIMEOUT_MSEC ).toInt());
+        check_tls_incoming->setChecked( (account->getAccountDetail(TLS_VERIFY_SERVER ) == "true")?1:0);
+        check_tls_answer->setChecked( (account->getAccountDetail(TLS_VERIFY_CLIENT ) == "true")?1:0);
+        check_tls_requier_cert->setChecked( (account->getAccountDetail(TLS_REQUIRE_CLIENT_CERTIFICATE ) == "true")?1:0);
+        group_security_tls->setChecked( (account->getAccountDetail(TLS_ENABLE ) == "true")?1:0);
+        
+        combo_security_STRP->setCurrentIndex(account->getAccountDetail(TLS_METHOD ).toInt());
+        
+        
 	updateStatusLabel(account);
 	frame2_editAccounts->setEnabled(true);
 }
@@ -220,7 +290,7 @@ void DlgAccounts::changedAccountList()
 	qDebug() << "changedAccountList";
 	accountListHasChanged = true;
 	emit updateButtons();
-	toolButton_accountsApply->setEnabled(true);
+	//toolButton_accountsApply->setEnabled(true);
 }
 
 
@@ -288,12 +358,12 @@ void DlgAccounts::on_button_accountRemove_clicked()
 	listWidget_accountList->setCurrentRow( (r >= listWidget_accountList->count()) ? r-1 : r );
 }
 
-void DlgAccounts::on_toolButton_accountsApply_clicked()
-{
-	qDebug() << "on_toolButton_accountsApply_clicked";
-	updateSettings();
-	updateWidgets();
-}
+// void DlgAccounts::on_toolButton_accountsApply_clicked() //This button have been removed, coded kept for potential reversal
+// {
+// 	qDebug() << "on_toolButton_accountsApply_clicked";
+// 	updateSettings();
+// 	updateWidgets();
+// }
 
 void DlgAccounts::on_edit1_alias_textChanged(const QString & text)
 {
@@ -365,7 +435,7 @@ void DlgAccounts::updateSettings()
 	if(accountListHasChanged)
 	{
 		saveAccountList();
-		toolButton_accountsApply->setEnabled(false);
+		//toolButton_accountsApply->setEnabled(false);
 		accountListHasChanged = false;
 	}
 }
@@ -374,7 +444,7 @@ void DlgAccounts::updateWidgets()
 {
 	qDebug() << "DlgAccounts::updateWidgets";
 	loadAccountList();
-	toolButton_accountsApply->setEnabled(false);
+	//toolButton_accountsApply->setEnabled(false);
 	accountListHasChanged = false;
 }
 
diff --git a/sflphone-client-kde/src/conf/dlgaccounts.h b/sflphone-client-kde/src/conf/dlgaccounts.h
index 3274368917..2eff977fb2 100644
--- a/sflphone-client-kde/src/conf/dlgaccounts.h
+++ b/sflphone-client-kde/src/conf/dlgaccounts.h
@@ -78,7 +78,7 @@ private slots:
 	void on_button_accountRemove_clicked();
 	void on_edit1_alias_textChanged(const QString & text);
 	void on_listWidget_accountList_currentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous );
-	void on_toolButton_accountsApply_clicked();
+	//void on_toolButton_accountsApply_clicked(); //Disabled for future removal
 	void updateAccountStates();
 	void addAccountToAccountList(Account * account);
 	void updateAccountListCommands();
diff --git a/sflphone-client-kde/src/conf/dlgaccountsbase.ui b/sflphone-client-kde/src/conf/dlgaccountsbase.ui
index eafe181482..a794240e5a 100644
--- a/sflphone-client-kde/src/conf/dlgaccountsbase.ui
+++ b/sflphone-client-kde/src/conf/dlgaccountsbase.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>603</width>
-    <height>455</height>
+    <width>748</width>
+    <height>447</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -29,8 +29,8 @@
       <item>
        <widget class="QFrame" name="frame1_accountList">
         <property name="sizePolicy">
-         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-          <horstretch>1</horstretch>
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
@@ -46,6 +46,12 @@
           <height>16777215</height>
          </size>
         </property>
+        <property name="sizeIncrement">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
         <property name="frameShape">
          <enum>QFrame::StyledPanel</enum>
         </property>
@@ -212,16 +218,6 @@
               </property>
              </spacer>
             </item>
-            <item>
-             <widget class="QToolButton" name="toolButton_accountsApply">
-              <property name="enabled">
-               <bool>true</bool>
-              </property>
-              <property name="text">
-               <string>Apply</string>
-              </property>
-             </widget>
-            </item>
            </layout>
           </widget>
          </item>
@@ -232,7 +228,7 @@
        <widget class="QTabWidget" name="frame2_editAccounts">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-          <horstretch>1</horstretch>
+          <horstretch>3</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
@@ -419,6 +415,445 @@
           </item>
          </layout>
         </widget>
+        <widget class="QWidget" name="tab">
+         <attribute name="title">
+          <string>Credential</string>
+         </attribute>
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0" rowspan="2" colspan="3">
+           <widget class="QListWidget" name="list_credential">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <spacer name="horizontalSpacer_2">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>327</width>
+              <height>23</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item row="3" column="0" colspan="3">
+           <widget class="QGroupBox" name="group_credential">
+            <property name="title">
+             <string>Details</string>
+            </property>
+            <layout class="QGridLayout" name="gridLayout_2">
+             <item row="0" column="0">
+              <widget class="QLabel" name="label_credential_realm">
+               <property name="text">
+                <string>Realm</string>
+               </property>
+              </widget>
+             </item>
+             <item row="1" column="0">
+              <widget class="QLabel" name="labe_credential_auth">
+               <property name="text">
+                <string>Auth. name</string>
+               </property>
+              </widget>
+             </item>
+             <item row="2" column="0">
+              <widget class="QLabel" name="label_credential_password">
+               <property name="text">
+                <string>Password</string>
+               </property>
+              </widget>
+             </item>
+             <item row="0" column="1">
+              <widget class="KLineEdit" name="edit_credential_realm"/>
+             </item>
+             <item row="1" column="1">
+              <widget class="KLineEdit" name="edit_credential_auth"/>
+             </item>
+             <item row="2" column="1">
+              <widget class="KLineEdit" name="edit_credential_password"/>
+             </item>
+            </layout>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <widget class="QToolButton" name="button_add_credential">
+            <property name="text">
+             <string>Add</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="2">
+           <widget class="QToolButton" name="button_remove_credential">
+            <property name="text">
+             <string>Remove</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+        <widget class="QWidget" name="tab_2">
+         <attribute name="title">
+          <string>Security</string>
+         </attribute>
+         <layout class="QGridLayout" name="gridLayout_3">
+          <item row="0" column="0">
+           <widget class="QScrollArea" name="scrollArea">
+            <property name="widgetResizable">
+             <bool>true</bool>
+            </property>
+            <widget class="QWidget" name="scrollAreaWidgetContents">
+             <property name="geometry">
+              <rect>
+               <x>0</x>
+               <y>0</y>
+               <width>426</width>
+               <height>588</height>
+              </rect>
+             </property>
+             <layout class="QGridLayout" name="gridLayout_5">
+              <item row="0" column="0">
+               <widget class="QLabel" name="label_security_STRP">
+                <property name="text">
+                 <string>STRP key exchange</string>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="1">
+               <widget class="QComboBox" name="combo_security_STRP">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <item>
+                 <property name="text">
+                  <string>Disabled</string>
+                 </property>
+                </item>
+                <item>
+                 <property name="text">
+                  <string>ZRTP</string>
+                 </property>
+                </item>
+                <item>
+                 <property name="text">
+                  <string>SDES</string>
+                 </property>
+                </item>
+               </widget>
+              </item>
+              <item row="0" column="2">
+               <widget class="QToolButton" name="button_security_STRP">
+                <property name="text">
+                 <string>Edit</string>
+                </property>
+               </widget>
+              </item>
+              <item row="1" column="0" colspan="3">
+               <widget class="QLabel" name="label_tls_info">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="text">
+                 <string>TLS transport can be used along with UDP for those calls that would require secure sip transactions (aka SIPS). You can configure a different TLS transport for each account. However each of them will run on a dedicated port, different one from each other.</string>
+                </property>
+                <property name="wordWrap">
+                 <bool>true</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="0" colspan="3">
+               <widget class="QGroupBox" name="group_security_tls">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="title">
+                 <string>Enable TLS</string>
+                </property>
+                <property name="checkable">
+                 <bool>true</bool>
+                </property>
+                <property name="checked">
+                 <bool>false</bool>
+                </property>
+                <layout class="QGridLayout" name="gridLayout_4">
+                 <item row="0" column="0">
+                  <widget class="QLabel" name="label_tls_listener">
+                   <property name="text">
+                    <string>Global TLS listener*</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="0" column="1" colspan="3">
+                  <widget class="KIntSpinBox" name="spinbox_tls_listener">
+                   <property name="maximum">
+                    <number>65535</number>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="0" column="4" colspan="5">
+                  <spacer name="horizontalSpacer_4">
+                   <property name="orientation">
+                    <enum>Qt::Horizontal</enum>
+                   </property>
+                   <property name="sizeHint" stdset="0">
+                    <size>
+                     <width>40</width>
+                     <height>20</height>
+                    </size>
+                   </property>
+                  </spacer>
+                 </item>
+                 <item row="1" column="0">
+                  <widget class="QLabel" name="label_tls_authority">
+                   <property name="text">
+                    <string>Authority certificate list</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="1" column="1" colspan="8">
+                  <widget class="KUrlRequester" name="file_tls_authority"/>
+                 </item>
+                 <item row="2" column="0">
+                  <widget class="QLabel" name="label_tls_endpoint">
+                   <property name="text">
+                    <string>Public endpoint certificate</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="2" column="1" colspan="8">
+                  <widget class="KUrlRequester" name="file_tls_endpoint"/>
+                 </item>
+                 <item row="3" column="0">
+                  <widget class="QLabel" name="label_tls_private_key">
+                   <property name="text">
+                    <string>Private key</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="3" column="1" colspan="8">
+                  <widget class="KUrlRequester" name="file_tls_private_key"/>
+                 </item>
+                 <item row="4" column="0">
+                  <widget class="QLabel" name="label_tls_private_key_password">
+                   <property name="text">
+                    <string>Private key password</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="4" column="1" colspan="8">
+                  <widget class="KLineEdit" name="edit_tls_private_key_password"/>
+                 </item>
+                 <item row="5" column="0">
+                  <widget class="QLabel" name="label_tls_method">
+                   <property name="text">
+                    <string>TLS protocol method</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="5" column="1" colspan="3">
+                  <widget class="QComboBox" name="combo_tls_method">
+                   <item>
+                    <property name="text">
+                     <string>Default</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>TLSv1</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>SSLv2</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>SSLv3</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>SSLv23</string>
+                    </property>
+                   </item>
+                  </widget>
+                 </item>
+                 <item row="5" column="4" colspan="5">
+                  <spacer name="horizontalSpacer_5">
+                   <property name="orientation">
+                    <enum>Qt::Horizontal</enum>
+                   </property>
+                   <property name="sizeHint" stdset="0">
+                    <size>
+                     <width>40</width>
+                     <height>20</height>
+                    </size>
+                   </property>
+                  </spacer>
+                 </item>
+                 <item row="6" column="0">
+                  <widget class="QLabel" name="label_tls_cipher">
+                   <property name="text">
+                    <string>TLS cipher list</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="6" column="1" colspan="8">
+                  <widget class="KLineEdit" name="edit_tls_cipher"/>
+                 </item>
+                 <item row="7" column="0">
+                  <widget class="QLabel" name="label_tls_outgoing">
+                   <property name="text">
+                    <string>Outgoing TLS server name</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="7" column="1" colspan="8">
+                  <widget class="KLineEdit" name="edit_tls_outgoing"/>
+                 </item>
+                 <item row="8" column="0">
+                  <widget class="QLabel" name="label_tls_timeout">
+                   <property name="text">
+                    <string>Negotiation timeout (s:ms)</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="8" column="1">
+                  <widget class="KIntSpinBox" name="spinbox_tls_timeout_sec">
+                   <property name="sizePolicy">
+                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                     <horstretch>0</horstretch>
+                     <verstretch>0</verstretch>
+                    </sizepolicy>
+                   </property>
+                   <property name="minimumSize">
+                    <size>
+                     <width>50</width>
+                     <height>0</height>
+                    </size>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="9" column="0" colspan="5">
+                  <widget class="QCheckBox" name="check_tls_incoming">
+                   <property name="text">
+                    <string>Verify incoming certificates (server side)</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="10" column="0" colspan="5">
+                  <widget class="QCheckBox" name="check_tls_answer">
+                   <property name="text">
+                    <string>Verify answer certificates (client side)</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="11" column="0" colspan="5">
+                  <widget class="QCheckBox" name="check_tls_requier_cert">
+                   <property name="text">
+                    <string>Require a certificate for incoming TLS connections</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="12" column="0">
+                  <widget class="QLabel" name="label_tls_details">
+                   <property name="text">
+                    <string>*Apply to all accounts</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="13" column="0">
+                  <spacer name="verticalSpacer">
+                   <property name="orientation">
+                    <enum>Qt::Vertical</enum>
+                   </property>
+                   <property name="sizeHint" stdset="0">
+                    <size>
+                     <width>20</width>
+                     <height>40</height>
+                    </size>
+                   </property>
+                  </spacer>
+                 </item>
+                 <item row="8" column="4" colspan="5">
+                  <spacer name="horizontalSpacer_3">
+                   <property name="orientation">
+                    <enum>Qt::Horizontal</enum>
+                   </property>
+                   <property name="sizeHint" stdset="0">
+                    <size>
+                     <width>40</width>
+                     <height>20</height>
+                    </size>
+                   </property>
+                  </spacer>
+                 </item>
+                 <item row="8" column="3">
+                  <widget class="KIntSpinBox" name="spinbox_tls_timeout_msec">
+                   <property name="sizePolicy">
+                    <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                     <horstretch>0</horstretch>
+                     <verstretch>0</verstretch>
+                    </sizepolicy>
+                   </property>
+                   <property name="minimumSize">
+                    <size>
+                     <width>50</width>
+                     <height>0</height>
+                    </size>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="8" column="2">
+                  <widget class="QLabel" name="label_timeout2">
+                   <property name="sizePolicy">
+                    <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+                     <horstretch>0</horstretch>
+                     <verstretch>0</verstretch>
+                    </sizepolicy>
+                   </property>
+                   <property name="minimumSize">
+                    <size>
+                     <width>10</width>
+                     <height>0</height>
+                    </size>
+                   </property>
+                   <property name="maximumSize">
+                    <size>
+                     <width>10</width>
+                     <height>16777215</height>
+                    </size>
+                   </property>
+                   <property name="text">
+                    <string>&lt;center&gt;:&lt;/center&gt;</string>
+                   </property>
+                  </widget>
+                 </item>
+                </layout>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+           </widget>
+          </item>
+         </layout>
+        </widget>
        </widget>
       </item>
      </layout>
@@ -484,6 +919,11 @@
    <extends>QSpinBox</extends>
    <header>knuminput.h</header>
   </customwidget>
+  <customwidget>
+   <class>KUrlRequester</class>
+   <extends>QFrame</extends>
+   <header>kurlrequester.h</header>
+  </customwidget>
   <customwidget>
    <class>KLineEdit</class>
    <extends>QLineEdit</extends>
diff --git a/sflphone-client-kde/src/sflphone_const.h b/sflphone-client-kde/src/sflphone_const.h
index 356a2e5755..c26ce8ed03 100644
--- a/sflphone-client-kde/src/sflphone_const.h
+++ b/sflphone-client-kde/src/sflphone_const.h
@@ -205,6 +205,35 @@
 #define CONST_ALSA                        0
 #define CONST_PULSEAUDIO                  1
 
-
+/** TLS */
+#define TLS_LISTENER_PORT                   "TLS.listenerPort"
+#define TLS_ENABLE                          "TLS.enable"
+#define TLS_PORT                            "TLS.port"
+#define TLS_CA_LIST_FILE                    "TLS.certificateListFile"
+#define TLS_CERTIFICATE_FILE                "TLS.certificateFile"
+#define TLS_PRIVATE_KEY_FILE                "TLS.privateKeyFile"
+#define TLS_PASSWORD                        "TLS.password"
+#define TLS_METHOD                          "TLS.method"
+#define TLS_CIPHERS                         "TLS.ciphers"
+#define TLS_SERVER_NAME                     "TLS.serverName"
+#define TLS_VERIFY_SERVER                   "TLS.verifyServer"
+#define TLS_VERIFY_CLIENT                   "TLS.verifyClient"
+#define TLS_REQUIRE_CLIENT_CERTIFICATE      "TLS.requireClientCertificate"  
+#define TLS_NEGOTIATION_TIMEOUT_SEC         "TLS.negotiationTimeoutSec"
+#define TLS_NEGOTIATION_TIMEOUT_MSEC        "TLS.negotiationTimemoutMsec"
+
+#define ACCOUNT_PASSWORD                   "password"
+#define ACCOUNT_AUTHENTICATION_USERNAME    "authenticationUsername"
+#define ACCOUNT_REALM                      "realm"
+#define ACCOUNT_KEY_EXCHANGE               "SRTP.keyExchange"
+#define ACCOUNT_SRTP_ENABLED               "SRTP.enable"
+#define ACCOUNT_SRTP_RTP_FALLBACK          "SRTP.rtpFallback"
+#define ACCOUNT_ZRTP_DISPLAY_SAS           "ZRTP.displaySAS"
+#define ACCOUNT_ZRTP_NOT_SUPP_WARNING      "ZRTP.notSuppWarning"
+#define ACCOUNT_ZRTP_HELLO_HASH            "ZRTP.helloHashEnable"
+#define ACCOUNT_DISPLAY_SAS_ONCE           "ZRTP.displaySasOnce"
+#define KEY_EXCHANGE_NONE                  "0"
+#define ZRTP                               "1"
+#define SDES                               "2"
 
 #endif
-- 
GitLab


From 90b3757154355a8fc89ea8f3300418060bac9c17 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 22 Mar 2010 12:43:00 -0400
Subject: [PATCH 140/160] [#3010] Handle 2xx ACK in mod_on_rx_response

Branch ID must be the same, PJSIP send non-2xx
ACK automatically if not handled
---
 sflphone-common/src/sip/sipvoiplink.cpp | 50 +++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 4 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 36901c1e77..10bf2c4d70 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -228,6 +228,12 @@ pj_bool_t mod_on_rx_request (pjsip_rx_data *rdata);
  */
 pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata UNUSED) ;
 
+/**
+    * Send an ACK message inside a transaction. PJSIP send automatically, non-2xx ACK response.
+    * ACK for a 2xx response must be send using this method.
+    */
+static void sendAck(pjsip_dialog *dlg, pjsip_rx_data *rdata);
+
 /*
  * Transfer callbacks
  */
@@ -3490,13 +3496,14 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     std::string request;
 
 
-    _info("UserAgent: Receiving REQUEST using transport: %s %s (refcnt=%d)",
+    _info("UserAgent: Transaction REQUEST received using transport: %s %s (refcnt=%d)",
     	   rdata->tp_info.transport->obj_name,
     	   rdata->tp_info.transport->info,
     	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
 
     // No need to go any further on incoming ACK
-    if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD) {
+    if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD && pjsip_rdata_get_dlg(rdata) != NULL) {
+    	pjsip_dialog *dlg = pjsip_rdata_get_dlg(rdata);
         _info("UserAgent: received an ACK");
         return true;
     }
@@ -3777,12 +3784,47 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
 }
 
-pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata UNUSED)
+pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata)
 {
-    _debug ("Mod on rx response");
+    _info ("SIP: Transaction response using transport: %s %s (refcnt=%d)",
+    	   rdata->tp_info.transport->obj_name,
+    	   rdata->tp_info.transport->info,
+    	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
+
+    pjsip_dialog *dlg;
+    dlg = pjsip_rdata_get_dlg( rdata );
+
+	if(dlg != NULL) {
+		pjsip_transaction *tsx = pjsip_rdata_get_tsx( rdata );
+		if ( tsx != NULL && tsx->method.id == PJSIP_INVITE_METHOD) {
+			if (tsx->status_code < 200) {
+				_info("SIP: Received provisional response");
+			}
+			else if (tsx->status_code >= 300) {
+			    _warn("SIP: Dialog failed");
+				// pjsip_dlg_dec_session(dlg);
+				// ACK for non-2xx final response is sent by transaction.
+			}
+			else {
+				_info("SIP: Received 200 OK response");
+				sendAck(dlg, rdata);
+			}
+		}
+	}
+
     return PJ_SUCCESS;
 }
 
+static void sendAck(pjsip_dialog *dlg, pjsip_rx_data *rdata) {
+
+	pjsip_tx_data *tdata;
+
+	// Create ACK request
+	pjsip_dlg_create_request(dlg, &pjsip_ack_method, rdata->msg_info.cseq->cseq, &tdata);
+
+	pjsip_dlg_send_request( dlg, tdata,-1, NULL);
+}
+
 void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata)
 {
 
-- 
GitLab


From ecd8de81e80965fb7241d075ab5cd7e3b948bb08 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 22 Mar 2010 13:47:05 -0400
Subject: [PATCH 141/160] [#3052] Add CELT control parameter

---
 sflphone-common/src/audio/codecs/celtcodec.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index ad7a4eac10..05864b0b60 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -94,8 +94,14 @@ class Celt : public AudioCodec
 
             _dec = celt_decoder_create (_mode, _channel, &error);
 
-            celt_encoder_ctl (_enc, CELT_SET_COMPLEXITY (10));
-            celt_decoder_ctl(_dec, CELT_SET_COMPLEXITY (10));
+            celt_encoder_ctl (_enc, CELT_SET_COMPLEXITY (0));
+            celt_decoder_ctl(_dec, CELT_SET_COMPLEXITY (0));
+
+            celt_encoder_ctl (_enc, CELT_SET_PREDICTION(1));
+            celt_decoder_ctl(_dec, CELT_SET_PREDICTION(1));
+
+            celt_encoder_ctl (_enc, CELT_SET_VBR_RATE(0));
+            celt_decoder_ctl(_dec, CELT_SET_VBR_RATE(0));
 
         }
 
-- 
GitLab


From 9557bd45e44753f1a9990ce1f2bad6041316d88c Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 22 Mar 2010 16:00:38 -0400
Subject: [PATCH 142/160] [#3200] Use default parameters in celt for VBR, get
 Back to 32000, 320 samples

---
 .../src/audio/codecs/celtcodec.cpp            | 11 +++-----
 sflphone-common/src/sip/sdp.cpp               | 11 ++++++--
 sflphone-common/src/sip/sipvoiplink.cpp       | 28 +++++++++----------
 sflphone-common/src/sip/sipvoiplink.h         | 11 ++++----
 4 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index 05864b0b60..aebbd2dfab 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -94,14 +94,11 @@ class Celt : public AudioCodec
 
             _dec = celt_decoder_create (_mode, _channel, &error);
 
-            celt_encoder_ctl (_enc, CELT_SET_COMPLEXITY (0));
-            celt_decoder_ctl(_dec, CELT_SET_COMPLEXITY (0));
+            celt_encoder_ctl (_enc, CELT_SET_COMPLEXITY (2));
+            celt_decoder_ctl(_dec, CELT_SET_COMPLEXITY (2));
 
-            celt_encoder_ctl (_enc, CELT_SET_PREDICTION(1));
-            celt_decoder_ctl(_dec, CELT_SET_PREDICTION(1));
-
-            celt_encoder_ctl (_enc, CELT_SET_VBR_RATE(0));
-            celt_decoder_ctl(_dec, CELT_SET_VBR_RATE(0));
+            celt_encoder_ctl (_enc, CELT_SET_PREDICTION(2));
+            celt_decoder_ctl(_dec, CELT_SET_PREDICTION(2));
 
         }
 
diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index 4d6505740f..94c8e64634 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -97,9 +97,16 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
         // connection, the rtpmap attribute will be useful to specify for which codec it is applicable
         rtpmap.pt = med->desc.fmt[i];
         rtpmap.enc_name = pj_str ( (char*) codec->getCodecName().c_str());
-        rtpmap.clock_rate = codec->getClockRate();
-        // Add the channel number only if different from 1
 
+        // G722 require G722/8000 media description even if it is 16000 codec
+        if(codec->getPayload () == 9) {
+        	  rtpmap.clock_rate = 8000;
+        }
+        else {
+        	rtpmap.clock_rate = codec->getClockRate();
+        }
+
+        // Add the channel number only if different from 1
         if (codec->getChannel() > 1)
             rtpmap.param = pj_str ( (char*) codec->getChannel());
         else
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 10bf2c4d70..d379217c05 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -2476,7 +2476,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     pjsip_transport_type_e transportType;
     pjsip_tpselector *tp_sel;
 
-    _debug ("SIPVoIPLink::findLocalAddressFromUri");
+    _debug ("SIP: Find local address from URI");
 
     // Find the transport that must be used with the given uri
     pj_str_t tmp;
@@ -2489,7 +2489,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     std::string machineName (pjMachineName.ptr, pjMachineName.slen);
 
     if (genericUri == NULL) {
-        _debug ("genericUri is NULL in findLocalAddressFromUri");
+        _warn ("SIP: generic URI is NULL in findLocalAddressFromUri");
         return machineName;
     }
 
@@ -2498,7 +2498,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     sip_uri = (pjsip_sip_uri*) pjsip_uri_get_uri (genericUri);
 
     if (sip_uri == NULL) {
-        _debug ("Invalid uri in findLocalAddressFromTransport");
+        _warn ("SIP: Invalid uri in findLocalAddressFromURI");
         return machineName;
     }
 
@@ -2507,7 +2507,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
 
     } else {
         if (transport == NULL) {
-            _debug ("transport is NULL in findLocalAddressFromUri. Try the local UDP transport");
+            _warn ("SIP: Transport is NULL in findLocalAddressFromUri. Try the local UDP transport");
             transport = _localUDPTransport;
         }
 
@@ -2521,7 +2521,7 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     tpmgr = pjsip_endpt_get_tpmgr (_endpt);
 
     if (tpmgr == NULL) {
-        _debug ("Unexpected: Cannot get tpmgr from endpoint.");
+        _warn ("SIP: Unexpected: Cannot get tpmgr from endpoint.");
         return machineName;
     }
 
@@ -2537,23 +2537,23 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
         status = init_transport_selector (transport, &tp_sel);
 
         if (status == PJ_SUCCESS) {
-	    _debug("pjsip_tpmgr_find_local_addr, UDP, tpsel");
             status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, tp_sel, &localAddress, &port);
-	} else {
-	    _debug("pjsip_tpmgr_find_local_addr, UDP");
-            status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
-	}
-    } else {
-        _debug("pjsip_tpmgr_find_local_addr, TLS");
+        }
+        else {
+        	status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
+        }
+    }
+    else {
         status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
     }
 
     if (status != PJ_SUCCESS) {
-        _debug ("Failed to find local address from transport");
+        _debug ("SIP: Failed to find local address from transport");
         return machineName;
     }
 
-    _debug ("Local address discovered from attached transport: %s", localAddress.ptr);
+	std::string localaddr(localAddress.ptr, localAddress.slen);
+    _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str());
 
     return std::string (localAddress.ptr, localAddress.slen);
 }
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 445a28b6fd..8a3e45acd7 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -460,18 +460,19 @@ class SIPVoIPLink : public VoIPLink
          */
 	pj_status_t createAlternateUdpTransport (AccountID id);
 
+
 	/** 
 	 * UDP Transports are stored in this map in order to retreive them in case
 	 * several accounts would share the same port number.
 	 */
 	SipTransportMap _transportMap;
 
-        /** For registration use only */
-        int _regPort;
+	/** For registration use only */
+	int _regPort;
 
-        /** Threading object */
-        EventThread* _evThread;
-        ost::Mutex _mutexSIP;
+	/** Threading object */
+	EventThread* _evThread;
+	ost::Mutex _mutexSIP;
 
         /* Number of SIP accounts connected to the link */
         int _clients;
-- 
GitLab


From 80ed737ba5bfdc6c592dde8b7c7ef08967f9f734 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Mon, 22 Mar 2010 16:53:44 -0400
Subject: [PATCH 143/160] [#3010] Use 40 byte encoding Celt

---
 sflphone-common/src/audio/codecs/celtcodec.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index aebbd2dfab..612faa6791 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -122,7 +122,7 @@ class Celt : public AudioCodec
 
         virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
             int len = 0;
-            len = celt_encode (_enc, (celt_int16*) src, (celt_int16 *) src, dst, 512);
+            len = celt_encode (_enc, (celt_int16*) src, (celt_int16 *) src, dst, 40);
             // returns the number of bytes writen
             return len;
         }
-- 
GitLab


From b617138742b0be086917c8ac3fc8e116671e4e9d Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Tue, 23 Mar 2010 17:57:44 -0400
Subject: [PATCH 144/160] [#2521] DBUS-XML API documentation

---
 sflphone-common/libs/pjproject/autogen.sh     |    0
 .../src/dbus/callmanager-introspec.xml        | 1191 ++++++++++-------
 .../dbus/configurationmanager-introspec.xml   | 1121 ++++++++--------
 .../src/dbus/instance-introspec.xml           |   60 +-
 4 files changed, 1298 insertions(+), 1074 deletions(-)
 mode change 100644 => 100755 sflphone-common/libs/pjproject/autogen.sh

diff --git a/sflphone-common/libs/pjproject/autogen.sh b/sflphone-common/libs/pjproject/autogen.sh
old mode 100644
new mode 100755
diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml
index 83a5c32acf..534bde252d 100644
--- a/sflphone-common/src/dbus/callmanager-introspec.xml
+++ b/sflphone-common/src/dbus/callmanager-introspec.xml
@@ -1,506 +1,699 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 
-<!-- Comment -->
-<!--*< File comment -->
+<node name="/callmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+	<interface name="org.sflphone.SFLphone.CallManager">
 
-<node name="/org/sflphone/SFLphone" xmlns:dx="http://psiamp.org/dtd/doxygen_dbusxml.dtd">
+		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+			<p>The CallManager interface is used to manage any call related actions.</p>
+			<p>Since SFLphone-daemon support multiple incoming/outgoing calls, any actions involving a specific call must address the method by the means of a unique callID. SFLphone-clients is responsible to generate the callID on outgoing call. On the other hand, SFLphone-daemon will generate a unique callID on incoming calls.</p>
+		</tp:docstring>
+		<method name="placeCall" tp:name-for-bindings="placeCall">
+			<tp:docstring>
+				<p>This is the main method in order to place a new call. The call is registered to the daemon using this method.</p>
+			</tp:docstring>
+			<arg type="s" name="accountID" direction="in">
+				<tp:docstring>
+					The ID of the account you want to make a call with. If the call is to be placed whithout any account by the means of a SIP URI (i.e. sip:num@server), the "IP2IP_PROFILE" is passed as the accountID. For more details about accounts see the configuration manager interface.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="to" direction="in">
+				<tp:docstring>
+					If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+				</tp:docstring>
+			</arg>
+		</method>
 
-  <!--* The CallManager interface is used to manage any call related
-	actions. 
+		<method name="placeCallFirstAccount" tp:name-for-bindings="placeCallFirstAccount">
+			<tp:added version="0.9.8"/>
+			<tp:docstring>
+				Place a call with the fist registered account, regarding to the account list order.
+				<tp:rationale>
+					Use this function when you don't have any information about the accounts used (Ex: Firefly mozilla extension)			
+				</tp:rationale>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID is a unique identifier that must be randomly generated on the  client's side. Any subsequent actions refering to this call must use this callID.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="to" direction="in">
+				<tp:docstring>
+					If bound to a VoIP account, then the argument is the phone number. In case of calls involving "IP2IP_PROFILE", a complete SIP URI must be specified.
+				</tp:docstring>
+			</arg>
+		</method>
 
-	Since SFLphone-daemon support multiple incoming/outgoing
-	calls, any actions involving a specific call must address the
-	method by the means of a unique callID. SFLphone-clients is
-	responsible to generate the callID on outgoing call. On the
-	otehr hand, SFLphone-daemon will generate a unique callID on
-	incoming calls.
+		<method name="refuse" tp:name-for-bindings="refuse">
+			<tp:docstring>
+				Refuse an incoming call.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID.
+				</tp:docstring>
+			</arg>
 
-	Actions are performed asynchronously, SFLphone-client should
-	subscribe to the callStateChanged signal in order to be
-	notified on updates in call status.
-    -->
-	<interface name="org.sflphone.SFLphone.CallManager">
-	
-	<!--* This is the main method in order to place a new call. The
-            call is registered to the daemon using this method
-            specified a unique identifier and VoIP Accout to be bound with.
-
-			The account is specified by its accountID. 
-
-			If the call is to be placed whithout any account by the
-			means of a SIP URI (i.e. sip:num@server), the
-			"IP2IP_PROFILE" is passed as the accountID. For more
-			details about accounts see the configuration manager interface.
-
-			The callID is a unique identifier that must be randomly
-			generated on sflphone-client's side. Any subsequent
-			actions refering to this call must use this callID.
-
-			If bound to a VoIP account, the to argument is the phone
-			number. In case of calls involving "IP2IP_PROFILE", a
-			complete SIP URI must be specified.
-
-				@param[in] input accountID
-				@param[in] input callID
-			@param[in] input to
-        -->
-
-		<method name="placeCall">
-			<arg type="s" name="accountID" direction="in"/>
-			<arg type="s" name="callID" direction="in" />
-			<arg type="s" name="to" direction="in" />
-		</method>
-
-    <method name="placeCallFirstAccount">
-      <arg type="s" name="callID" direction="in"/>
-      <arg type="s" name="to" direction="in"/>
-    </method>
-    
-    <method name="refuse">
-      <!--* Method called to refuse an incoming call.
-
-            @param[in] input callID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="accept">
-      <!--* Method called to answer an incoming call. Automatically put
-	    the current call on state HOLD.
-
-            @param[in] input callID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="hangUp">
-      <!--* Method called to hangup a call in state "CURRENT" or "HOLD".
-
-            @param[in] input callID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-
-    <method name="hangUpConference">
-      <!--* This method will hangup a conference in state ""
-	    every call participating to the conference.
-
-            @param[in] input confID
-        -->
-      <arg type="s" name="confID" direction="in"/>
-    </method>
-    
-    <method name="hold">
-      <!--* Place this call on state HOLD.
-
-            @param[in] input confID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="unhold">
-      <!--* Place this call on state CURRENT.
-
-            @param[in] input confID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="transfert">
-      <!--* Transfer a call to given phone number.
-
-            @param[in] input confID
-	    @param[in] input to
-        -->
-      <arg type="s" name="callID" direction="in"/>
-      <arg type="s" name="to" direction="in"/>
-    </method>
-    
-    <method name="playDTMF">
-      <!--* Dual-Tone multi-frequency. Tell SFLphone-daemon to play
-	    dial tones. A SIP INFO message is sent to notify the server.
-
-            @param[in] input Unicode charter for pressed key
-        -->
-      <arg type="s" name="key" direction="in"/>
-    </method>
-    
-    <method name="startTone">
-      <!--* This method is used to start audio stream and play tone.
-
-            @param[in] input confID
-        -->
-      <arg type="i" name="start" direction="in"/>
-      <arg type="i" name="type" direction="in"/>
-    </method>
-
-    <method name="setVolume">
-      <!--* This method sets the volume using a linear scale
-            [0,100]. Pulseaudio has its own mechanism to modify
-            application volume. This method is enabled only if the
-            ALSA API is used. 
-
-            @param[in] input device
-	    @param[in] input value
-        -->
-      <arg type="s" name="device" direction="in"/>
-      <arg type="d" name="value" direction="in"/>
-    </method>
-    
-    <method name="getVolume">
-      <!--* This method is enabled only if the ALSA API is used, Pulseaudio 
-	    has its own mechanism to modify application volume. Return
-	    a value on a linear scale [0,100].
-
-            @param[in] input device
-	    @param[out] output value
-        -->
-      <arg type="s" name="device" direction="in"/>
-      <arg type="d" name="value" direction="out"/>
-    </method>
-
-    <method name="joinParticipant">
-      <!--* Join two participants together to create a 3-way
-            conference including current SFLphone-client.
-	    conferenceCreated signal is emited on success.
-
-            @param[in] input sel_callID
-	    @param[in] input drag_callID
-        -->
-      <arg type="s" name="sel_callID" direction="in"/>
-      <arg type="s" name="drag_callID" direction="in"/>
-    </method>
-
-    <method name="addParticipant">
-      <!--* Join a new particiant to an already created conference.
-            conferenceChaged signal is emited on success.
-
-            @param[in] input callID
-	    @param[in] input confID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-      <arg type="s" name="confID" direction="in"/>
-    </method>
-
-    <method name="addMainParticipant">
-      <!--* As SFLphone-daemon can handle multiple calls and
-            conferences. It may happen that SFLphone-client's user
-            leave a conference to answer an incoming call or
-            send new ones. This method is used to reintroduce
-            SFLphone-client's user into the conference.
-
-	    It put the current call on state HOLD or detach
-	    SFLphone-client's user from the another conference.
-
-	    @param[in] input confID
-        -->
-      <arg type="s" name="confID" direction="in"/>
-    </method>
-
-    <method name="detachParticipant">
-      <!--* Detach the given call from the conference. If only one
-            participant is left, the conference is deleted and the 
-	    "conferenceRemoved" signal is emited.
-
-            @param[in] input callID
-        -->
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-
-    <method name="joinConference">
-      <!--* Method used to join two conference together.
-
-            @param[in] input sel_confID
-	    @param[in] input drag_confID
-        -->
-      <arg type="s" name="sel_confID" direction="in"/>
-      <arg type="s" name="drag_confID" direction="in"/>
-    </method>
-
-    <method name="getConferenceDetails">
-      <!--* Returns a hashtable containing conference details.
-
-	    "CONFID"
-	    "CONF_STATE"
-
-            @param[in] input confID
-	    @param[out] output a infos
-        -->
-      <arg type="s" name="callID" direction="in"/>
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-      <arg type="a{ss}" name="infos" direction="out"/>
-    </method>
-    
-    <method name="getConferenceList">
-      <!--* Returns a list containing all active confID in SFLphone-daemon.
-
-	    @param[out] output list
-        -->
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <method name="setRecording">
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-
-     <method name="getIsRecording">
-      <arg type="s" name="callID" direction="in"/>
-      <arg type="b" name="isRecording" direction="out"/>
-    </method>
-    
-    <method name="getCallDetails">
-      <!--* Returns a hashtable containing call details.
-
-	    "ACCOUNTID"
-            "PEER_NUMBER"
-            "PEER_NAME"
-            "DISPLAY_NAME"    Name to display
-            "CALL_STATE"      The state of the call
-            "CALL_TYPE"       SIP or IAX
-
-            @param[in] input callID
-	    @param[out] output a infos
-        -->
-      <arg type="s" name="callID" direction="in"/>
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-      <arg type="a{ss}" name="infos" direction="out"/>
-    </method>
-    
-    <method name="getCallList">
-      <!--* Returns a list containing all active callID in SFLphone-daemon.
-
-	    @param[out] output list
-        -->
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <method name="getCurrentCallID">
-      <!--* Returns the CURRENT callID
-
-	    @param[out] output callID
-        -->
-      <arg type="s" name="callID" direction="out"/>
-    </method>
-
-    <method name="getCurrentCodecName">
-      <arg type="s" name="callID" direction="in"/>
-      <arg type="s" name="codecName" direction="out"/>
-    </method>
-
-    <signal name="currentSelectedCodec">
-      <arg type="s" name="callID"  direction="out" />
-      <arg type="s" name="codecName"  direction="out"/>
-    </signal>
-    
-    <signal name="incomingCall">
-      <!--* Signal sent to notify incoming calls.
-
-	    The callID generated by the daemon and must be stored
-	    by SFLphone-client in order to address other action for
-	    this call.
-
-            @param[in] input accountID
-            @param[in] input callID
-	    @param[in] input from
-        -->
-      <arg type="s" name="accountID" />
-      <arg type="s" name="callID" />
-      <arg type="s" name="from" />
-    </signal>
-    
-    <signal name="incomingMessage">
-      <arg type="s" name="accountID"  direction="out" />
-      <arg type="s" name="message"  direction="out"/>
-    </signal>
-    
-    <signal name="callStateChanged">
-      <!--* Signal emited by SFLphone-daemon to notify of a chage in
-	    call state.
- 
-	    The following is a liste of possible call state:
-
-	    "INCOMING"          Initial state of incoming calls
-	    "RINGING"           Initial state of received outgoing call
-	    "CURRENT"           The normal active state of an answered call
-            "HUNGUP"            Notify that the call has been hungup by peer
-	    "BUSY" 
-            "FAILURE"           Signal emited on failure to answer the call
-            "HOLD"              CAll state is now on hold
-            "UNHOLD_RECORD"     CAll state is now on CURRENT (pursue recording)
-            "UNHOLD_CURRENT"    CAll state is now on CURRENT
-
-            @param[in] input accountID
-            @param[in] input state
-        -->
-      <arg type="s" name="callID"  direction="out"/>
-      <arg type="s" name="state"  direction="out"/>
-    </signal>
-
-    <signal name="conferenceChanged">
-      <!--* Signal emited by SFLphone-daemon to notify of a chage in
-	    conference state.
- 
-	    The following is a liste of possible conference state:
-
-	    "ACTIVE_ATACHED"    Conference state is active
-	    "ACTIVE_DETACHED"   Conference state is active  
-	    "HOLD"              Conference is on hold
-
-            @param[in] input accountID
-            @param[in] input state
-        -->
-      <arg type="s" name="confID"  direction="out"/>
-      <arg type="s" name="state"  direction="out"/>
-    </signal>
-
-    <method name="getParticipantList">
-      <!--* Return a vector (or a list) containig the callIP of every
-            participant to a given conference. SFLphone-client should
-            keep and update the list of participant.
-
-            @param[in] input accountID
-            @param[out] output List of callID
-        -->
-      <arg type="s" name="confID" direction="in"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <signal name="conferenceCreated">
-      <!--* Emited when a new conference is created. SFLphone-client
-            is reponsible to store the confID and call
-            getParticipantList to update display.
-
-            param[out] output Newly generated confID
-        -->
-      <arg type="s" name="confID"  direction="out"/>
-    </signal>
-
-    <signal name="conferenceRemoved">
-      <!--* Emited when a new conference is removed. SFLphone-client
-            should have kept a list of current participant in order to
-            display modification. 
-
-            @param[out] output confID
-        -->
-      <arg type="s" name="confID"  direction="out"/>
-    </signal>
-
-    <method name="holdConference">
-      <!--* Put the hole conference on hold. Every call participating
-            to this conference will be update to state HOLD. 
-
-            @param[in] input confID
-        -->
-      <arg type="s" name="confID" direction="in"/>
-    </method>
-
-    <method name="unholdConference">
-      <!--* Put the conference on state ACTIVE. Every call participating
-            to this conference will be updated to state UNHOLD.
-
-            @param[in] input confID
-        -->
-      <arg type="s" name="confID" direction="in"/>
-    </method>
-    
-    <signal name="sipCallStateChanged">
-      <arg type="s" name="callID"  direction="out"/>
-      <arg type="s" name="state"  direction="out"/>
-      <arg type="i" name="code"  direction="out"/>            
-    </signal>    
-
-    <signal name="registrationStateChanged">
-      <arg type="s" name="accountID"  direction="out"/>
-      <arg type="s" name="state"  direction="out"/>
-      <arg type="i" name="code"  direction="out"/>            
-    </signal> 
-        
-    <signal name="voiceMailNotify">
-      <arg type="s" name="accountID"  direction="out"/>
-      <arg type="i" name="count"  direction="out"/>
-    </signal>
-    
-    <signal name="volumeChanged">
-      <arg type="s" name="device"  direction="out"/>
-      <arg type="d" name="value"  direction="out"/>
-    </signal>
-
-    <signal name="transferSucceded">
-    </signal>
-
-    <signal name="transferFailed">
-    </signal>
-
-    <signal name="secureSdesOn">
-      <arg type="s" name="callID"  direction="out" />
-    </signal>
-    
-    <signal name="secureSdesOff">
-      <arg type="s" name="callID"  direction="out" />
-    </signal>
-    
-    <!-- ZRTP Methods and Signals -->
-    <signal name="secureZrtpOn">
-      <arg type="s" name="callID"  direction="out" />
-      <arg type="s" name="cipher"  direction="out" />
-    </signal>
-    
-    <signal name="secureZrtpOff">
-      <arg type="s" name="callID"  direction="out" />
-    </signal>
-    
-    <signal name="confirmGoClear">
-      <arg type="s" name="callID"  direction="out" />
-    </signal>
-    
-    <signal name="zrtpNegotiationFailed">
-      <arg type="s" name="callID"  direction="out" />
-      <arg type="s" name="reason"  direction="out" />
-      <arg type="s" name="severity"  direction="out" />
-    </signal>
-    
-    <signal name="zrtpNotSuppOther">
-      <arg type="s" name="callID"  direction="out" />
-    </signal>
-    
-    <signal name="showSAS">
-      <arg type="s" name="callID"  direction="out" />
-      <arg type="s" name="sas"  direction="out" />
-      <arg type="b" name="verified"  direction="out" />
-    </signal>
- 
-    <method name="setSASVerified">
-      <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="resetSASVerified">
-        <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="setConfirmGoClear">
-        <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="requestGoClear">
-        <arg type="s" name="callID" direction="in"/>
-    </method>
-    
-    <method name="acceptEnrollment">
-        <arg type="s" name="callID" direction="in"/>
-        <arg type="b" name="accepted" direction="in"/>
-    </method>
-    
-    <method name="setPBXEnrollment">
-        <arg type="s" name="callID" direction="in"/>
-        <arg type="b" name="yesNo" direction="in"/>
-    </method>
-<!--
-    <signal name="error">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-      <arg type="a{ss}" name="details"  direction="out"/>
-    </signal>
--->
-
-  </interface>
+		</method>
+
+		<method name="accept" tp:name-for-bindings="accept">
+			<tp:docstring>
+				Answer an incoming call. Automatically put the current call on state HOLD.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="hangUp" tp:name-for-bindings="hangUp">
+			<tp:docstring>
+				Hangup a call in state "CURRENT" or "HOLD".
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="hangUpConference" tp:name-for-bindings="hangUpConference">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Hangup a conference, and every call participating to the conference.
+			</tp:docstring>
+			<arg type="s" name="confID" direction="in">
+				<tp:docstring>
+					The unique conference ID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="hold" tp:name-for-bindings="hold">
+			<tp:docstring>
+				Place a call on hold.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="unhold" tp:name-for-bindings="unhold">
+			<tp:docstring>
+				Hold off a call, and place this call on state CURRENT.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="transfert" tp:name-for-bindings="transfert">
+			<tp:docstring>
+				Transfer a call to given phone number.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The callID.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="to" direction="in">
+				<tp:docstring>
+					The phone number to transfer the call to.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="playDTMF" tp:name-for-bindings="playDTMF">
+			<tp:docstring>
+				Dual-Tone multi-frequency. Tell the core to play dial tones. A SIP INFO message is sent to notify the server.
+			</tp:docstring>
+			<arg type="s" name="key" direction="in">
+				<tp:docstring>
+					Unicode charter for pressed key
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="startTone" tp:name-for-bindings="startTone">
+			<tp:docstring>
+				Start audio stream and play tone..
+			</tp:docstring>
+			<arg type="i" name="start" direction="in"/>
+			<arg type="i" name="type" direction="in"/>
+		</method>
+
+		<method name="setVolume" tp:name-for-bindings="setVolume">
+			<tp:docstring>
+				<p>Sets the volume using a linear scale [0,100].</p>
+				<tp:rationale>Pulseaudio has its own mechanism to modify application volume. This method is enabled only if the ALSA API is used.</tp:rationale>
+			</tp:docstring>
+			<arg type="s" name="device" direction="in">
+				<tp:docstring>
+					The device: mic or speaker
+				</tp:docstring>
+			</arg>
+			<arg type="d" name="value" direction="in">
+				<tp:docstring>
+					The volume value (between 0 and 100)
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getVolume" tp:name-for-bindings="getVolume">
+			<tp:docstring>
+				<p>Return the volume value of the given device on a linear scale [0,100].</p>
+				<tp:rationale>Only enabled if the ALSA API is used, Pulseaudio has its own mechanism to modify application volume.</tp:rationale>
+			</tp:docstring>
+			<arg type="s" name="device" direction="in">
+				<tp:docstring>
+					The device: mic or speaker
+				</tp:docstring>
+			</arg>
+			<arg type="d" name="value" direction="out">
+				<tp:docstring>
+					The volume value (between 0 and 100)
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="joinParticipant" tp:name-for-bindings="joinParticipant">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				<p>Join two participants together to create a 3-way conference including the current client.</p>
+				<tp:rationale>The signal <tp:member-ref>conferenceCreated</tp:member-ref> is emitted on success.</tp:rationale> 
+			</tp:docstring>
+			<arg type="s" name="sel_callID" direction="in"/>
+			<arg type="s" name="drag_callID" direction="in"/>
+		</method>
+
+		<method name="addParticipant" tp:name-for-bindings="addParticipant">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				<p>Join a new particiant to an existing conference.</p>
+				<tp:rationale>The signal <tp:member-ref>conferenceChanged</tp:member-ref> is emitted on success.</tp:rationale> 
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The ID of the call to add to the conference
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="confID" direction="in">
+				<tp:docstring>
+					An existing conference ID
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="addMainParticipant" tp:name-for-bindings="addMainParticipant">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				<p>As the core can handle multiple calls an conferences, it may happens that the client's user leave a conference to answer an incoming call or send new ones. This method is used to reintroduce SFLphone-client's user into the conference.</p>
+				<p>It put the current call on state HOLD or detach SFLphone-client's user from the another conference.</p>
+			</tp:docstring>
+			<arg type="s" name="confID" direction="in">
+				<tp:docstring>
+					An existing conference ID
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="detachParticipant" tp:name-for-bindings="detachParticipant">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Detach the given call from the conference. If only one participant is left, the conference is deleted and the signal <tp:member-ref>conferenceRemoved</tp:member-ref> is emited.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The call ID
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="joinConference" tp:name-for-bindings="joinConference">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Join two conferences together.
+			</tp:docstring>
+			<arg type="s" name="sel_confID" direction="in"/>
+			<arg type="s" name="drag_confID" direction="in"/>
+		</method>
+
+		<method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Returns a hashtable containing conference details.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The call ID
+				</tp:docstring>
+			</arg>
+			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+			<arg type="a{ss}" name="infos" direction="out">
+				<tp:docstring>
+					A map containing the ID of the conferences and their states.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getConferenceList" tp:name-for-bindings="getConferenceList">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Returns a list containing all active conferences.
+			</tp:docstring>
+			<arg type="as" name="list" direction="out">
+				<tp:docstring>
+					The list of conferences.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="setRecording" tp:name-for-bindings="setRecording">
+			<tp:docstring>
+				Start recording a call.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The ID of the call to record.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getIsRecording" tp:name-for-bindings="getIsRecording"> 
+			<tp:docstring>
+				Tells whether or not a call is being recorded.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The call ID.
+				</tp:docstring>
+			</arg>
+			<arg type="b" name="isRecording" direction="out">
+				<tp:docstring>
+					Returns true is the call is being recorded. False otherwise.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getCallDetails" tp:name-for-bindings="getCallDetails">
+			<tp:docstring>
+				Get all the details about a specific call.
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in">
+				<tp:docstring>
+					The call ID.
+				</tp:docstring>
+			</arg>
+			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+			<arg type="a{ss}" name="infos" direction="out" tp:type="String_String_Map">
+				<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+					<p>A map containing the call details: </p>
+					<ul>
+						<li>ACCOUNTID</li>
+						<li>PEER_NUMBER</li>
+						<li>PEER_NAME</li>
+						<li>DISPLAY_NAME</li>
+						<li>CALL_STATE</li>
+						<li>CALL_TYPE</li>
+					</ul>  
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getCallList" tp:name-for-bindings="getCallList">
+			<tp:docstring>
+				Get the list of active calls.
+				<tp:rationale>To get the call details, iterate on the return value and call <tp:member-ref>getCallDetails</tp:member-ref> method.</tp:rationale> 
+			</tp:docstring>
+			<arg type="as" name="list" direction="out">
+				<tp:docstring>
+					A list of call IDs.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID">
+			<tp:docstring>
+				Get the CURRENT call ID.
+			</tp:docstring>
+			@param[out] output callID
+			<arg type="s" name="callID" direction="out">
+				<tp:docstring>
+					The current call ID.	
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getCurrentCodecName" tp:name-for-bindings="getCurrentCodecName">
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+			<arg type="s" name="codecName" direction="out"/>
+		</method>
+
+		<signal name="currentSelectedCodec" tp:name-for-bindings="currentSelectedCodec">
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+			<arg type="s" name="codecName"/>
+		</signal>
+
+		<signal name="incomingCall" tp:name-for-bindings="incomingCall">
+			<tp:docstring>
+				<p>Notify an incoming call.</p>
+				<p>The callID generated by the daemon and must be stored by the clients in order to address other action for
+					this call.</p>
+				<tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
+			</tp:docstring>
+			<arg type="s" name="accountID">
+				<tp:docstring>
+					The account ID of the callee. Clients must notify the right account when receiving this signal.	
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="callID">
+				<tp:docstring>
+					A new call ID.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="from">
+				<tp:docstring>
+					The caller phone number.
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
+			<tp:docstring>
+				Unused
+			</tp:docstring>
+			<arg type="s" name="accountID" />
+			<arg type="s" name="message" />
+		</signal>
+
+		<signal name="callStateChanged" tp:name-for-bindings="callStateChanged">
+			<tp:docstring>
+				<p>Notify of a change in a call state.</p> 
+				<p>The client must subscribe to this signal.</p>
+			</tp:docstring>
+			<arg type="s" name="callID">
+				<tp:docstring>
+					The call ID.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="state" >
+				<tp:docstring>
+					The acceptable states are: 
+					<ul>
+						<li>INCOMING: Initial state of incoming calls</li>
+						<li>RINGING: Initial state of received outgoing call</li>
+						<li>CURRENT: The normal active state of an answered call</li>
+						<li>HUNGUP: Notify that the call has been hungup by peer</li>
+						<li>BUSY</li>
+						<li>FAILURE: Error when processing a call</li>
+						<li>HOLD</li>
+						<li>UNHOLD_CURRENT</li>
+						<li>UNHOLD_RECORD</li>
+					</ul>
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<signal name="conferenceChanged" tp:name-for-bindings="conferenceChanged">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Notify of a change in the conferences state
+			</tp:docstring>
+			<arg type="s" name="confID">
+				<tp:docstring>
+					The conference ID.
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="state">
+				<tp:docstring>
+					The acceptable states are: 
+					<ul>
+						<li>ACTIVE_ATTACHED</li>
+						<li>ACTIVE_DETACHED</li>
+						<li>HOLD</li>
+					</ul>
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<method name="getParticipantList" tp:name-for-bindings="getParticipantList">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Get the call IDs of every participant to a given conference. The client should keep and update the list of participant.
+			</tp:docstring>
+			<arg type="s" name="confID" direction="in">
+				<tp:docstring>
+					The conference ID.
+				</tp:docstring>
+			</arg>
+			<arg type="as" name="list" direction="out">
+				<tp:docstring>
+					The list of the call IDs.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<signal name="conferenceCreated" tp:name-for-bindings="conferenceCreated">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Emited when a new conference is created. SFLphone-client is reponsible to store the confID and call <tp:member-ref>getParticipantList</tp:member-ref> to update the display.
+			</tp:docstring>
+			<arg type="s" name="confID">  
+				<tp:docstring>
+					A new conference ID.
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<signal name="conferenceRemoved" tp:name-for-bindings="conferenceRemoved">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Emited when a new conference is remove. SFLphone-client should have kept a list of current participant in order to display modification.
+			</tp:docstring>
+			<arg type="s" name="confID">
+				<tp:docstring>
+					The conference ID.
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<method name="holdConference" tp:name-for-bindings="holdConference">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Hold on every calls participating to this conference.
+			</tp:docstring>
+			<arg type="s" name="confID" direction="in">
+				<tp:docstring>
+					The conference ID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="unholdConference" tp:name-for-bindings="unholdConference">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+				Hold off every calls participating to this conference.
+			</tp:docstring>
+			<arg type="s" name="confID" direction="in">
+				<tp:docstring>
+					The conference ID.
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<signal name="sipCallStateChanged" tp:name-for-bindings="sipCallStateChanged">
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID"  />
+			<arg type="s" name="state"  />
+			<arg type="i" name="code"  />            
+		</signal>    
+
+		<signal name="registrationStateChanged" tp:name-for-bindings="registrationStateChanged">
+			<tp:docstring>
+				<p>The state of an account has changed.</p>
+				<p>The clients have to subscribe to this signal to use accounts.</p>
+			</tp:docstring>
+			<arg type="s" name="accountID" >
+				<tp:docstring>
+					The account ID
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="state">
+				<tp:docstring>
+					The new registration state
+				</tp:docstring>
+			</arg>
+			<arg type="i" name="code">            
+				<tp:docstring>
+					The SIP or IAX2 code
+				</tp:docstring>
+			</arg>
+		</signal> 
+
+		<signal name="voiceMailNotify" tp:name-for-bindings="voiceMailNotify">
+			<tp:docstring>
+				Notify the clients of the voicemail number for a specific account, if applicable.
+			</tp:docstring>
+			<arg type="s" name="accountID">
+				<tp:docstring>
+					The account ID.
+				</tp:docstring>
+			</arg>
+			<arg type="i" name="count">
+				<tp:docstring>
+					The number of waiting messages.
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
+			<tp:docstring>
+				Notify the clients of a volume level change.
+			</tp:docstring>
+			<arg type="s" name="device">
+				<tp:docstring>
+					The device: mic or speaker	
+				</tp:docstring>
+			</arg>
+			<arg type="d" name="value">
+				<tp:docstring>
+					The new volume value	
+				</tp:docstring>
+			</arg>
+		</signal>
+
+		<signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
+			<tp:docstring>
+				The transfer has been successfully processed.
+			</tp:docstring>
+		</signal>
+
+		<signal name="transferFailed" tp:name-for-bindings="transferFailed">
+			<tp:docstring>
+				The transfer operation has failed.
+			</tp:docstring>
+		</signal>
+
+		<signal name="secureSdesOn" tp:name-for-bindings="secureSdesOn">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID"/>
+		</signal>
+
+		<signal name="secureSdesOff" tp:name-for-bindings="secureSdesOff">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+		</signal>
+
+		<!-- ZRTP Methods and Signals -->
+		<signal name="secureZrtpOn" tp:name-for-bindings="secureZrtpOn">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID"  />
+			<arg type="s" name="cipher"  />
+		</signal>
+
+		<signal name="secureZrtpOff" tp:name-for-bindings="secureZrtpOff">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+		</signal>
+
+		<signal name="confirmGoClear" tp:name-for-bindings="confirmGoClear">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+		</signal>
+
+		<signal name="zrtpNegotiationFailed" tp:name-for-bindings="zrtpNegotiationFailed">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+			<arg type="s" name="reason"  />
+			<arg type="s" name="severity" />
+		</signal>
+
+		<signal name="zrtpNotSuppOther" tp:name-for-bindings="zrtpNotSuppOther">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+		</signal>
+
+		<signal name="showSAS" tp:name-for-bindings="showSAS">
+			<tp:added version="0.9.7"/>
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" />
+			<arg type="s" name="sas"  />
+			<arg type="b" name="verified"/>
+		</signal>
+
+		<method name="setSASVerified" tp:name-for-bindings="setSASVerified">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+		</method>
+
+		<method name="resetSASVerified" tp:name-for-bindings="resetSASVerified">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+		</method>
+
+		<method name="setConfirmGoClear" tp:name-for-bindings="setConfirmGoClear">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+		</method>
+
+		<method name="requestGoClear" tp:name-for-bindings="requestGoClear">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+		</method>
+
+		<method name="acceptEnrollment" tp:name-for-bindings="acceptEnrollment">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+			<arg type="b" name="accepted" direction="in"/>
+		</method>
+
+		<method name="setPBXEnrollment" tp:name-for-bindings="setPBXEnrollment">
+			<tp:added version="0.9.7"/>
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="callID" direction="in"/>
+			<arg type="b" name="yesNo" direction="in"/>
+		</method>
+
+	</interface>
 </node>
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index 0b66386689..a34111d917 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -1,568 +1,571 @@
 <?xml version="1.0" ?>
-<node name="/org/sflphone/SFLphone">
-  <interface name="org.sflphone.SFLphone.ConfigurationManager">
-    
-  <!-- Accounts-related methods -->  
-    <method name="getAccountDetails">
-      <!--* Method that returns a hashtable containing the current
-            account configuration setting.
-
-	    CONFIG_ACCOUNT_ENABLE
-	    CONFIG_ACCOUNT_RESOLVE_ONCE
-	    CONFIG_ACCOUNT_TYPE
-	    HOSTNAME
-	    USERNAME
-	    PASSWORD
-	    REALM
-	    AUTHENTICATION_USERNAME
-	    CONFIG_ACCOUNT_MAILBOX
-	    CONFIG_ACCOUNT_REGISTRATION_EXPIRE
-	    LOCAL_INTERFACE
-	    PUBLISHED_SAMEAS_LOCAL
-	    PUBLISHED_ADDRESS
-	    LOCAL_PORT
-	    PUBLISHED_PORT
-	    DISPLAY_NAME
-	    STUN_ENABLE
-	    STUN_SERVER
-
-	    REGISTRATION_STATUS
-	    REGISTRATION_STATE_CODE
-	    REGISTRATION_STATE_DESCRIPTION
-	    SRTP_KEY_EXCHANGE
-	    SRTP_ENABLE
-	    
-	    SRTP_RTP_FALLBACK
-	    ZRTP_DISPLAY_SAS
-	    ZRTP_DISPLAY_SAS_ONCE
-	    ZRTP_HELLO_HASH
-	    ZRTP_NOT_SUPP_WARNING
-
-	    TLS_LISTENER_PORT
-	    TLS_ENABLE
-	    TLS_CA_LIST_FILE
-	    TLS_CERTIFICATE_FILE
-	    TLS_PRIVATE_KEY_FILE
-	    
-	    TLS_METHOD
-	    TLS_CIPHERS
-	    TLS_SERVER_NAME
-	    TLS_VERIFY_SERVER
-	    TLS_VERIFY_CLIENT
-	    TLS_REQUIRE_CLIENT_CERTIFICATE
-	    TLS_NEGOTIATION_TIMEOUT_SEC
-	    TLS_NEGOTIATION_TIMEOUT_MSEC
-
-
-            @param[in] input accountID
-            @param[out] output details
-        -->
-      <arg type="s" name="accountID" direction="in"/>
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-      <arg type="a{ss}" name="details" direction="out"/>
-    </method>
-    
-    <method name="setAccountDetails">
-      <!--* Modify the current accout parameter settings given an
-            accountID and a hash table containing the parameters to
-            update. The hash table is not required to be complete,
-            only the parameter to change may be specified. Only the
-            running parameters are updated dynamically, configuration
-            settings are stored in the configuration file when
-            SFLphone-daemon quit.
-
-	    For a complete list of account settings refer to getAccountDetails
-
-            @param[in] input accountID
-            @param[in] input details
-        -->
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="a{ss}" name="details" direction="in"/>
-    </method>
-    
-    <method name="setCredential">
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="i" name="index" direction="in"/>
-      <arg type="a{ss}" name="credentialInformation" direction="in"/>
-    </method>
-
-    <method name="setNumberOfCredential">
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="i" name="number" direction="in"/>
-    </method>
-       
-    <method name="deleteAllCredential">
-       <arg type="s" name="accountID" direction="in"/>
-    </method>
-  
-    <method name="getIp2IpDetails">
-      <!--* Specific call to get configuration settings of the
-	    IP2IP_PROFILE. Which are sligthly different since no VoIP
-	    Account parameters are envolved.
-
-	    ACCOUNT_ID
-	    SRTP_KEY_EXCHANGE
-	    SRTP_ENABLE
-	    SRTP_RTP_FALLBACK
-	    ZRTP_DISPLAY_SAS
-	    ZRTP_HELLO_HASH
-	    ZRTP_NOT_SUPP_WARNING
-	    ZRTP_DISPLAY_SAS_ONCE
-	    LOCAL_INTERFACE
-	    LOCAL_PORT
-
-	    TLS_LISTENER_PORT
-	    TLS_CA_LIST_FILE
-	    TLS_CERTIFICATE_FILE
-	    TLS_PRIVATE_KEY_FILE
-	    TLS_PASSWORD
-	    TLS_METHOD
-	    TLS_CIPHERS
-	    TLS_SERVER_NAME
-	    TLS_VERIFY_SERVER
-	    TLS_VERIFY_CLIENT
-	    TLS_REQUIRE_CLIENT_CERTIFICATE
-	    TLS_NEGOTIATION_TIMEOUT_SEC
-	    TLS_NEGOTIATION_TIMEOUT_MSEC
-
-            @param[in] input accountID
-            @param[out] output details
-        -->
-      <arg type="a{ss}" name="details" direction="out"/>
-    </method>
-    
-    <method name="setIp2IpDetails">
-      <!--* Modify the IP2IP_PROFILE parameter settings a hash table 
-	    containing the parameters to update. The hash table is not required to be complete,
-            only the parameters to be modified may be specified. Also,
-	    only the running configuration is updated dynamically, 
-            settings are stored in the configuration file when
-            SFLphone-daemon quit.
-
-	    For a complete list of account settings refer to getAccountDetails
-
-            @param[in] input accountID
-            @param[in] input details
-        -->
-      <arg type="a{ss}" name="details" direction="in"/>
-    </method>
-      
-    <method name="getCredential">
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="i" name="index" direction="in"/>
-      <arg type="a{ss}" name="credentialInformation" direction="out"/>
-    </method>
-    
-    <method name="getNumberOfCredential">
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="i" name="numberOfCredential" direction="out"/>
-    </method>
-        
-    <method name="addAccount">
-      <!--* Add a new account to the SFLphone-daemon list. If no
-	    details are specified, default parameters are used.
-	    A REGISTER is automatically sent and configuration is
-	    saved if account created successfully.
-
-            @param[in] input details
-            @param[out] output accountID
-        -->
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-      <arg type="a{ss}" name="details" direction="in"/>
-      <arg type="s" name="createdAccountId" direction="out"/>
-    </method>
-    
-    <method name="setAccountsOrder">
-      <!--* Update the account list given a new list of accountID. If no account is specified
-	    for a call, the first one in the list will be used.
-
-            @param[in] input order
-        -->
-      <arg type="s" name="order" direction="in"/>
-    </method>
-    
-    <method name="removeAccount">
-      <!--* Delete an account from SFLphone-daemon list and erase
-	    account parameters from configuration file. 
-
-            @param[in] input accountID
-        -->
-      <arg type="s" name="accoundID" direction="in"/>
-    </method>
-    
-    <method name="getAccountList">
-      <!--* Get teh accountlist as stored in SFLphone-daemon.
-
-            @param[in] input accountID
-        -->
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-   
-    <method name="sendRegister">
-      <!--* Send accout registration request to PBX server. Register
-	    the account if expire=1, unregister if expire=0.
-
-            @param[in] input accountID
-        -->
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="i" name="expire" direction="in"/>
-    </method>
-
-   <!--      ///////////////////////               -->
+
+<node name="/configurationmanager-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+	<interface name="org.sflphone.SFLphone.ConfigurationManager">
+
+		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+		</tp:docstring>
+
+		<method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
+			<!--* Method that returns a hashtable containing the current
+			account configuration setting.
+
+		CONFIG_ACCOUNT_ENABLE
+		CONFIG_ACCOUNT_RESOLVE_ONCE
+		CONFIG_ACCOUNT_TYPE
+		HOSTNAME
+		USERNAME
+		PASSWORD
+		REALM
+		AUTHENTICATION_USERNAME
+		CONFIG_ACCOUNT_MAILBOX
+		CONFIG_ACCOUNT_REGISTRATION_EXPIRE
+		LOCAL_INTERFACE
+		PUBLISHED_SAMEAS_LOCAL
+		PUBLISHED_ADDRESS
+		LOCAL_PORT
+		PUBLISHED_PORT
+		DISPLAY_NAME
+		STUN_ENABLE
+		STUN_SERVER
+
+		REGISTRATION_STATUS
+		REGISTRATION_STATE_CODE
+		REGISTRATION_STATE_DESCRIPTION
+		SRTP_KEY_EXCHANGE
+		SRTP_ENABLE
+
+		SRTP_RTP_FALLBACK
+		ZRTP_DISPLAY_SAS
+		ZRTP_DISPLAY_SAS_ONCE
+		ZRTP_HELLO_HASH
+		ZRTP_NOT_SUPP_WARNING
+
+		TLS_LISTENER_PORT
+		TLS_ENABLE
+		TLS_CA_LIST_FILE
+		TLS_CERTIFICATE_FILE
+		TLS_PRIVATE_KEY_FILE
+
+		TLS_METHOD
+		TLS_CIPHERS
+		TLS_SERVER_NAME
+		TLS_VERIFY_SERVER
+		TLS_VERIFY_CLIENT
+		TLS_REQUIRE_CLIENT_CERTIFICATE
+		TLS_NEGOTIATION_TIMEOUT_SEC
+		TLS_NEGOTIATION_TIMEOUT_MSEC
+
+
+			@param[in] input accountID
+			@param[out] output details
+		-->
+	  <arg type="s" name="accountID" direction="in"/>
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+	  <arg type="a{ss}" name="details" direction="out"/>
+  </method>
+
+  <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
+	  <!--* Modify the current accout parameter settings given an
+			accountID and a hash table containing the parameters to
+			update. The hash table is not required to be complete,
+			only the parameter to change may be specified. Only the
+			running parameters are updated dynamically, configuration
+			settings are stored in the configuration file when
+			SFLphone-daemon quit.
+
+		For a complete list of account settings refer to getAccountDetails
+
+			@param[in] input accountID
+			@param[in] input details
+		-->
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="a{ss}" name="details" direction="in"/>
+  </method>
+
+  <method name="setCredential" tp:name-for-bindings="setCredential">
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="i" name="index" direction="in"/>
+	  <arg type="a{ss}" name="credentialInformation" direction="in"/>
+  </method>
+
+  <method name="setNumberOfCredential" tp:name-for-bindings="setNumberOfCredential">
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="i" name="number" direction="in"/>
+  </method>
+
+  <method name="deleteAllCredential" tp:name-for-bindings="deleteAllCredential">
+	  <arg type="s" name="accountID" direction="in"/>
+  </method>
+
+  <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
+	  <!--* Specific call to get configuration settings of the
+		IP2IP_PROFILE. Which are sligthly different since no VoIP
+		Account parameters are envolved.
+
+		ACCOUNT_ID
+		SRTP_KEY_EXCHANGE
+		SRTP_ENABLE
+		SRTP_RTP_FALLBACK
+		ZRTP_DISPLAY_SAS
+		ZRTP_HELLO_HASH
+		ZRTP_NOT_SUPP_WARNING
+		ZRTP_DISPLAY_SAS_ONCE
+		LOCAL_INTERFACE
+		LOCAL_PORT
+
+		TLS_LISTENER_PORT
+		TLS_CA_LIST_FILE
+		TLS_CERTIFICATE_FILE
+		TLS_PRIVATE_KEY_FILE
+		TLS_PASSWORD
+		TLS_METHOD
+		TLS_CIPHERS
+		TLS_SERVER_NAME
+		TLS_VERIFY_SERVER
+		TLS_VERIFY_CLIENT
+		TLS_REQUIRE_CLIENT_CERTIFICATE
+		TLS_NEGOTIATION_TIMEOUT_SEC
+		TLS_NEGOTIATION_TIMEOUT_MSEC
+
+			@param[in] input accountID
+			@param[out] output details
+		-->
+	  <arg type="a{ss}" name="details" direction="out"/>
+  </method>
+
+  <method name="setIp2IpDetails" tp:name-for-bindings="setIp2IpDetails">
+	  <!--* Modify the IP2IP_PROFILE parameter settings a hash table 
+		containing the parameters to update. The hash table is not required to be complete,
+			only the parameters to be modified may be specified. Also,
+		only the running configuration is updated dynamically, 
+			settings are stored in the configuration file when
+			SFLphone-daemon quit.
+
+		For a complete list of account settings refer to getAccountDetails
+
+			@param[in] input accountID
+			@param[in] input details
+		-->
+	  <arg type="a{ss}" name="details" direction="in"/>
+  </method>
+
+  <method name="getCredential" tp:name-for-bindings="getCredential">
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="i" name="index" direction="in"/>
+	  <arg type="a{ss}" name="credentialInformation" direction="out"/>
+  </method>
+
+  <method name="getNumberOfCredential" tp:name-for-bindings="getNumberOfCredential">
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="i" name="numberOfCredential" direction="out"/>
+  </method>
+
+  <method name="addAccount" tp:name-for-bindings="addAccount">
+	  <!--* Add a new account to the SFLphone-daemon list. If no
+		details are specified, default parameters are used.
+		A REGISTER is automatically sent and configuration is
+		saved if account created successfully.
+
+			@param[in] input details
+			@param[out] output accountID
+		-->
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+	  <arg type="a{ss}" name="details" direction="in"/>
+	  <arg type="s" name="createdAccountId" direction="out"/>
+  </method>
+
+  <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
+	  <!--* Update the account list given a new list of accountID. If no account is specified
+		for a call, the first one in the list will be used.
+
+			@param[in] input order
+		-->
+	  <arg type="s" name="order" direction="in"/>
+  </method>
+
+  <method name="removeAccount" tp:name-for-bindings="removeAccount">
+	  <!--* Delete an account from SFLphone-daemon list and erase
+		account parameters from configuration file. 
+
+			@param[in] input accountID
+		-->
+	  <arg type="s" name="accoundID" direction="in"/>
+  </method>
+
+  <method name="getAccountList" tp:name-for-bindings="getAccountList">
+	  <!--* Get teh accountlist as stored in SFLphone-daemon.
+
+			@param[in] input accountID
+		-->
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="sendRegister" tp:name-for-bindings="sendRegister">
+	  <!--* Send accout registration request to PBX server. Register
+		the account if expire=1, unregister if expire=0.
+
+			@param[in] input accountID
+		-->
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="i" name="expire" direction="in"/>
+  </method>
+
+  <!--      ///////////////////////               -->
 
   <!-- Various audio-related methods   -->
- 
-    <method name="getToneLocaleList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-  
-    <method name="getVersion">
-      <arg type="s" name="version" direction="out"/>
-    </method>
-    
-    <method name="getRingtoneList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-   
-    <method name="getPlaybackDeviceList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-    
-    <method name="getRecordDeviceList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-    
-    <method name="isRingtoneEnabled">
-      <arg type="i" name="bool" direction="out"/>
-    </method>
-
-    <method name="ringtoneEnabled">
-    </method>
-
-    <method name="getRingtoneChoice">
-      <arg type="s" name="tone" direction="out"/>
-    </method>
-
-    <method name="setRingtoneChoice">
-      <arg type="s" name="tone" direction="in"/>
-    </method>
-
-    <method name="getAudioManager">
-      <arg type="i" name="api" direction="out"/>
-    </method>
-
-    <method name="setAudioManager">
-      <arg type="i" name="api" direction="in"/>
-    </method>
-    
-    <method name="getRecordPath">
-      <arg type="s" name="rec" direction="out"/>
-    </method>
-
-    <method name="setRecordPath">
-      <arg type="s" name="rec" direction="in"/>
-    </method>
-
-   <!--      ///////////////////////               -->
-   
-   <!-- Codecs-related methods -->
- 
-    <method name="getCodecList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-       
-   <method name="getCodecDetails">
-     <arg type="i" name="payload" direction="in"/>
-     <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-     <arg type="as" name="details" direction="out"/>
-   </method>
- 
-    <method name="getActiveCodecList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+
+  <method name="getToneLocaleList" tp:name-for-bindings="getToneLocaleList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getVersion" tp:name-for-bindings="getVersion">
+	  <arg type="s" name="version" direction="out"/>
+  </method>
+
+  <method name="getRingtoneList" tp:name-for-bindings="getRingtoneList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getPlaybackDeviceList" tp:name-for-bindings="getPlaybackDeviceList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getRecordDeviceList" tp:name-for-bindings="getRecordDeviceList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="isRingtoneEnabled" tp:name-for-bindings="isRingtoneEnabled">
+	  <arg type="i" name="bool" direction="out"/>
+  </method>
+
+  <method name="ringtoneEnabled" tp:name-for-bindings="ringtoneEnabled">
+  </method>
+
+  <method name="getRingtoneChoice" tp:name-for-bindings="getRingtoneChoice">
+	  <arg type="s" name="tone" direction="out"/>
+  </method>
+
+  <method name="setRingtoneChoice" tp:name-for-bindings="setRingtoneChoice">
+	  <arg type="s" name="tone" direction="in"/>
+  </method>
+
+  <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
+	  <arg type="i" name="api" direction="out"/>
+  </method>
+
+  <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
+	  <arg type="i" name="api" direction="in"/>
+  </method>
+
+  <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
+	  <arg type="s" name="rec" direction="out"/>
+  </method>
+
+  <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
+	  <arg type="s" name="rec" direction="in"/>
+  </method>
+
+  <!--      ///////////////////////               -->
+
+  <!-- Codecs-related methods -->
+
+  <method name="getCodecList" tp:name-for-bindings="getCodecList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getCodecDetails" tp:name-for-bindings="getCodecDetails">
+	  <arg type="i" name="payload" direction="in"/>
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="details" direction="out"/>
+  </method>
+
+  <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 	  <arg type="s" name="accountID" direction="in"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <method name="setActiveCodecList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-      <arg type="as" name="list" direction="in"/>
-      <arg type="s" name="accountID" direction="in"/>
-    </method>
-
-
-	<!-- Audio devices methods -->
-	
-    <method name="getInputAudioPluginList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-		
-    <method name="getOutputAudioPluginList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-    
-    <method name="setInputAudioPlugin">
-      <arg type="s" name="audioPlugin" direction="in"/>
-    </method>
-    
-    <method name="setOutputAudioPlugin">
-      <arg type="s" name="audioPlugin" direction="in"/>
-    </method>
-    
-    <method name="getAudioOutputDeviceList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-    
-    <method name="setAudioOutputDevice">
-      <arg type="i" name="index" direction="in"/>
-    </method>
-    
-    <method name="getAudioInputDeviceList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-    
-    <method name="setAudioInputDevice">
-      <arg type="i" name="index" direction="in"/>
-    </method>
-    
-    <method name="getCurrentAudioDevicesIndex">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <method name="getAudioDeviceIndex">
-      <arg type="s" name="name" direction="in"/>
-      <arg type="i" name="index" direction="out"/>
-    </method>
-
-    <method name="getCurrentAudioOutputPlugin">
-      <arg type="s" name="plugin" direction="out"/>
-    </method>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="setActiveCodecList" tp:name-for-bindings="setActiveCodecList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+	  <arg type="as" name="list" direction="in"/>
+	  <arg type="s" name="accountID" direction="in"/>
+  </method>
+
+
+  <!-- Audio devices methods -->
+
+  <method name="getInputAudioPluginList" tp:name-for-bindings="getInputAudioPluginList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getOutputAudioPluginList" tp:name-for-bindings="getOutputAudioPluginList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="setInputAudioPlugin" tp:name-for-bindings="setInputAudioPlugin">
+	  <arg type="s" name="audioPlugin" direction="in"/>
+  </method>
+
+  <method name="setOutputAudioPlugin" tp:name-for-bindings="setOutputAudioPlugin">
+	  <arg type="s" name="audioPlugin" direction="in"/>
+  </method>
+
+  <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
+	  <arg type="i" name="index" direction="in"/>
+  </method>
+
+  <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
+	  <arg type="i" name="index" direction="in"/>
+  </method>
+
+  <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
+	  <arg type="s" name="name" direction="in"/>
+	  <arg type="i" name="index" direction="out"/>
+  </method>
+
+  <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
+	  <arg type="s" name="plugin" direction="out"/>
+  </method>
 
   <!--    General Settings Panel         -->
 
-    <method name="isMd5CredentialHashing">
-      <arg type="b" name="res" direction="out"/>
-    </method>
-
-    <method name="setMd5CredentialHashing">
-      <arg type="b" name="enabled" direction="in"/>
-    </method>
-     
-    <method name="isIax2Enabled">
-      <arg type="i" name="res" direction="out"/>
-    </method>
-
-    <method name="setNotify">
-    </method>
-
-    <method name="getNotify">
-      <arg type="i" name="level" direction="out"/>
-    </method>
-
-    <method name="setMailNotify">
-    </method>
-
-    <method name="getMailNotify">
-      <arg type="i" name="level" direction="out"/>
-    </method>
-
-    <method name="getDialpad">
-      <arg type="i" name="state" direction="out"/>
-    </method>
-
-    <method name="setDialpad">
-      <arg type="b" name="display" direction="in"/>
-    </method>
-
-    <method name="getSearchbar">
-      <arg type="i" name="state" direction="out"/>
-    </method>
-
-    <method name="setSearchbar">
-    </method>
-
-    <method name="setHistoryEnabled">
-    </method>
-
-    <method name="getHistoryEnabled">
-      <arg type="s" name="state" direction="out"/>
-    </method>
-
-    <method name="getVolumeControls">
-      <arg type="i" name="state" direction="out"/>
-    </method>
-
-    <method name="setVolumeControls">
-      <arg type="b" name="display" direction="in"/>
-    </method>
-
-    <method name="getHistoryLimit">
-      <arg type="i" name="days" direction="out"/>
-    </method>
-
-    <method name="setHistoryLimit">
-      <arg type="i" name="days" direction="in"/>
-    </method>
-
-    <method name="startHidden">
-    </method>
-
-    <method name="isStartHidden">
-      <arg type="i" name="state" direction="out"/>
-    </method>
-
-    <method name="popupMode">
-      <arg type="i" name="state" direction="out"/>
-    </method>
-
-    <method name="switchPopupMode">
-    </method>
-
-	<method name="getWindowWidth">
-      <arg type="i" name="width" direction="out"/>
-	</method>
-
-	<method name="getWindowHeight">
-      <arg type="i" name="height" direction="out"/>
-	</method>
-
-	<method name="setWindowWidth">
-      <arg type="i" name="width" direction="in"/>
-	</method>
-
-	<method name="setWindowHeight">
-      <arg type="i" name="height" direction="in"/>
-	</method>
-
-	<method name="getWindowPositionX">
-      <arg type="i" name="posX" direction="out"/>
-	</method>
-		
-	<method name="setWindowPositionX">
-      <arg type="i" name="posX" direction="in"/>
-	</method>
-		
-	<method name="getWindowPositionY">
-      <arg type="i" name="posY" direction="out"/>
-	</method>
-		
-	<method name="setWindowPositionY">
-      <arg type="i" name="posY" direction="in"/>
-	</method>
-	
-	<method name="enableStatusIcon">
-      <arg type="s" name="value" direction="in"/>
-	</method>
-		
-	<method name="isStatusIconEnabled">
-      <arg type="s" name="value" direction="out"/>
-	</method>
-	
-	
-    <!-- Addressbook configuration -->
-    <method name="getAddressbookSettings">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
-      <arg type="a{si}" name="settings" direction="out"/>
-    </method>
-
-    <method name="setAddressbookSettings">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
-      <arg type="a{si}" name="settings" direction="in"/>
-    </method>
-
-	<!-- Addressbook list -->
-    <method name="getAddressbookList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="settings" direction="out"/>
-    </method>
-
-    <method name="setAddressbookList">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-      <arg type="as" name="settings" direction="in"/>
-    </method>
-
-    <!-- Hook configuration -->
-    <method name="getHookSettings">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-      <arg type="a{ss}" name="settings" direction="out"/>
-    </method>
-
-    <method name="setHookSettings">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-      <arg type="a{ss}" name="settings" direction="in"/>
-    </method>
-
-    <method name="getHistory">
-        <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-        <arg type="a{ss}" name="entries" direction="out"/>
-    </method>
-
-    <method name="setHistory">
-        <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-        <arg type="a{ss}" name="entries" direction="in"/>
-    </method>
-      
-    <signal name="accountsChanged">
-    </signal>  
-
-    <signal name="errorAlert">
-      <arg type="i" name="code" direction="out"/>
-    </signal> 
-    
-    <!-- TLS Methods -->
-    <method name="getSupportedTlsMethod">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <method name="getTlsSettingsDefault">
-      <arg type="a{ss}" name="details" direction="out"/>
-    </method>
-
-    <method name="getTlsSettings">
-      <arg type="s" name="accountID" direction="in"/>
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-      <arg type="a{ss}" name="details" direction="out"/>
-    </method>
-    
-    <method name="setTlsSettings">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-      <arg type="s" name="accountID" direction="in"/>
-      <arg type="a{ss}" name="details" direction="in"/>
-    </method>
-
-    <method name="getAddrFromInterfaceName">
-      <arg type="s" name="interface" direction="in"/>
-      <arg type="s" name="address" direction="out"/>
-    </method>
-
-    <method name="getAllIpInterface">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-
-    <method name="getAllIpInterfaceByName">
-      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-      <arg type="as" name="list" direction="out"/>
-    </method>
-    
-    <method name="getShortcuts">
-      <arg type="a{si}" name="shortcutsMap" direction="out"/>
-    </method>
-    
-    <method name="setShortcuts">
-      <arg type="a{si}" name="shortcutsMap" direction="in"/>
-    </method>
+  <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing">
+	  <arg type="b" name="res" direction="out"/>
+  </method>
+
+  <method name="setMd5CredentialHashing" tp:name-for-bindings="setMd5CredentialHashing">
+	  <arg type="b" name="enabled" direction="in"/>
+  </method>
+
+  <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
+	  <arg type="i" name="res" direction="out"/>
+  </method>
+
+  <method name="setNotify" tp:name-for-bindings="setNotify">
+  </method>
+
+  <method name="getNotify" tp:name-for-bindings="getNotify">
+	  <arg type="i" name="level" direction="out"/>
+  </method>
+
+  <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
+  </method>
+
+  <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
+	  <arg type="i" name="level" direction="out"/>
+  </method>
+
+  <method name="getDialpad" tp:name-for-bindings="getDialpad">
+	  <arg type="i" name="state" direction="out"/>
+  </method>
+
+  <method name="setDialpad" tp:name-for-bindings="setDialpad">
+	  <arg type="b" name="display" direction="in"/>
+  </method>
+
+  <method name="getSearchbar" tp:name-for-bindings="getSearchbar">
+	  <arg type="i" name="state" direction="out"/>
+  </method>
+
+  <method name="setSearchbar" tp:name-for-bindings="setSearchbar">
+  </method>
+
+  <method name="setHistoryEnabled" tp:name-for-bindings="setHistoryEnabled">
+  </method>
+
+  <method name="getHistoryEnabled" tp:name-for-bindings="getHistoryEnabled">
+	  <arg type="s" name="state" direction="out"/>
+  </method>
+
+  <method name="getVolumeControls" tp:name-for-bindings="getVolumeControls">
+	  <arg type="i" name="state" direction="out"/>
+  </method>
+
+  <method name="setVolumeControls" tp:name-for-bindings="setVolumeControls">
+	  <arg type="b" name="display" direction="in"/>
+  </method>
+
+  <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
+	  <arg type="i" name="days" direction="out"/>
+  </method>
+
+  <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
+	  <arg type="i" name="days" direction="in"/>
+  </method>
+
+  <method name="startHidden" tp:name-for-bindings="startHidden">
+  </method>
+
+  <method name="isStartHidden" tp:name-for-bindings="isStartHidden">
+	  <arg type="i" name="state" direction="out"/>
+  </method>
+
+  <method name="popupMode" tp:name-for-bindings="popupMode">
+	  <arg type="i" name="state" direction="out"/>
+  </method>
+
+  <method name="switchPopupMode" tp:name-for-bindings="switchPopupMode">
+  </method>
+
+  <method name="getWindowWidth" tp:name-for-bindings="getWindowWidth">
+	  <arg type="i" name="width" direction="out"/>
+  </method>
+
+  <method name="getWindowHeight" tp:name-for-bindings="getWindowHeight">
+	  <arg type="i" name="height" direction="out"/>
+  </method>
+
+  <method name="setWindowWidth" tp:name-for-bindings="setWindowWidth">
+	  <arg type="i" name="width" direction="in"/>
+  </method>
+
+  <method name="setWindowHeight" tp:name-for-bindings="setWindowHeight">
+	  <arg type="i" name="height" direction="in"/>
+  </method>
+
+  <method name="getWindowPositionX" tp:name-for-bindings="getWindowPositionX">
+	  <arg type="i" name="posX" direction="out"/>
+  </method>
+
+  <method name="setWindowPositionX" tp:name-for-bindings="setWindowPositionX">
+	  <arg type="i" name="posX" direction="in"/>
+  </method>
+
+  <method name="getWindowPositionY" tp:name-for-bindings="getWindowPositionY">
+	  <arg type="i" name="posY" direction="out"/>
+  </method>
+
+  <method name="setWindowPositionY" tp:name-for-bindings="setWindowPositionY">
+	  <arg type="i" name="posY" direction="in"/>
+  </method>
+
+  <method name="enableStatusIcon" tp:name-for-bindings="enableStatusIcon">
+	  <arg type="s" name="value" direction="in"/>
+  </method>
+
+  <method name="isStatusIconEnabled" tp:name-for-bindings="isStatusIconEnabled">
+	  <arg type="s" name="value" direction="out"/>
+  </method>
+
+
+  <!-- Addressbook configuration -->
+  <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+	  <arg type="a{si}" name="settings" direction="out"/>
+  </method>
+
+  <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
+	  <arg type="a{si}" name="settings" direction="in"/>
+  </method>
+
+  <!-- Addressbook list -->
+  <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="settings" direction="out"/>
+  </method>
+
+  <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+	  <arg type="as" name="settings" direction="in"/>
+  </method>
+
+  <!-- Hook configuration -->
+  <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+	  <arg type="a{ss}" name="settings" direction="out"/>
+  </method>
+
+  <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+	  <arg type="a{ss}" name="settings" direction="in"/>
+  </method>
+
+  <method name="getHistory" tp:name-for-bindings="getHistory">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+	  <arg type="a{ss}" name="entries" direction="out"/>
+  </method>
+
+  <method name="setHistory" tp:name-for-bindings="setHistory">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+	  <arg type="a{ss}" name="entries" direction="in"/>
+  </method>
+
+  <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
+  </signal>  
+
+  <signal name="errorAlert" tp:name-for-bindings="errorAlert">
+	  <arg type="i" name="code"/>
+  </signal> 
+
+  <!-- TLS Methods -->
+  <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
+	  <arg type="a{ss}" name="details" direction="out"/>
+  </method>
+
+  <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
+	  <arg type="s" name="accountID" direction="in"/>
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+	  <arg type="a{ss}" name="details" direction="out"/>
+  </method>
+
+  <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+	  <arg type="s" name="accountID" direction="in"/>
+	  <arg type="a{ss}" name="details" direction="in"/>
+  </method>
+
+  <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
+	  <arg type="s" name="interface" direction="in"/>
+	  <arg type="s" name="address" direction="out"/>
+  </method>
+
+  <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
+	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+	  <arg type="as" name="list" direction="out"/>
+  </method>
+
+  <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
+	  <arg type="a{si}" name="shortcutsMap" direction="out"/>
+  </method>
+
+  <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
+	  <arg type="a{si}" name="shortcutsMap" direction="in"/>
+  </method>
   </interface>
 </node>
diff --git a/sflphone-common/src/dbus/instance-introspec.xml b/sflphone-common/src/dbus/instance-introspec.xml
index 90a60d632d..6d8879e622 100644
--- a/sflphone-common/src/dbus/instance-introspec.xml
+++ b/sflphone-common/src/dbus/instance-introspec.xml
@@ -1,18 +1,46 @@
 <?xml version="1.0" ?>
-<node name="/org/sflphone/SFLphone">
-  <interface name="org.sflphone.SFLphone.Instance">
-  
-    <method name="Register">
-      <arg type="i" name="pid" direction="in"/>
-      <arg type="s" name="name" direction="in"/>
-    </method>
-    
-    <method name="Unregister">
-      <arg type="i" name="pid" direction="in"/>
-    </method>
-    
-    <method name="getRegistrationCount">
-      <arg type="i" name="count" direction="out"/>
-    </method>
-  </interface>
+<node name="/instance-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+	<interface name="org.sflphone.SFLphone.Instance">
+		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+		<p>Instances Manager to handle multiple client connections to the core.</p>
+		</tp:docstring>
+		<method name="Register" tp:name-for-bindings="Register">
+			<tp:docstring>
+				Register a new client to the core. Increments the registration count.
+			</tp:docstring>
+			<arg type="i" name="pid" direction="in">
+				<tp:docstring>
+					The pid of the client process
+				</tp:docstring>
+			</arg>
+			<arg type="s" name="name" direction="in">
+				<tp:docstring>
+					The name of the client
+				</tp:docstring>
+			</arg>
+		</method>
+		<method name="Unregister" tp:name-for-bindings="Unregister">
+			<tp:docstring>
+				Unregister a connected client from the core. Decrements the registration count. If no more clients are connected, ie the registration count equals 0, the core properly quits.
+			</tp:docstring>
+			<arg type="i" name="pid" direction="in">
+				<tp:docstring>
+					The pid of the client process
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getRegistrationCount" tp:name-for-bindings="getRegistrationCount">
+			<tp:docstring>
+				Get the number of connected clients.
+			</tp:docstring>
+		      <arg type="i" name="count" direction="out">
+				<tp:docstring>
+					The number of client currently connected to the core
+				</tp:docstring>
+				</arg>
+		</method>
+
+
+    </interface>
 </node>
-- 
GitLab


From 11110dfdfc0871db36d2a32d488d056fd46b3453 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Mar 2010 12:02:16 -0400
Subject: [PATCH 145/160] [#2926] Code cleanup

---
 sflphone-common/src/sip/sipvoiplink.cpp | 260 +++++++++++-------------
 1 file changed, 124 insertions(+), 136 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index d379217c05..7fb53330bf 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -204,6 +204,8 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
 
 void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer);
 
+void on_create_offer(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer);
+
 /*
  * Registration callback
  */
@@ -1606,32 +1608,31 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 
         // AccountID accountId = Manager::instance().getAccountFromCall (id);
         SIPAccount * account = NULL;
-	account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+        account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
 
         if (account == NULL) {
-
-	    _debug ("UserAgent: Account %s is null. Returning", IP2IP_PROFILE);
-            return !PJ_SUCCESS;
+        	_debug ("UserAgent: Account %s is null. Returning", IP2IP_PROFILE);
+        	return !PJ_SUCCESS;
         }
 
-	// Set the local address
-	localAddress = getInterfaceAddrFromName(account->getLocalInterface ());
+        // Set the local address
+        localAddress = getInterfaceAddrFromName(account->getLocalInterface ());
         // Set SDP parameters - Set to local
-	addrSdp = localAddress;
+        addrSdp = localAddress;
 
-        _debug ("UserAgent: Local Address for IP to IP call: %s", localAddress.c_str());
+        _debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str());
 
-	// If local address bound to ANY, reslove it using PJSIP
+        // If local address bound to ANY, reslove it using PJSIP
         if (localAddress == "0.0.0.0") {
             loadSIPLocalIP (&localAddress);
         }
 
-	// Local address to appear in SDP
-	if (addrSdp == "0.0.0.0") {
-	    addrSdp = localAddress;
-	}
+        // Local address to appear in SDP
+        if (addrSdp == "0.0.0.0") {
+        	addrSdp = localAddress;
+        }
 
-	// Set local address for RTP media
+        // Set local address for RTP media
         setCallAudioLocal (call, localAddress);
 
         std::string toUri = account->getToUri (to);
@@ -1644,138 +1645,129 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         call->getLocalSDP()->create_initial_offer (account->getActiveCodecs ());
 
 
-	// Audio Rtp Session must be initialized before creating initial offer in SDP session
-	// since SDES require crypto attribute.
-	try {
-	    call->getAudioRtp()->initAudioRtpConfig (call);
-            call->getAudioRtp()->initAudioRtpSession (call);
+        // Audio Rtp Session must be initialized before creating initial offer in SDP session
+        // since SDES require crypto attribute.
+        try {
+        	call->getAudioRtp()->initAudioRtpConfig (call);
+        	call->getAudioRtp()->initAudioRtpSession (call);
         } catch (...) {
-            _debug ("UserAgent: Unable to create RTP Session in SIPVoIPLink::new_ip_to_ip_call (%s:%d)", __FILE__, __LINE__);
+        	_debug ("UserAgent: Unable to create RTP Session in new IP2IP call (%s:%d)", __FILE__, __LINE__);
         }
 
         // Building the local SDP offer
         call->getLocalSDP()->set_ip_address (addrSdp);
         call->getLocalSDP()->create_initial_offer(account->getActiveCodecs ());
 
-	// Init TLS transport if enabled
-	if(account->isTlsEnabled()) {
+        // Init TLS transport if enabled
+        if(account->isTlsEnabled()) {
 
-	    _debug("UserAgent: TLS enabled for IP to IP calls");
-	    int at = toUri.find("@");
-	    int trns = toUri.find(";transport");
-	    std::string remoteAddr = toUri.substr(at+1, trns-at-1);
+        	_debug("UserAgent: TLS enabled for IP to IP calls");
+        	int at = toUri.find("@");
+        	int trns = toUri.find(";transport");
+        	std::string remoteAddr = toUri.substr(at+1, trns-at-1);
 
-	    if(toUri.find("sips:") != 1) {
-	        _debug("UserAgent: Error \"sips\" scheme required TLS call");
-	        return false;
-	    }
-
-	    if(createTlsTransport(account->getAccountID(), remoteAddr) != PJ_SUCCESS)
-		return false;
+        	if(toUri.find("sips:") != 1) {
+        		_debug("UserAgent: Error \"sips\" scheme required TLS call");
+        		return false;
+        	}
 
-	}
+        	if(createTlsTransport(account->getAccountID(), remoteAddr) != PJ_SUCCESS)
+        		return false;
+        }
 
         // If no transport already set, use the default one created at pjsip initialization
         if (account->getAccountTransport() == NULL) {
-            _debug ("No transport for this account, using the default one");
-            account->setAccountTransport (_localUDPTransport);
+        	_debug ("UserAgent: No transport for this account, using the default one");
+        	account->setAccountTransport (_localUDPTransport);
         }
 
-        _debug ("UserAgent: IptoIP local port %i", account->getLocalPort());
+        _debug ("UserAgent: new IP2IP local port %i", account->getLocalPort());
 
-        _debug ("IptoIP local address in sdp %s", localAddress.c_str());
+        _debug ("UserAgent: new IP2IP local address in sdp %s", localAddress.c_str());
 
         // Create URI
-        std::string fromUri;
-
-        std::string contactUri;
-
-        fromUri = account->getFromUri();
+        std::string fromUri = account->getFromUri();
 
         std::string address = findLocalAddressFromUri (toUri, account->getAccountTransport());
 
         int port = findLocalPortFromUri (toUri, account->getAccountTransport());
 
         std::stringstream ss;
-        std::string portStr;
-        ss << port;
-        ss >> portStr;
-
-        contactUri = account->getContactHeader (address, portStr);
+		std::string portStr;
+		ss << port;
+		ss >> portStr;
 
-        _debug ("new_ip_to_ip_call: fromUri: %s toUri: %s contactUri: %s",
-                fromUri.c_str(),
-                toUri.c_str(),
-                contactUri.c_str());
+		std::string contactUri = account->getContactHeader (address, portStr);
 
-        pj_str_t pjFrom;
+		_debug ("UserAgent:  FROM uri: %s TO uri: %s CONTACT uri: %s",
+				fromUri.c_str(), toUri.c_str(), contactUri.c_str());
 
-        pj_cstr (&pjFrom, fromUri.c_str());
+		pj_str_t pjFrom;
+		pj_cstr (&pjFrom, fromUri.c_str());
 
-        pj_str_t pjTo;
+		pj_str_t pjTo;
+		pj_cstr (&pjTo, toUri.c_str());
 
-        pj_cstr (&pjTo, toUri.c_str());
+		pj_str_t pjContact;
 
-        pj_str_t pjContact;
+		pj_cstr (&pjContact, contactUri.c_str());
 
-        pj_cstr (&pjContact, contactUri.c_str());
+		// Create the dialog (UAC)
+		// (Parameters are "strduped" inside this function)
+		status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog);
 
-        // Create the dialog (UAC)
-        // (Parameters are "strduped" inside this function)
-        status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog);
+		PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
 
-        PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
+		// Create the invite session for this call
+		status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv);
 
-        // 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);
 
-        PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
+		// Set the appropriate transport
+		pjsip_tpselector *tp;
 
-        // Set the appropriate transport
-        pjsip_tpselector *tp;
+		init_transport_selector (account->getAccountTransport(), &tp);
 
-        init_transport_selector (account->getAccountTransport(), &tp);
-
-	if(!account->getAccountTransport()) {
-	    _debug("Error transport is NULL in ip to ip call");
-	}
+		if(!account->getAccountTransport()) {
+			_error("UserAgent: Error: Transport is NULL in ip to ip call");
+		}
 
-	// set_transport methods increment transport's ref_count
-        status = pjsip_dlg_set_transport (dialog, tp);
+		// set_transport methods increment transport's ref_count
+		status = pjsip_dlg_set_transport (dialog, tp);
 
-	// decrement transport's ref count
-	// pjsip_transport_dec_ref(account->getAccountTransport());
+		// decrement transport's ref count
+		// pjsip_transport_dec_ref(account->getAccountTransport());
 
-        if (status != PJ_SUCCESS) {
-            _debug ("Failed to set the transport for an IP call");
-            return status;
-        }
+		if (status != PJ_SUCCESS) {
+			_error ("UserAgent: Error: Failed to set the transport for an IP2IP call");
+			return status;
+		}
 
-        // Associate current call in the invite session
-        inv->mod_data[getModId() ] = call;
+		// Associate current call in the invite session
+		inv->mod_data[getModId() ] = call;
 
-        status = pjsip_inv_invite (inv, &tdata);
+		status = pjsip_inv_invite (inv, &tdata);
 
-        PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
+		PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
 
-        // Associate current invite session in the call
-        call->setInvSession (inv);
+		// Associate current invite session in the call
+		call->setInvSession (inv);
 
-        status = pjsip_inv_send_msg (inv, tdata);
+		status = pjsip_inv_send_msg (inv, tdata);
 
-        if (status != PJ_SUCCESS) {
-            delete call;
-            call = 0;
-            return false;
-        }
+		if (status != PJ_SUCCESS) {
+			delete call;
+			call = 0;
+			return false;
+		}
 
-        call->setConnectionState (Call::Progressing);
+		call->setConnectionState (Call::Progressing);
 
-        call->setState (Call::Active);
-        addCall (call);
+		call->setState (Call::Active);
+		addCall (call);
 
-        return true;
-    } else
+		return true;
+	} else
         return false;
 }
 
@@ -1979,14 +1971,11 @@ bool SIPVoIPLink::pjsip_init()
     pj_bzero (&inv_cb, sizeof (inv_cb));
 
     inv_cb.on_state_changed = &call_on_state_changed;
-
     inv_cb.on_new_session = &call_on_forked;
-
     inv_cb.on_media_update = &call_on_media_update;
-
     inv_cb.on_tsx_state_changed = &call_on_tsx_changed;
-
     inv_cb.on_rx_offer = &on_rx_offer;
+    inv_cb.on_create_offer = &on_create_offer;
 
     // Initialize session invite module
     status = pjsip_inv_usage_init (_endpt, &inv_cb);
@@ -2716,7 +2705,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id));
 
     if (account == NULL) {
-        _debug ("Account is null. Returning");
+        _error ("UserAgent: Error: Account is null. Returning");
         return !PJ_SUCCESS;
     }
 
@@ -2727,19 +2716,19 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     status = stunServerResolve (id);
 
     if (status != PJ_SUCCESS) {
-        _debug ("Error resolving STUN server: %i", status);
+        _error ("UserAgent: Error: Resolving STUN server: %i", status);
         return status;
     }
 
     // Init socket
     sock = PJ_INVALID_SOCKET;
 
-    _debug ("Initializing IPv4 socket on %s:%i", stunServer.ptr, stunPort);
+    _debug ("UserAgent: Initializing IPv4 socket on %s:%i", stunServer.ptr, stunPort);
 
     status = pj_sockaddr_in_init (&boundAddr, &stunServer, 0);
 
     if (status != PJ_SUCCESS) {
-        _debug ("Error when initializing IPv4 socket on %s:%i", stunServer.ptr, stunPort);
+        _debug ("UserAgent: Error: Initializing IPv4 socket on %s:%i", stunServer.ptr, stunPort);
         return status;
     }
 
@@ -2747,7 +2736,7 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     status = pj_sock_socket (pj_AF_INET(), pj_SOCK_DGRAM(), 0, &sock);
 
     if (status != PJ_SUCCESS) {
-        _debug ("Socket() error (%d)", status);
+        _debug ("UserAgent: Error: Unable to create or bind socket (%d)", status);
         return status;
     }
 
@@ -2755,14 +2744,12 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     status = pjstun_get_mapped_addr (&_cp.factory, 1, &sock, &stunServer, stunPort, &stunServer, stunPort, &pub_addr);
 
     if (status != PJ_SUCCESS) {
-        _debug ("Error contacting STUN server (%d)", status);
+        _debug ("UserAgwent: Error: Contacting STUN server (%d)", status);
         pj_sock_close (sock);
         return status;
     }
 
-    _debug ("Firewall address : %s:%d",
-            pj_inet_ntoa (pub_addr.sin_addr),
-            pj_ntohs (pub_addr.sin_port));
+    _debug ("UserAgent: Firewall address : %s:%d", pj_inet_ntoa (pub_addr.sin_addr), pj_ntohs (pub_addr.sin_port));
 
     a_name.host = pj_str (pj_inet_ntoa (pub_addr.sin_addr));
     a_name.port = pj_ntohs (pub_addr.sin_port);
@@ -2779,36 +2766,29 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
     status = pjsip_udp_transport_attach2 (_endpt, PJSIP_TRANSPORT_UDP, sock, &a_name, 1, &transport);
 
     if (status != PJ_SUCCESS) {
-        _debug ("Error creating alternate SIP UDP listener (%d)", status);
+        _debug ("UserAgent: Error: Creating alternate SIP UDP listener (%d)", status);
         return status;
     }
 
-    _debug ("UDP Transport successfully created on %s:%i", listeningAddress.c_str (), listeningPort);
+    _debug ("UserAgent: UDP Transport successfully created on %s:%i", listeningAddress.c_str (), listeningPort);
 
     account->setAccountTransport (transport);
 
     if(transport) {
 
-    _debug("INITIAL REF COUNT: %s %s (refcnt=%i)",
-	   transport->obj_name,
-	   transport->info,
-	   (int)pj_atomic_get(transport->ref_cnt));
-
+    	_debug("UserAgent: Initial ref count: %s %s (refcnt=%i)", transport->obj_name, transport->info,
+    			                (int)pj_atomic_get(transport->ref_cnt));
 
-    pj_sockaddr *addr = (pj_sockaddr*)&(transport->key.rem_addr);
+    	pj_sockaddr *addr = (pj_sockaddr*)&(transport->key.rem_addr);
 
-    static char str[PJ_INET6_ADDRSTRLEN];
-    pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, 
-		 pj_sockaddr_get_addr(addr),
-		 str, sizeof(str));
+    	static char str[PJ_INET6_ADDRSTRLEN];
+    	pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, pj_sockaddr_get_addr(addr), str, sizeof(str));
     
     
-    _debug("KEY: %s:%d",
-	   // addr_string(account->getAccountTransport()->key.rem_addr),
-	   str,
-	   pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr)));
+    	_debug("UserAgent: KEY: %s:%d",str, pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr)));
 
     }
+
     pjsip_tpmgr * tpmgr = pjsip_endpt_get_tpmgr (_endpt);
 
     pjsip_tpmgr_dump_transports (tpmgr);
@@ -3012,14 +2992,14 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
     _debug ("UserAgent: Call state changed to %s", invitationStateMap[inv->state]);
 
     pjsip_rx_data *rdata;
-    pj_status_t status;
+    pj_status_t status = PJ_SUCCESS;
 
     /* Retrieve the call information */
     SIPCall * call = NULL;
     call = reinterpret_cast<SIPCall*> (inv->mod_data[_mod_ua.id]);
 
     if (call == NULL) {
-        _debug ("Call is NULL in call_on_state_changed");
+        _error ("UserAgent: Error: Call is NULL in call state changed callback");
         return;
     } else {
         // _debug("    call_on_state_changed: call id %s", call->getCallId().c_str());
@@ -3042,7 +3022,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
     }
 
     if (link == NULL) {
-        _debug ("Link is NULL in call_on_state_changed");
+        _error ("UserAgent: Error: Link is NULL in call state changed callback");
         return;
     }
 
@@ -3132,16 +3112,18 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         Manager::instance().peerRingingCall (call->getCallId());
     }
 
+
     // After 2xx is sent/received.
     else if (inv->state == PJSIP_INV_STATE_CONNECTING) {
         status = call->getLocalSDP()->check_sdp_answer (inv, rdata);
 
         if (status != PJ_SUCCESS) {
-            _warn ("UserAgent: Failed to check_incoming_sdp in call_on_state_changed");
+            _warn ("UserAgent: Failed to check incoming SDP in call_on_state_changed");
             return;
         }
     }
 
+
     // After we sent or received a ACK - The connection is established
     else if (inv->state == PJSIP_INV_STATE_CONFIRMED) {
 
@@ -3503,7 +3485,6 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     // No need to go any further on incoming ACK
     if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD && pjsip_rdata_get_dlg(rdata) != NULL) {
-    	pjsip_dialog *dlg = pjsip_rdata_get_dlg(rdata);
         _info("UserAgent: received an ACK");
         return true;
     }
@@ -3786,7 +3767,7 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
 pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata)
 {
-    _info ("SIP: Transaction response using transport: %s %s (refcnt=%d)",
+    _info ("UserAgent: Transaction response using transport: %s %s (refcnt=%d)",
     	   rdata->tp_info.transport->obj_name,
     	   rdata->tp_info.transport->info,
     	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
@@ -3798,15 +3779,15 @@ pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata)
 		pjsip_transaction *tsx = pjsip_rdata_get_tsx( rdata );
 		if ( tsx != NULL && tsx->method.id == PJSIP_INVITE_METHOD) {
 			if (tsx->status_code < 200) {
-				_info("SIP: Received provisional response");
+				_info("UserAgent: Received provisional response");
 			}
 			else if (tsx->status_code >= 300) {
-			    _warn("SIP: Dialog failed");
+			    _warn("UserAgent: Dialog failed");
 				// pjsip_dlg_dec_session(dlg);
 				// ACK for non-2xx final response is sent by transaction.
 			}
 			else {
-				_info("SIP: Received 200 OK response");
+				_info("UserAgent: Received 200 OK response");
 				sendAck(dlg, rdata);
 			}
 		}
@@ -4212,10 +4193,11 @@ void xfer_svr_cb (pjsip_evsub *sub, pjsip_event *event)
 
 void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
 {
+	_info("UserAgent: Received SDP offer");
 
 
 #ifdef CAN_REINVITE
-    _debug ("%s (%d): on_rx_offer REINVITE", __FILE__, __LINE__);
+    _debug ("UserAgent: %s (%d): on_rx_offer REINVITE", __FILE__, __LINE__);
 
     SIPCall *call;
     pj_status_t status;
@@ -4242,6 +4224,12 @@ void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
 
 }
 
+void on_create_offer(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer)
+{
+	_info("UserAgent: Create new SDP offer ");
+}
+
+
 void handle_incoming_options (pjsip_rx_data *rdata)
 {
 
-- 
GitLab


From 5dd9025e0201743f351192e1ce3084f20eb460ed Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Mar 2010 12:07:59 -0400
Subject: [PATCH 146/160] [#2926] Code cleanup

---
 sflphone-common/src/sip/sipvoiplink.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 7fb53330bf..7d7c945de6 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3113,6 +3113,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
     }
 
 
+
     // After 2xx is sent/received.
     else if (inv->state == PJSIP_INV_STATE_CONNECTING) {
         status = call->getLocalSDP()->check_sdp_answer (inv, rdata);
@@ -3124,6 +3125,7 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
     }
 
 
+
     // After we sent or received a ACK - The connection is established
     else if (inv->state == PJSIP_INV_STATE_CONFIRMED) {
 
@@ -3239,7 +3241,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
     bool nego_success = false;
     if(!crypto_offer.empty()) {
 
-    	_debug("Crypto attribute in SDP: init Srtp session");
+    	_debug("UserAgent: Crypto attribute in SDP, init SRTP session");
 
     	// init local cryptografic capabilities for negotiation
     	std::vector<sfl::CryptoSuiteDefinition>localCapabilities;
@@ -3250,10 +3252,10 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 		sfl::SdesNegotiator sdesnego(localCapabilities, crypto_offer);
 	
 		if(sdesnego.negotiate()) {
-			_debug("SDES negociation successfull \n");
+			_debug("UserAgent: SDES negociation successfull \n");
 			nego_success = true;
 
-            _debug("Set remote cryptographic context\n");
+            _debug("UserAgent: Set remote cryptographic context\n");
             try {
             	  call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
             }
@@ -3272,7 +3274,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
         // We did not found any crypto context for this media
         // @TODO if SRTPONLY, CallFail
 
-        _debug("Did not found any crypto or negociation failed but Sdes enabled");
+        _debug("UserAgent: Did not found any crypto or negociation failed but Sdes enabled");
         call->getAudioRtp()->stop();
 	call->getAudioRtp()->setSrtpEnabled(false);
 
@@ -3286,7 +3288,7 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
        
         // We found a crypto context for this media but Sdes is not 
         // enabled for this call, make a try using RTP only...
-        _debug("Sdes not initialized for this call\n");
+        _debug("UserAgent: SDES not initialized for this call\n");
     }
 
 
@@ -3346,8 +3348,6 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
             }
         }
     }
-
-    _debug("OK: ransaction changed to state");
 }
 
 void regc_cb (struct pjsip_regc_cbparam *param)
-- 
GitLab


From 845cf3adbfeaa8655aa202af1ccc5e77ffe9a161 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Mar 2010 12:12:42 -0400
Subject: [PATCH 147/160] [#3071] Remove SDP negotiation in call state changed

It makes SDP answer to be sent in ACK even if offer have been already
sent with INVITE request
---
 sflphone-common/src/sip/sipvoiplink.cpp | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 7d7c945de6..29c3dbc013 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3113,19 +3113,6 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
     }
 
 
-
-    // After 2xx is sent/received.
-    else if (inv->state == PJSIP_INV_STATE_CONNECTING) {
-        status = call->getLocalSDP()->check_sdp_answer (inv, rdata);
-
-        if (status != PJ_SUCCESS) {
-            _warn ("UserAgent: Failed to check incoming SDP in call_on_state_changed");
-            return;
-        }
-    }
-
-
-
     // After we sent or received a ACK - The connection is established
     else if (inv->state == PJSIP_INV_STATE_CONFIRMED) {
 
-- 
GitLab


From 0b377a4b260246d4f61a39adf06a5051bed2743b Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Mar 2010 12:58:53 -0400
Subject: [PATCH 148/160] [#2521] Integrating dbus api documentation generation
 in the build system + Clean up doc directory

---
 sflphone-common/Makefile.am                   |    6 +
 sflphone-common/configure.ac                  |    2 +-
 sflphone-common/doc/Makefile.am               |    4 +-
 sflphone-common/doc/dbus-api/Makefile.am      |   28 +
 sflphone-common/doc/dbus-api/README           |    7 +
 .../dbus-api/doc/templates/devhelp.devhelp2   |   18 +
 .../doc/dbus-api/doc/templates/errors.html    |   60 +
 .../doc/dbus-api/doc/templates/fullindex.html |   60 +
 .../dbus-api/doc/templates/generic-types.html |   59 +
 .../doc/dbus-api/doc/templates/index.html     |   66 +
 .../doc/dbus-api/doc/templates/interface.html |  424 ++++++
 .../dbus-api/doc/templates/interfaces.html    |   50 +
 .../doc/dbus-api/doc/templates/style.css      |  237 +++
 sflphone-common/doc/dbus-api/spec/all.xml     |   55 +
 .../dbus-api/spec/callmanager-introspec.xml   |    1 +
 .../spec/configurationmanager-introspec.xml   |    1 +
 sflphone-common/doc/dbus-api/spec/errors.xml  |  417 ++++++
 .../doc/dbus-api/spec/generic-types.xml       |  168 +++
 .../doc/dbus-api/spec/instance-introspec.xml  |    1 +
 .../doc/dbus-api/tools/devhelp.xsl            |   91 ++
 .../doc/dbus-api/tools/doc-generator.py       |  104 ++
 .../doc/dbus-api/tools/doc-generator.xsl      | 1266 +++++++++++++++++
 .../doc/dbus-api/tools/specparser.py          |  866 +++++++++++
 .../doc/dbus-api/tools/specparser.pyc         |  Bin 0 -> 43880 bytes
 .../doc/dbus-api/tools/xincludator.py         |   39 +
 .../doc/dbus-api/tools/xincludator.pyc        |  Bin 0 -> 1691 bytes
 sflphone-common/doc/misc/debian-package.txt   |   33 -
 sflphone-common/doc/misc/echange.txt          |   21 -
 sflphone-common/doc/misc/libsamplerate.png    |  Bin 31107 -> 0 bytes
 .../doc/misc/matrice-comparaison.ods          |  Bin 10765 -> 0 bytes
 sflphone-common/doc/misc/outgoingcall.txt     |   15 -
 sflphone-common/doc/misc/playtone.txt         |    9 -
 .../doc/misc/sflphoneqt-startup.txt           |   61 -
 sflphone-common/doc/screenshots/accounts.png  |  Bin 22244 -> 0 bytes
 .../doc/screenshots/audio-parameters.png      |  Bin 44041 -> 0 bytes
 .../screenshots/desktop-notif-voice mail.png  |  Bin 18982 -> 0 bytes
 .../doc/screenshots/desktop-notification.png  |  Bin 25500 -> 0 bytes
 sflphone-common/doc/screenshots/gtk gui.png   |  Bin 24548 -> 0 bytes
 .../doc/screenshots/several-calls.png         |  Bin 24443 -> 0 bytes
 .../screenshots/sflphoneDialpad_gtk_0.8.png   |  Bin 33108 -> 0 bytes
 .../doc/screenshots/sflphone_gtk_0.8.png      |  Bin 25255 -> 0 bytes
 .../doc/screenshots/sflphone_metal.png        |  Bin 100896 -> 0 bytes
 .../doc/screenshots/sflphone_qt3_0.6.2.png    |  Bin 66832 -> 0 bytes
 .../doc/sflphone_video/abstract.odt           |  Bin 23859 -> 0 bytes
 .../doc/sflphone_video/ressources.odt         |  Bin 20158 -> 0 bytes
 .../src/dbus/instance-introspec.xml           |    2 +-
 46 files changed, 4028 insertions(+), 143 deletions(-)
 create mode 100644 sflphone-common/doc/dbus-api/Makefile.am
 create mode 100644 sflphone-common/doc/dbus-api/README
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/devhelp.devhelp2
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/errors.html
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/fullindex.html
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/generic-types.html
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/index.html
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/interface.html
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/interfaces.html
 create mode 100644 sflphone-common/doc/dbus-api/doc/templates/style.css
 create mode 100644 sflphone-common/doc/dbus-api/spec/all.xml
 create mode 120000 sflphone-common/doc/dbus-api/spec/callmanager-introspec.xml
 create mode 120000 sflphone-common/doc/dbus-api/spec/configurationmanager-introspec.xml
 create mode 100644 sflphone-common/doc/dbus-api/spec/errors.xml
 create mode 100644 sflphone-common/doc/dbus-api/spec/generic-types.xml
 create mode 120000 sflphone-common/doc/dbus-api/spec/instance-introspec.xml
 create mode 100644 sflphone-common/doc/dbus-api/tools/devhelp.xsl
 create mode 100755 sflphone-common/doc/dbus-api/tools/doc-generator.py
 create mode 100644 sflphone-common/doc/dbus-api/tools/doc-generator.xsl
 create mode 100644 sflphone-common/doc/dbus-api/tools/specparser.py
 create mode 100644 sflphone-common/doc/dbus-api/tools/specparser.pyc
 create mode 100644 sflphone-common/doc/dbus-api/tools/xincludator.py
 create mode 100644 sflphone-common/doc/dbus-api/tools/xincludator.pyc
 delete mode 100644 sflphone-common/doc/misc/debian-package.txt
 delete mode 100644 sflphone-common/doc/misc/echange.txt
 delete mode 100644 sflphone-common/doc/misc/libsamplerate.png
 delete mode 100644 sflphone-common/doc/misc/matrice-comparaison.ods
 delete mode 100644 sflphone-common/doc/misc/outgoingcall.txt
 delete mode 100644 sflphone-common/doc/misc/playtone.txt
 delete mode 100644 sflphone-common/doc/misc/sflphoneqt-startup.txt
 delete mode 100644 sflphone-common/doc/screenshots/accounts.png
 delete mode 100644 sflphone-common/doc/screenshots/audio-parameters.png
 delete mode 100644 sflphone-common/doc/screenshots/desktop-notif-voice mail.png
 delete mode 100644 sflphone-common/doc/screenshots/desktop-notification.png
 delete mode 100644 sflphone-common/doc/screenshots/gtk gui.png
 delete mode 100644 sflphone-common/doc/screenshots/several-calls.png
 delete mode 100644 sflphone-common/doc/screenshots/sflphoneDialpad_gtk_0.8.png
 delete mode 100644 sflphone-common/doc/screenshots/sflphone_gtk_0.8.png
 delete mode 100644 sflphone-common/doc/screenshots/sflphone_metal.png
 delete mode 100644 sflphone-common/doc/screenshots/sflphone_qt3_0.6.2.png
 delete mode 100644 sflphone-common/doc/sflphone_video/abstract.odt
 delete mode 100644 sflphone-common/doc/sflphone_video/ressources.odt

diff --git a/sflphone-common/Makefile.am b/sflphone-common/Makefile.am
index 6d464df1bf..c5de2501fb 100644
--- a/sflphone-common/Makefile.am
+++ b/sflphone-common/Makefile.am
@@ -18,6 +18,12 @@ unittest:
 	@echo " -- You need the cppunit devel package to compile the unitary tests."
 endif
 
+doc:
+	@(cd doc; make)
+	@echo ""
+	@echo "D-Bus API HTML documentation has been generated in doc/dbus-api/doc/spec"
+	@echo ""
+
 indent:
 	@echo "Indenting code:"
 	if [ -f $(ASTYLERC) ] ; then \
diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac
index 96434834b6..5a412e3c47 100644
--- a/sflphone-common/configure.ac
+++ b/sflphone-common/configure.ac
@@ -70,12 +70,12 @@ AC_CONFIG_FILES([Makefile])
 	dnl Unitary test section
 AC_CONFIG_FILES([test/Makefile])
 
-
 AC_CONFIG_FILES([ringtones/Makefile])
 
 AC_CONFIG_FILES([man/Makefile])
 
 	AC_CONFIG_FILES([doc/Makefile \
+					doc/dbus-api/Makefile \
 			doc/doxygen/Makefile])
 
 	dnl the file stamp-h.in should be there before (instead of AC_CONFIG_HEADERS(config.h))
diff --git a/sflphone-common/doc/Makefile.am b/sflphone-common/doc/Makefile.am
index bbe34b9b1a..f742c26ce5 100644
--- a/sflphone-common/doc/Makefile.am
+++ b/sflphone-common/doc/Makefile.am
@@ -1,6 +1,6 @@
  
-SUBDIRS = doxygen
+SUBDIRS = doxygen dbus-api
 
 .PHONY: doc
 doc:
-	$(MAKE) -C doxygen doc
\ No newline at end of file
+	$(MAKE) -C doxygen doc
diff --git a/sflphone-common/doc/dbus-api/Makefile.am b/sflphone-common/doc/dbus-api/Makefile.am
new file mode 100644
index 0000000000..ced9bceb9d
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/Makefile.am
@@ -0,0 +1,28 @@
+include $(top_srcdir)/globals.mak
+
+XSLTPROC=xsltproc --xinclude --nonet
+PYTHON=python
+
+XMLS=	$(wildcard $(top_srcdir)/src/dbus/spec/*.xml)
+TEMPLATES=	$(wildcard doc/templates/*)
+
+GENERATED_FILES =   \
+	doc/spec.html   \
+	doc/spec/index.html
+
+doc/spec.html: $(XMLS) tools/doc-generator.xsl
+	@install -d tmp/doc
+	$(XSLTPROC) tools/doc-generator.xsl spec/all.xml > tmp/$@
+	mv tmp/$@ $@
+
+doc/spec/index.html: $(XMLS) tools/doc-generator.py tools/specparser.py $(TEMPLATES)
+	@install -d tmp/doc
+	$(PYTHON) tools/doc-generator.py spec/all.xml doc/spec sflphone-spec org.sflphone.SFLphone
+
+all:	$(GENERATED_FILES)
+
+clean:	
+	rm -rf $(GENERATED_FILES)
+	rm -rf doc/spec
+	rm -rf tmp
+
diff --git a/sflphone-common/doc/dbus-api/README b/sflphone-common/doc/dbus-api/README
new file mode 100644
index 0000000000..3adb69af24
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/README
@@ -0,0 +1,7 @@
+SFLphone D-Bus API documentation. Generated with xsltproc.
+
+Wiki reference: https://projects.savoirfairelinux.com/wiki/sflphone/Dbus-API
+
+Run Makefile to generate the HTML API documentation, from the xml interfaces in *sflphone-common/src/dbus*.
+
+The documentation is generated in *sflphone-common/doc/dbus-api/doc/spec*
diff --git a/sflphone-common/doc/dbus-api/doc/templates/devhelp.devhelp2 b/sflphone-common/doc/dbus-api/doc/templates/devhelp.devhelp2
new file mode 100644
index 0000000000..af327fa6d9
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/devhelp.devhelp2
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<book xmlns="http://www.devhelp.net/book" title="$spec.title" name="$name" link="index.html">
+ <chapters>
+#for $interface in $spec.interfaces
+  <sub name="$interface.name" link="$interface.get_url()"/>
+#end for
+  <sub name="Generic Types" link="generic-types.html"/>
+  <sub name="Errors" link="errors.html"/>
+  <sub name="Full Index" link="fullindex.html"/>
+ </chapters>
+ <functions>
+#for $obj in $spec.everything.values() + $spec.types.values() + $spec.errors.values()
+  <keyword type="$obj.devhelp_name" name="$obj.get_title()" link="$obj.get_url()" #slurp
+#if $obj.deprecated: deprecated="true" #slurp
+/>
+#end for
+ </functions>
+</book>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/errors.html b/sflphone-common/doc/dbus-api/doc/templates/errors.html
new file mode 100644
index 0000000000..907d6601c2
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/errors.html
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" "">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+  <title>Errors</title>
+  <link rel="stylesheet" href="style.css" type="text/css"/>
+ </head>
+ <body>
+  <div class="header">
+  <h1>Errors</h1>
+   <a href="index.html">Interface Index</a>
+   (<a href="interfaces.html">Compact</a>)
+   | <a href="#summary">Summary</a>
+   | <a href="#errors">Errors</a>
+  </div>
+  <div class="main">
+   <div class="summary">
+    <a name="summary"></a>
+    <h3>Errors</h3>
+    <table class="summary">
+     #for $error in $spec.errors.values()
+      #if $error.deprecated
+       <tr class="deprecated">
+      #else
+       <tr>
+      #end if
+       <td><a href="$error.get_url()">$error.short_name</a></td>
+       <td>
+        #if $error.deprecated: (deprecated)
+       </td>
+      </tr>
+     #end for
+    </table>
+   </div>
+
+   <div class="outset errors error">
+    <a name="errors"></a>
+    <h1>Errors</h1>
+    #for $error in $spec.errors.values()
+     <div class="inset error">
+      <a name="$error.name"></a>
+      <span class="permalink">(<a href="$error.get_url()">Permalink</a>)</span>
+      <h2>
+       $error.short_name
+      </h2>
+
+      <div class="indent">
+        <code>$error.name</code>
+      </div>
+
+      $error.get_added()
+      $error.get_deprecated()
+      $error.get_docstring()
+     </div>
+    #end for
+   </div>
+   </div>
+
+ </body>
+</html>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/fullindex.html b/sflphone-common/doc/dbus-api/doc/templates/fullindex.html
new file mode 100644
index 0000000000..2c465e1dd7
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/fullindex.html
@@ -0,0 +1,60 @@
+#from itertools import groupby
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" "">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+  <title>Full Index</title>
+  <link rel="stylesheet" href="style.css" type="text/css"/>
+ </head>
+
+#set $star = []
+#for $item in $spec.everything.values() + $spec.errors.values() + $spec.generic_types
+ #echo $star.append(($item.short_name, $item))
+ #slurp
+#end for
+#echo $star.sort(key = lambda t: t[0].title())
+#slurp
+## one use iterators...
+#set $groups = [ (l, list(g)) for l, g in (groupby($star, key = lambda t: t[0][0].upper())) ]
+#set $letters = set(map(lambda t: t[0], groups))
+
+ <body>
+  <div class="header">
+   <h1>Full Index</h1>
+   <a href="index.html">Interface Index</a>
+   (<a href="interfaces.html">Compact</a>)
+   #for $a in map(chr, xrange(ord('A'), ord('Z')+1))
+    #if $a in $letters
+     | <a href="#$a">$a</a>
+    #else
+     | $a
+    #end if
+   #end for
+  </div>
+
+  <div class="main">
+   <table class="summary">
+   #for l, g in $groups
+    <tr><th colspan="3"><a name="$l"></a>$l</th></tr>
+    #for $n in $g
+     #if $n[1].deprecated
+      <tr class="deprecated">
+     #else
+      <tr>
+     #end if
+      <td>
+       <a href="$n[1].get_url()" title="$n[1].get_title()">$n[0]</a>
+       #if $n[1].deprecated: (deprecated)
+      </td>
+      <td>$n[1].get_type_name()</td>
+      <td>
+       #if $n[1].parent.__class__.__name__ == 'Interface': $n[1].parent.name
+      </td>
+     </tr>
+    #end for
+   #end for
+   <table>
+  </div>
+
+ </body>
+</html>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/generic-types.html b/sflphone-common/doc/dbus-api/doc/templates/generic-types.html
new file mode 100644
index 0000000000..0bb209e432
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/generic-types.html
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" "">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+  <title>Generic Types</title>
+  <link rel="stylesheet" href="style.css" type="text/css"/>
+ </head>
+ <body>
+  <div class="header">
+  <h1>Generic Types</h1>
+   <a href="index.html">Interface Index</a>
+   (<a href="interfaces.html">Compact</a>)
+   | <a href="#summary">Summary</a>
+   | <a href="#types">Types</a>
+  </div>
+  <div class="main">
+    <div class="summary">
+     <a name="summary"></a>
+     <h3>Generic Types</h3>
+     <table class="summary">
+      #for $type in $spec.generic_types
+       #if $type.deprecated
+        <tr class="deprecated">
+       #else
+        <tr>
+       #end if
+       <td><a href="$type.get_url()">$type.short_name</a></td>
+       <td>$type.get_type_name()</td>
+       <td>$type.dbus_type</td>
+       <td>
+        #if $type.deprecated: (deprecated)
+       </td>
+      </tr>
+      #end for
+     </table>
+    </div>
+
+   <div class="outset types type">
+    <a name="types"></a>
+    <h1>Generic Types</h1>
+    #for $type in $spec.generic_types
+     <div class="inset type">
+      <a name="$type.name"></a>
+      <span class="permalink">$type.get_type_name() (<a href="$type.get_url()">Permalink</a>)</span>
+      <h2>
+       $type.short_name &mdash; $type.dbus_type
+      </h2>
+
+      $type.get_added()
+      $type.get_deprecated()
+      $type.get_docstring()
+      $type.get_breakdown()
+     </div>
+    #end for
+   </div>
+   </div>
+
+ </body>
+</html>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/index.html b/sflphone-common/doc/dbus-api/doc/templates/index.html
new file mode 100644
index 0000000000..efc38d4e8e
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/index.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" "">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+  <title>$spec.title &mdash v$spec.version</title>
+  <link rel="stylesheet" href="style.css" type="text/css"/>
+ </head>
+ <body>
+  <div class="header">
+   <h1>$spec.title</h1>
+   <a href="#interfaces">Interfaces</a>
+   (<a href="interfaces.html">Compact</a>)
+   | <a href="generic-types.html">Generic Types</a>
+   | <a href="errors.html">Errors</a>
+   | <a href="fullindex.html">Full Index</a>
+  </div>
+
+  <div class="main">
+  <h3 class="version">Version $spec.version</h3>
+  <p class="copyrights">
+   #echo '<br/>'.join($spec.copyrights)
+  </p>
+  $spec.license
+
+  <a name="interfaces"></a>
+  <h3>Interfaces</h3>
+  <ul>
+  #def output($items)
+   #for $item in $items
+    #if $item.__class__.__name__ == 'Section'
+     <li class="chapter">$item.short_name</li>
+     $item.get_docstring()
+     <ul>
+      $output($item.items)
+     </ul>
+    #else
+     #if $item.causes_havoc
+      <li class="causes-havoc">
+     #elif $item.deprecated
+      <li class="deprecated">
+     #else
+      <li>
+     #end if
+      <a href="$item.get_url()">$item.name</a>
+      #if $item.causes_havoc
+       (unstable)
+      #elif $item.deprecated
+       (deprecated)
+      #end if
+     </li>
+    #end if
+   #end for
+  #end def
+  $output($spec.items)
+  </ul>
+
+  <a name="other"></a>
+  <h3>Other</h3>
+  <ul>
+   <li><a href="generic-types.html">Generic Types</a></li>
+   <li><a href="errors.html">Errors</a></li>
+  </ul>
+
+  </div>
+ </body>
+</html>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/interface.html b/sflphone-common/doc/dbus-api/doc/templates/interface.html
new file mode 100644
index 0000000000..79c35b201c
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/interface.html
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" "">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+  <title>$interface.name</title>
+  <link rel="stylesheet" href="style.css" type="text/css"/>
+ </head>
+ <body>
+  <div class="header">
+  <h1>Interface $interface.name</h1>
+   <a href="index.html">Interface Index</a>
+   (<a href="interfaces.html">Compact</a>)
+   | <a href="#summary">Summary</a>
+   #if $interface.docstring: | <a href="#description">Description</a>
+   #if $interface.methods: | <a href="#methods">Methods</a>
+   #if $interface.signals: | <a href="#signals">Signals</a>
+   #if $interface.properties: | <a href="#properties">Properties</a>
+   #if $interface.tpproperties: | <a href="#tpproperties">Telepathy Properties</a>
+   #if $interface.contact_attributes: | <a href="#contact-attributes">Contact Attributes</a>
+   #if $interface.handler_capability_tokens: | <a href="#handler-capability-tokens">Handler Capability Tokens</a>
+   #if $interface.types: | <a href="#types">Types</a>
+  </div>
+  <div class="main">
+
+    #if $interface.methods or $interface.signals or $interface.properties or $interface.types or $interface.tpproperties
+    <div class="summary">
+     <a name="summary"></a>
+     #if $interface.methods
+     <h3>Methods</h3>
+     <table class="summary">
+      #for $method in $interface.methods
+       #if $method.deprecated
+        <tr class="deprecated">
+       #else
+        <tr>
+       #end if
+       <td><a href="$method.get_url()">$method.short_name</a></td>
+       <td>($method.get_in_args())</td>
+       <td>&#8594;</td>
+       <td>$method.get_out_args()</td>
+       <td>
+        #if $method.deprecated: (deprecated)
+       </td>
+      </tr>
+      #end for
+     </table>
+     #end if
+    
+     #if $interface.signals
+     <h3>Signals</h3>
+     <table class="summary">
+      #for $signal in $interface.signals
+       #if $signal.deprecated
+        <tr class="deprecated">
+       #else
+        <tr>
+       #end if
+       <td><a href="$signal.get_url()">$signal.short_name</a></td>
+       <td>($signal.get_args())</td>
+       <td>
+        #if $signal.deprecated: (deprecated)
+       </td>
+      </tr>
+      #end for
+     </table>
+    #end if
+
+     #if $interface.properties
+     <h3>Properties</h3>
+     <table class="summary">
+      #for $property in $interface.properties
+       #if $property.deprecated
+        <tr class="deprecated">
+       #else
+        <tr>
+       #end if
+       <td><a href="$property.get_url()">$property.short_name</a></td>
+       <td>
+        $property.dbus_type
+        #if $property.type: (<a href="$property.get_type_url()" title="$property.get_type_title()">$property.get_type().short_name</a>)
+       </td>
+       <td>$property.get_access()</td>
+       <td>
+        #if $property.deprecated: (deprecated)
+       </td>
+      </tr>
+      #end for
+    </table>
+    #end if
+
+     #if $interface.tpproperties
+     <h3>Telepathy Properties</h3>
+     <table class="summary">
+      #for $property in $interface.tpproperties
+       <tr class="deprecated">
+       <td><a href="$property.get_url()">$property.short_name</a></td>
+       <td>
+        $property.dbus_type
+        #if $property.type: (<a href="$property.get_type_url()" title="$property.get_type_title()">$property.get_type().short_name</a>)
+       </td>
+      </tr>
+      #end for
+    </table>
+    #end if
+
+     #if $interface.contact_attributes
+     <h3>Contact Attributes</h3>
+     <table class="summary">
+      #for $token in $interface.contact_attributes
+       <tr class="contact-attribute">
+       <td><a href="$token.get_url()">$token.name</a></td>
+       <td>
+        $token.dbus_type
+        #if $token.type: (<a href="$token.get_type_url()" title="$token.get_type_title()">$token.get_type().short_name</a>)
+       </td>
+      </tr>
+      #end for
+    </table>
+    #end if
+
+     #if $interface.handler_capability_tokens
+     <h3>Handler Capability Tokens</h3>
+     <table class="summary">
+      #for $token in $interface.handler_capability_tokens
+       <tr class="handler-capability-token">
+         <td><a href="$token.get_url()">$token.name</a>
+           #if $token.is_family
+             (etc.)
+           #end if
+         </td>
+       <td>
+       </td>
+      </tr>
+      #end for
+    </table>
+    #end if
+
+     #if $interface.types
+     <h3>Types</h3>
+     <table class="summary">
+      #for $type in $interface.types
+       #if type.deprecated
+        <tr class="deprecated">
+       #else
+        <tr>
+       #end if
+       <td><a href="$type.get_url()">$type.short_name</a></td>
+       <td>$type.get_type_name()</td>
+       <td>$type.dbus_type</td>
+       <td>
+        #if $type.deprecated: (deprecated)
+       </td>
+      </tr>
+      #end for
+     </table>
+    #end if
+   </div>
+   #end if
+
+   #if $interface.causes_havoc
+   <div class="havoc"><span class="warning">WARNING:</span>
+    This interface is $interface.causes_havoc and is likely to cause havoc
+    to your API/ABI if bindings are generated. Do not include this interface
+    in libraries that care about compatibility.
+   </div>
+   #end if
+   $interface.get_added()
+   $interface.get_changed()
+   $interface.get_deprecated()
+
+   #if $interface.requires
+   <div class="requires">
+    Objects implementing this interface must also implement:
+    <ul>
+    #for $req in $interface.get_requires()
+     <li><a href="$req.get_url()" title="$req.get_title()">$req.name</a></li>
+    #end for
+    </ul>
+   </div>
+   #end if
+
+   #if $interface.docstring
+    <a name="description"></a>
+    <h3>Description</h3>
+    $interface.get_docstring()
+   #end if
+
+   #if $interface.methods
+   <div class="outset methods method">
+    <a name="methods"></a>
+    <h1>Methods</h1>
+    #for $method in $interface.methods
+    <div class="inset method">
+     <a name="$method.name"></a>
+     <span class="permalink">(<a href="$method.get_url()">Permalink</a>)</span>
+     <h2>$method.short_name ($method.get_in_args()) &#8594; $method.get_out_args()</h2>
+
+     $method.get_added()
+     $method.get_changed()
+     $method.get_deprecated()
+
+     #if $method.in_args
+     <div class="indent">
+      <h3>Parameters</h3>
+      <ul>
+      #for $arg in $method.in_args
+       <li>
+        $arg.short_name &mdash; $arg.dbus_type
+        #if $arg.get_type(): (<a href="$arg.get_type_url()" title="$arg.get_type_title()">$arg.get_type().short_name</a>)
+       </li>
+       $arg.get_added()
+       $arg.get_changed()
+       $arg.get_deprecated()
+       $arg.get_docstring()
+      #end for
+      </ul>
+     </div>
+     #end if
+     
+     #if $method.out_args
+     <div class="indent">
+      <h3>Returns</h3>
+      <ul>
+      #for $arg in $method.out_args
+       <li>
+        $arg.short_name &mdash; $arg.dbus_type
+        #if $arg.get_type(): (<a href="$arg.get_type_url()" title="$arg.get_type_title()">$arg.get_type().short_name</a>)
+       </li>
+       $arg.get_added()
+       $arg.get_changed()
+       $arg.get_deprecated()
+       $arg.get_docstring()
+      #end for
+      </ul>
+     </div>
+     #end if
+     
+     $method.get_docstring()
+     
+     #if $method.possible_errors
+     <hr/>
+     <div class="indent">
+      <h3>Possible Errors</h3>
+      <ul>
+      #for $error in $method.possible_errors
+       <li><a href="$error.get_url()" title="$error.get_title()">$error.get_error().short_name</a></li>
+       $error.get_added()
+       $error.get_changed()
+       $error.get_deprecated()
+       $error.get_docstring()
+      #end for
+      </ul>
+     </div>
+     #end if
+    </div>
+    #end for
+   </div>
+   #end if
+   
+   #if $interface.signals
+   <div class="outset signals signal">
+    <a name="signals"></a>
+    <h1>Signals</h1>
+    #for $signal in $interface.signals
+    <div class="inset signal">
+     <a name="$signal.name"></a>
+     <span class="permalink">(<a href="$signal.get_url()">Permalink</a>)</span>
+     <h2>$signal.short_name ($signal.get_args())</h2>
+
+     $signal.get_added()
+     $signal.get_changed()
+     $signal.get_deprecated()
+
+     #if $signal.args
+     <div class="indent">
+      <h3>Parameters</h3>
+      <ul>
+      #for $arg in $signal.args
+       <li>
+       $arg.short_name &mdash; $arg.dbus_type
+       #if $arg.get_type(): (<a href="$arg.get_type_url()" title="$arg.get_type_title()">$arg.get_type().short_name</a>)
+       </li>
+       $arg.get_added()
+       $arg.get_changed()
+       $arg.get_deprecated()
+       $arg.get_docstring()
+      #end for
+      </ul>
+     </div>
+     #end if
+
+     $signal.get_docstring()
+    </div>
+    #end for
+   </div>
+   #end if
+
+   #if $interface.properties
+   <div class="outset properties property">
+    <a name="properties"></a>
+    <h1>Properties</h1>
+    <div>
+     Accessed using the org.freedesktop.DBus.Properties interface.
+    </div>
+    #for $property in $interface.properties
+    <div class="inset property">
+     <a name="$property.name"></a>
+     <span class="permalink">(<a href="$property.get_url()">Permalink</a>)</span>
+     <h2>
+      $property.short_name &mdash; $property.dbus_type
+      #if $property.type: (<a href="$property.get_type_url()" title="$property.get_type_title()">$property.get_type().short_name</a>)
+     </h2>
+      <div class="access">$property.get_access()</div>
+
+     $property.get_added()
+     $property.get_changed()
+     $property.get_deprecated()
+     $property.get_docstring()
+    </div>
+    #end for
+   </div>
+   #end if
+
+   #if $interface.tpproperties
+   <div class="outset tpproperties tpproperty">
+    <a name="tpproperties"></a>
+    <h1>Telepathy Properties</h1>
+    <div>
+     Accessed using the org.freedesktop.Telepathy.Properties interface.
+    </div>
+    #for $property in $interface.tpproperties
+    <div class="inset tpproperty">
+     <a name="$property.name"></a>
+     <span class="permalink">(<a href="$property.get_url()">Permalink</a>)</span>
+     <h2>
+      $property.short_name &mdash; $property.dbus_type
+      #if $property.type: (<a href="$property.get_type_url()" title="$property.get_type_title()">$property.get_type().short_name</a>)
+     </h2>
+     $property.get_added()
+     $property.get_changed()
+     $property.get_deprecated()
+     $property.get_docstring()
+    </div>
+    #end for
+   </div>
+   #end if
+
+   #if $interface.contact_attributes
+   <div class="outset contact-attributes">
+    <a name="contact-attributes"></a>
+    <h1>Contact Attributes</h1>
+    <div>
+      Attributes that a contact can have, accessed with the
+      org.freedesktop.Telepathy.Connection.Interface.Contacts interface.
+    </div>
+    #for $token in $interface.contact_attributes
+    <div class="inset contact-attribute">
+     <a name="$token.name"></a>
+     <span class="permalink">(<a href="$token.get_url()">Permalink</a>)</span>
+     <h2>
+      $token.name &mdash; $token.dbus_type
+      #if $token.type: (<a href="$token.get_type_url()" title="$token.get_type_title()">$token.get_type().short_name</a>)
+     </h2>
+     $token.get_added()
+     $token.get_changed()
+     $token.get_deprecated()
+     $token.get_docstring()
+    </div>
+    #end for
+   </div>
+   #end if
+
+   #if $interface.handler_capability_tokens
+   <div class="outset handler-capability-tokens">
+    <a name="handler-capability-tokens"></a>
+    <h1>Handler Capability Tokens</h1>
+    <div>
+      Tokens representing capabilities that a Client.Handler can have.
+    </div>
+    #for $token in $interface.handler_capability_tokens
+    <div class="inset handler-capability-token">
+     <a name="$token.name"></a>
+     <span class="permalink">(<a href="$token.get_url()">Permalink</a>)</span>
+     <h2>
+      $token.name
+      #if $token.is_family
+      (etc.)
+      #end if
+     </h2>
+     $token.get_added()
+     $token.get_changed()
+     $token.get_deprecated()
+     $token.get_docstring()
+    </div>
+    #end for
+   </div>
+   #end if
+
+   #if $interface.types
+   <div class="outset types type">
+    <a name="types"></a>
+    <h1>Types</h1>
+    #for $type in $interface.types
+     <div class="inset type">
+      <a name="$type.name"></a>
+      <span class="permalink">$type.get_type_name() (<a href="$type.get_url()">Permalink</a>)</span>
+      <h2>
+       $type.short_name &mdash; $type.dbus_type
+      </h2>
+
+      $type.get_added()
+      $type.get_changed()
+      $type.get_deprecated()
+      $type.get_docstring()
+      $type.get_breakdown()
+     </div>
+    #end for
+   </div>
+   #end if
+   
+   </div>
+
+ </body>
+</html>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/interfaces.html b/sflphone-common/doc/dbus-api/doc/templates/interfaces.html
new file mode 100644
index 0000000000..a93334c65d
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/interfaces.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" "">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+  <title>$spec.title &mdash v$spec.version</title>
+  <link rel="stylesheet" href="style.css" type="text/css"/>
+ </head>
+ <body>
+  <div class="header">
+   <h1>$spec.title</h1>
+   <a href="index.html">Full</a>
+   | <a href="generic-types.html">Generic Types</a>
+   | <a href="errors.html">Errors</a>
+   | <a href="fullindex.html">Full Index</a>
+  </div>
+
+  <div class="main">
+  <b>Version $spec.version</b>
+
+  <a name="interfaces"></a>
+  <h3>Interfaces</h3>
+  <ul>
+  #for $interface in $spec.interfaces
+   #if $interface.causes_havoc
+    <li class="causes-havoc">
+   #elif $interface.deprecated
+    <li class="deprecated">
+   #else
+    <li>
+   #end if
+    <a href="$interface.get_url()">$interface.name</a>
+    #if $interface.causes_havoc
+     (unstable)
+    #elif $interface.deprecated
+     (deprecated)
+    #end if
+   </li>
+  #end for
+  </ul>
+
+  <a name="other"></a>
+  <h3>Other</h3>
+  <ul>
+   <li><a href="generic-types.html">Generic Types</a></li>
+   <li><a href="errors.html">Errors</a></li>
+  </ul>
+
+  </div>
+ </body>
+</html>
diff --git a/sflphone-common/doc/dbus-api/doc/templates/style.css b/sflphone-common/doc/dbus-api/doc/templates/style.css
new file mode 100644
index 0000000000..979ced8cae
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/doc/templates/style.css
@@ -0,0 +1,237 @@
+html, body,
+h1, h2 {
+	font-family: "Georgia";
+	margin: 0;
+	padding: 0;
+}
+
+h3 {
+	margin-top: 2pt;
+	margin-bottom: 2pt;
+}
+
+ul {
+	margin: 1ex;
+	margin-left: 1.5em;
+	padding: 0;
+}
+
+hr {
+	border-style: none;
+	color: #cccccc;
+	background-color: #cccccc;
+	height: 1px;
+}
+
+div.header {
+	position: fixed;
+	height: 4em;
+	background-color: AliceBlue;
+	width: 100%;
+	margin: 0;
+	padding: 0.5ex;
+	border-bottom: 1px solid black;
+	top: 0;
+	left: 0;
+	z-index: 1;
+}
+
+div.header h1 {
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+div.main {
+	margin-top: 5em;
+	margin-left: 1ex;
+	margin-right: 1ex;
+	margin-bottom: 1ex;
+}
+
+div.main a[name] {
+	position: relative;
+	top: -4.5em;
+}
+
+div.outset {
+	padding: 1ex;
+	margin-top: 1ex;
+	margin-bottom: 1ex;
+}
+
+div.inset {
+	background-color: white;
+	margin-top: 1ex;
+	margin-bottom: 1ex;
+	padding: 0.5ex;
+}
+
+div.indent {
+	margin-left: 1em;
+}
+
+div.methods {
+	background-color: #fcaf3e;
+}
+
+div.method {
+	border: 1px solid #f57900;
+}
+
+div.signals {
+	background-color: #729fcf;
+}
+
+div.signal {
+	border: 1px solid #3465a4;
+}
+
+div.properties {
+	background-color: #ad7fa8;
+}
+
+div.property {
+	border: 1px solid #75507b;
+}
+
+div.tpproperties {
+	background-color: #999999;
+}
+
+div.tpproperty {
+	border: 1px solid #333333;
+}
+
+div.contact-attributes {
+	background-color: #ccccff;
+	border: 1px solid #9999cc;
+}
+
+div.contact-attribute {
+	border: 1px solid #9999cc;
+}
+
+div.handler-capability-tokens {
+	background-color: #339933;
+	border: 1px solid #228822;
+}
+
+div.handler-capability-token {
+	border: 1px solid #228822;
+}
+
+div.types {
+	background-color: #e9b96e;
+}
+
+div.type {
+	border: 1px solid #c17d11;
+}
+
+div.errors {
+	background-color: #ef2929;
+}
+
+div.error {
+	border: 1px solid #cc0000;
+}
+
+div.access {
+	font-weight: bold;
+	margin-left: 1ex;
+}
+
+div.summary {
+	padding: 0.5ex;
+	background-color: #eeeeec;
+	border: 1px solid #d3d7cf;
+}
+
+table.summary {
+	margin: 1ex;
+	font-size: small;
+}
+
+table.summary td {
+	padding-right: 1ex;
+}
+
+li.chapter {
+	margin-top: 1ex;
+	font-weight: bold;
+}
+
+li.causes-havoc {
+	font-style: italic;
+}
+
+li.deprecated,
+li.deprecated a,
+table.summary tr.deprecated td,
+table.summary tr.deprecated td a {
+	color: gray;
+}
+
+div.requires,
+div.docstring {
+	margin: 1ex;
+}
+
+div.added {
+	border-left: 2px solid #4e9a06;
+	margin: 1ex;
+	padding-left: 1ex;
+}
+
+div.added span.version {
+	color: #4e9a06;
+	font-weight: bold;
+}
+
+div.changed {
+	border-left: 2px solid #8f5902;
+	margin: 1ex;
+	padding-left: 1ex;
+}
+
+div.changed span.version {
+	color: #8f5902;
+	font-weight: bold;
+}
+
+div.deprecated,
+div.havoc {
+	border-left: 2px solid #a40000;
+	margin: 1ex;
+	padding-left: 1ex;
+}
+
+div.deprecated span.version,
+span.warning {
+	color: #a40000;
+	font-weight: bold;
+}
+
+div.rationale {
+	border-left: 2px solid gray;
+	margin: 1ex;
+	padding-left: 1ex;
+}
+
+span.permalink {
+	float: right;
+	font-size: x-small;
+}
+
+.license {
+	clear: both;
+	border: 1px solid #dedede;
+	font-style: italic;
+	padding: 15px;
+}
+
+.copyrights {
+	clear: both;
+	float: right;
+}
diff --git a/sflphone-common/doc/dbus-api/spec/all.xml b/sflphone-common/doc/dbus-api/spec/all.xml
new file mode 100644
index 0000000000..b87a0e1e41
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/spec/all.xml
@@ -0,0 +1,55 @@
+<tp:spec
+	xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+	xmlns:xi="http://www.w3.org/2001/XInclude">
+
+<tp:title>SFLphone D-Bus Interface Specification</tp:title>
+<tp:version>0.9.8</tp:version>
+
+<tp:copyright>Copyright © 2005-2010 Savoir-faire Linux Inc</tp:copyright>
+
+<tp:license xmlns="http://www.w3.org/1999/xhtml">
+<p>This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.</p>
+
+<p>This 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
+Lesser General Public License for more details.</p>
+
+<p>You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
+</tp:license>
+
+<tp:section name="Instances Manager">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+  <p>
+	An Instance Manager to handle multiple clients connections. Count the number of clients actually registered to the core. When initializing your client, you need to register it against the core by using this interface.
+  </p>
+ </tp:docstring>
+ <xi:include href="instance-introspec.xml"/>
+</tp:section>
+
+<tp:section name="Call Manager">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+  <p>
+	A Call Manager to handle call-related features.
+  </p>
+ </tp:docstring>
+ <xi:include href="callmanager-introspec.xml"/>
+</tp:section>
+
+<tp:section name="Configuration Manager">
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+  <p>
+	A Configuration Manager to handle account configuration, user preferences, ...
+  </p>
+ </tp:docstring>
+ <xi:include href="configurationmanager-introspec.xml"/>
+</tp:section>
+
+<xi:include href="generic-types.xml"/>
+
+</tp:spec>
diff --git a/sflphone-common/doc/dbus-api/spec/callmanager-introspec.xml b/sflphone-common/doc/dbus-api/spec/callmanager-introspec.xml
new file mode 120000
index 0000000000..2150eca25d
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/spec/callmanager-introspec.xml
@@ -0,0 +1 @@
+../../../src/dbus/callmanager-introspec.xml
\ No newline at end of file
diff --git a/sflphone-common/doc/dbus-api/spec/configurationmanager-introspec.xml b/sflphone-common/doc/dbus-api/spec/configurationmanager-introspec.xml
new file mode 120000
index 0000000000..d340519f1a
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/spec/configurationmanager-introspec.xml
@@ -0,0 +1 @@
+../../../src/dbus/configurationmanager-introspec.xml
\ No newline at end of file
diff --git a/sflphone-common/doc/dbus-api/spec/errors.xml b/sflphone-common/doc/dbus-api/spec/errors.xml
new file mode 100644
index 0000000000..22a629baff
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/spec/errors.xml
@@ -0,0 +1,417 @@
+<?xml version="1.0" ?>
+<tp:errors xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" namespace="org.freedesktop.Telepathy.Error">
+  <tp:error name="Network Error">
+    <tp:docstring>
+    Raised when there is an error reading from or writing to the network.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Not Implemented">
+    <tp:docstring>
+    Raised when the requested method, channel, etc is not available on this connection.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Invalid Argument">
+    <tp:docstring>
+    Raised when one of the provided arguments is invalid.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Not Available">
+    <tp:docstring>
+    Raised when the requested functionality is temporarily unavailable.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Permission Denied">
+    <tp:docstring>
+    The user is not permitted to perform the requested operation.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Disconnected">
+    <tp:docstring>
+      The connection is not currently connected and cannot be used.
+      This error may also be raised when operations are performed on a
+      Connection for which
+      <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">StatusChanged</tp:dbus-ref>
+      has signalled status Disconnected for reason None.
+
+      <tp:rationale>
+        The second usage corresponds to None in the
+        <tp:type>Connection_Status_Reason</tp:type> enum; if a better reason
+        is available, the corresponding error should be used instead.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Invalid Handle">
+    <tp:docstring>
+    The handle specified is unknown on this channel or connection.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Channel.Banned">
+    <tp:docstring>
+    You are banned from the channel.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Channel.Full">
+    <tp:docstring>
+    The channel is full.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Channel.Invite Only">
+    <tp:docstring>
+    The requested channel is invite-only.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Not Yours">
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>The requested channel or other resource already exists, and another
+        user interface in this session is responsible for it.</p>
+
+      <p>User interfaces SHOULD handle this error unobtrusively, since it
+        indicates that some other user interface is already processing the
+        channel.</p>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cancelled">
+    <tp:docstring>
+      Raised by an ongoing request if it is cancelled by user request before
+      it has completed, or when operations are performed on an object which
+      the user has asked to close (for instance, a Connection where the user
+      has called Disconnect, or a Channel where the user has called Close).
+
+      <tp:rationale>
+        The second form can be used to correspond to the Requested member in
+        the <tp:type>Connection_Status_Reason</tp:type> enum, or to
+        to represent the situation where disconnecting a Connection,
+        closing a Channel, etc. has been requested by the user but this
+        request has not yet been acted on, for instance because the
+        service will only act on the request when it has finished processing
+        an event queue.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Authentication Failed">
+    <tp:docstring>
+      Raised when authentication with a service was unsuccessful.
+      <tp:rationale>
+        This corresponds to Authentication_Failed in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Encryption Not Available">
+    <tp:docstring>
+      Raised if a user request insisted that encryption should be used,
+      but encryption was not actually available.
+
+      <tp:rationale>
+        This corresponds to part of Encryption_Error in the
+        <tp:type>Connection_Status_Reason</tp:type> enum. It's been separated
+        into a distinct error here because the two concepts that were part
+        of EncryptionError seem to be things that could reasonably appear
+        differently in the UI.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Encryption Error">
+    <tp:docstring>
+      Raised if encryption appears to be available, but could not actually be
+      used (for instance if SSL/TLS negotiation fails).
+      <tp:rationale>
+        This corresponds to part of Encryption_Error in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Not Provided">
+    <tp:docstring>
+      Raised if the server did not provide a SSL/TLS certificate. This error
+      MUST NOT be used to represent the absence of a client certificate
+      provided by the Telepathy connection manager.
+      <tp:rationale>
+        This corresponds to Cert_Not_Provided in the
+        <tp:type>Connection_Status_Reason</tp:type> enum. That error
+        explicitly applied only to server SSL certificates, so this one
+        is similarly limited; having the CM present a client certificate
+        is a possible future feature, but it should have its own error
+        handling.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Untrusted">
+    <tp:docstring>
+      Raised if the server provided a SSL/TLS certificate signed by an
+      untrusted certifying authority. This error SHOULD NOT be used to
+      represent a self-signed certificate: see the Self Signed error for that.
+      <tp:rationale>
+        This corresponds to Cert_Untrusted in the
+        <tp:type>Connection_Status_Reason</tp:type> enum, with a clarification
+        to avoid ambiguity.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Expired">
+    <tp:docstring>
+      Raised if the server provided an expired SSL/TLS certificate.
+      <tp:rationale>
+        This corresponds to Cert_Expired in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Not Activated">
+    <tp:docstring>
+      Raised if the server provided an SSL/TLS certificate that will become
+      valid at some point in the future.
+      <tp:rationale>
+        This corresponds to Cert_Not_Activated in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Fingerprint Mismatch">
+    <tp:docstring>
+      Raised if the server provided an SSL/TLS certificate that did not have
+      the expected fingerprint.
+      <tp:rationale>
+        This corresponds to Cert_Fingerprint_Mismatch in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Hostname Mismatch">
+    <tp:docstring>
+      Raised if the server provided an SSL/TLS certificate that did not match
+      its hostname.
+      <tp:rationale>
+        This corresponds to Cert_Hostname_Mismatch in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Self Signed">
+    <tp:docstring>
+      Raised if the server provided an SSL/TLS certificate that is self-signed
+      and untrusted.
+      <tp:rationale>
+        This corresponds to Cert_Hostname_Mismatch in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cert.Invalid">
+    <tp:docstring>
+      Raised if the server provided an SSL/TLS certificate that is
+      unacceptable in some way that does not have a more specific error.
+      <tp:rationale>
+        This corresponds to Cert_Other_Error in the
+        <tp:type>Connection_Status_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Not Capable">
+    <tp:docstring>
+    Raised when requested functionality is unavailable due to contact
+    not having required capabilities.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Offline">
+    <tp:docstring>
+      Raised when requested functionality is unavailable because a contact is
+      offline.
+
+      <tp:rationale>
+        This corresponds to Offline in the
+        <tp:type>Channel_Group_Change_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Channel.Kicked">
+    <tp:docstring>
+      Used to represent a user being ejected from a channel by another user,
+      for instance being kicked from a chatroom.
+
+      <tp:rationale>
+        This corresponds to Kicked in the
+        <tp:type>Channel_Group_Change_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Busy">
+    <tp:docstring>
+      Used to represent a user being removed from a channel because of a
+      "busy" indication. This error SHOULD NOT be used to represent a server
+      or other infrastructure being too busy to process a request - for that,
+      see ServerBusy.
+
+      <tp:rationale>
+        This corresponds to Busy in the
+        <tp:type>Channel_Group_Change_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="No Answer">
+    <tp:docstring>
+      Used to represent a user being removed from a channel because they did
+      not respond, e.g. to a StreamedMedia call.
+
+      <tp:rationale>
+        This corresponds to No_Answer in the
+        <tp:type>Channel_Group_Change_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Does Not Exist">
+    <tp:docstring>
+      Raised when the requested user does not, in fact, exist.
+
+      <tp:rationale>
+        This corresponds to Invalid_Contact in the
+        <tp:type>Channel_Group_Change_Reason</tp:type> enum, but can also be
+        used to represent other things not existing (like chatrooms, perhaps).
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Terminated">
+    <tp:docstring>
+      Raised when a channel is terminated for an unspecified reason. In
+      particular, this error SHOULD be used whenever normal termination of
+      a 1-1 StreamedMedia call by the remote user is represented as a D-Bus
+      error name.
+
+      <tp:rationale>
+        This corresponds to None in the
+        <tp:type>Channel_Group_Change_Reason</tp:type> enum.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Connection Refused">
+    <tp:docstring>
+      Raised when a connection is refused.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Connection Failed">
+    <tp:docstring>
+      Raised when a connection can't be established.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Connection Lost">
+    <tp:docstring>
+      Raised when a connection is broken.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Already Connected">
+    <tp:docstring>
+      Raised when the user attempts to connect to an account but they are
+      already connected (perhaps from another client or computer), and the
+      protocol or account settings do not allow this.
+
+      <tp:rationale>
+        XMPP can have this behaviour if the user chooses the same resource
+        in both clients (it is server-dependent whether the result is
+        AlreadyConnected on the new connection, ConnectionReplaced on the
+        old connection, or two successful connections).
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Connection Replaced">
+    <tp:docstring>
+      Raised by an existing connection to an account if it is replaced by
+      a new connection (perhaps from another client or computer).
+
+      <tp:rationale>
+        In MSNP, when connecting twice with the same Passport, the new
+        connection "wins" and the old one is automatically disconnected.
+        XMPP can also have this behaviour if the user chooses the same
+        resource in two clients (it is server-dependent whether the result is
+        AlreadyConnected on the new connection, ConnectionReplaced on the
+        old connection, or two successful connections).
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Registration Exists">
+    <tp:docstring>
+      Raised during in-band registration if the server indicates that the
+      requested account already exists.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Service Busy">
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      Raised if a server or some other piece of infrastructure cannot process
+      the request, e.g. due to resource limitations. Clients MAY try again
+      later.
+
+      <tp:rationale>
+        This is not the same error as Busy, which indicates that a
+        <em>user</em> is busy.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Resource Unavailable">
+    <tp:docstring>
+      Raised if a request cannot be satisfied because a process local to the
+      user has insufficient resources. Clients MAY try again
+      later.
+
+      <tp:rationale>
+        For instance, the <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy">ChannelDispatcher</tp:dbus-ref>
+        might raise this error for some or all channel requests if it has
+        detected that there is not enough free memory.
+      </tp:rationale>
+    </tp:docstring>
+  </tp:error>
+
+  <tp:copyright>Copyright © 2005-2009 Collabora Limited</tp:copyright>
+  <tp:copyright>Copyright © 2005-2009 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+<p>This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.</p>
+
+<p>This 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
+Lesser General Public License for more details.</p>
+
+<p>You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
+  </tp:license>
+</tp:errors>
diff --git a/sflphone-common/doc/dbus-api/spec/generic-types.xml b/sflphone-common/doc/dbus-api/spec/generic-types.xml
new file mode 100644
index 0000000000..d4dce1552d
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/spec/generic-types.xml
@@ -0,0 +1,168 @@
+<tp:generic-types
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+
+  <tp:simple-type name="Unix_Timestamp" type="u">
+    <tp:docstring>An unsigned 32-bit integer representing time as the number
+      of seconds elapsed since the Unix epoch
+      (1970-01-01T00:00:00Z)</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="Unix_Timestamp64" type="x">
+    <tp:docstring>An signed 64-bit integer representing time as the number
+      of seconds elapsed since the Unix epoch
+      (1970-01-01T00:00:00Z); negative for times before the epoch</tp:docstring>
+
+    <tp:rationale>The Text interface is the only user of Unix_Timestamp so
+      far, and we'd like to be Y2038 compatible in future
+      interfaces.</tp:rationale>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Bus_Name" type="s"
+    array-name="DBus_Bus_Name_List">
+    <tp:docstring>A string representing a D-Bus bus name - either a well-known
+      name like "org.freedesktop.Telepathy.MissionControl" or a unique name
+      like ":1.123"</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Well_Known_Name" type="s"
+    array-name="DBus_Well_Known_Name_List">
+    <tp:docstring>A string representing a D-Bus well-known
+      name like "org.freedesktop.Telepathy.MissionControl".</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Unique_Name" type="s"
+    array-name="DBus_Unique_Name_List">
+    <tp:docstring>A string representing a D-Bus unique name, such as
+      ":1.123"</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Interface" type="s"
+    array-name="DBus_Interface_List">
+    <tp:docstring>An ASCII string representing a D-Bus interface - two or more
+      elements separated by dots, where each element is a non-empty
+      string of ASCII letters, digits and underscores, not starting with
+      a digit. The maximum total length is 255 characters. For example,
+      "org.freedesktop.DBus.Peer".</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Error_Name" type="s">
+    <tp:docstring>An ASCII string representing a D-Bus error. This is
+      syntactically the same as a <tp:type>DBus_Interface</tp:type>, but the
+      meaning is different.</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Signature" type="s">
+    <tp:docstring>A string representing a D-Bus signature
+      (the 'g' type isn't used because of poor interoperability, particularly
+      with dbus-glib)</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Member" type="s">
+    <tp:docstring>An ASCII string representing a D-Bus method, signal
+      or property name - a non-empty string of ASCII letters, digits and
+      underscores, not starting with a digit, with a maximum length of 255
+      characters. For example, "Ping".</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="DBus_Qualified_Member" type="s"
+    array-name="DBus_Qualified_Member_List">
+    <tp:docstring>A string representing the full name of a D-Bus method,
+      signal or property, consisting of a DBus_Interface, followed by
+      a dot, followed by a DBus_Member. For example,
+      "org.freedesktop.DBus.Peer.Ping".</tp:docstring>
+  </tp:simple-type>
+
+  <tp:mapping name="Qualified_Property_Value_Map"
+    array-name="Qualified_Property_Value_Map_List">
+    <tp:docstring>A mapping from strings representing D-Bus
+      properties (by their namespaced names) to their values.</tp:docstring>
+    <tp:member type="s" name="Key" tp:type="DBus_Qualified_Member">
+      <tp:docstring>
+        A D-Bus interface name, followed by a dot and a D-Bus property name.
+      </tp:docstring>
+    </tp:member>
+    <tp:member type="v" name="Value">
+      <tp:docstring>
+        The value of the property.
+      </tp:docstring>
+    </tp:member>
+  </tp:mapping>
+
+  <tp:mapping name="String_Variant_Map" array-name="String_Variant_Map_List">
+    <tp:docstring>A mapping from strings to variants representing extra
+      key-value pairs.</tp:docstring>
+    <tp:member type="s" name="Key"/>
+    <tp:member type="v" name="Value"/>
+  </tp:mapping>
+
+  <tp:mapping name="String_String_Map" array-name="String_String_Map_List">
+    <tp:docstring>A mapping from strings to strings representing extra
+      key-value pairs.</tp:docstring>
+    <tp:member type="s" name="Key"/>
+    <tp:member type="s" name="Value"/>
+  </tp:mapping>
+
+  <tp:struct name="Socket_Address_IP" array-name="Socket_Address_IP_List">
+    <tp:docstring>An IP address and port.</tp:docstring>
+    <tp:member type="s" name="Address">
+      <tp:docstring>Either a dotted-quad IPv4 address literal as for
+        <tp:type>Socket_Address_IPv4</tp:type>, or an RFC2373 IPv6 address
+        as for <tp:type>Socket_Address_IPv6</tp:type>.
+      </tp:docstring>
+    </tp:member>
+    <tp:member type="q" name="Port">
+      <tp:docstring>The TCP or UDP port number.</tp:docstring>
+    </tp:member>
+  </tp:struct>
+
+  <tp:struct name="Socket_Address_IPv4">
+    <tp:docstring>An IPv4 address and port.</tp:docstring>
+    <tp:member type="s" name="Address">
+      <tp:docstring>A dotted-quad IPv4 address literal: four ASCII decimal
+        numbers, each between 0 and 255 inclusive, e.g.
+        "192.168.0.1".</tp:docstring>
+    </tp:member>
+    <tp:member type="q" name="Port">
+      <tp:docstring>The TCP or UDP port number.</tp:docstring>
+    </tp:member>
+  </tp:struct>
+
+  <tp:struct name="Socket_Address_IPv6">
+    <tp:docstring>An IPv6 address and port.</tp:docstring>
+    <tp:member type="s" name="Address">
+      <tp:docstring>An IPv6 address literal as specified by RFC2373
+        section 2.2, e.g. "2001:DB8::8:800:200C:4171".</tp:docstring>
+    </tp:member>
+    <tp:member type="q" name="Port">
+      <tp:docstring>The TCP or UDP port number.</tp:docstring>
+    </tp:member>
+  </tp:struct>
+
+  <tp:struct name="Socket_Netmask_IPv4">
+    <tp:docstring>An IPv4 network or subnet.</tp:docstring>
+    <tp:member type="s" name="Address">
+      <tp:docstring>A dotted-quad IPv4 address literal: four ASCII decimal
+        numbers, each between 0 and 255 inclusive, e.g.
+        "192.168.0.1".</tp:docstring>
+    </tp:member>
+    <tp:member type="y" name="Prefix_Length">
+      <tp:docstring>The number of leading bits of the address that must
+        match, for this netmask to be considered to match an
+        address.</tp:docstring>
+    </tp:member>
+  </tp:struct>
+
+  <tp:struct name="Socket_Netmask_IPv6">
+    <tp:docstring>An IPv6 network or subnet.</tp:docstring>
+    <tp:member type="s" name="Address">
+      <tp:docstring>An IPv6 address literal as specified by RFC2373
+        section 2.2, e.g. "2001:DB8::8:800:200C:4171".</tp:docstring>
+    </tp:member>
+    <tp:member type="y" name="Prefix_Length">
+      <tp:docstring>The number of leading bits of the address that must
+        match, for this netmask to be considered to match an
+        address.</tp:docstring>
+    </tp:member>
+  </tp:struct>
+
+</tp:generic-types>
diff --git a/sflphone-common/doc/dbus-api/spec/instance-introspec.xml b/sflphone-common/doc/dbus-api/spec/instance-introspec.xml
new file mode 120000
index 0000000000..2e02dfe723
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/spec/instance-introspec.xml
@@ -0,0 +1 @@
+../../../src/dbus/instance-introspec.xml
\ No newline at end of file
diff --git a/sflphone-common/doc/dbus-api/tools/devhelp.xsl b/sflphone-common/doc/dbus-api/tools/devhelp.xsl
new file mode 100644
index 0000000000..60f9e1c530
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/tools/devhelp.xsl
@@ -0,0 +1,91 @@
+<!-- Generate a Devhelp index from the Telepathy specification.
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006-2008 Collabora Limited
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+-->
+
+<xsl:stylesheet version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <xsl:template match="/">
+    <book xmlns="http://www.devhelp.net/book" title="Telepathy Specification"
+        name="telepathy-spec" link="spec.html">
+      <xsl:text>&#x000a;</xsl:text>
+      <chapters>
+        <xsl:text>&#x000a;</xsl:text>
+        <xsl:apply-templates select="//interface" />
+      </chapters>
+      <xsl:text>&#x000a;</xsl:text>
+      <functions>
+        <xsl:text>&#x000a;</xsl:text>
+        <xsl:apply-templates select="//method" />
+        <xsl:apply-templates select="//signal" />
+        <xsl:apply-templates select="//property" />
+        <xsl:apply-templates select="//tp:enum" />
+        <xsl:apply-templates select="//tp:simple-type" />
+        <xsl:apply-templates select="//tp:mapping" />
+        <xsl:apply-templates select="//tp:flags" />
+        <xsl:apply-templates select="//tp:struct" />
+      </functions>
+      <xsl:text>&#x000a;</xsl:text>
+    </book>
+  </xsl:template>
+
+  <xsl:template match="interface">
+    <xsl:text>  </xsl:text>
+    <sub xmlns="http://www.devhelp.net/book" name="{@name}"
+      link="{concat('spec.html#', @name)}" />
+    <xsl:text>&#x000a;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="method">
+    <xsl:text>  </xsl:text>
+    <keyword type="function" xmlns="http://www.devhelp.net/book" name="{@name}"
+      link="spec.html#{../@name}.{@name}" />
+    <xsl:text>&#x000a;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="signal | property">
+    <xsl:text>  </xsl:text>
+    <keyword type="" xmlns="http://www.devhelp.net/book" name="{@name}"
+      link="spec.html#{../@name}.{@name}" />
+    <xsl:text>&#x000a;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="tp:simple-type">
+    <xsl:text>  </xsl:text>
+    <keyword type="typedef" xmlns="http://www.devhelp.net/book" name="{@name}"
+      link="spec.html#type-{@name}" />
+    <xsl:text>&#x000a;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="tp:enum | tp:flags">
+    <xsl:text>  </xsl:text>
+    <keyword type="enum" xmlns="http://www.devhelp.net/book" name="{@name}"
+      link="spec.html#type-{@name}" />
+    <xsl:text>&#x000a;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="tp:mapping | tp:struct">
+    <xsl:text>  </xsl:text>
+    <keyword type="struct" xmlns="http://www.devhelp.net/book" name="{@name}"
+      link="spec.html#type-{@name}" />
+    <xsl:text>&#x000a;</xsl:text>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/sflphone-common/doc/dbus-api/tools/doc-generator.py b/sflphone-common/doc/dbus-api/tools/doc-generator.py
new file mode 100755
index 0000000000..5fc19ce907
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/tools/doc-generator.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+#
+# doc-generator.py
+#
+# Generates HTML documentation from the parsed spec using Cheetah templates.
+#
+# Copyright (C) 2009 Collabora Ltd.
+#
+# This library is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or (at
+# your option) any later version.
+#
+# This 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 Lesser General Public License
+# for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors: Davyd Madeley <davyd.madeley@collabora.co.uk>
+#
+
+import sys
+import os
+import os.path
+import shutil
+
+try:
+    from Cheetah.Template import Template
+except ImportError, e:
+    print >> sys.stderr, e
+    print >> sys.stderr, "Install `python-cheetah'?"
+    sys.exit(-1)
+
+import specparser
+
+program, spec_file, output_path, project, namespace = sys.argv
+
+template_path = os.path.join(os.path.dirname(program), '../doc/templates')
+
+# make the output path
+try:
+    os.mkdir(output_path)
+except OSError:
+    pass
+# copy in the CSS
+shutil.copy(os.path.join(template_path, 'style.css'), output_path)
+
+def load_template(filename):
+    try:
+        file = open(os.path.join(template_path, filename))
+        template_def = file.read()
+        file.close()
+    except IOError, e:
+        print >> sys.stderr, "Could not load template file `%s'" % filename
+        print >> sys.stderr, e
+        sys.exit(-1)
+
+    return template_def
+
+spec = specparser.parse(spec_file, namespace)
+
+# write out HTML files for each of the interfaces
+
+# Not using render_template here to avoid recompiling it n times.
+namespace = {}
+template_def = load_template('interface.html')
+t = Template(template_def, namespaces = [namespace])
+for interface in spec.interfaces:
+    namespace['interface'] = interface
+
+    # open the output file
+    out = open(os.path.join(output_path, '%s.html' % interface.name), 'w')
+    print >> out, unicode(t).encode('utf-8')
+    out.close()
+
+def render_template(name, namespaces, target=None):
+    if target is None:
+        target = name
+
+    namespace = { 'spec': spec }
+    template_def = load_template(name)
+    t = Template(template_def, namespaces=namespaces)
+    out = open(os.path.join(output_path, target), 'w')
+    print >> out, unicode(t).encode('utf-8')
+    out.close()
+
+namespaces = { 'spec': spec }
+
+render_template('generic-types.html', namespaces)
+render_template('errors.html', namespaces)
+render_template('interfaces.html', namespaces)
+render_template('fullindex.html', namespaces)
+
+dh_namespaces = { 'spec': spec, 'name': project }
+render_template('devhelp.devhelp2', dh_namespaces,
+    target=('%s.devhelp2' % project))
+
+# write out the TOC last, because this is the file used as the target in the
+# Makefile.
+render_template('index.html', namespaces)
diff --git a/sflphone-common/doc/dbus-api/tools/doc-generator.xsl b/sflphone-common/doc/dbus-api/tools/doc-generator.xsl
new file mode 100644
index 0000000000..fe9cd9f08d
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/tools/doc-generator.xsl
@@ -0,0 +1,1266 @@
+<!-- Generate HTML documentation from the Telepathy specification.
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006-2008 Collabora Limited
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+  xmlns:html="http://www.w3.org/1999/xhtml"
+  exclude-result-prefixes="tp html">
+  <!--Don't move the declaration of the HTML namespace up here — XMLNSs
+  don't work ideally in the presence of two things that want to use the
+  absence of a prefix, sadly. -->
+
+  <xsl:param name="allow-undefined-interfaces" select="false()"/>
+
+  <xsl:template match="html:* | @*" mode="html">
+    <xsl:copy>
+      <xsl:apply-templates mode="html" select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="tp:type" mode="html">
+    <xsl:call-template name="tp-type">
+      <xsl:with-param name="tp-type" select="string(.)"/>
+    </xsl:call-template>
+  </xsl:template>
+
+  <!-- tp:dbus-ref: reference a D-Bus interface, signal, method or property -->
+  <xsl:template match="tp:dbus-ref" mode="html">
+    <xsl:variable name="name">
+      <xsl:choose>
+        <xsl:when test="@namespace">
+          <xsl:value-of select="@namespace"/>
+          <xsl:text>.</xsl:text>
+        </xsl:when>
+      </xsl:choose>
+      <xsl:value-of select="string(.)"/>
+    </xsl:variable>
+
+    <xsl:choose>
+      <xsl:when test="//interface[@name=$name]
+        or //interface/method[concat(../@name, '.', @name)=$name]
+        or //interface/signal[concat(../@name, '.', @name)=$name]
+        or //interface/property[concat(../@name, '.', @name)=$name]
+        or //interface[@name=concat($name, '.DRAFT')]
+        or //interface/method[
+          concat(../@name, '.', @name)=concat($name, '.DRAFT')]
+        or //interface/signal[
+          concat(../@name, '.', @name)=concat($name, '.DRAFT')]
+        or //interface/property[
+          concat(../@name, '.', @name)=concat($name, '.DRAFT')]
+        ">
+        <a xmlns="http://www.w3.org/1999/xhtml" href="#{$name}">
+          <xsl:value-of select="string(.)"/>
+        </a>
+      </xsl:when>
+
+      <xsl:when test="$allow-undefined-interfaces">
+        <span xmlns="http://www.w3.org/1999/xhtml" title="defined elsewhere">
+          <xsl:value-of select="string(.)"/>
+        </span>
+      </xsl:when>
+
+      <xsl:otherwise>
+        <xsl:message terminate="yes">
+          <xsl:text>ERR: cannot find D-Bus interface, method, </xsl:text>
+          <xsl:text>signal or property called '</xsl:text>
+          <xsl:value-of select="$name"/>
+          <xsl:text>'&#10;</xsl:text>
+        </xsl:message>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!-- tp:member-ref: reference a property of the current interface -->
+  <xsl:template match="tp:member-ref" mode="html">
+    <xsl:variable name="prefix" select="concat(ancestor::interface/@name,
+      '.')"/>
+    <xsl:variable name="name" select="string(.)"/>
+
+    <xsl:if test="not(ancestor::interface)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: Cannot use tp:member-ref when not in an</xsl:text>
+        <xsl:text> &lt;interface&gt;&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:choose>
+      <xsl:when test="ancestor::interface/signal[@name=$name]"/>
+      <xsl:when test="ancestor::interface/method[@name=$name]"/>
+      <xsl:when test="ancestor::interface/property[@name=$name]"/>
+      <xsl:otherwise>
+        <xsl:message terminate="yes">
+          <xsl:text>ERR: interface </xsl:text>
+          <xsl:value-of select="ancestor::interface/@name"/>
+          <xsl:text> has no signal/method/property called </xsl:text>
+          <xsl:value-of select="$name"/>
+          <xsl:text>&#10;</xsl:text>
+        </xsl:message>
+      </xsl:otherwise>
+    </xsl:choose>
+
+    <a xmlns="http://www.w3.org/1999/xhtml" href="#{$prefix}{$name}">
+      <xsl:value-of select="$name"/>
+    </a>
+  </xsl:template>
+
+  <xsl:template match="*" mode="identity">
+    <xsl:copy>
+      <xsl:apply-templates mode="identity"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="tp:docstring">
+    <xsl:apply-templates mode="html"/>
+  </xsl:template>
+
+  <xsl:template match="tp:added">
+    <p class="added" xmlns="http://www.w3.org/1999/xhtml">Added in
+      version <xsl:value-of select="@version"/>.
+      <xsl:apply-templates select="node()" mode="html"/></p>
+  </xsl:template>
+
+  <xsl:template match="tp:changed">
+    <xsl:choose>
+      <xsl:when test="node()">
+        <p class="changed" xmlns="http://www.w3.org/1999/xhtml">Changed in
+          version <xsl:value-of select="@version"/>:
+          <xsl:apply-templates select="node()" mode="html"/></p>
+      </xsl:when>
+      <xsl:otherwise>
+        <p class="changed">Changed in version
+          <xsl:value-of select="@version"/></p>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <xsl:template match="tp:deprecated">
+    <p class="deprecated" xmlns="http://www.w3.org/1999/xhtml">Deprecated
+      since version <xsl:value-of select="@version"/>.
+      <xsl:apply-templates select="node()" mode="html"/></p>
+  </xsl:template>
+
+  <xsl:template match="tp:rationale" mode="html">
+    <div xmlns="http://www.w3.org/1999/xhtml" class="rationale">
+      <xsl:apply-templates select="node()" mode="html"/>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="tp:errors">
+    <h1 xmlns="http://www.w3.org/1999/xhtml">Errors</h1>
+    <xsl:apply-templates/>
+  </xsl:template>
+
+  <xsl:template match="tp:generic-types">
+    <h1 xmlns="http://www.w3.org/1999/xhtml">Generic types</h1>
+    <xsl:call-template name="do-types"/>
+  </xsl:template>
+
+  <xsl:template name="do-types">
+    <xsl:if test="tp:simple-type">
+      <h2 xmlns="http://www.w3.org/1999/xhtml">Simple types</h2>
+      <xsl:apply-templates select="tp:simple-type"/>
+    </xsl:if>
+
+    <xsl:if test="tp:enum">
+      <h2 xmlns="http://www.w3.org/1999/xhtml">Enumerated types:</h2>
+      <xsl:apply-templates select="tp:enum"/>
+    </xsl:if>
+
+    <xsl:if test="tp:flags">
+      <h2 xmlns="http://www.w3.org/1999/xhtml">Sets of flags:</h2>
+      <xsl:apply-templates select="tp:flags"/>
+    </xsl:if>
+
+    <xsl:if test="tp:struct">
+      <h2 xmlns="http://www.w3.org/1999/xhtml">Structure types</h2>
+      <xsl:apply-templates select="tp:struct"/>
+    </xsl:if>
+
+    <xsl:if test="tp:mapping">
+      <h2 xmlns="http://www.w3.org/1999/xhtml">Mapping types</h2>
+      <xsl:apply-templates select="tp:mapping"/>
+    </xsl:if>
+
+    <xsl:if test="tp:external-type">
+      <h2 xmlns="http://www.w3.org/1999/xhtml">Types defined elsewhere</h2>
+      <dl><xsl:apply-templates select="tp:external-type"/></dl>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="tp:error">
+    <h2 xmlns="http://www.w3.org/1999/xhtml"><a name="{concat(../@namespace, '.', translate(@name, ' ', ''))}"></a><xsl:value-of select="concat(../@namespace, '.', translate(@name, ' ', ''))"/></h2>
+    <xsl:apply-templates select="tp:docstring"/>
+    <xsl:apply-templates select="tp:added"/>
+    <xsl:apply-templates select="tp:changed"/>
+    <xsl:apply-templates select="tp:deprecated"/>
+  </xsl:template>
+
+  <xsl:template match="/tp:spec/tp:copyright">
+    <div xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:apply-templates mode="text"/>
+    </div>
+  </xsl:template>
+  <xsl:template match="/tp:spec/tp:license">
+    <div xmlns="http://www.w3.org/1999/xhtml" class="license">
+      <xsl:apply-templates mode="html"/>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="tp:copyright"/>
+  <xsl:template match="tp:license"/>
+
+  <xsl:template match="interface">
+    <h1 xmlns="http://www.w3.org/1999/xhtml"><a name="{@name}"></a><xsl:value-of select="@name"/></h1>
+
+    <xsl:if test="@tp:causes-havoc">
+      <p xmlns="http://www.w3.org/1999/xhtml" class="causes-havoc">
+        This interface is <xsl:value-of select="@tp:causes-havoc"/>
+        and is likely to cause havoc to your API/ABI if bindings are generated.
+        Don't include it in libraries that care about compatibility.
+      </p>
+    </xsl:if>
+
+    <xsl:if test="tp:requires">
+      <p>Implementations of this interface must also implement:</p>
+      <ul xmlns="http://www.w3.org/1999/xhtml">
+        <xsl:for-each select="tp:requires">
+          <li><code><a href="#{@interface}"><xsl:value-of select="@interface"/></a></code></li>
+        </xsl:for-each>
+      </ul>
+    </xsl:if>
+
+    <xsl:apply-templates select="tp:docstring" />
+    <xsl:apply-templates select="tp:added"/>
+    <xsl:apply-templates select="tp:changed"/>
+    <xsl:apply-templates select="tp:deprecated"/>
+
+    <xsl:choose>
+      <xsl:when test="method">
+        <h2 xmlns="http://www.w3.org/1999/xhtml">Methods:</h2>
+        <xsl:apply-templates select="method"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no methods.</p>
+      </xsl:otherwise>
+    </xsl:choose>
+
+    <xsl:choose>
+      <xsl:when test="signal">
+        <h2 xmlns="http://www.w3.org/1999/xhtml">Signals:</h2>
+        <xsl:apply-templates select="signal"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no signals.</p>
+      </xsl:otherwise>
+    </xsl:choose>
+
+    <xsl:choose>
+      <xsl:when test="tp:property">
+        <h2 xmlns="http://www.w3.org/1999/xhtml">Telepathy Properties:</h2>
+        <p xmlns="http://www.w3.org/1999/xhtml">Accessed using the
+          <a href="#org.freedesktop.Telepathy.Properties">Telepathy
+            Properties</a> interface.</p>
+        <dl xmlns="http://www.w3.org/1999/xhtml">
+          <xsl:apply-templates select="tp:property"/>
+        </dl>
+      </xsl:when>
+      <xsl:otherwise>
+        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no Telepathy
+          properties.</p>
+      </xsl:otherwise>
+    </xsl:choose>
+
+    <xsl:choose>
+      <xsl:when test="property">
+        <h2 xmlns="http://www.w3.org/1999/xhtml">D-Bus core Properties:</h2>
+        <p xmlns="http://www.w3.org/1999/xhtml">Accessed using the
+          org.freedesktop.DBus.Properties interface.</p>
+        <dl xmlns="http://www.w3.org/1999/xhtml">
+          <xsl:apply-templates select="property"/>
+        </dl>
+      </xsl:when>
+      <xsl:otherwise>
+        <p xmlns="http://www.w3.org/1999/xhtml">Interface has no D-Bus core
+          properties.</p>
+      </xsl:otherwise>
+    </xsl:choose>
+
+    <xsl:call-template name="do-types"/>
+
+  </xsl:template>
+
+  <xsl:template match="tp:flags">
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a tp:flags type&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@type) or @type = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @type on tp:flags type</xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <h3>
+      <a name="type-{@name}">
+        <xsl:value-of select="@name"/>
+      </a>
+    </h3>
+    <xsl:apply-templates select="tp:docstring" />
+    <xsl:apply-templates select="tp:added"/>
+    <xsl:apply-templates select="tp:changed"/>
+    <xsl:apply-templates select="tp:deprecated"/>
+    <dl xmlns="http://www.w3.org/1999/xhtml">
+        <xsl:variable name="value-prefix">
+          <xsl:choose>
+            <xsl:when test="@value-prefix">
+              <xsl:value-of select="@value-prefix"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:value-of select="@name"/>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:variable>
+      <xsl:for-each select="tp:flag">
+        <dt xmlns="http://www.w3.org/1999/xhtml"><code><xsl:value-of select="concat($value-prefix, '_', @suffix)"/> = <xsl:value-of select="@value"/></code></dt>
+        <xsl:choose>
+          <xsl:when test="tp:docstring">
+            <dd xmlns="http://www.w3.org/1999/xhtml">
+              <xsl:apply-templates select="tp:docstring" />
+              <xsl:apply-templates select="tp:added"/>
+              <xsl:apply-templates select="tp:changed"/>
+              <xsl:apply-templates select="tp:deprecated"/>
+            </dd>
+          </xsl:when>
+          <xsl:otherwise>
+            <dd xmlns="http://www.w3.org/1999/xhtml">(Undocumented)</dd>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:for-each>
+    </dl>
+  </xsl:template>
+
+  <xsl:template match="tp:enum">
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a tp:enum type&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@type) or @type = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @type on tp:enum type</xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <h3 xmlns="http://www.w3.org/1999/xhtml">
+      <a name="type-{@name}">
+        <xsl:value-of select="@name"/>
+      </a>
+    </h3>
+    <xsl:apply-templates select="tp:docstring" />
+    <xsl:apply-templates select="tp:added"/>
+    <xsl:apply-templates select="tp:changed"/>
+    <xsl:apply-templates select="tp:deprecated"/>
+    <dl xmlns="http://www.w3.org/1999/xhtml">
+        <xsl:variable name="value-prefix">
+          <xsl:choose>
+            <xsl:when test="@value-prefix">
+              <xsl:value-of select="@value-prefix"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:value-of select="@name"/>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:variable>
+      <xsl:for-each select="tp:enumvalue">
+        <dt xmlns="http://www.w3.org/1999/xhtml"><code><xsl:value-of select="concat($value-prefix, '_', @suffix)"/> = <xsl:value-of select="@value"/></code></dt>
+        <xsl:choose>
+          <xsl:when test="tp:docstring">
+            <dd xmlns="http://www.w3.org/1999/xhtml">
+              <xsl:apply-templates select="tp:docstring" />
+              <xsl:apply-templates select="tp:added"/>
+              <xsl:apply-templates select="tp:changed"/>
+              <xsl:apply-templates select="tp:deprecated"/>
+            </dd>
+          </xsl:when>
+          <xsl:otherwise>
+            <dd xmlns="http://www.w3.org/1999/xhtml">(Undocumented)</dd>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:for-each>
+    </dl>
+  </xsl:template>
+
+  <xsl:template name="binding-name-check">
+    <xsl:if test="not(@tp:name-for-bindings)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: Binding name missing from </xsl:text>
+        <xsl:value-of select="parent::interface/@name"/>
+        <xsl:text>.</xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="translate(@tp:name-for-bindings, '_', '') != @name">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: Binding name </xsl:text>
+        <xsl:value-of select="@tp:name-for-bindings"/>
+        <xsl:text> doesn't correspond to D-Bus name </xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="property">
+
+    <xsl:call-template name="binding-name-check"/>
+
+    <xsl:if test="not(parent::interface)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: property </xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text> does not have an interface as parent&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a property of </xsl:text>
+        <xsl:value-of select="../@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@type) or @type = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @type on property </xsl:text>
+        <xsl:value-of select="concat(../@name, '.', @name)"/>
+        <xsl:text>: '</xsl:text>
+        <xsl:value-of select="@access"/>
+        <xsl:text>'&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <a name="{concat(../@name, '.', @name)}">
+        <code><xsl:value-of select="@name"/></code>
+      </a>
+      <xsl:text> − </xsl:text>
+      <code><xsl:value-of select="@type"/></code>
+      <xsl:call-template name="parenthesized-tp-type"/>
+      <xsl:text>, </xsl:text>
+      <xsl:choose>
+        <xsl:when test="@access = 'read'">
+          <xsl:text>read-only</xsl:text>
+        </xsl:when>
+        <xsl:when test="@access = 'write'">
+          <xsl:text>write-only</xsl:text>
+        </xsl:when>
+        <xsl:when test="@access = 'readwrite'">
+          <xsl:text>read/write</xsl:text>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:message terminate="yes">
+            <xsl:text>ERR: unknown or missing value for </xsl:text>
+            <xsl:text>@access on property </xsl:text>
+            <xsl:value-of select="concat(../@name, '.', @name)"/>
+            <xsl:text>: '</xsl:text>
+            <xsl:value-of select="@access"/>
+            <xsl:text>'&#10;</xsl:text>
+          </xsl:message>
+        </xsl:otherwise>
+      </xsl:choose>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:apply-templates select="tp:docstring"/>
+      <xsl:apply-templates select="tp:added"/>
+      <xsl:apply-templates select="tp:changed"/>
+      <xsl:apply-templates select="tp:deprecated"/>
+    </dd>
+  </xsl:template>
+
+  <xsl:template match="tp:property">
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:if test="@name">
+        <code><xsl:value-of select="@name"/></code> −
+      </xsl:if>
+      <code><xsl:value-of select="@type"/></code>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:apply-templates select="tp:docstring"/>
+      <xsl:apply-templates select="tp:added"/>
+      <xsl:apply-templates select="tp:changed"/>
+      <xsl:apply-templates select="tp:deprecated"/>
+    </dd>
+  </xsl:template>
+
+  <xsl:template match="tp:mapping">
+    <div xmlns="http://www.w3.org/1999/xhtml" class="struct">
+      <h3>
+        <a name="type-{@name}">
+          <xsl:value-of select="@name"/>
+        </a> − a{
+        <xsl:for-each select="tp:member">
+          <xsl:value-of select="@type"/>
+          <xsl:text>: </xsl:text>
+          <xsl:value-of select="@name"/>
+          <xsl:if test="position() != last()"> &#x2192; </xsl:if>
+        </xsl:for-each>
+        }
+      </h3>
+      <div class="docstring">
+        <xsl:apply-templates select="tp:docstring"/>
+        <xsl:if test="string(@array-name) != ''">
+          <p>In bindings that need a separate name, arrays of
+            <xsl:value-of select="@name"/> should be called
+            <xsl:value-of select="@array-name"/>.</p>
+        </xsl:if>
+      </div>
+      <div>
+        <h4>Members</h4>
+        <dl>
+          <xsl:apply-templates select="tp:member" mode="members-in-docstring"/>
+        </dl>
+      </div>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="tp:docstring" mode="in-index"/>
+
+  <xsl:template match="tp:simple-type | tp:enum | tp:flags | tp:external-type"
+    mode="in-index">
+    − <xsl:value-of select="@type"/>
+  </xsl:template>
+
+  <xsl:template match="tp:simple-type">
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a tp:simple-type&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@type) or @type = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @type on tp:simple-type</xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <div xmlns="http://www.w3.org/1999/xhtml" class="simple-type">
+      <h3>
+        <a name="type-{@name}">
+          <xsl:value-of select="@name"/>
+        </a> − <xsl:value-of select="@type"/>
+      </h3>
+      <div class="docstring">
+        <xsl:apply-templates select="tp:docstring"/>
+        <xsl:apply-templates select="tp:added"/>
+        <xsl:apply-templates select="tp:changed"/>
+        <xsl:apply-templates select="tp:deprecated"/>
+      </div>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="tp:external-type">
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a tp:external-type&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@type) or @type = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @type on tp:external-type</xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <div xmlns="http://www.w3.org/1999/xhtml" class="external-type">
+      <dt>
+        <a name="type-{@name}">
+          <xsl:value-of select="@name"/>
+        </a> − <xsl:value-of select="@type"/>
+      </dt>
+      <dd>Defined by: <xsl:value-of select="@from"/></dd>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="tp:struct" mode="in-index">
+    − ( <xsl:for-each select="tp:member">
+          <xsl:value-of select="@type"/>
+          <xsl:if test="position() != last()">, </xsl:if>
+        </xsl:for-each> )
+  </xsl:template>
+
+  <xsl:template match="tp:mapping" mode="in-index">
+    − a{ <xsl:for-each select="tp:member">
+          <xsl:value-of select="@type"/>
+          <xsl:if test="position() != last()"> &#x2192; </xsl:if>
+        </xsl:for-each> }
+  </xsl:template>
+
+  <xsl:template match="tp:struct">
+    <div xmlns="http://www.w3.org/1999/xhtml" class="struct">
+      <h3>
+        <a name="type-{@name}">
+          <xsl:value-of select="@name"/>
+        </a> − (
+        <xsl:for-each select="tp:member">
+          <xsl:value-of select="@type"/>
+          <xsl:text>: </xsl:text>
+          <xsl:value-of select="@name"/>
+          <xsl:if test="position() != last()">, </xsl:if>
+        </xsl:for-each>
+        )
+      </h3>
+      <div class="docstring">
+        <xsl:apply-templates select="tp:docstring"/>
+        <xsl:apply-templates select="tp:added"/>
+        <xsl:apply-templates select="tp:changed"/>
+        <xsl:apply-templates select="tp:deprecated"/>
+      </div>
+      <xsl:choose>
+        <xsl:when test="string(@array-name) != ''">
+          <p>In bindings that need a separate name, arrays of
+            <xsl:value-of select="@name"/> should be called
+            <xsl:value-of select="@array-name"/>.</p>
+        </xsl:when>
+        <xsl:otherwise>
+          <p>Arrays of <xsl:value-of select="@name"/> don't generally
+            make sense.</p>
+        </xsl:otherwise>
+      </xsl:choose>
+      <div>
+        <h4>Members</h4>
+        <dl>
+          <xsl:apply-templates select="tp:member" mode="members-in-docstring"/>
+        </dl>
+      </div>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="method">
+
+    <xsl:call-template name="binding-name-check"/>
+
+    <xsl:if test="not(parent::interface)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: method </xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text> does not have an interface as parent&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a method of </xsl:text>
+        <xsl:value-of select="../@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:for-each select="arg">
+      <xsl:if test="not(@type) or @type = ''">
+        <xsl:message terminate="yes">
+          <xsl:text>ERR: an arg of method </xsl:text>
+          <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+          <xsl:text> has no type</xsl:text>
+        </xsl:message>
+      </xsl:if>
+      <xsl:choose>
+        <xsl:when test="@direction='in'">
+          <xsl:if test="not(@name) or @name = ''">
+            <xsl:message terminate="yes">
+              <xsl:text>ERR: an 'in' arg of method </xsl:text>
+              <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+              <xsl:text> has no name</xsl:text>
+            </xsl:message>
+          </xsl:if>
+        </xsl:when>
+        <xsl:when test="@direction='out'">
+          <xsl:if test="not(@name) or @name = ''">
+            <xsl:message terminate="no">
+              <xsl:text>WARNING: an 'out' arg of method </xsl:text>
+              <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+              <xsl:text> has no name</xsl:text>
+            </xsl:message>
+          </xsl:if>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:message terminate="yes">
+            <xsl:text>ERR: an arg of method </xsl:text>
+            <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+            <xsl:text> has direction neither 'in' nor 'out'</xsl:text>
+          </xsl:message>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:for-each>
+
+    <div xmlns="http://www.w3.org/1999/xhtml" class="method">
+      <h3 xmlns="http://www.w3.org/1999/xhtml">
+        <a name="{concat(../@name, concat('.', @name))}">
+          <xsl:value-of select="@name"/>
+        </a> (
+        <xsl:for-each xmlns="" select="arg[@direction='in']">
+          <xsl:value-of select="@type"/>: <xsl:value-of select="@name"/>
+          <xsl:if test="position() != last()">, </xsl:if>
+        </xsl:for-each>
+        ) &#x2192;
+        <xsl:choose>
+          <xsl:when test="arg[@direction='out']">
+            <xsl:for-each xmlns="" select="arg[@direction='out']">
+              <xsl:value-of select="@type"/>
+              <xsl:if test="position() != last()">, </xsl:if>
+            </xsl:for-each>
+          </xsl:when>
+          <xsl:otherwise>nothing</xsl:otherwise>
+        </xsl:choose>
+      </h3>
+      <div xmlns="http://www.w3.org/1999/xhtml" class="docstring">
+        <xsl:apply-templates select="tp:docstring" />
+        <xsl:apply-templates select="tp:added"/>
+        <xsl:apply-templates select="tp:changed"/>
+        <xsl:apply-templates select="tp:deprecated"/>
+      </div>
+
+      <xsl:if test="arg[@direction='in']">
+        <div xmlns="http://www.w3.org/1999/xhtml">
+          <h4>Parameters</h4>
+          <dl xmlns="http://www.w3.org/1999/xhtml">
+            <xsl:apply-templates select="arg[@direction='in']"
+              mode="parameters-in-docstring"/>
+          </dl>
+        </div>
+      </xsl:if>
+
+      <xsl:if test="arg[@direction='out']">
+        <div xmlns="http://www.w3.org/1999/xhtml">
+          <h4>Returns</h4>
+          <dl xmlns="http://www.w3.org/1999/xhtml">
+            <xsl:apply-templates select="arg[@direction='out']"
+              mode="returns-in-docstring"/>
+          </dl>
+        </div>
+      </xsl:if>
+
+      <xsl:if test="tp:possible-errors">
+        <div xmlns="http://www.w3.org/1999/xhtml">
+          <h4>Possible errors</h4>
+          <dl xmlns="http://www.w3.org/1999/xhtml">
+            <xsl:apply-templates select="tp:possible-errors/tp:error"/>
+          </dl>
+        </div>
+      </xsl:if>
+
+    </div>
+  </xsl:template>
+
+  <xsl:template name="tp-type">
+    <xsl:param name="tp-type"/>
+    <xsl:param name="type"/>
+
+    <xsl:variable name="single-type">
+      <xsl:choose>
+        <xsl:when test="contains($tp-type, '[]')">
+          <xsl:value-of select="substring-before($tp-type, '[]')"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$tp-type"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+
+    <xsl:variable name="type-of-single-tp-type">
+      <xsl:choose>
+        <xsl:when test="//tp:simple-type[@name=$single-type]">
+          <xsl:value-of select="string(//tp:simple-type[@name=$single-type]/@type)"/>
+        </xsl:when>
+        <xsl:when test="//tp:struct[@name=$single-type]">
+          <xsl:text>(</xsl:text>
+          <xsl:for-each select="//tp:struct[@name=$single-type]/tp:member">
+            <xsl:value-of select="@type"/>
+          </xsl:for-each>
+          <xsl:text>)</xsl:text>
+        </xsl:when>
+        <xsl:when test="//tp:enum[@name=$single-type]">
+          <xsl:value-of select="string(//tp:enum[@name=$single-type]/@type)"/>
+        </xsl:when>
+        <xsl:when test="//tp:flags[@name=$single-type]">
+          <xsl:value-of select="string(//tp:flags[@name=$single-type]/@type)"/>
+        </xsl:when>
+        <xsl:when test="//tp:mapping[@name=$single-type]">
+          <xsl:text>a{</xsl:text>
+          <xsl:for-each select="//tp:mapping[@name=$single-type]/tp:member">
+            <xsl:value-of select="@type"/>
+          </xsl:for-each>
+          <xsl:text>}</xsl:text>
+        </xsl:when>
+        <xsl:when test="//tp:external-type[@name=$single-type]">
+          <xsl:value-of select="string(//tp:external-type[@name=$single-type]/@type)"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:message terminate="yes">
+            <xsl:text>ERR: Unable to find type '</xsl:text>
+            <xsl:value-of select="$tp-type"/>
+            <xsl:text>'&#10;</xsl:text>
+          </xsl:message>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+
+    <xsl:variable name="type-of-tp-type">
+      <xsl:if test="contains($tp-type, '[]')">
+        <!-- one 'a', plus one for each [ after the [], and delete all ] -->
+        <xsl:value-of select="concat('a',
+          translate(substring-after($tp-type, '[]'), '[]', 'a'))"/>
+      </xsl:if>
+      <xsl:value-of select="$type-of-single-tp-type"/>
+    </xsl:variable>
+
+    <xsl:if test="string($type) != '' and
+      string($type-of-tp-type) != string($type)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: tp:type '</xsl:text>
+        <xsl:value-of select="$tp-type"/>
+        <xsl:text>' has D-Bus type '</xsl:text>
+        <xsl:value-of select="$type-of-tp-type"/>
+        <xsl:text>' but has been used with type='</xsl:text>
+        <xsl:value-of select="$type"/>
+        <xsl:text>'&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="contains($tp-type, '[]')">
+      <xsl:call-template name="tp-type-array-usage-check">
+        <xsl:with-param name="single-type" select="$single-type"/>
+        <xsl:with-param name="type-of-single-tp-type"
+          select="$type-of-single-tp-type"/>
+      </xsl:call-template>
+    </xsl:if>
+
+    <a href="#type-{$single-type}"><xsl:value-of select="$tp-type"/></a>
+
+  </xsl:template>
+
+  <xsl:template name="tp-type-array-usage-check">
+    <xsl:param name="single-type"/>
+    <xsl:param name="type-of-single-tp-type"/>
+
+    <xsl:variable name="array-name">
+      <xsl:choose>
+        <xsl:when test="//tp:struct[@name=$single-type]">
+          <xsl:value-of select="//tp:struct[@name=$single-type]/@array-name"/>
+        </xsl:when>
+        <xsl:when test="//tp:mapping[@name=$single-type]">
+          <xsl:value-of select="//tp:mapping[@name=$single-type]/@array-name"/>
+        </xsl:when>
+        <xsl:when test="//tp:external-type[@name=$single-type]">
+          <xsl:value-of select="//tp:external-type[@name=$single-type]/@array-name"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="''"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:variable>
+
+    <xsl:if test="not(contains('ybnqiuxtdsvog', $type-of-single-tp-type))">
+      <xsl:if test="not($array-name) or $array-name=''">
+        <xsl:message terminate="yes">
+          <xsl:text>No array-name specified for complex type </xsl:text>
+          <xsl:value-of select="$single-type"/>
+          <xsl:text>, but array used&#10;</xsl:text>
+        </xsl:message>
+      </xsl:if>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template name="parenthesized-tp-type">
+    <xsl:if test="@tp:type">
+      <xsl:text> (</xsl:text>
+      <xsl:call-template name="tp-type">
+        <xsl:with-param name="tp-type" select="@tp:type"/>
+        <xsl:with-param name="type" select="@type"/>
+      </xsl:call-template>
+      <xsl:text>)</xsl:text>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="tp:member" mode="members-in-docstring">
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <code><xsl:value-of select="@name"/></code> −
+      <code><xsl:value-of select="@type"/></code>
+      <xsl:call-template name="parenthesized-tp-type"/>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:choose>
+        <xsl:when test="tp:docstring">
+          <xsl:apply-templates select="tp:docstring" />
+        </xsl:when>
+        <xsl:otherwise>
+          <em>(undocumented)</em>
+        </xsl:otherwise>
+      </xsl:choose>
+    </dd>
+  </xsl:template>
+
+  <xsl:template match="arg" mode="parameters-in-docstring">
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <code><xsl:value-of select="@name"/></code> −
+      <code><xsl:value-of select="@type"/></code>
+      <xsl:call-template name="parenthesized-tp-type"/>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:apply-templates select="tp:docstring" />
+    </dd>
+  </xsl:template>
+
+  <xsl:template match="arg" mode="returns-in-docstring">
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:if test="@name">
+        <code><xsl:value-of select="@name"/></code> −
+      </xsl:if>
+      <code><xsl:value-of select="@type"/></code>
+      <xsl:call-template name="parenthesized-tp-type"/>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+      <xsl:apply-templates select="tp:docstring"/>
+    </dd>
+  </xsl:template>
+
+  <xsl:template match="tp:possible-errors/tp:error">
+    <dt xmlns="http://www.w3.org/1999/xhtml">
+      <code><xsl:value-of select="@name"/></code>
+    </dt>
+    <dd xmlns="http://www.w3.org/1999/xhtml">
+        <xsl:variable name="name" select="@name"/>
+        <xsl:choose>
+          <xsl:when test="tp:docstring">
+            <xsl:apply-templates select="tp:docstring"/>
+          </xsl:when>
+          <xsl:when test="//tp:errors/tp:error[concat(../@namespace, '.', translate(@name, ' ', ''))=$name]/tp:docstring">
+            <xsl:apply-templates select="//tp:errors/tp:error[concat(../@namespace, '.', translate(@name, ' ', ''))=$name]/tp:docstring"/> <em xmlns="http://www.w3.org/1999/xhtml">(generic description)</em>
+          </xsl:when>
+          <xsl:otherwise>
+            (Undocumented.)
+          </xsl:otherwise>
+        </xsl:choose>
+    </dd>
+  </xsl:template>
+
+  <xsl:template match="signal">
+
+    <xsl:call-template name="binding-name-check"/>
+
+    <xsl:if test="not(parent::interface)">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: signal </xsl:text>
+        <xsl:value-of select="@name"/>
+        <xsl:text> does not have an interface as parent&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:if test="not(@name) or @name = ''">
+      <xsl:message terminate="yes">
+        <xsl:text>ERR: missing @name on a signal of </xsl:text>
+        <xsl:value-of select="../@name"/>
+        <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+
+    <xsl:for-each select="arg">
+      <xsl:if test="not(@type) or @type = ''">
+        <xsl:message terminate="yes">
+          <xsl:text>ERR: an arg of signal </xsl:text>
+          <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+          <xsl:text> has no type</xsl:text>
+        </xsl:message>
+      </xsl:if>
+      <xsl:if test="not(@name) or @name = ''">
+        <xsl:message terminate="yes">
+          <xsl:text>ERR: an arg of signal </xsl:text>
+          <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+          <xsl:text> has no name</xsl:text>
+        </xsl:message>
+      </xsl:if>
+      <xsl:choose>
+        <xsl:when test="not(@direction)"/>
+        <xsl:when test="@direction='in'">
+          <xsl:message terminate="no">
+            <xsl:text>INFO: an arg of signal </xsl:text>
+            <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+            <xsl:text> has unnecessary direction 'in'</xsl:text>
+          </xsl:message>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:message terminate="yes">
+            <xsl:text>ERR: an arg of signal </xsl:text>
+            <xsl:value-of select="concat(../../@name, '.', ../@name)"/>
+            <xsl:text> has direction other than 'in'</xsl:text>
+          </xsl:message>
+        </xsl:otherwise>
+      </xsl:choose>
+    </xsl:for-each>
+
+    <div xmlns="http://www.w3.org/1999/xhtml" class="signal">
+      <h3 xmlns="http://www.w3.org/1999/xhtml">
+        <a name="{concat(../@name, concat('.', @name))}">
+          <xsl:value-of select="@name"/>
+        </a> (
+        <xsl:for-each xmlns="" select="arg">
+          <xsl:value-of select="@type"/>: <xsl:value-of select="@name"/>
+          <xsl:if test="position() != last()">, </xsl:if>
+        </xsl:for-each>
+        )</h3>
+
+      <div xmlns="http://www.w3.org/1999/xhtml" class="docstring">
+        <xsl:apply-templates select="tp:docstring"/>
+        <xsl:apply-templates select="tp:added"/>
+        <xsl:apply-templates select="tp:changed"/>
+        <xsl:apply-templates select="tp:deprecated"/>
+      </div>
+
+      <xsl:if test="arg">
+        <div xmlns="http://www.w3.org/1999/xhtml">
+          <h4>Parameters</h4>
+          <dl xmlns="http://www.w3.org/1999/xhtml">
+            <xsl:apply-templates select="arg" mode="parameters-in-docstring"/>
+          </dl>
+        </div>
+      </xsl:if>
+    </div>
+  </xsl:template>
+
+  <xsl:output method="xml" indent="no" encoding="ascii"
+    omit-xml-declaration="yes"
+    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
+
+  <xsl:template match="/tp:spec">
+    <html xmlns="http://www.w3.org/1999/xhtml">
+      <head>
+        <title>
+          <xsl:value-of select="tp:title"/>
+          <xsl:if test="tp:version">
+            <xsl:text> version </xsl:text>
+            <xsl:value-of select="tp:version"/>
+          </xsl:if>
+        </title>
+        <style type="text/css">
+
+          body {
+            font-family: sans-serif;
+            margin: 2em;
+            height: 100%;
+            font-size: 1.2em;
+          }
+          h1 {
+            padding-top: 5px;
+            padding-bottom: 5px;
+            font-size: 1.6em;
+            background: #dadae2;
+          }
+          h2 {
+            font-size: 1.3em;
+          }
+          h3 {
+            font-size: 1.2em;
+          }
+          a:link, a:visited, a:link:hover, a:visited:hover {
+            font-weight: bold;
+          }
+          .topbox {
+            padding-top: 10px;
+            padding-left: 10px;
+            border-bottom: black solid 1px;
+            padding-bottom: 10px;
+            background: #dadae2;
+            font-size: 2em;
+            font-weight: bold;
+            color: #5c5c5c;
+          }
+          .topnavbox {
+            padding-left: 10px;
+            padding-top: 5px;
+            padding-bottom: 5px;
+            background: #abacba;
+            border-bottom: black solid 1px;
+            font-size: 1.2em;
+          }
+          .topnavbox a{
+            color: black;
+            font-weight: normal;
+          }
+          .sidebar {
+            float: left;
+            /* width:9em;
+            border-right:#abacba solid 1px;
+            border-left: #abacba solid 1px;
+            height:100%; */
+            border: #abacba solid 1px;
+            padding-left: 10px;
+            margin-left: 10px;
+            padding-right: 10px;
+            margin-right: 10px;
+            color: #5d5d5d;
+            background: #dadae2;
+          }
+          .sidebar a {
+            text-decoration: none;
+            border-bottom: #e29625 dotted 1px;
+            color: #e29625;
+            font-weight: normal;
+          }
+          .sidebar h1 {
+            font-size: 1.2em;
+            color: black;
+          }
+          .sidebar ul {
+            padding-left: 25px;
+            padding-bottom: 10px;
+            border-bottom: #abacba solid 1px;
+          }
+          .sidebar li {
+            padding-top: 2px;
+            padding-bottom: 2px;
+          }
+          .sidebar h2 {
+            font-style:italic;
+            font-size: 0.81em;
+            padding-left: 5px;
+            padding-right: 5px;
+            font-weight: normal;
+          }
+          .date {
+            font-size: 0.6em;
+            float: right;
+            font-style: italic;
+          }
+          .method, .signal, .property {
+            margin-left: 1em;
+            margin-right: 4em;
+          }
+          .rationale {
+            font-style: italic;
+            border-left: 0.25em solid #808080;
+            padding-left: 0.5em;
+          }
+
+          .added {
+            color: #006600;
+            background: #ffffff;
+          }
+          .deprecated {
+            color: #ff0000;
+            background: #ffffff;
+          }
+          table, tr, td, th {
+            border: 1px solid #666;
+          }
+
+        </style>
+      </head>
+      <body>
+        <h1 class="topbox">
+          <xsl:value-of select="tp:title" />
+        </h1>
+        <xsl:if test="tp:version">
+          <h2>Version <xsl:value-of select="string(tp:version)"/></h2>
+        </xsl:if>
+        <xsl:apply-templates select="tp:copyright"/>
+        <xsl:apply-templates select="tp:license"/>
+        <xsl:apply-templates select="tp:docstring"/>
+
+        <h2>Interfaces</h2>
+        <ul>
+          <xsl:for-each select="//node/interface">
+            <li><code><a href="#{@name}"><xsl:value-of select="@name"/></a></code></li>
+          </xsl:for-each>
+        </ul>
+
+        <xsl:apply-templates select="//node"/>
+        <xsl:apply-templates select="tp:generic-types"/>
+        <xsl:apply-templates select="tp:errors"/>
+
+        <h1>Index</h1>
+        <h2>Index of interfaces</h2>
+        <ul>
+          <xsl:for-each select="//node/interface">
+            <li><code><a href="#{@name}"><xsl:value-of select="@name"/></a></code></li>
+          </xsl:for-each>
+        </ul>
+        <h2>Index of types</h2>
+        <ul>
+          <xsl:for-each select="//tp:simple-type | //tp:enum | //tp:flags | //tp:mapping | //tp:struct | //tp:external-type">
+            <xsl:sort select="@name"/>
+            <li>
+              <code>
+                <a href="#type-{@name}">
+                  <xsl:value-of select="@name"/>
+                </a>
+              </code>
+              <xsl:apply-templates mode="in-index" select="."/>
+            </li>
+          </xsl:for-each>
+        </ul>
+      </body>
+    </html>
+  </xsl:template>
+
+  <xsl:template match="node">
+      <xsl:apply-templates />
+  </xsl:template>
+
+  <xsl:template match="text()">
+    <xsl:if test="normalize-space(.) != ''">
+      <xsl:message terminate="yes">
+        <xsl:text>Stray text: {{{</xsl:text>
+        <xsl:value-of select="." />
+        <xsl:text>}}}&#10;</xsl:text>
+      </xsl:message>
+    </xsl:if>
+  </xsl:template>
+
+  <xsl:template match="*">
+      <xsl:message terminate="yes">
+         <xsl:text>Unrecognised element: {</xsl:text>
+         <xsl:value-of select="namespace-uri(.)" />
+         <xsl:text>}</xsl:text>
+         <xsl:value-of select="local-name(.)" />
+         <xsl:text>&#10;</xsl:text>
+      </xsl:message>
+  </xsl:template>
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et: -->
diff --git a/sflphone-common/doc/dbus-api/tools/specparser.py b/sflphone-common/doc/dbus-api/tools/specparser.py
new file mode 100644
index 0000000000..4208ad4104
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/tools/specparser.py
@@ -0,0 +1,866 @@
+#
+# specparser.py
+#
+# Reads in a spec document and generates pretty data structures from it.
+#
+# Copyright (C) 2009 Collabora Ltd.
+#
+# This library is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or (at
+# your option) any later version.
+#
+# This 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 Lesser General Public License
+# for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors: Davyd Madeley <davyd.madeley@collabora.co.uk>
+#
+
+import sys
+import xml.dom.minidom
+
+import xincludator
+
+XMLNS_TP = 'http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0'
+
+class UnknownAccess(Exception): pass
+class UnknownDirection(Exception): pass
+class UnknownType(Exception): pass
+class UnnamedItem(Exception): pass
+class UntypedItem(Exception): pass
+class UnsupportedArray(Exception): pass
+
+def getText(dom):
+    try:
+        if dom.childNodes[0].nodeType == dom.TEXT_NODE:
+            return dom.childNodes[0].data
+        else:
+            return ''
+    except IndexError:
+        return ''
+
+def getChildrenByName(dom, namespace, name):
+    return filter(lambda n: n.nodeType == n.ELEMENT_NODE and \
+                            n.namespaceURI == namespace and \
+                            n.localName == name,
+                  dom.childNodes)
+
+def build_name(namespace, name):
+    """Returns a name by appending `name' to the namespace of this object.
+    """
+    return '.'.join(
+        filter(lambda n: n is not None and n != '',
+               [namespace, name.replace(' ', '')])
+        )
+
+class Base(object):
+    """The base class for any type of XML node in the spec that implements the
+       'name' attribute.
+
+       Don't instantiate this class directly.
+    """
+    devhelp_name = ""
+
+    def __init__(self, parent, namespace, dom):
+        self.short_name = name = dom.getAttribute('name')
+        self.namespace = namespace
+        self.name = build_name(namespace, name)
+        self.parent = parent
+
+        try:
+            self.docstring = getChildrenByName(dom, XMLNS_TP, 'docstring')[0]
+        except IndexError:
+            self.docstring = None
+
+        try:
+            self.added = getChildrenByName(dom, XMLNS_TP, 'added')[0]
+        except IndexError:
+            self.added = None
+
+        try:
+            self.deprecated = getChildrenByName(dom, XMLNS_TP, 'deprecated')[0]
+        except IndexError:
+            self.deprecated = None
+
+        self.changed = getChildrenByName(dom, XMLNS_TP, 'changed')
+
+        self.validate()
+
+    def validate(self):
+        if self.short_name == '':
+            raise UnnamedItem("Node %s of %s has no name" % (
+                self.__class__.__name__, self.parent))
+
+    def get_type_name(self):
+        return self.__class__.__name__
+
+    def get_spec(self):
+        return self.parent.get_spec()
+
+    def get_root_namespace(self):
+        return self.get_interface().name
+
+    def get_interface(self):
+        return self.parent.get_interface()
+
+    def get_url(self):
+        return "%s#%s" % (self.get_interface().get_url(), self.name)
+
+    def _get_generic_with_ver(self, nnode, htmlclass, txt):
+        if nnode is None:
+            return ''
+        else:
+            # make a copy of this node, turn it into a HTML <div> tag
+            node = nnode.cloneNode(True)
+            node.tagName = 'div'
+            node.baseURI = None
+            node.setAttribute('class', htmlclass)
+
+            try:
+                node.removeAttribute('version')
+
+                span = xml.dom.minidom.parseString(
+                    ('<span class="version">%s\n</span>' % txt) %
+                            nnode.getAttribute('version')).firstChild
+                node.insertBefore(span, node.firstChild)
+            except xml.dom.NotFoundErr:
+                print >> sys.stderr, \
+                    'WARNING: %s was %s, but gives no version' % (self, htmlclass)
+
+            self._convert_to_html(node)
+
+            return node.toxml().encode('ascii', 'xmlcharrefreplace')
+
+    def get_added(self):
+        return self._get_generic_with_ver(self.added, 'added',
+                                          "Added in %s.")
+
+    def get_deprecated(self):
+        return self._get_generic_with_ver(self.deprecated, 'deprecated',
+                                          "Deprecated since %s.")
+
+    def get_changed(self):
+        return '\n'.join(map(lambda n:
+            self._get_generic_with_ver(n, 'changed', "Changed in %s."),
+            self.changed))
+
+    def get_docstring(self):
+        """Get the docstring for this node, but do node substitution to
+           rewrite types, interfaces, etc. as links.
+        """
+        if self.docstring is None:
+            return ''
+        else:
+            # make a copy of this node, turn it into a HTML <div> tag
+            node = self.docstring.cloneNode(True)
+            node.tagName = 'div'
+            node.baseURI = None
+            node.setAttribute('class', 'docstring')
+
+            self._convert_to_html(node)
+
+            return node.toxml().encode('ascii', 'xmlcharrefreplace')
+
+    def _convert_to_html(self, node):
+        spec = self.get_spec()
+        namespace = self.get_root_namespace()
+
+        # rewrite <tp:rationale>
+        for n in node.getElementsByTagNameNS(XMLNS_TP, 'rationale'):
+            n.tagName = 'div'
+            n.namespaceURI = None
+            n.setAttribute('class', 'rationale')
+
+        # rewrite <tp:type>
+        for n in node.getElementsByTagNameNS(XMLNS_TP, 'type'):
+            t = spec.lookup_type(getText(n))
+            n.tagName = 'a'
+            n.namespaceURI = None
+            n.setAttribute('href', t.get_url())
+
+        # rewrite <tp:member-ref>
+        for n in node.getElementsByTagNameNS(XMLNS_TP, 'member-ref'):
+            key = getText(n)
+            try:
+                o = spec.lookup(key, namespace=namespace)
+            except KeyError:
+                print >> sys.stderr, \
+                    "WARNING: Key '%s' not known in namespace '%s'" % (
+                        key, namespace)
+                continue
+
+            n.tagName = 'a'
+            n.namespaceURI = None
+            n.setAttribute('href', o.get_url())
+            n.setAttribute('title', o.get_title())
+
+        # rewrite <tp:dbus-ref>
+        for n in node.getElementsByTagNameNS(XMLNS_TP, 'dbus-ref'):
+            namespace = n.getAttribute('namespace')
+            key = getText(n)
+            try:
+                o = spec.lookup(key, namespace=namespace)
+            except KeyError:
+                print >> sys.stderr, \
+                    "WARNING: Key '%s' not known in namespace '%s'" % (
+                        key, namespace)
+                continue
+
+            n.tagName = 'a'
+            n.namespaceURI = None
+            n.setAttribute('href', o.get_url())
+            n.setAttribute('title', o.get_title())
+
+    def get_title(self):
+        return '%s %s' % (self.get_type_name(), self.name)
+
+    def __repr__(self):
+        return '%s(%s)' % (self.__class__.__name__, self.name)
+
+class PossibleError(Base):
+    def __init__(self, parent, namespace, dom):
+        super(PossibleError, self).__init__(parent, namespace, dom)
+
+    def get_error(self):
+        spec = self.get_spec()
+        try:
+            return spec.errors[self.name]
+        except KeyError:
+            return External(self.name)
+
+    def get_url(self):
+        return self.get_error().get_url()
+
+    def get_title(self):
+        return self.get_error().get_title()
+
+    def get_docstring(self):
+        d = super(PossibleError, self).get_docstring()
+        if d == '':
+            return self.get_error().get_docstring()
+        else:
+            return d
+
+class Method(Base):
+    devhelp_name = "function"
+
+    def __init__(self, parent, namespace, dom):
+        super(Method, self).__init__(parent, namespace, dom)
+
+        args = build_list(self, Arg, self.name,
+                          dom.getElementsByTagName('arg'))
+
+        # separate arguments as input and output arguments
+        self.in_args = filter(lambda a: a.direction == Arg.DIRECTION_IN, args)
+        self.out_args = filter(lambda a: a.direction == Arg.DIRECTION_OUT, args)
+
+        for arg in args:
+            if arg.direction == Arg.DIRECTION_IN or \
+               arg.direction == Arg.DIRECTION_OUT:
+                continue
+
+            print >> sys.stderr, "WARNING: '%s' of method '%s' does not specify a suitable direction" % (arg, self)
+
+        self.possible_errors = build_list(self, PossibleError, None,
+                        dom.getElementsByTagNameNS(XMLNS_TP, 'error'))
+
+    def get_in_args(self):
+        return ', '.join(map(lambda a: a.spec_name(), self.in_args))
+
+    def get_out_args(self):
+        if len(self.out_args) > 0:
+            return ', '.join(map(lambda a: a.spec_name(), self.out_args))
+        else:
+            return 'nothing'
+
+class Typed(Base):
+    """The base class for all typed nodes (i.e. Arg and Property).
+
+       Don't instantiate this class directly.
+    """
+
+    def __init__(self, parent, namespace, dom):
+        super(Typed, self).__init__(parent, namespace, dom)
+
+        self.type = dom.getAttributeNS(XMLNS_TP, 'type')
+        self.dbus_type = dom.getAttribute('type')
+
+        # check we have a dbus type
+        if self.dbus_type == '':
+            raise UntypedItem("Node referred to by '%s' has no type" % dom.toxml())
+    def get_type(self):
+        return self.get_spec().lookup_type(self.type)
+
+    def get_type_url(self):
+        t = self.get_type()
+        if t is None: return ''
+        else: return t.get_url()
+
+    def get_type_title(self):
+        t = self.get_type()
+        if t is None: return ''
+        else: return t.get_title()
+
+    def spec_name(self):
+        return '%s: %s' % (self.dbus_type, self.short_name)
+
+    def __repr__(self):
+        return '%s(%s:%s)' % (self.__class__.__name__, self.name, self.dbus_type)
+
+class Property(Typed):
+    ACCESS_READ     = 1
+    ACCESS_WRITE    = 2
+
+    ACCESS_READWRITE = ACCESS_READ | ACCESS_WRITE
+
+    def __init__(self, parent, namespace, dom):
+        super(Property, self).__init__(parent, namespace, dom)
+
+        access = dom.getAttribute('access')
+        if access == 'read':
+            self.access = self.ACCESS_READ
+        elif access == 'write':
+            self.access = self.ACCESS_WRITE
+        elif access == 'readwrite':
+            self.access = self.ACCESS_READWRITE
+        else:
+            raise UnknownAccess("Unknown access '%s' on %s" % (access, self))
+
+    def get_access(self):
+        if self.access & self.ACCESS_READ and self.access & self.ACCESS_WRITE:
+            return 'Read/Write'
+        elif self.access & self.ACCESS_READ:
+            return 'Read only'
+        elif self.access & self.ACCESS_WRITE:
+            return 'Write only'
+
+class AwkwardTelepathyProperty(Typed):
+    def get_type_name(self):
+        return 'Telepathy Property'
+
+class Arg(Typed):
+    DIRECTION_IN, DIRECTION_OUT, DIRECTION_UNSPECIFIED = range(3)
+
+    def __init__(self, parent, namespace, dom):
+        super(Arg, self).__init__(parent, namespace, dom)
+
+        direction = dom.getAttribute('direction')
+        if direction == 'in':
+            self.direction = self.DIRECTION_IN
+        elif direction == 'out':
+            self.direction = self.DIRECTION_OUT
+        elif direction == '':
+            self.direction = self.DIRECTION_UNSPECIFIED
+        else:
+            raise UnknownDirection("Unknown direction '%s' on %s" % (
+                                    direction, self.parent))
+
+class Signal(Base):
+    def __init__(self, parent, namespace, dom):
+        super(Signal, self).__init__(parent, namespace, dom)
+
+        self.args = build_list(self, Arg, self.name,
+                               dom.getElementsByTagName('arg'))
+
+        for arg in self.args:
+            if arg.direction == Arg.DIRECTION_UNSPECIFIED:
+                continue
+
+            print >> sys.stderr, "WARNING: '%s' of signal '%s' does not specify a suitable direction" % (arg, self)
+
+    def get_args(self):
+        return ', '.join(map(lambda a: a.spec_name(), self.args))
+
+class External(object):
+    """External objects are objects that are referred to in another spec.
+
+       We have to attempt to look them up if at all possible.
+    """
+
+    def __init__(self, name):
+        self.name = self.short_name = name
+
+    def get_url(self):
+        return None
+
+    def get_title(self):
+        return 'External %s' % self.name
+
+    def get_docstring(self):
+        return None
+
+    def __repr__(self):
+        return '%s(%s)' % (self.__class__.__name__, self.name)
+
+class Interface(Base):
+    def __init__(self, parent, namespace, dom, spec_namespace):
+        super(Interface, self).__init__(parent, namespace, dom)
+
+        # If you're writing a spec with more than one top-level namespace, you
+        # probably want to replace spec_namespace with a list.
+        if self.name.startswith(spec_namespace + "."):
+            self.short_name = self.name[len(spec_namespace) + 1:]
+        else:
+            self.short_name = self.name
+
+        # build lists of methods, etc., in this interface
+        self.methods = build_list(self, Method, self.name,
+                                  dom.getElementsByTagName('method'))
+        self.properties = build_list(self, Property, self.name,
+                                     dom.getElementsByTagName('property'))
+        self.signals = build_list(self, Signal, self.name,
+                                  dom.getElementsByTagName('signal'))
+        self.tpproperties = build_list(self, AwkwardTelepathyProperty,
+                self.name, dom.getElementsByTagNameNS(XMLNS_TP, 'property'))
+        self.handler_capability_tokens = build_list(self,
+                HandlerCapabilityToken, self.name,
+                dom.getElementsByTagNameNS(XMLNS_TP,
+                    'handler-capability-token'))
+        self.contact_attributes = build_list(self, ContactAttribute, self.name,
+                dom.getElementsByTagNameNS(XMLNS_TP, 'contact-attribute'))
+
+        # build a list of types in this interface
+        self.types = parse_types(self, dom, self.name)
+
+        # find out if this interface causes havoc
+        self.causes_havoc = dom.getAttributeNS(XMLNS_TP, 'causes-havoc')
+        if self.causes_havoc == '': self.causes_havoc = None
+
+        # find out what we're required to also implement
+        self.requires = map(lambda n: n.getAttribute('interface'),
+                             getChildrenByName(dom, XMLNS_TP, 'requires'))
+
+    def get_interface(self):
+        return self
+
+    def get_requires(self):
+        spec = self.get_spec()
+
+        def lookup(r):
+            try:
+                return spec.lookup(r)
+            except KeyError:
+                return External(r)
+
+        return map(lookup, self.requires)
+
+    def get_url(self):
+        return '%s.html' % self.name
+
+class Error(Base):
+    def get_url(self):
+        return 'errors.html#%s' % self.name
+
+    def get_root_namespace(self):
+        return self.namespace
+
+class DBusList(object):
+    """Stores a list of a given DBusType. Provides some basic validation to
+       determine whether or not the type is sane.
+    """
+    def __init__(self, child):
+        self.child = child
+
+        if isinstance(child, DBusType):
+            self.ultimate = child
+            self.depth = 1
+
+            if self.child.array_name == '':
+                raise UnsupportedArray("Type '%s' does not support being "
+                        "used in an array" % self.child.name)
+            else:
+                self.name = build_name(self.child.namespace,
+                                       self.child.array_name)
+                self.short_name = self.child.array_name
+
+        elif isinstance(child, DBusList):
+            self.ultimate = child.ultimate
+            self.depth = child.depth + 1
+            self.name = self.child.name + '_List'
+            self.short_name = self.child.short_name + '_List'
+
+            # check that our child can operate at this depth
+            maxdepth = int(self.ultimate.array_depth)
+            if self.depth > maxdepth:
+                raise TypeError("Type '%s' has exceeded its maximum depth (%i)" % (self, maxdepth))
+
+        else:
+            raise TypeError("DBusList can contain only a DBusType or DBusList not '%s'" % child)
+
+        self.dbus_type = 'a' + self.child.dbus_type
+
+    def get_url(self):
+        return self.ultimate.get_url()
+
+    def get_title(self):
+        return "Array of %s" % self.child.get_title()
+
+    def __repr__(self):
+        return 'Array(%s)' % self.child
+
+class DBusType(Base):
+    """The base class for all D-Bus types referred to in the spec.
+
+       Don't instantiate this class directly.
+    """
+
+    devhelp_name = "typedef"
+
+    def __init__(self, parent, namespace, dom):
+        super(DBusType, self).__init__(parent, namespace, dom)
+
+        self.dbus_type = dom.getAttribute('type')
+        self.array_name = dom.getAttribute('array-name')
+        self.array_depth = dom.getAttribute('array-depth')
+
+    def get_root_namespace(self):
+        return self.namespace
+
+    def get_breakdown(self):
+        return ''
+
+    def get_url(self):
+        if isinstance(self.parent, Interface):
+            html = self.parent.get_url()
+        else:
+            html = 'generic-types.html'
+
+        return '%s#%s' % (html, self.name)
+
+class SimpleType(DBusType):
+    def get_type_name(self):
+        return 'Simple Type'
+
+class ExternalType(DBusType):
+    def __init__(self, parent, namespace, dom):
+        super(ExternalType, self).__init__(parent, namespace, dom)
+
+        # FIXME: until we are able to cross reference external types to learn
+        # about their array names, we're just going to assume they work like
+        # this
+        self.array_name = self.short_name + '_List'
+
+    def get_type_name(self):
+        return 'External Type'
+
+class StructLike(DBusType):
+    """Base class for all D-Bus types that look kind of like Structs
+
+       Don't instantiate this class directly.
+    """
+
+    class StructMember(Typed):
+        def get_root_namespace(self):
+            return self.parent.get_root_namespace()
+
+    def __init__(self, parent, namespace, dom):
+        super(StructLike, self).__init__(parent, namespace, dom)
+
+        self.members = build_list(self, StructLike.StructMember, None,
+                        dom.getElementsByTagNameNS(XMLNS_TP, 'member'))
+
+    def get_breakdown(self):
+        str = ''
+        str += '<ul>\n'
+        for member in self.members:
+            # attempt to lookup the member up in the type system
+            t = member.get_type()
+
+            str += '<li>%s &mdash; %s' % (member.name, member.dbus_type)
+            if t: str += ' (<a href="%s" title="%s">%s</a>)' % (
+                            t.get_url(), t.get_title(), t.short_name)
+            str += '</li>\n'
+            str += member.get_docstring()
+        str += '</ul>\n'
+
+        return str
+
+class Mapping(StructLike):
+    def __init__(self, parent, namespace, dom):
+        super(Mapping, self).__init__(parent, namespace, dom)
+
+        # rewrite the D-Bus type
+        self.dbus_type = 'a{%s}' % ''.join(map(lambda m: m.dbus_type, self.members))
+
+class Struct(StructLike):
+
+    devhelp_name = "struct"
+
+    def __init__(self, parent, namespace, dom):
+        super(Struct, self).__init__(parent, namespace, dom)
+
+        # rewrite the D-Bus type
+        self.dbus_type = '(%s)' % ''.join(map(lambda m: m.dbus_type, self.members))
+
+class EnumLike(DBusType):
+    """Base class for all D-Bus types that look kind of like Enums
+
+       Don't instantiate this class directly.
+    """
+    class EnumValue(Base):
+        def __init__(self, parent, namespace, dom):
+            super(EnumLike.EnumValue, self).__init__(parent, namespace, dom)
+
+            # rewrite self.name
+            self.short_name = dom.getAttribute('suffix')
+            self.name = build_name(namespace, self.short_name)
+
+            self.value = dom.getAttribute('value')
+
+            super(EnumLike.EnumValue, self).validate()
+
+        def validate(self):
+            pass
+
+        def get_root_namespace(self):
+            return self.parent.get_root_namespace()
+
+    def get_breakdown(self):
+        str = ''
+        str += '<ul>\n'
+        for value in self.values:
+            # attempt to lookup the member.name as a type in the type system
+            str += '<li>%s (%s)</li>\n' % (value.short_name, value.value)
+            str += value.get_added()
+            str += value.get_changed()
+            str += value.get_deprecated()
+            str += value.get_docstring()
+        str += '</ul>\n'
+
+        return str
+
+class Enum(EnumLike):
+
+    devhelp_name = "enum"
+
+    def __init__(self, parent, namespace, dom):
+        super(Enum, self).__init__(parent, namespace, dom)
+
+        self.values = build_list(self, EnumLike.EnumValue, self.name,
+                        dom.getElementsByTagNameNS(XMLNS_TP, 'enumvalue'))
+
+class Flags(EnumLike):
+    def __init__(self, parent, namespace, dom):
+        super(Flags, self).__init__(parent, namespace, dom)
+
+        self.values = build_list(self, EnumLike.EnumValue, self.name,
+                        dom.getElementsByTagNameNS(XMLNS_TP, 'flag'))
+        self.flags = self.values # in case you're looking for it
+
+class TokenBase(Base):
+
+    devhelp_name = "macro"      # it's a constant, which is near enough...
+    separator = '/'
+
+    def __init__(self, parent, namespace, dom):
+        super(TokenBase, self).__init__(parent, namespace, dom)
+        self.name = namespace + '/' + self.short_name
+
+class ContactAttribute(TokenBase, Typed):
+
+    def get_type_name(self):
+        return 'Contact Attribute'
+
+class HandlerCapabilityToken(TokenBase):
+
+    def get_type_name(self):
+        return 'Handler Capability Token'
+
+    def __init__(self, parent, namespace, dom):
+        super(HandlerCapabilityToken, self).__init__(parent, namespace, dom)
+
+        is_family = dom.getAttribute('is-family')
+        assert is_family in ('yes', 'no', '')
+        self.is_family = (is_family == 'yes')
+
+class SectionBase(object):
+    """A SectionBase is an abstract base class for any type of node that can
+       contain a <tp:section>, which means the top-level Spec object, or any
+       Section object.
+
+       It should not be instantiated directly.
+    """
+
+    def __init__(self, dom, spec_namespace):
+
+        self.items = []
+
+        def recurse(nodes):
+            # iterate through the list of child nodes
+            for node in nodes:
+                if node.nodeType != node.ELEMENT_NODE: continue
+
+                if node.tagName == 'node':
+                    # recurse into this level for interesting items
+                    recurse(node.childNodes)
+                elif node.namespaceURI == XMLNS_TP and \
+                     node.localName == 'section':
+                    self.items.append(Section(self, None, node,
+                        spec_namespace))
+                elif node.tagName == 'interface':
+                    self.items.append(Interface(self, None, node,
+                        spec_namespace))
+
+        recurse(dom.childNodes)
+
+class Section(Base, SectionBase):
+    def __init__(self, parent, namespace, dom, spec_namespace):
+        Base.__init__(self, parent, namespace, dom)
+        SectionBase.__init__(self, dom, spec_namespace)
+
+    def get_root_namespace(self):
+        return None
+
+class Spec(SectionBase):
+    def __init__(self, dom, spec_namespace):
+        # build a dictionary of errors in this spec
+        try:
+            errorsnode = dom.getElementsByTagNameNS(XMLNS_TP, 'errors')[0]
+            self.errors = build_dict(self, Error,
+                        errorsnode.getAttribute('namespace'),
+                        errorsnode.getElementsByTagNameNS(XMLNS_TP, 'error'))
+        except IndexError:
+            self.errors = {}
+
+        # build a list of generic types
+        self.generic_types = reduce (lambda a, b: a + b,
+                map(lambda l: parse_types(self, l),
+                        dom.getElementsByTagNameNS(XMLNS_TP, 'generic-types')),
+                [])
+
+        # create a top-level section for this Spec
+        SectionBase.__init__(self, dom.documentElement, spec_namespace)
+
+        # build a list of interfaces in this spec
+        self.interfaces = []
+        def recurse(items):
+            for item in items:
+                if isinstance(item, Section): recurse(item.items)
+                elif isinstance(item, Interface): self.interfaces.append(item)
+        recurse(self.items)
+
+        # build a giant dictionary of everything (interfaces, methods, signals
+        # and properties); also build a dictionary of types
+        self.everything = {}
+        self.types = {}
+
+        for type in self.generic_types: self.types[type.short_name] = type
+
+        for interface in self.interfaces:
+                self.everything[interface.name] = interface
+
+                for method in interface.methods:
+                    self.everything[method.name] = method
+                for signal in interface.signals:
+                    self.everything[signal.name] = signal
+                for property in interface.properties:
+                    self.everything[property.name] = property
+                for property in interface.tpproperties:
+                    self.everything[property.name] = property
+                for token in interface.contact_attributes:
+                    self.everything[token.name] = token
+                for token in interface.handler_capability_tokens:
+                    self.everything[token.name] = token
+
+                for type in interface.types:
+                    self.types[type.short_name] = type
+
+        # get some extra bits for the HTML
+        node = dom.getElementsByTagNameNS(XMLNS_TP, 'spec')[0]
+        self.title = getText(getChildrenByName(node, XMLNS_TP, 'title')[0])
+
+        try:
+            self.version = getText(getChildrenByName(node, XMLNS_TP, 'version')[0])
+        except IndexError:
+            self.version = None
+
+        self.copyrights = map(getText,
+                              getChildrenByName(node, XMLNS_TP, 'copyright'))
+
+        try:
+            license = getChildrenByName(node, XMLNS_TP, 'license')[0]
+            license.tagName = 'div'
+            license.namespaceURI = None
+            license.setAttribute('class', 'license')
+            self.license = license.toxml()
+        except IndexError:
+            self.license = ''
+
+        # FIXME: we need to check all args for type correctness
+
+    def get_spec(self):
+        return self
+
+    def lookup(self, name, namespace=None):
+        key = build_name(namespace, name)
+        return self.everything[key]
+
+    def lookup_type(self, type_):
+        if type_.endswith('[]'):
+            return DBusList(self.lookup_type(type_[:-2]))
+
+        if type_ == '': return None
+        elif type_ in self.types:
+            return self.types[type_]
+
+        raise UnknownType("Type '%s' is unknown" % type_)
+
+    def __repr__(self):
+        return '%s(%s)' % (self.__class__.__name__, self.title)
+
+def build_dict(parent, type_, namespace, nodes):
+    """Build a dictionary of D-Bus names to Python objects representing that
+       name using the XML node for that item in the spec.
+
+       e.g. 'org.freedesktop.Telepathy.Channel' : Interface(Channel)
+
+       Works for any Python object inheriting from 'Base' whose XML node
+       implements the 'name' attribute.
+    """
+
+    def build_tuple(node):
+        o = type_(parent, namespace, node)
+        return(o.name, o)
+
+    return dict(build_tuple(n) for n in nodes)
+
+def build_list(parent, type_, namespace, nodes):
+    return map(lambda node: type_(parent, namespace, node), nodes)
+
+def parse_types(parent, dom, namespace = None):
+    """Parse all of the types of type nodes mentioned in 't' from the node
+       'dom' and insert them into the dictionary 'd'.
+    """
+    t = [
+        (SimpleType,    'simple-type'),
+        (Enum,          'enum'),
+        (Flags,         'flags'),
+        (Mapping,       'mapping'),
+        (Struct,        'struct'),
+        (ExternalType,  'external-type'),
+    ]
+
+    types = []
+
+    for (type_, tagname) in t:
+        types += build_list(parent, type_, namespace,
+                    dom.getElementsByTagNameNS(XMLNS_TP, tagname))
+
+    return types
+
+def parse(filename, spec_namespace):
+    dom = xml.dom.minidom.parse(filename)
+    xincludator.xincludate(dom, filename)
+
+    spec = Spec(dom, spec_namespace)
+
+    return spec
+
+if __name__ == '__main__':
+    parse(sys.argv[1])
diff --git a/sflphone-common/doc/dbus-api/tools/specparser.pyc b/sflphone-common/doc/dbus-api/tools/specparser.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0a26b0bf150ae052a840cee27735b00ecd9ea6b0
GIT binary patch
literal 43880
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

literal 0
HcmV?d00001

diff --git a/sflphone-common/doc/dbus-api/tools/xincludator.py b/sflphone-common/doc/dbus-api/tools/xincludator.py
new file mode 100644
index 0000000000..63e106ace1
--- /dev/null
+++ b/sflphone-common/doc/dbus-api/tools/xincludator.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+
+from sys import argv, stdout, stderr
+import codecs, locale
+import os
+import xml.dom.minidom
+
+stdout = codecs.getwriter('utf-8')(stdout)
+
+NS_XI = 'http://www.w3.org/2001/XInclude'
+
+def xincludate(dom, base, dropns = []):
+    remove_attrs = []
+    for i in xrange(dom.documentElement.attributes.length):
+        attr = dom.documentElement.attributes.item(i)
+        if attr.prefix == 'xmlns':
+            if attr.localName in dropns:
+                remove_attrs.append(attr)
+            else:
+                dropns.append(attr.localName)
+    for attr in remove_attrs:
+        dom.documentElement.removeAttributeNode(attr)
+    for include in dom.getElementsByTagNameNS(NS_XI, 'include'):
+        href = include.getAttribute('href')
+        # FIXME: assumes Unixy paths
+        filename = os.path.join(os.path.dirname(base), href)
+        subdom = xml.dom.minidom.parse(filename)
+        xincludate(subdom, filename, dropns)
+        if './' in href:
+            subdom.documentElement.setAttribute('xml:base', href)
+        include.parentNode.replaceChild(subdom.documentElement, include)
+
+if __name__ == '__main__':
+    argv = argv[1:]
+    dom = xml.dom.minidom.parse(argv[0])
+    xincludate(dom, argv[0])
+    xml = dom.toxml()
+    stdout.write(xml)
+    stdout.write('\n')
diff --git a/sflphone-common/doc/dbus-api/tools/xincludator.pyc b/sflphone-common/doc/dbus-api/tools/xincludator.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1172f2daf89056937b733fe218beea72eb72f4fa
GIT binary patch
literal 1691
zcmcckiI>aKag}#60~ByEFfceUFfbH9VqjoMVPHsMWXNV<$YErNVr0l+Vu)g5$YExP
zVrF0j$uTixvoJ)lfYmWEWV13vvBKDF3{h+_HakNU2SX|gLnbFf3Nu49BSR_^h>T)l
zNMT`!;$lc=U`SzQXklcC;$}$YVMt+P$YNs1k7Hm=Wn@TUXONF#WJu*;$mC_n<YUO>
zX8?(EFi18tGDPt*q;fN)^1_9f7#LG|88QVJni;@$GBIQdg7h{sGBBosIVqeVs~Phc
z85mQT7=krG{>}XV|NnmtW(Ed^5*7vqhQy-uvJy5>7?h;smzKbosYOM8#jFer45cM$
zx)#Oq3=9kzB_#z``ugSN<$C4Ddih1^`bGu@hWZhndC57YDXGaIBS98$GB7YWgA5F0
zWB~cLmYJcVoS}q)p@xAWlaV2li6IjlE-tYN47DssqAUzGEFkyRvNF`LGGwxXq5~8*
zrVNZAJ{v;~6GIjoL%tvbV+}JyCOb$K$ghPp42(5QP=QP~kP(c9G7KObULnU&!_43k
zE5-ma72*I6xW;yd@QRgS7jQC^a51DXF*GwVxWrCnsAXfQVPnYThDKp6J3|Q%G)|xl
zeuf%GkWDr0AU(Al3?%}f;Lj9d$P{L%;Q&e1ax#>NFw}5@xHU`+&7gF|!cfBw_JlYC
zV+|)bJVZh10b&d|ra%^pF=UE^bY?Pw+|kU$z*xA2Av}eFAy@+xSAHd+sHw=!$tx~l
zXJBB+ghT;2LNkg|(~6lG7#Q^Qi#Zq=7%FmetdbIoQ#B+&Q4Z2wQIwdMo?5~WO7r>2
zrManjC9XNCAgTlue~Bd}MVU#ZC8@>W#E_GkmtK+qHafE;H5V*aP?VaMSy2Lt>74xJ
z#2mlG+*GhcVnIP_UP_5D0|P@*YHog6sw2!Wzx<Tc5-|n_hV)dJZN*NNA&KcAy?()9
z5BUYhM|hU-Kor4smVi8yUkr9ZK_b*CS^1fHV6UfS7Uh9#2c^D>+?)~+osypmmdnk|
z%LK7OfmM)LRGbR-Uj-zz5=&CSRu!j~AgluUzaX(FHLnEhUXW9YQVVhtlT)2DGILVE
z87N2`6p*020}58Kw^NGp3-XG=#zDLt4+_NM5=KzmfE^Cv2Z8hifgDo;ikP&_oK&#W
zL2*)Cnv{~Cs{tyPz(jEz0|SG8Mt*Lperj%JPJXGrOKO>Zu$xaoMt)wZetKq!Zc%DM
zezAUWS`I`A#?Vd9&&|!x(@)7y)=x<)E!Ise$kZ>%&(A5=hx<IgNUxwWNQ!}h0p!DC
zu#JptjA9IIjG~MJi~@{;OcIRj3~Y=djKU0TjQmWBU~yhXaYnGy<KuG^GxOr(Gr=AN
zIl36c;?fWT1q~<)iYtqQK;l6l@gPtPf&(f!KP5F8nyx?zCp8GH1C$gia&z=j@^kf|
zkro6>E8rBCo?22~lv$Em6ePgFzyNkN)DfW2i;oA#M-V7=2T6jg2M2IIC@p|kV69*e
yA_zJJF4%=Ox%nxjIjMHw00D)z45I`i4<iqgC=(kKk0>uA7o#MjAR`YWFCze3RBrhI

literal 0
HcmV?d00001

diff --git a/sflphone-common/doc/misc/debian-package.txt b/sflphone-common/doc/misc/debian-package.txt
deleted file mode 100644
index 23409b79df..0000000000
--- a/sflphone-common/doc/misc/debian-package.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-***************************** HOW_TO DEBIAN PACKAGE ********************************
-
-This document aims at explaining how to build a binary debian package.
-
-- Identify the dependencies at the runtime. You can describe them in the control file.
-- Build the directory tree
-                                      
- 					packagename_version
-						|
-						|
-					   _____|______
-					   |	       |
-					  \|/	      \|/
-					 /usr        DEBIAN
-	
-- Write the control file in the DEBIAN directory (you must have at least this one file), and prerm, postinst scripts,..
-- Describe the files you need in the package, that is the files you need to make run the program (executables, libraries), docs, images, etc... and where you need it. For instance, the binary executables should be in /usr/bin, images in /usr/share, ...
-- Build the debian package:
-	dpkg --build packagename packagename.deb . 
-Note: Be careful to debian package naming conventions (packagename_version_arch.deb)
-
-- Install the package:
-	dpkg --install packagename.deb   (as a root)
-If the dependant packages are not automatically configured, launch sudo apt-get -f install. It will configure the package you need to make run the application. 
-Note: The graphical interface of the debian package manager does configures the missing dependant packages automatically.
-
-- To remove the package, run : dpkg --remove packagename   (must be root)
-	
-
-
-
-
- 
diff --git a/sflphone-common/doc/misc/echange.txt b/sflphone-common/doc/misc/echange.txt
deleted file mode 100644
index ee2058e56b..0000000000
--- a/sflphone-common/doc/misc/echange.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-  --> INVITE (20) -->         0     0 IN IP4 192.168.1.172 c=IN IP4 192.168.1.172 m=audio 56198
- <--  407 Proxy Auth
-  --> ACK 20
-  --> INVITE (21)                 0    0 IN IP4 192.168.1.172 c=IN IP4 192.168.1.172 m=audio 56198 (proxy-auth)
- <--  100 Trying (21 INVITE)
- <--  180 Ringing (21 INVITE)
- <--  200 OK             root 26195 26195 IN IP4 192.168.1.10  c=IN IP4 192.168.1.10  m=audio 15792
-  --> ACK 21
- <--  INVITE (102)       root 26195 26196 IN IP4 192.168.1.124 c=IN IP4 192.168.1.124 m=audio 53628
-  --> 100 Trying (102 INVITE)
-  --> 403 Forbidden (102 INVITE)
-  --> ACK (192.168.1.172) (102 ACK)
-  --> INVITE (103)       root 26195 26197 IN IP4 192.168.1.10  c=IN IP4 192.168.1.10  m=audio 15792
- <--  100 Trying (103 INVITE)
- <--  500 Retry Later (103 INVITE)
-#
-U 192.168.1.172:5060 -> 192.168.1.10:5060
-  SIP/2.0 500 Retry Later..Via: SIP/2.0/UDP 192.168.1.10:5060;branch=z9hG4bK2af68dba;rport=5060..From
-  : <sip:124@savoirfairelinux.net>;tag=as46619d38..To: "Yan Morin 2" <sip:sfl-127@savoirfairelinux.ne
-  t>;tag=785584300..Call-ID: 1746410696@192.168.1.172..CSeq: 103 INVITE..Retry-After: 10..Allow: INVI
-  TE, ACK, OPTIONS, CANCEL, BYE, SUBSCRIBE, NOTIFY, MESSAGE, INFO, REFER, UPDATE..Content-Length: 0..
\ No newline at end of file
diff --git a/sflphone-common/doc/misc/libsamplerate.png b/sflphone-common/doc/misc/libsamplerate.png
deleted file mode 100644
index 4d918b85924c7934527adcaf5d744e42e47030fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 31107
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
LS3j3^P6<r_7@0n|

diff --git a/sflphone-common/doc/misc/matrice-comparaison.ods b/sflphone-common/doc/misc/matrice-comparaison.ods
deleted file mode 100644
index 4543641697d34036c785a0991a5ab26b8918ec09..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10765
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

diff --git a/sflphone-common/doc/misc/outgoingcall.txt b/sflphone-common/doc/misc/outgoingcall.txt
deleted file mode 100644
index b080533812..0000000000
--- a/sflphone-common/doc/misc/outgoingcall.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-1. outgoingCall()
-1.1 generateNewCallId() (short)
-1.2 pushBackNewCall()
-1.2.1 new Call(id, type, _voIPLinkVector.at(DFT_VOIP_LINK))
-1.2.1.1 _state = NotExist;
-1.2.1.2 _voIPLink->newOutgoingCall(_id);
-1.2.1.2.1 new SipCall(callid, Manager::instance().getCodecDescVector()));
-1.2.1.2.2 _sipcallVector.push_back(sipcall);
-1.2.1.2.3 sipcall->setStandBy(true);
-1.2.2 _callVector.push_back(call);
-1.3 call->setStatus(string(TRYING_STATUS));
-1.4 call->setState(Progressing);
-1.5 call->setCallerIdNumber(to);
-1.6 call->outgoingCall(to);
-
diff --git a/sflphone-common/doc/misc/playtone.txt b/sflphone-common/doc/misc/playtone.txt
deleted file mode 100644
index f8efb9212f..0000000000
--- a/sflphone-common/doc/misc/playtone.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Appel:
-playtone s1   [joue tant que playtone = false]
-playdtmf s2 1 [si playtone = true ( playtone = false) flush, start playdtmf]
-playdtmf s3 0 []
-playdtmf s4 3 []
-
-
-
-
diff --git a/sflphone-common/doc/misc/sflphoneqt-startup.txt b/sflphone-common/doc/misc/sflphoneqt-startup.txt
deleted file mode 100644
index 5b2af9b903..0000000000
--- a/sflphone-common/doc/misc/sflphoneqt-startup.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-main.cpp: main()
--> app = new SFLPhoneApp
-   -> new SessionIO, 3999
-   -> new session
-      -> new SessionId
-      -> new SessionIO (create)
-      -> Requester::registerSession()
-   -> envoie session a ConfigurationManager
-   -> envoie session a PhoneLineManager(initialize)
-      -> new Session(session)
-      -> new Account <-- supprimé
-   -> configure le nombre de ligne de PhoneLineManager::setNbLines
-      -> new PhoneLine
-      
-   -> new Request Object (commande)
-   -> new NumericKeypad 
--> new and show splash
--> sfl = new SFLPhoneWindow
-   -> positionne fenêtre
-   -> new ConfigurationPanel
-      -> connection updates au panel
-      -> connection bouton panel a la fenetre
-   -> peinture apres 50 milli-seconde
-   -> initialisation graphique
-
--> initConnections(sfl)
-   -> associe les PhoneLineButton au PhoneLine
-   -> associe needRegister
-   -> associe soundDriverChanged
-   -> connecte les boutons de la fenetre au phonelinemanager
-   -> associe phonelinemanager au lcd (messages texet)
-   -> associe evenement daemon
-   -> associe lauching (daemon)
-   -> associe status - phone line
-   -> associe evenement update, setup
--> launch
-   -> Launcher->start()
--> PhoneLineManager::connect et attend "connected"
--> loadSkin
--> exec
-
-Evenement:
--Lorsque le PhoneLineManager est connectée (connected)
- le splash disparait splash.hide()
--Lorsque le PhoneLineManager gère le getEvents
- app.handleArg()
-
-TCPSessionIOCreator::create
--> TCPSessionIO::connected|
-   PhoneLineManagerImpl::connected|
-   -> PhoneLineManagerImpl::readyToSendStatus|
-      -> PhoneLineManagerImpl::startSession()
-         -> mSession::getCallStatus()
-   -> SFLPhoneWindow::show
-   -> splash::hide
-
-CallStatusRequest
- -> onSuccess -> PhoneLineManager::selectLine()
-              -> PhoneLineManager::handleEvents()
- -> onEntry   -> CallStatus::execute() -> PhoneLineManager::addCall()
- -> onError   -> PhoneLineManager::errorOnCallStatus()
diff --git a/sflphone-common/doc/screenshots/accounts.png b/sflphone-common/doc/screenshots/accounts.png
deleted file mode 100644
index 2a1d033892ad357faf1e79c20141ffb9b6bd1d80..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22244
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

diff --git a/sflphone-common/doc/screenshots/audio-parameters.png b/sflphone-common/doc/screenshots/audio-parameters.png
deleted file mode 100644
index 7be7badab519fd06a3c5ef00f9c2916f12511f4b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 44041
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

diff --git a/sflphone-common/doc/screenshots/desktop-notif-voice mail.png b/sflphone-common/doc/screenshots/desktop-notif-voice mail.png
deleted file mode 100644
index 4d2899877f696477da49f7cee1935e52d43189bf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18982
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
WtIS)|=E%Unz~JfX=d#Wzp$PyVM9mxk

diff --git a/sflphone-common/doc/screenshots/desktop-notification.png b/sflphone-common/doc/screenshots/desktop-notification.png
deleted file mode 100644
index c854b8252253f8fdb9c89ee41fc02b2ef2ca9c3a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 25500
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
L)z4*}Q$iB}iV)e#

diff --git a/sflphone-common/doc/screenshots/gtk gui.png b/sflphone-common/doc/screenshots/gtk gui.png
deleted file mode 100644
index 958beb4ee40b156630d41ecb7c5ce77f35cb4256..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 24548
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
YT;%q*=2-$G0|Nttr>mdKI;Vst0L~cKxc~qF

diff --git a/sflphone-common/doc/screenshots/several-calls.png b/sflphone-common/doc/screenshots/several-calls.png
deleted file mode 100644
index 65dc12dbcbba742c04f3d974bca9fe660a004756..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 24443
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

diff --git a/sflphone-common/doc/screenshots/sflphoneDialpad_gtk_0.8.png b/sflphone-common/doc/screenshots/sflphoneDialpad_gtk_0.8.png
deleted file mode 100644
index 00d6ce8a0620d1a81244146884b22cf641a26906..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33108
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
V<%bOlQ49<W44$rjF6*2UngF(?F)aW9

diff --git a/sflphone-common/doc/screenshots/sflphone_gtk_0.8.png b/sflphone-common/doc/screenshots/sflphone_gtk_0.8.png
deleted file mode 100644
index 39b01d78d6c16ed71c20c13b548b7f5f2db9ff33..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 25255
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
II;Vst07cDXH2?qr

diff --git a/sflphone-common/doc/screenshots/sflphone_metal.png b/sflphone-common/doc/screenshots/sflphone_metal.png
deleted file mode 100644
index ed34ee700257aa068667d3ebf6db1966f7cbd1c9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 100896
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
HB{Ts5i91@z

diff --git a/sflphone-common/doc/screenshots/sflphone_qt3_0.6.2.png b/sflphone-common/doc/screenshots/sflphone_qt3_0.6.2.png
deleted file mode 100644
index 3b53ce3190013f36ff1a4dc8bb54b051f51ca865..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66832
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

diff --git a/sflphone-common/doc/sflphone_video/abstract.odt b/sflphone-common/doc/sflphone_video/abstract.odt
deleted file mode 100644
index e9263f9cff27f087345e37418b363eba096349b0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23859
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
JhOZGI9soSvpP~Q&

diff --git a/sflphone-common/doc/sflphone_video/ressources.odt b/sflphone-common/doc/sflphone_video/ressources.odt
deleted file mode 100644
index 1c9cfed4cc410d060e1f4fc2bc4b959ccf66764b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20158
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

diff --git a/sflphone-common/src/dbus/instance-introspec.xml b/sflphone-common/src/dbus/instance-introspec.xml
index 6d8879e622..4b7d075cd8 100644
--- a/sflphone-common/src/dbus/instance-introspec.xml
+++ b/sflphone-common/src/dbus/instance-introspec.xml
@@ -2,7 +2,7 @@
 <node name="/instance-introspec" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
 	<interface name="org.sflphone.SFLphone.Instance">
 		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-		<p>Instances Manager to handle multiple client connections to the core.</p>
+		<p>Count the number of clients actually registered to the core. When initializing your client, you need to register it against the core by using this interface.</p>
 		</tp:docstring>
 		<method name="Register" tp:name-for-bindings="Register">
 			<tp:docstring>
-- 
GitLab


From f23e470d42aeeac99d3af3ed420943275c389cff Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Mar 2010 13:57:19 -0400
Subject: [PATCH 149/160] [#3071] Implement PJSIP's on_create_offer callback

This callback is used when receiving INVITE request without SDP.
---
 sflphone-common/src/sip/sipvoiplink.cpp | 51 +++++++++++++++++++------
 1 file changed, 39 insertions(+), 12 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 29c3dbc013..4d068c4862 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -1654,10 +1654,6 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         	_debug ("UserAgent: Unable to create RTP Session in new IP2IP call (%s:%d)", __FILE__, __LINE__);
         }
 
-        // Building the local SDP offer
-        call->getLocalSDP()->set_ip_address (addrSdp);
-        call->getLocalSDP()->create_initial_offer(account->getActiveCodecs ());
-
         // Init TLS transport if enabled
         if(account->isTlsEnabled()) {
 
@@ -1709,18 +1705,15 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
 		pj_cstr (&pjTo, toUri.c_str());
 
 		pj_str_t pjContact;
-
 		pj_cstr (&pjContact, contactUri.c_str());
 
 		// Create the dialog (UAC)
 		// (Parameters are "strduped" inside this function)
 		status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog);
-
 		PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
 
 		// 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);
 
 		// Set the appropriate transport
@@ -3659,13 +3652,9 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         addrSdp = addrToUse;
     }
 
-
     call->setConnectionState (Call::Progressing);
-
     call->setPeerNumber (peerNumber);
-
     call->setDisplayName (displayName);
-
     call->initRecFileName();
 
 
@@ -4213,7 +4202,45 @@ void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
 
 void on_create_offer(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer)
 {
-	_info("UserAgent: Create new SDP offer ");
+	_info("UserAgent: Create new SDP offer");
+
+	 /* Retrieve the call information */
+	SIPCall * call = NULL;
+	call = reinterpret_cast<SIPCall*> (inv->mod_data[_mod_ua.id]);
+
+	CallID callid = call->getCallId();
+	AccountID accountid = Manager::instance().getAccountFromCall(callid);
+
+    SIPAccount *account = dynamic_cast<SIPAccount *>(Manager::instance().getAccount(accountid));
+
+    SIPVoIPLink *link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accountid));
+
+	// Set the local address
+	std::string localAddress = link->getInterfaceAddrFromName(account->getLocalInterface ());
+	// Set SDP parameters - Set to local
+	std::string addrSdp = localAddress;
+
+	_debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str());
+
+	// If local address bound to ANY, reslove it using PJSIP
+	if (localAddress == "0.0.0.0") {
+		link->loadSIPLocalIP (&localAddress);
+	}
+
+	// Local address to appear in SDP
+	if (addrSdp == "0.0.0.0") {
+		addrSdp = localAddress;
+	}
+
+    // Set local address for RTP media
+    setCallAudioLocal (call, localAddress);
+
+    // Building the local SDP offer
+    call->getLocalSDP()->set_ip_address (addrSdp);
+    call->getLocalSDP()->create_initial_offer( account->getActiveCodecs() );
+
+    *p_offer = call->getLocalSDP()->get_local_sdp_session();
+
 }
 
 
-- 
GitLab


From 94b371f27f1930ca240636b4c414d9bce49467e0 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Wed, 24 Mar 2010 14:23:36 -0400
Subject: [PATCH 150/160] [#3074] Fix sending DTMF for IP2IP calls

ManagerImpl::sendDtmf was returning without sending DTMF on AccountNULL
---
 sflphone-common/src/managerimpl.cpp | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 2bb011d642..2ebafd7e97 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -1430,14 +1430,8 @@ bool ManagerImpl::saveConfig (void) {
 
 //THREAD=Main
 bool ManagerImpl::sendDtmf (const CallID& id, char code) {
-	AccountID accountid = getAccountFromCall(id);
 
-	if (accountid == AccountNULL) {
-		playDtmf(code);
-		return false;
-	}
-
-	int sendType = getConfigInt(SIGNALISATION, SEND_DTMF_AS);
+	AccountID accountid = getAccountFromCall(id);
 
 	bool returnValue = false;
 
-- 
GitLab


From 03ff9adb02cd0d102270bd0f38a2ba2835551342 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Wed, 24 Mar 2010 15:07:11 -0400
Subject: [PATCH 151/160] [#2521] Update D-Bus API documentation

---
 sflphone-common/libs/pjproject/autogen.sh     |    0
 .../dbus/configurationmanager-introspec.xml   | 1566 +++++++++++------
 2 files changed, 1004 insertions(+), 562 deletions(-)
 mode change 100755 => 100644 sflphone-common/libs/pjproject/autogen.sh

diff --git a/sflphone-common/libs/pjproject/autogen.sh b/sflphone-common/libs/pjproject/autogen.sh
old mode 100755
new mode 100644
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
index a34111d917..1fd7cd11fc 100644
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -4,568 +4,1010 @@
 	<interface name="org.sflphone.SFLphone.ConfigurationManager">
 
 		<tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+			Used to handle the configuration stuff: accounts settings, account registration, user preferences, ...
 		</tp:docstring>
 
 		<method name="getAccountDetails" tp:name-for-bindings="getAccountDetails">
-			<!--* Method that returns a hashtable containing the current
-			account configuration setting.
-
-		CONFIG_ACCOUNT_ENABLE
-		CONFIG_ACCOUNT_RESOLVE_ONCE
-		CONFIG_ACCOUNT_TYPE
-		HOSTNAME
-		USERNAME
-		PASSWORD
-		REALM
-		AUTHENTICATION_USERNAME
-		CONFIG_ACCOUNT_MAILBOX
-		CONFIG_ACCOUNT_REGISTRATION_EXPIRE
-		LOCAL_INTERFACE
-		PUBLISHED_SAMEAS_LOCAL
-		PUBLISHED_ADDRESS
-		LOCAL_PORT
-		PUBLISHED_PORT
-		DISPLAY_NAME
-		STUN_ENABLE
-		STUN_SERVER
-
-		REGISTRATION_STATUS
-		REGISTRATION_STATE_CODE
-		REGISTRATION_STATE_DESCRIPTION
-		SRTP_KEY_EXCHANGE
-		SRTP_ENABLE
-
-		SRTP_RTP_FALLBACK
-		ZRTP_DISPLAY_SAS
-		ZRTP_DISPLAY_SAS_ONCE
-		ZRTP_HELLO_HASH
-		ZRTP_NOT_SUPP_WARNING
-
-		TLS_LISTENER_PORT
-		TLS_ENABLE
-		TLS_CA_LIST_FILE
-		TLS_CERTIFICATE_FILE
-		TLS_PRIVATE_KEY_FILE
-
-		TLS_METHOD
-		TLS_CIPHERS
-		TLS_SERVER_NAME
-		TLS_VERIFY_SERVER
-		TLS_VERIFY_CLIENT
-		TLS_REQUIRE_CLIENT_CERTIFICATE
-		TLS_NEGOTIATION_TIMEOUT_SEC
-		TLS_NEGOTIATION_TIMEOUT_MSEC
-
-
-			@param[in] input accountID
-			@param[out] output details
-		-->
-	  <arg type="s" name="accountID" direction="in"/>
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-	  <arg type="a{ss}" name="details" direction="out"/>
-  </method>
-
-  <method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
-	  <!--* Modify the current accout parameter settings given an
-			accountID and a hash table containing the parameters to
-			update. The hash table is not required to be complete,
-			only the parameter to change may be specified. Only the
-			running parameters are updated dynamically, configuration
-			settings are stored in the configuration file when
-			SFLphone-daemon quit.
-
-		For a complete list of account settings refer to getAccountDetails
-
-			@param[in] input accountID
-			@param[in] input details
-		-->
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="a{ss}" name="details" direction="in"/>
-  </method>
-
-  <method name="setCredential" tp:name-for-bindings="setCredential">
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="i" name="index" direction="in"/>
-	  <arg type="a{ss}" name="credentialInformation" direction="in"/>
-  </method>
-
-  <method name="setNumberOfCredential" tp:name-for-bindings="setNumberOfCredential">
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="i" name="number" direction="in"/>
-  </method>
-
-  <method name="deleteAllCredential" tp:name-for-bindings="deleteAllCredential">
-	  <arg type="s" name="accountID" direction="in"/>
-  </method>
-
-  <method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
-	  <!--* Specific call to get configuration settings of the
-		IP2IP_PROFILE. Which are sligthly different since no VoIP
-		Account parameters are envolved.
-
-		ACCOUNT_ID
-		SRTP_KEY_EXCHANGE
-		SRTP_ENABLE
-		SRTP_RTP_FALLBACK
-		ZRTP_DISPLAY_SAS
-		ZRTP_HELLO_HASH
-		ZRTP_NOT_SUPP_WARNING
-		ZRTP_DISPLAY_SAS_ONCE
-		LOCAL_INTERFACE
-		LOCAL_PORT
-
-		TLS_LISTENER_PORT
-		TLS_CA_LIST_FILE
-		TLS_CERTIFICATE_FILE
-		TLS_PRIVATE_KEY_FILE
-		TLS_PASSWORD
-		TLS_METHOD
-		TLS_CIPHERS
-		TLS_SERVER_NAME
-		TLS_VERIFY_SERVER
-		TLS_VERIFY_CLIENT
-		TLS_REQUIRE_CLIENT_CERTIFICATE
-		TLS_NEGOTIATION_TIMEOUT_SEC
-		TLS_NEGOTIATION_TIMEOUT_MSEC
-
-			@param[in] input accountID
-			@param[out] output details
-		-->
-	  <arg type="a{ss}" name="details" direction="out"/>
-  </method>
-
-  <method name="setIp2IpDetails" tp:name-for-bindings="setIp2IpDetails">
-	  <!--* Modify the IP2IP_PROFILE parameter settings a hash table 
-		containing the parameters to update. The hash table is not required to be complete,
-			only the parameters to be modified may be specified. Also,
-		only the running configuration is updated dynamically, 
-			settings are stored in the configuration file when
-			SFLphone-daemon quit.
-
-		For a complete list of account settings refer to getAccountDetails
-
-			@param[in] input accountID
-			@param[in] input details
-		-->
-	  <arg type="a{ss}" name="details" direction="in"/>
-  </method>
-
-  <method name="getCredential" tp:name-for-bindings="getCredential">
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="i" name="index" direction="in"/>
-	  <arg type="a{ss}" name="credentialInformation" direction="out"/>
-  </method>
-
-  <method name="getNumberOfCredential" tp:name-for-bindings="getNumberOfCredential">
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="i" name="numberOfCredential" direction="out"/>
-  </method>
-
-  <method name="addAccount" tp:name-for-bindings="addAccount">
-	  <!--* Add a new account to the SFLphone-daemon list. If no
-		details are specified, default parameters are used.
-		A REGISTER is automatically sent and configuration is
-		saved if account created successfully.
-
-			@param[in] input details
-			@param[out] output accountID
-		-->
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-	  <arg type="a{ss}" name="details" direction="in"/>
-	  <arg type="s" name="createdAccountId" direction="out"/>
-  </method>
-
-  <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
-	  <!--* Update the account list given a new list of accountID. If no account is specified
-		for a call, the first one in the list will be used.
-
-			@param[in] input order
-		-->
-	  <arg type="s" name="order" direction="in"/>
-  </method>
-
-  <method name="removeAccount" tp:name-for-bindings="removeAccount">
-	  <!--* Delete an account from SFLphone-daemon list and erase
-		account parameters from configuration file. 
-
-			@param[in] input accountID
-		-->
-	  <arg type="s" name="accoundID" direction="in"/>
-  </method>
-
-  <method name="getAccountList" tp:name-for-bindings="getAccountList">
-	  <!--* Get teh accountlist as stored in SFLphone-daemon.
-
-			@param[in] input accountID
-		-->
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="sendRegister" tp:name-for-bindings="sendRegister">
-	  <!--* Send accout registration request to PBX server. Register
-		the account if expire=1, unregister if expire=0.
-
-			@param[in] input accountID
-		-->
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="i" name="expire" direction="in"/>
-  </method>
-
-  <!--      ///////////////////////               -->
-
-  <!-- Various audio-related methods   -->
-
-  <method name="getToneLocaleList" tp:name-for-bindings="getToneLocaleList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getVersion" tp:name-for-bindings="getVersion">
-	  <arg type="s" name="version" direction="out"/>
-  </method>
-
-  <method name="getRingtoneList" tp:name-for-bindings="getRingtoneList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getPlaybackDeviceList" tp:name-for-bindings="getPlaybackDeviceList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getRecordDeviceList" tp:name-for-bindings="getRecordDeviceList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="isRingtoneEnabled" tp:name-for-bindings="isRingtoneEnabled">
-	  <arg type="i" name="bool" direction="out"/>
-  </method>
-
-  <method name="ringtoneEnabled" tp:name-for-bindings="ringtoneEnabled">
-  </method>
-
-  <method name="getRingtoneChoice" tp:name-for-bindings="getRingtoneChoice">
-	  <arg type="s" name="tone" direction="out"/>
-  </method>
-
-  <method name="setRingtoneChoice" tp:name-for-bindings="setRingtoneChoice">
-	  <arg type="s" name="tone" direction="in"/>
-  </method>
-
-  <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
-	  <arg type="i" name="api" direction="out"/>
-  </method>
-
-  <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
-	  <arg type="i" name="api" direction="in"/>
-  </method>
-
-  <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
-	  <arg type="s" name="rec" direction="out"/>
-  </method>
-
-  <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
-	  <arg type="s" name="rec" direction="in"/>
-  </method>
-
-  <!--      ///////////////////////               -->
-
-  <!-- Codecs-related methods -->
-
-  <method name="getCodecList" tp:name-for-bindings="getCodecList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getCodecDetails" tp:name-for-bindings="getCodecDetails">
-	  <arg type="i" name="payload" direction="in"/>
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="details" direction="out"/>
-  </method>
-
-  <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="setActiveCodecList" tp:name-for-bindings="setActiveCodecList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-	  <arg type="as" name="list" direction="in"/>
-	  <arg type="s" name="accountID" direction="in"/>
-  </method>
-
-
-  <!-- Audio devices methods -->
-
-  <method name="getInputAudioPluginList" tp:name-for-bindings="getInputAudioPluginList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getOutputAudioPluginList" tp:name-for-bindings="getOutputAudioPluginList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="setInputAudioPlugin" tp:name-for-bindings="setInputAudioPlugin">
-	  <arg type="s" name="audioPlugin" direction="in"/>
-  </method>
-
-  <method name="setOutputAudioPlugin" tp:name-for-bindings="setOutputAudioPlugin">
-	  <arg type="s" name="audioPlugin" direction="in"/>
-  </method>
-
-  <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-	  <arg type="i" name="index" direction="in"/>
-  </method>
-
-  <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
-	  <arg type="i" name="index" direction="in"/>
-  </method>
-
-  <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
-	  <arg type="s" name="name" direction="in"/>
-	  <arg type="i" name="index" direction="out"/>
-  </method>
-
-  <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
-	  <arg type="s" name="plugin" direction="out"/>
-  </method>
-
-  <!--    General Settings Panel         -->
-
-  <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing">
-	  <arg type="b" name="res" direction="out"/>
-  </method>
-
-  <method name="setMd5CredentialHashing" tp:name-for-bindings="setMd5CredentialHashing">
-	  <arg type="b" name="enabled" direction="in"/>
-  </method>
-
-  <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
-	  <arg type="i" name="res" direction="out"/>
-  </method>
-
-  <method name="setNotify" tp:name-for-bindings="setNotify">
-  </method>
-
-  <method name="getNotify" tp:name-for-bindings="getNotify">
-	  <arg type="i" name="level" direction="out"/>
-  </method>
-
-  <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
-  </method>
-
-  <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
-	  <arg type="i" name="level" direction="out"/>
-  </method>
-
-  <method name="getDialpad" tp:name-for-bindings="getDialpad">
-	  <arg type="i" name="state" direction="out"/>
-  </method>
-
-  <method name="setDialpad" tp:name-for-bindings="setDialpad">
-	  <arg type="b" name="display" direction="in"/>
-  </method>
-
-  <method name="getSearchbar" tp:name-for-bindings="getSearchbar">
-	  <arg type="i" name="state" direction="out"/>
-  </method>
-
-  <method name="setSearchbar" tp:name-for-bindings="setSearchbar">
-  </method>
-
-  <method name="setHistoryEnabled" tp:name-for-bindings="setHistoryEnabled">
-  </method>
-
-  <method name="getHistoryEnabled" tp:name-for-bindings="getHistoryEnabled">
-	  <arg type="s" name="state" direction="out"/>
-  </method>
-
-  <method name="getVolumeControls" tp:name-for-bindings="getVolumeControls">
-	  <arg type="i" name="state" direction="out"/>
-  </method>
-
-  <method name="setVolumeControls" tp:name-for-bindings="setVolumeControls">
-	  <arg type="b" name="display" direction="in"/>
-  </method>
-
-  <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
-	  <arg type="i" name="days" direction="out"/>
-  </method>
-
-  <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
-	  <arg type="i" name="days" direction="in"/>
-  </method>
-
-  <method name="startHidden" tp:name-for-bindings="startHidden">
-  </method>
-
-  <method name="isStartHidden" tp:name-for-bindings="isStartHidden">
-	  <arg type="i" name="state" direction="out"/>
-  </method>
-
-  <method name="popupMode" tp:name-for-bindings="popupMode">
-	  <arg type="i" name="state" direction="out"/>
-  </method>
-
-  <method name="switchPopupMode" tp:name-for-bindings="switchPopupMode">
-  </method>
-
-  <method name="getWindowWidth" tp:name-for-bindings="getWindowWidth">
-	  <arg type="i" name="width" direction="out"/>
-  </method>
-
-  <method name="getWindowHeight" tp:name-for-bindings="getWindowHeight">
-	  <arg type="i" name="height" direction="out"/>
-  </method>
-
-  <method name="setWindowWidth" tp:name-for-bindings="setWindowWidth">
-	  <arg type="i" name="width" direction="in"/>
-  </method>
-
-  <method name="setWindowHeight" tp:name-for-bindings="setWindowHeight">
-	  <arg type="i" name="height" direction="in"/>
-  </method>
-
-  <method name="getWindowPositionX" tp:name-for-bindings="getWindowPositionX">
-	  <arg type="i" name="posX" direction="out"/>
-  </method>
-
-  <method name="setWindowPositionX" tp:name-for-bindings="setWindowPositionX">
-	  <arg type="i" name="posX" direction="in"/>
-  </method>
-
-  <method name="getWindowPositionY" tp:name-for-bindings="getWindowPositionY">
-	  <arg type="i" name="posY" direction="out"/>
-  </method>
-
-  <method name="setWindowPositionY" tp:name-for-bindings="setWindowPositionY">
-	  <arg type="i" name="posY" direction="in"/>
-  </method>
-
-  <method name="enableStatusIcon" tp:name-for-bindings="enableStatusIcon">
-	  <arg type="s" name="value" direction="in"/>
-  </method>
-
-  <method name="isStatusIconEnabled" tp:name-for-bindings="isStatusIconEnabled">
-	  <arg type="s" name="value" direction="out"/>
-  </method>
-
-
-  <!-- Addressbook configuration -->
-  <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
-	  <arg type="a{si}" name="settings" direction="out"/>
-  </method>
-
-  <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
-	  <arg type="a{si}" name="settings" direction="in"/>
-  </method>
-
-  <!-- Addressbook list -->
-  <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="settings" direction="out"/>
-  </method>
-
-  <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
-	  <arg type="as" name="settings" direction="in"/>
-  </method>
-
-  <!-- Hook configuration -->
-  <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-	  <arg type="a{ss}" name="settings" direction="out"/>
-  </method>
-
-  <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-	  <arg type="a{ss}" name="settings" direction="in"/>
-  </method>
-
-  <method name="getHistory" tp:name-for-bindings="getHistory">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-	  <arg type="a{ss}" name="entries" direction="out"/>
-  </method>
-
-  <method name="setHistory" tp:name-for-bindings="setHistory">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
-	  <arg type="a{ss}" name="entries" direction="in"/>
-  </method>
-
-  <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
-  </signal>  
-
-  <signal name="errorAlert" tp:name-for-bindings="errorAlert">
-	  <arg type="i" name="code"/>
-  </signal> 
-
-  <!-- TLS Methods -->
-  <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
-	  <arg type="a{ss}" name="details" direction="out"/>
-  </method>
-
-  <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
-	  <arg type="s" name="accountID" direction="in"/>
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
-	  <arg type="a{ss}" name="details" direction="out"/>
-  </method>
-
-  <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-	  <arg type="s" name="accountID" direction="in"/>
-	  <arg type="a{ss}" name="details" direction="in"/>
-  </method>
-
-  <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
-	  <arg type="s" name="interface" direction="in"/>
-	  <arg type="s" name="address" direction="out"/>
-  </method>
-
-  <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
-	  <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-	  <arg type="as" name="list" direction="out"/>
-  </method>
-
-  <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
-	  <arg type="a{si}" name="shortcutsMap" direction="out"/>
-  </method>
-
-  <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
-	  <arg type="a{si}" name="shortcutsMap" direction="in"/>
-  </method>
-  </interface>
-</node>
+			<tp:docstring>
+				Get all parameters of the specified account.
+			</tp:docstring>
+			<arg type="s" name="accountID" direction="in">
+				<tp:docstring>
+					The account ID
+				</tp:docstring>
+			</arg>
+			<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+			<arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
+				<tp:docstring>
+					The available keys / parameters are:
+					<ul>
+						<li>CONFIG_ACCOUNT_ENABLE:	True or False (Default: True)</li>
+						<li>CONFIG_ACCOUNT_RESOLVE_ONCE</li>
+						<li>CONFIG_ACCOUNT_TYPE: SIP or IAX2 (Default: SIP)</li>
+						<li>HOSTNAME: The IP adress or hostname of the registrar</li>
+						<li>USERNAME: The username (or extension) of the account</li>
+						<li>PASSWORD: The password associated to the account</li>
+						<li>REALM</li>
+						<li>AUTHENTICATION_USERNAME</li>
+						<li>CONFIG_ACCOUNT_MAILBOX: Number to dial to access the voicemail box</li>
+						<li>CONFIG_ACCOUNT_REGISTRATION_EXPIRE: SIP header expiration value (Default: 1600)</li>
+						<li>LOCAL_INTERFACE: The network interface (Default: eth0)</li>
+						<li>PUBLISHED_SAMEAS_LOCAL: If False, the published address equals the local address. This is the default.</li>
+						<li>PUBLISHED_ADDRESS: The SIP published address</li>
+						<li>LOCAL_PORT: The SIP listening port (Default: 5060)</li>
+						<li>PUBLISHED_PORT: The SIP published port</li>
+						<li>DISPLAY_NAMEL: The display name</li>
+						<li>STUN_ENABLE: True or False (Default: False)</li>
+						<li>STUN_SERVER: The STUN server address</li>
+						<li>REGISTRATION_STATUS: The account registration status. Should be Registered to make calls.</li>
+						<li>REGISTRATION_STATE_CODE</li>
+						<li>REGISTRATION_STATE_DESCRIPTION</li>
+						<li>SRTP_KEY_EXCHANGE</li>
+						<li>SRTP_ENABLE: Whether or not voice communication are encrypted - True or False (Default: False)</li>
+						<li>SRTP_RTP_FALLBACK</li>
+						<li>ZRTP_DISPLAY_SAS</li>
+						<li>ZRTP_DISPLAY_SAS_ONCE</li>
+						<li>ZRTP_HELLO_HASH</li>
+						<li>ZRTP_NOT_SUPP_WARNING</li>
+						<li>TLS_LISTENER_PORT: TLS listening port (Default: 5061)</li>
+						<li>TLS_ENABLE: Whether or not signalling is encrypted - True or False (Default: False)</li>
+						<li>TLS_CA_LIST_FILE</li>
+						<li>TLS_CERTIFICATE_FILE</li>
+						<li>TLS_PRIVATE_KEY_FILE</li>
+						<li>TLS_METHOD</li>
+						<li>TLS_CIPHERS</li>
+						<li>TLS_SERVER_NAME</li>
+						<li>TLS_VERIFY_SERVER</li>
+						<li>TLS_VERIFY_CLIENT</li>
+						<li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
+						<li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
+						<li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
+					</ul>
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="setAccountDetails" tp:name-for-bindings="setAccountDetails">
+			<tp:docstring>
+				Send new account parameters, or account parameters changes, to the core. The hash table is not required to be complete, only the updated parameters may be specified.
+				<tp:rationale>Account settings are written to the configuration file when sflphone properly quits.</tp:rationale>
+				<tp:rationale>After calling this method, the core will emit the signal <tp:member-ref>accountsChanged</tp:member-ref> with the updated data. The client must subscribe to this signal and use it to update its internal data structure.</tp:rationale>
+			</tp:docstring>
+			<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+			<arg type="s" name="accountID" direction="in">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+			<arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="setCredential" tp:name-for-bindings="setCredential">
+			<tp:docstring>
+			</tp:docstring>
+
+			<arg type="s" name="accountID" direction="in">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+			<arg type="i" name="index" direction="in">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+			<arg type="a{ss}" name="credentialInformation" direction="in" tp:type="String_String_Map">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="setNumberOfCredential" tp:name-for-bindings="setNumberOfCredential">
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="accountID" direction="in">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+			<arg type="i" name="number" direction="in">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="deleteAllCredential" tp:name-for-bindings="deleteAllCredential">
+			<tp:docstring>
+			</tp:docstring>
+			<arg type="s" name="accountID" direction="in">
+				<tp:docstring>
+				</tp:docstring>
+			</arg>
+		</method>
+
+		<method name="getIp2IpDetails" tp:name-for-bindings="getIp2IpDetails">
+			<tp:docstring>
+				Get configuration settings of the IP2IP_PROFILE. They are sligthly different from account settings since no VoIP accounts are involved.
+			</tp:docstring>
+			<arg type="a{ss}" name="details" direction="out" tp:type="String_String_Map">
+				<tp:docstring>
+					Available parameters are:
+					<ul>
+						<li>ACCOUNT_ID</li>
+						<li>SRTP_KEY_EXCHANGE</li>
+						<li>SRTP_ENABLE</li>
+						<li>SRTP_RTP_FALLBACK</li>
+						<li>ZRTP_DISPLAY_SAS</li>
+						<li>ZRTP_HELLO_HASH</li>
+						<li>ZRTP_NOT_SUPP_WARNING</li>
+						<li>ZRTP_DISPLAY_SAS_ONCE</li>
+						<li>LOCAL_INTERFACE</li>
+						<li>LOCAL_PORT</li>
+						<li>TLS_LISTENER_PORT</li>
+						<li>TLS_CA_LIST_FILE</li>
+						<li>TLS_CERTIFICATE_FILE</li>
+						<li>TLS_PRIVATE_KEY_FILE</li>
+						<li>TLS_PASSWORD</li>
+						<li>TLS_METHOD</li>
+						<li>TLS_CIPHERS</li>
+						<li>TLS_SERVER_NAME</li>
+						<li>TLS_VERIFY_SERVER</li>
+						<li>TLS_VERIFY_CLIENT</li>
+						<li>TLS_REQUIRE_CLIENT_CERTIFICATE</li>
+						<li>TLS_NEGOTIATION_TIMEOUT_SEC</li>
+						<li>TLS_NEGOTIATION_TIMEOUT_MSEC</li>
+						</ul>
+					</tp:docstring>
+				</arg>
+			</method>
+
+			<method name="setIp2IpDetails" tp:name-for-bindings="setIp2IpDetails">
+				<tp:docstring>
+					Same as <tp:member-ref>getAccountDetails</tp:member-ref>, but for the IP-to-IP profile.
+				</tp:docstring>
+		   <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map">
+			   <tp:docstring>
+				   The map of parameters. See <tp:member-ref>getIp2IpDetails</tp:member-ref> for complete reference.
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getCredential" tp:name-for-bindings="getCredential">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="i" name="index" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="a{ss}" name="credentialInformation" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getNumberOfCredential" tp:name-for-bindings="getNumberOfCredential">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="i" name="numberOfCredential" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="addAccount" tp:name-for-bindings="addAccount">
+		   <tp:docstring>
+			   Add a new account. When created, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+			   <tp:rationale>If no details are specified, the default parameters are used.</tp:rationale>
+			   <tp:rationale>The core tries to register the account as soon it is created.</tp:rationale>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+		   <arg type="a{ss}" name="details" direction="in"  tp:type="String_String_Map">
+			   <tp:docstring>
+					The new account settings
+			   </tp:docstring>
+		   </arg>
+		   <arg type="s" name="createdAccountId" direction="out">
+			   <tp:docstring>
+					A new account ID
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setAccountsOrder" tp:name-for-bindings="setAccountsOrder">
+		   <tp:docstring>
+				Update the accounts order.
+				<tp:rationale>When placing a call, the first registered account in the list is used.</tp:rationale>
+		   </tp:docstring>
+		   <arg type="s" name="order" direction="in">
+			   <tp:docstring>
+				   An ordered list of account IDs, delimited by '/'
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="removeAccount" tp:name-for-bindings="removeAccount">
+		   <tp:docstring>
+			   Remove an existing account. When removed, the signal <tp:member-ref>accountsChanged</tp:member-ref> is emitted. The clients must then call <tp:member-ref>getAccountList</tp:member-ref> to update their internal data structure.
+		   </tp:docstring>
+		   <arg type="s" name="accoundID" direction="in">
+			   <tp:docstring>
+					The account to remove, identified by its ID
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAccountList" tp:name-for-bindings="getAccountList">
+		   <tp:docstring>
+				Get a list of all created accounts, as stored by the core.
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+				   A list of account IDs
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="sendRegister" tp:name-for-bindings="sendRegister">
+		   <tp:docstring>
+				Send account registration (REGISTER) to the registrar.
+		   </tp:docstring>
+		   the account if expire=1, unregister if expire=0.
+
+		   @param[in] input accountID
+		   -->
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+					The account ID
+			   </tp:docstring>
+		   </arg>
+		   <arg type="i" name="expire" direction="in">
+			   <tp:docstring>
+					<p>To register, expire must be 1.</p>
+					<p>To un-register, expire must be 0.</p>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getToneLocaleList" tp:name-for-bindings="getToneLocaleList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getVersion" tp:name-for-bindings="getVersion">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="version" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getRingtoneList" tp:name-for-bindings="getRingtoneList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getPlaybackDeviceList" tp:name-for-bindings="getPlaybackDeviceList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getRecordDeviceList" tp:name-for-bindings="getRecordDeviceList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="isRingtoneEnabled" tp:name-for-bindings="isRingtoneEnabled">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="bool" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="ringtoneEnabled" tp:name-for-bindings="ringtoneEnabled">
+		   <tp:docstring>
+		   </tp:docstring>
+	   </method>
+
+	   <method name="getRingtoneChoice" tp:name-for-bindings="getRingtoneChoice">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="tone" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setRingtoneChoice" tp:name-for-bindings="setRingtoneChoice">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="tone" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAudioManager" tp:name-for-bindings="getAudioManager">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="api" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="api" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getRecordPath" tp:name-for-bindings="getRecordPath">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="rec" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setRecordPath" tp:name-for-bindings="setRecordPath">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="rec" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <!--      ///////////////////////               -->
+
+	   <!-- Codecs-related methods -->
+
+	   <method name="getCodecList" tp:name-for-bindings="getCodecList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getCodecDetails" tp:name-for-bindings="getCodecDetails">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="payload" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="details" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setActiveCodecList" tp:name-for-bindings="setActiveCodecList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+		   <arg type="as" name="list" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+
+	   <!-- Audio devices methods -->
+
+	   <method name="getInputAudioPluginList" tp:name-for-bindings="getInputAudioPluginList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getOutputAudioPluginList" tp:name-for-bindings="getOutputAudioPluginList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setInputAudioPlugin" tp:name-for-bindings="setInputAudioPlugin">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="audioPlugin" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setOutputAudioPlugin" tp:name-for-bindings="setOutputAudioPlugin">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="audioPlugin" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="index" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAudioInputDeviceList" tp:name-for-bindings="getAudioInputDeviceList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="index" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAudioDeviceIndex" tp:name-for-bindings="getAudioDeviceIndex">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="name" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="i" name="index" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getCurrentAudioOutputPlugin" tp:name-for-bindings="getCurrentAudioOutputPlugin">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="plugin" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <!--    General Settings Panel         -->
+
+	   <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="b" name="res" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setMd5CredentialHashing" tp:name-for-bindings="setMd5CredentialHashing">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="b" name="enabled" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="isIax2Enabled" tp:name-for-bindings="isIax2Enabled">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="res" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </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>
+	   </method>
+
+	   <method name="getMailNotify" tp:name-for-bindings="getMailNotify">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="level" direction="out">
+			   <tp:docstring>
+			   </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>
+		   </tp:docstring>
+		   <arg type="i" name="days" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setHistoryLimit" tp:name-for-bindings="setHistoryLimit">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="i" name="days" direction="in">
+			   <tp:docstring>
+			   </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>
+		   </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>
+		   </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>
+		   </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>
+		   </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>
+		   </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>
+		   </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>
+		   </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>
+		   </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>
+		   </tp:docstring>
+		   <arg type="s" name="value" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="isStatusIconEnabled" tp:name-for-bindings="isStatusIconEnabled">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="value" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+
+	   <!-- Addressbook configuration -->
+	   <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+		   <arg type="a{si}" name="settings" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setAddressbookSettings" tp:name-for-bindings="setAddressbookSettings">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringInt"/>
+		   <arg type="a{si}" name="settings" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <!-- Addressbook list -->
+	   <method name="getAddressbookList" tp:name-for-bindings="getAddressbookList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="settings" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setAddressbookList" tp:name-for-bindings="setAddressbookList">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="VectorString"/>
+		   <arg type="as" name="settings" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <!-- Hook configuration -->
+	   <method name="getHookSettings" tp:name-for-bindings="getHookSettings">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+		   <arg type="a{ss}" name="settings" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setHookSettings" tp:name-for-bindings="setHookSettings">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+		   <arg type="a{ss}" name="settings" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getHistory" tp:name-for-bindings="getHistory">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+		   <arg type="a{ss}" name="entries" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setHistory" tp:name-for-bindings="setHistory">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
+		   <arg type="a{ss}" name="entries" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
+	   </signal>  
+
+	   <signal name="errorAlert" tp:name-for-bindings="errorAlert">
+		   <arg type="i" name="code">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </signal> 
+
+	   <!-- TLS Methods -->
+	   <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getTlsSettingsDefault" tp:name-for-bindings="getTlsSettingsDefault">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="a{ss}" name="details" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
+		   <arg type="a{ss}" name="details" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
+		   <arg type="s" name="accountID" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="a{ss}" name="details" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="interface" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+		   <arg type="s" name="address" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="a{si}" name="shortcutsMap" direction="out">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setShortcuts" tp:name-for-bindings="setShortcuts">
+		   <tp:docstring>
+		   </tp:docstring>
+		   <arg type="a{si}" name="shortcutsMap" direction="in">
+			   <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+   </interface>
+	   </node>
-- 
GitLab


From 5be8865799da608fe9d5a1c46a7a55614096b10a Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Wed, 24 Mar 2010 18:12:36 -0400
Subject: [PATCH 152/160] [#2535] Cleaned unit test

---
 sflphone-common/test/Makefile.am            |   31 +-
 sflphone-common/test/accounttest.cpp        |    3 +-
 sflphone-common/test/accounttest.h          |    2 +
 sflphone-common/test/audiolayertest.cpp     |  133 ++
 sflphone-common/test/audiolayertest.h       |   72 +
 sflphone-common/test/configurationtest.cpp  |  141 ++
 sflphone-common/test/configurationtest.h    |   88 +
 sflphone-common/test/constants.h            |   18 +
 sflphone-common/test/history-sample         |   21 +
 sflphone-common/test/history-sample.tpl     |   20 +
 sflphone-common/test/historytest.cpp        |  215 +++
 sflphone-common/test/historytest.h          |   94 +
 sflphone-common/test/hookmanagertest.cpp    |   60 +
 sflphone-common/test/hookmanagertest.h      |   71 +
 sflphone-common/test/main.cpp               |   88 +-
 sflphone-common/test/mainbuffertest.cpp     | 1758 +++++++++++++++++++
 sflphone-common/test/mainbuffertest.h       |  137 ++
 sflphone-common/test/numbercleanertest.cpp  |  139 ++
 sflphone-common/test/numbercleanertest.h    |   99 ++
 sflphone-common/test/pluginmanagertest.cpp  |  124 ++
 sflphone-common/test/pluginmanagertest.h    |   95 +
 sflphone-common/test/rtptest.cpp            |  110 ++
 sflphone-common/test/rtptest.h              |  110 ++
 sflphone-common/test/sdesnegotiatortest.cpp |  223 +++
 sflphone-common/test/sdesnegotiatortest.h   |  107 ++
 sflphone-common/test/sflphonedrc-sample     |   74 +
 sflphone-common/test/validator.cpp          |    4 +
 sflphone-common/test/validator.h            |    1 +
 28 files changed, 4017 insertions(+), 21 deletions(-)
 create mode 100644 sflphone-common/test/audiolayertest.cpp
 create mode 100644 sflphone-common/test/audiolayertest.h
 create mode 100644 sflphone-common/test/configurationtest.cpp
 create mode 100644 sflphone-common/test/configurationtest.h
 create mode 100644 sflphone-common/test/constants.h
 create mode 100644 sflphone-common/test/history-sample
 create mode 100644 sflphone-common/test/history-sample.tpl
 create mode 100644 sflphone-common/test/historytest.cpp
 create mode 100644 sflphone-common/test/historytest.h
 create mode 100644 sflphone-common/test/hookmanagertest.cpp
 create mode 100644 sflphone-common/test/hookmanagertest.h
 create mode 100644 sflphone-common/test/mainbuffertest.cpp
 create mode 100644 sflphone-common/test/mainbuffertest.h
 create mode 100644 sflphone-common/test/numbercleanertest.cpp
 create mode 100644 sflphone-common/test/numbercleanertest.h
 create mode 100644 sflphone-common/test/pluginmanagertest.cpp
 create mode 100644 sflphone-common/test/pluginmanagertest.h
 create mode 100644 sflphone-common/test/rtptest.cpp
 create mode 100644 sflphone-common/test/rtptest.h
 create mode 100644 sflphone-common/test/sdesnegotiatortest.cpp
 create mode 100644 sflphone-common/test/sdesnegotiatortest.h
 create mode 100644 sflphone-common/test/sflphonedrc-sample

diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am
index 46a90e6ccf..c2371cd96a 100644
--- a/sflphone-common/test/Makefile.am
+++ b/sflphone-common/test/Makefile.am
@@ -1,16 +1,33 @@
 include ../globals.mak
 
-TESTS = main
+TESTS = test
 check_PROGRAMS = $(TESTS)
-main_CXXFLAGS = $(CPPUNIT_CFLAGS)
-main_LDADD = $(LLIBS)
-main_LDFLAGS = -ldl
-main_SOURCES = main.cpp \
+test_CXXFLAGS = $(CPPUNIT_CFLAGS)
+test_LDADD = $(LLIBS)
+test_LDFLAGS = -ldl
+test_SOURCES = main.cpp \
 	validator.cpp \
 	validator.h \
 	accounttest.h \
-	accounttest.cpp
-
+	accounttest.cpp \
+	audiolayertest.h \
+	audiolayertest.cpp \
+	configurationtest.h \
+	configurationtest.cpp \
+	historytest.h \
+	historytest.cpp \
+	hookmanagertest.h \
+	hookmanagertest.cpp \
+	mainbuffertest.h \
+	mainbuffertest.cpp \
+	numbercleanertest.h \
+	numbercleanertest.cpp \
+	pluginmanagertest.h \
+	pluginmanagertest.cpp \
+	rtptest.h \
+	rtptest.cpp \
+	sdesnegotiatortest.h \
+	sdesnegotiatortest.cpp
 
 
 
diff --git a/sflphone-common/test/accounttest.cpp b/sflphone-common/test/accounttest.cpp
index c4e645cb9f..412a1b8b96 100644
--- a/sflphone-common/test/accounttest.cpp
+++ b/sflphone-common/test/accounttest.cpp
@@ -24,9 +24,8 @@
 #include "logger.h"
 #include "validator.h"
 
-CPPUNIT_TEST_SUITE_REGISTRATION( AccountTest );
-
 void AccountTest::TestAddRemove(void) {
+	_debug ("-------------------- AccountTest::TestAddRemove --------------------\n");
 
 	std::map<std::string, std::string> details;
 	details[CONFIG_ACCOUNT_TYPE] = "SIP";
diff --git a/sflphone-common/test/accounttest.h b/sflphone-common/test/accounttest.h
index 6422684adb..61541c3068 100644
--- a/sflphone-common/test/accounttest.h
+++ b/sflphone-common/test/accounttest.h
@@ -32,5 +32,7 @@ class AccountTest : public CppUnit::TestFixture {
  public:
   void TestAddRemove(void);
 };
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(AccountTest, "AccountTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( AccountTest );
 
 #endif /* ACCOUNTTEST_H_ */
diff --git a/sflphone-common/test/audiolayertest.cpp b/sflphone-common/test/audiolayertest.cpp
new file mode 100644
index 0000000000..7ea619ae2a
--- /dev/null
+++ b/sflphone-common/test/audiolayertest.cpp
@@ -0,0 +1,133 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <sstream>
+
+#include "audiolayertest.h"
+
+#include <unistd.h>
+
+using std::cout;
+using std::endl;
+
+void AudioLayerTest::testAudioLayerConfig() {
+	_debug ("-------------------- AudioLayerTest::testAudioLayerConfig --------------------\n");
+
+	int sampling_rate = Manager::instance().getConfigInt(AUDIO,
+			AUDIO_SAMPLE_RATE);
+	int frame_size = Manager::instance().getConfigInt(AUDIO, ALSA_FRAME_SIZE);
+
+	int layer = Manager::instance().getAudioDriver()->getLayerType();
+
+	if (layer != ALSA)
+		Manager::instance().switchAudioManager();
+
+	// TODO: Fix tests
+	//CPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getSampleRate() == sampling_rate);
+
+	//CPPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getFrameSize() == frame_size);
+}
+
+void AudioLayerTest::testAudioLayerSwitch() {
+	_debug ("-------------------- AudioLayerTest::testAudioLayerSwitch --------------------\n");
+
+	int previous_layer = Manager::instance().getAudioDriver()->getLayerType();
+
+	for (int i = 0; i < 2; i++) {
+		_debug ("iter - %i",i);
+		Manager::instance().switchAudioManager();
+
+		if (previous_layer == ALSA) {
+			CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == PULSEAUDIO);
+		} else {
+			CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == ALSA);
+		}
+
+		previous_layer = Manager::instance().getAudioDriver()->getLayerType();
+
+		usleep(100000);
+	}
+}
+
+void AudioLayerTest::testPulseConnect() {
+	_debug ("-------------------- AudioLayerTest::testPulseConnect --------------------\n");
+
+	if (Manager::instance().getAudioDriver()->getLayerType() == ALSA)
+		return;
+
+	ManagerImpl* manager;
+	manager = &Manager::instance();
+
+	_pulselayer = (PulseLayer*) Manager::instance().getAudioDriver();
+
+	CPPUNIT_ASSERT (_pulselayer->getLayerType() == PULSEAUDIO);
+
+	std::string alsaPlugin;
+	int numCardIn, numCardOut, sampleRate, frameSize;
+
+	alsaPlugin = manager->getConfigString(AUDIO, ALSA_PLUGIN);
+	numCardIn = manager->getConfigInt(AUDIO, ALSA_CARD_ID_IN);
+	numCardOut = manager->getConfigInt(AUDIO, ALSA_CARD_ID_OUT);
+	sampleRate = manager->getConfigInt(AUDIO, AUDIO_SAMPLE_RATE);
+	frameSize = manager->getConfigInt(AUDIO, ALSA_FRAME_SIZE);
+
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
+	CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
+
+	_pulselayer->setErrorMessage(-1);
+
+	try {
+		CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true);
+	} catch (...) {
+		_debug ("Exception occured wile opening device! ");
+	}
+
+	usleep(100000);
+
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
+	CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
+
+	_debug ("-------------------------- \n");
+	_pulselayer->startStream();
+
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
+
+	// Must return No error "PA_OK" == 1
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
+	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
+
+	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()->getStreamState() == 1);
+	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
+
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true);
+	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true);
+
+	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
+	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
+
+	CPPUNIT_ASSERT (_pulselayer->disconnectAudioStream() == true);
+}
diff --git a/sflphone-common/test/audiolayertest.h b/sflphone-common/test/audiolayertest.h
new file mode 100644
index 0000000000..b67edfe19c
--- /dev/null
+++ b/sflphone-common/test/audiolayertest.h
@@ -0,0 +1,72 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+/*
+ * @file audiorecorderTest.cpp
+ * @brief       Regroups unitary tests related to the plugin manager.
+ */
+
+#ifndef _AUDIOLAYER_TEST_
+#define _AUDIOLAYER_TEST_
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "manager.h"
+
+#include "config/config.h"
+#include "user_cfg.h"
+
+#include "audio/audiolayer.h"
+#include "audio/alsa/alsalayer.h"
+#include "audio/pulseaudio/pulselayer.h"
+
+class AudioLayerTest: public CppUnit::TestFixture {
+
+CPPUNIT_TEST_SUITE( AudioLayerTest );
+		CPPUNIT_TEST( testAudioLayerConfig );
+		CPPUNIT_TEST( testPulseConnect );
+		//TODO: this test ends the test sequence when using on a alsa only system
+		//CPPUNIT_TEST(testAudioLayerSwitch);
+	CPPUNIT_TEST_SUITE_END();
+
+public:
+
+	void testAudioLayerConfig();
+	void testPulseConnect();
+	void testAudioLayerSwitch();
+
+private:
+
+	ManagerImpl* manager;
+
+	PulseLayer* _pulselayer;
+
+	int layer;
+};
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(AudioLayerTest, "AudioLayerTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( AudioLayerTest );
+
+#endif
diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp
new file mode 100644
index 0000000000..3ccee26112
--- /dev/null
+++ b/sflphone-common/test/configurationtest.cpp
@@ -0,0 +1,141 @@
+/*
+ *  Copyright (C) 2008 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <sstream>
+
+#include "configurationtest.h"
+#include "constants.h"
+
+using std::cout;
+using std::endl;
+
+void ConfigurationTest::testDefaultValueAudio() {
+	_debug ("-------------------- ConfigurationTest::testDefaultValueAudio() --------------------\n");
+
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_CARD_ID_IN) == ALSA_DFT_CARD);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_CARD_ID_OUT) == ALSA_DFT_CARD);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, AUDIO_SAMPLE_RATE) == DFT_SAMPLE_RATE);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_FRAME_SIZE) == DFT_FRAME_SIZE);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_PLUGIN) == PCM_DEFAULT);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, VOLUME_SPKR) == DFT_VOL_SPKR_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, VOLUME_MICRO) == DFT_VOL_MICRO_STR);
+}
+
+void ConfigurationTest::testDefaultValuePreferences() {
+	_debug ("-------------------- ConfigurationTest::testDefaultValuePreferences --------------------\n");
+
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, ZONE_TONE) == DFT_ZONE);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_DIALPAD) == NO_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_RINGTONE) == YES_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_SEARCHBAR) == YES_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_START) == NO_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_POPUP) == NO_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_NOTIFY) == YES_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_MAIL_NOTIFY) == NO_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_VOLUME) == NO_STR);
+	//CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, REGISTRATION_EXPIRE) == DFT_EXPIRE_VALUE);
+	//CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_AUDIO) == DFT_AUDIO_MANAGER);
+
+}
+
+void ConfigurationTest::testDefaultValueSignalisation() {
+	_debug ("-------------------- ConfigurationTest::testDefaultValueSignalisation --------------------\n");
+
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , SYMMETRIC) == YES_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PLAY_DTMF) == YES_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PLAY_TONES) == YES_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PULSE_LENGTH) == DFT_PULSE_LENGTH_STR);
+	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , SEND_DTMF_AS) == SIP_INFO_STR);
+}
+
+void ConfigurationTest::testLoadSIPAccount() {
+	_debug ("-------------------- ConfigurationTest::testLoadSIPAccount --------------------\n");
+
+	AccountMap accounts;
+	Account *current;
+	std::ostringstream ss;
+	int nb_account; // Must be 1
+
+	// Load the account from the user file
+	nb_account = Manager::instance().loadAccountMap();
+	CPPUNIT_ASSERT_EQUAL (1, nb_account);
+	// Save the account information
+	accounts = Manager::instance()._accountMap;
+
+	AccountMap::iterator iter = accounts.begin();
+	CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == true);
+
+	while (iter != accounts.end()) {
+		current = iter->second;
+		CPPUNIT_ASSERT (iter->first == current->getAccountID());
+		CPPUNIT_ASSERT (0 == current->getVoIPLink());
+		iter++;
+	}
+}
+
+void ConfigurationTest::testUnloadSIPAccount() {
+	_debug ("-------------------- ConfigurationTest::testUnloadSIPAccount --------------------\n");
+
+	AccountMap accounts;
+
+	// Load the accounts from the user file
+	Manager::instance().loadAccountMap();
+	// Unload the accounts
+	Manager::instance().unloadAccountMap();
+	// Save the account information
+	accounts = Manager::instance()._accountMap;
+
+	AccountMap::iterator iter = accounts.begin();
+	CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == false);
+
+	if (iter != accounts.end()) {
+		CPPUNIT_FAIL ("Unload account map failed\n");
+	}
+}
+
+void ConfigurationTest::testInitVolume() {
+	_debug ("-------------------- ConfigurationTest::testInitVolume --------------------\n");
+
+	Manager::instance().initVolume();
+
+	CPPUNIT_ASSERT (Manager::instance().getConfigInt (AUDIO, VOLUME_SPKR) == Manager::instance().getSpkrVolume());
+	CPPUNIT_ASSERT (Manager::instance().getConfigInt (AUDIO, VOLUME_MICRO) == Manager::instance().getMicVolume());
+}
+
+void ConfigurationTest::testInitAudioDriver() {
+	_debug ("-------------------- ConfigurationTest::testInitAudioDriver --------------------\n");
+
+	// Load the audio driver
+	Manager::instance().initAudioDriver();
+
+	// Check the creation
+
+	if (Manager::instance().getAudioDriver() == NULL)
+		CPPUNIT_FAIL ("Error while loading audio layer");
+
+	// Check if it has been created with the right type
+	if (Manager::instance().getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA)
+		CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), ALSA);
+	else if (Manager::instance().getConfigInt(PREFERENCES, CONFIG_AUDIO)
+			== PULSEAUDIO)
+		CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), PULSEAUDIO);
+	else
+		CPPUNIT_FAIL ("Wrong audio layer type");
+}
diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h
new file mode 100644
index 0000000000..7fe7c30ae0
--- /dev/null
+++ b/sflphone-common/test/configurationtest.h
@@ -0,0 +1,88 @@
+/*
+ *  Copyright (C) 2008 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+/*
+ * @file configurationTest.cpp
+ * @brief       Regroups unitary tests related to the user configuration.
+ *              Check if the default configuration has been successfully loaded
+ */
+
+#ifndef _CONFIGURATION_TEST_
+#define _CONFIGURATION_TEST_
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "manager.h"
+#include "audio/audiolayer.h"
+#include "global.h"
+#include "user_cfg.h"
+
+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_SUITE_END();
+
+public:
+	/*
+	 * Unit tests related to the audio preferences
+	 */
+	void testDefaultValueAudio();
+
+	/*
+	 * Unit tests related to the global settings
+	 */
+	void testDefaultValuePreferences();
+
+	/*
+	 * Unit tests related to the global settings
+	 */
+	void testDefaultValueSignalisation();
+
+	/*
+	 * Try to load one SIP account.
+	 * So be sure to have only one SIP account so that the test could succeed
+	 */
+	void testLoadSIPAccount();
+
+	void testUnloadSIPAccount();
+
+	void testInitVolume();
+
+	void testInitAudioDriver();
+};
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( ConfigurationTest );
+
+#endif
diff --git a/sflphone-common/test/constants.h b/sflphone-common/test/constants.h
new file mode 100644
index 0000000000..28b27a69d6
--- /dev/null
+++ b/sflphone-common/test/constants.h
@@ -0,0 +1,18 @@
+/*
+ * constants.h
+ *
+ *  Created on: 2010-03-15
+ *      Author: jb
+ */
+
+#ifndef CONSTANTS_H_
+#define CONSTANTS_H_
+
+#define YES_STR "1"
+#define NO_STR "0"
+#define HISTORY_SAMPLE  "history-sample"
+#define HISTORY_SAMPLE_SIZE     3
+#define CONFIG_SAMPLE   "sflphonedrc-sample"
+#define HUGE_HISTORY_LIMIT      20000
+
+#endif /* CONSTANTS_H_ */
diff --git a/sflphone-common/test/history-sample b/sflphone-common/test/history-sample
new file mode 100644
index 0000000000..a6f39f4ed3
--- /dev/null
+++ b/sflphone-common/test/history-sample
@@ -0,0 +1,21 @@
+[144562436]
+accountid=
+name=Savoir-faire Linux
+number=514-276-5468
+timestamp_stop=144562458
+type=0
+
+[747638685]
+accountid=Account:1239059899
+name=Emmanuel Milou
+number=136
+timestamp_stop=747638765
+type=2
+
+[775354456]
+accountid=Account:43789459478
+name=
+number=5143848557
+timestamp_stop=775354987
+type=1
+
diff --git a/sflphone-common/test/history-sample.tpl b/sflphone-common/test/history-sample.tpl
new file mode 100644
index 0000000000..221e449538
--- /dev/null
+++ b/sflphone-common/test/history-sample.tpl
@@ -0,0 +1,20 @@
+[144562436]
+number=514-276-5468
+name=Savoir-faire Linux
+type=0
+timestamp_stop=144562458
+accountid=
+
+[747638685]
+name=Emmanuel Milou
+timestamp_stop=747638765
+number=136
+type=2
+accountid=Account:1239059899
+
+[775354456]
+number=5143848557
+name=
+timestamp_stop=775354987
+type=1
+accountid=Account:43789459478
diff --git a/sflphone-common/test/historytest.cpp b/sflphone-common/test/historytest.cpp
new file mode 100644
index 0000000000..e8634b60e4
--- /dev/null
+++ b/sflphone-common/test/historytest.cpp
@@ -0,0 +1,215 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <sstream>
+
+#include "historytest.h"
+#include "manager.h"
+#include "constants.h"
+#include "validator.h"
+
+using std::cout;
+using std::endl;
+
+void HistoryTest::setUp() {
+	// Instanciate the cleaner singleton
+	history = new HistoryManager();
+}
+
+void HistoryTest::test_create_history_path() {
+	_debug ("-------------------- HistoryTest::test_create_history_path --------------------\n");
+
+	int result;
+	char *cpath;
+	std::string path;
+
+	cpath = getenv("XDG_DATA_HOME");
+	(cpath != NULL) ? path = std::string(cpath) : path = std::string(HOMEDIR)
+			+ "/.local/share/sflphone/history";
+
+	result = history->create_history_path();
+	CPPUNIT_ASSERT (result == 0);
+	CPPUNIT_ASSERT (!history->is_loaded ());
+	CPPUNIT_ASSERT (history->_history_path == path);
+}
+
+void HistoryTest::test_load_history_from_file() {
+	_debug ("-------------------- HistoryTest::test_load_history_from_file --------------------\n");
+
+	bool res;
+	Conf::ConfigTree history_list;
+
+	history->create_history_path();
+	res = history->load_history_from_file(&history_list);
+
+	CPPUNIT_ASSERT (history->is_loaded ());
+	CPPUNIT_ASSERT (res == true);
+}
+
+void HistoryTest::test_load_history_items_map() {
+	_debug ("-------------------- HistoryTest::test_load_history_items_map --------------------\n");
+
+	std::string path;
+	int nb_items;
+	Conf::ConfigTree history_list;
+
+	history->set_history_path(HISTORY_SAMPLE);
+	history->load_history_from_file(&history_list);
+	nb_items = history->load_history_items_map(&history_list,
+			HUGE_HISTORY_LIMIT);
+	CPPUNIT_ASSERT (nb_items == HISTORY_SAMPLE_SIZE);
+	CPPUNIT_ASSERT (history->get_history_size () == HISTORY_SAMPLE_SIZE);
+}
+
+void HistoryTest::test_save_history_items_map() {
+	_debug ("-------------------- HistoryTest::test_save_history_items_map --------------------\n");
+
+	std::string path;
+	int nb_items_loaded, nb_items_saved;
+	Conf::ConfigTree history_list, history_list2;
+
+	history->set_history_path(HISTORY_SAMPLE);
+	history->load_history_from_file(&history_list);
+	nb_items_loaded = history->load_history_items_map(&history_list,
+			HUGE_HISTORY_LIMIT);
+	nb_items_saved = history->save_history_items_map(&history_list2);
+	CPPUNIT_ASSERT (nb_items_loaded == nb_items_saved);
+}
+
+void HistoryTest::test_save_history_to_file() {
+	_debug ("-------------------- HistoryTest::test_save_history_to_file --------------------\n");
+
+	std::string path;
+	Conf::ConfigTree history_list, history_list2;
+	std::map<std::string, std::string> res;
+	std::map<std::string, std::string>::iterator iter;
+
+	history->set_history_path(HISTORY_SAMPLE);
+	history->load_history_from_file(&history_list);
+	history->load_history_items_map(&history_list, HUGE_HISTORY_LIMIT);
+	history->save_history_items_map(&history_list2);
+	CPPUNIT_ASSERT (history->save_history_to_file (&history_list2));
+}
+
+void HistoryTest::test_get_history_serialized() {
+	_debug ("-------------------- HistoryTest::test_get_history_serialized --------------------\n");
+
+	std::map<std::string, std::string> res;
+	std::map<std::string, std::string>::iterator iter;
+	std::string tmp;
+
+	CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+	res = history->get_history_serialized();
+	CPPUNIT_ASSERT (res.size() ==HISTORY_SAMPLE_SIZE);
+
+	// Warning - If you change the history-sample file, you must change the following lines also so that the tests could work
+	// The reference here is the file history-sample in this test directory
+	// The serialized form is: calltype%to%from%callid
+
+	// Check the first
+	tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+	CPPUNIT_ASSERT (Validator::isEqual(tmp, res ["144562436"]));
+
+	tmp = "2|136|Emmanuel Milou|747638765|Account:1239059899";
+	CPPUNIT_ASSERT (Validator::isEqual(tmp, res ["747638685"]));
+
+	// the account ID does not correspond to a loaded account
+	tmp = "1|5143848557|empty|775354987|empty";
+	CPPUNIT_ASSERT (Validator::isEqual(tmp, res ["775354456"]));
+}
+
+void HistoryTest::test_set_serialized_history() {
+	_debug ("-------------------- HistoryTest::test_set_serialized_history --------------------\n");
+
+	// We build a map to have an efficient test
+	std::map<std::string, std::string> map_test;
+	std::string tmp;
+	Conf::ConfigTree history_list;
+
+	map_test["144562436"] = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+	map_test["747638685"] = "2|136|Emmanuel Milou|747638765|Account:1239059899";
+	map_test["775354456"] = "1|5143848557|empty|775354987|Account:43789459478";
+
+	CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+	// We use a large history limit to be able to interpret results
+	CPPUNIT_ASSERT (history->set_serialized_history (map_test, HUGE_HISTORY_LIMIT) == 3);
+	CPPUNIT_ASSERT (history->get_history_size () == 3);
+
+	map_test.clear();
+	map_test = history->get_history_serialized();
+	CPPUNIT_ASSERT (map_test.size() ==3);
+
+	// Check the first
+	tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+	CPPUNIT_ASSERT (Validator::isEqual(tmp, map_test ["144562436"]));
+
+	tmp = "2|136|Emmanuel Milou|747638765|Account:1239059899";
+	CPPUNIT_ASSERT (Validator::isEqual(tmp, map_test ["747638685"]));
+
+	// the account ID does not correspond to a loaded account
+	tmp = "1|5143848557|empty|775354987|empty";
+	CPPUNIT_ASSERT (Validator::isEqual(tmp, map_test ["775354456"]));
+
+	history->save_history_items_map(&history_list);
+	CPPUNIT_ASSERT (history->save_history_to_file (&history_list));
+}
+
+void HistoryTest::test_set_serialized_history_with_limit() {
+	_debug ("-------------------- HistoryTest::test_set_serialized_history_with_limit --------------------\n");
+
+	// We build a map to have an efficient test
+	std::map<std::string, std::string> map_test;
+	std::string tmp;
+	Conf::ConfigTree history_list;
+	time_t current, day = 86400; // One day in unix timestamp
+	std::stringstream current_1, current_2, current_3;
+
+	(void) time(&current);
+	current_1 << (current - 2 * day) << std::endl;
+	current_2 << (current - 5 * day) << std::endl;
+	current_3 << (current - 11 * day) << std::endl;
+
+	map_test[current_1.str()]
+			= "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+	map_test[current_2.str()]
+			= "2|136|Emmanuel Milou|747638765|Account:1239059899";
+	map_test[current_3.str()]
+			= "1|5143848557|empty|775354987|Account:43789459478";
+
+	CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+	// We use different value of history limit
+	// 10 days - the last entry should not be saved
+	CPPUNIT_ASSERT (history->set_serialized_history (map_test, 10) == 2);
+	CPPUNIT_ASSERT (history->get_history_size () == 2);
+
+	//  4 days - the two last entries should not be saved
+	CPPUNIT_ASSERT (history->set_serialized_history (map_test, 4) == 1);
+	CPPUNIT_ASSERT (history->get_history_size () == 1);
+
+	//  1 day - no entry should not be saved
+	CPPUNIT_ASSERT (history->set_serialized_history (map_test, 1) == 0);
+	CPPUNIT_ASSERT (history->get_history_size () == 0);
+}
+
+void HistoryTest::tearDown() {
+	// Delete the history object
+	delete history;
+	history = 0;
+}
diff --git a/sflphone-common/test/historytest.h b/sflphone-common/test/historytest.h
new file mode 100644
index 0000000000..334b9af7ff
--- /dev/null
+++ b/sflphone-common/test/historytest.h
@@ -0,0 +1,94 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "history/historymanager.h"
+
+/*
+ * @file historyTest.h  
+ * @brief       Regroups unitary tests related to the phone number cleanup function.
+ */
+
+#ifndef _HISTORY_TEST_
+#define _HISTORY_TEST_
+
+class HistoryTest : public CppUnit::TestCase {
+
+   /**
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE (HistoryTest);
+        CPPUNIT_TEST (test_create_history_path);
+        CPPUNIT_TEST (test_save_history_to_file);
+        CPPUNIT_TEST (test_save_history_items_map);
+        CPPUNIT_TEST (test_load_history_from_file);
+        CPPUNIT_TEST (test_load_history_items_map);
+        CPPUNIT_TEST (test_get_history_serialized);
+        CPPUNIT_TEST (test_set_serialized_history);
+        CPPUNIT_TEST (test_set_serialized_history_with_limit);
+    CPPUNIT_TEST_SUITE_END ();
+
+    public:
+        HistoryTest() : CppUnit::TestCase("History Tests") {}
+        
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        void test_create_history_path ();
+
+        void test_load_history_from_file ();
+
+        void test_load_history_items_map ();
+
+        void test_save_history_items_map ();
+
+        void test_save_history_to_file ();
+    
+        void test_get_history_serialized ();
+
+        void test_set_serialized_history ();
+
+        void test_set_serialized_history_with_limit ();
+            
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        inline void tearDown ();
+
+    private:
+        HistoryManager *history;
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(HistoryTest, "HistoryTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( HistoryTest );
+
+#endif
diff --git a/sflphone-common/test/hookmanagertest.cpp b/sflphone-common/test/hookmanagertest.cpp
new file mode 100644
index 0000000000..57fc138a0a
--- /dev/null
+++ b/sflphone-common/test/hookmanagertest.cpp
@@ -0,0 +1,60 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <sstream>
+#include <dlfcn.h>
+#include "global.h"
+
+#include "hookmanagertest.h"
+
+using std::cout;
+using std::endl;
+
+
+void HookManagerTest::setUp()
+{
+    // Instanciate the hook manager singleton
+    urlhook = new UrlHook ();
+}
+
+void HookManagerTest::testAddAction ()
+{
+	_debug ("-------------------- HookManagerTest::testAddAction --------------------\n");
+
+    int status;
+
+    status = urlhook->addAction ("http://www.google.ca/?arg1=arg1&arg2=nvls&x=2&y=45&z=1", "x-www-browser");
+    CPPUNIT_ASSERT (status == 0);
+}
+
+void HookManagerTest::testLargeUrl ()
+{
+	_debug ("-------------------- HookManagerTest::testLargeUrl --------------------\n");
+
+    std::string url;
+    std::cout << url.max_size() << std::endl;
+}
+
+void HookManagerTest::tearDown()
+{
+    // Delete the hook manager object
+    delete urlhook;
+    urlhook=0;
+}
diff --git a/sflphone-common/test/hookmanagertest.h b/sflphone-common/test/hookmanagertest.h
new file mode 100644
index 0000000000..d9e130c0a5
--- /dev/null
+++ b/sflphone-common/test/hookmanagertest.h
@@ -0,0 +1,71 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+/*
+ * @file hookmanagerTest.cpp
+ * @brief       Regroups unitary tests related to the hook manager.
+ */
+
+#ifndef _HOOKMANAGER_TEST_
+#define _HOOKMANAGER_TEST_
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "hooks/urlhook.h"
+
+class HookManagerTest : public CppUnit::TestFixture {
+
+   /**
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE (HookManagerTest);
+        CPPUNIT_TEST (testAddAction);
+        CPPUNIT_TEST (testLargeUrl);
+    CPPUNIT_TEST_SUITE_END ();
+
+    public:
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        void testAddAction ();
+
+        void testLargeUrl ();
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        void tearDown ();
+
+    private:
+        UrlHook *urlhook;
+};
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(HookManagerTest, "HookManagerTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( HookManagerTest );
+
+#endif
diff --git a/sflphone-common/test/main.cpp b/sflphone-common/test/main.cpp
index 3dda5ada70..d0b7a6e09b 100644
--- a/sflphone-common/test/main.cpp
+++ b/sflphone-common/test/main.cpp
@@ -17,27 +17,95 @@
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include "accounttest.h"
 #include "logger.h"
 #include "global.h"
 #include "manager.h"
+#include "constants.h"
+
 #include <cppunit/CompilerOutputter.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TextTestRunner.h>
 
-int RunTests(void) {
-	Manager::instance().initConfigFile();
-	Manager::instance().init();
+// 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::setDebugMode(true);
 	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();
+			int testSuiteCount = suite->getChildTestCount();
+
+			printf("Usage: test [OPTIONS] [TEST_SUITE]\n");
+			printf("\nOptions:\n");
+			printf(" --debug - Debug mode\n");
+			printf(" --help - Print help\n");
+			printf("\nAvailable test suites:\n");
+			for (int i = 0; i < testSuiteCount; i++) {
+				printf(" - %s\n", suite->getChildTestAt(i)->getName().c_str());
+			}
+			exit(0);
+		}
+		else if (strcmp("--debug", argv[1]) == 0) {
+			argvIndex++;
+
+			Logger::setDebugMode(true);
+			_info("Debug mode activated");
+		}
+	}
+
+	std::string testSuiteName = "All Tests";
+	if(argvIndex < argc)
+	{
+		testSuiteName = argv[argvIndex];
+		argvIndex++;
+	}
+
+	printf("\n\n=== SFLphone initialization ===\n\n");
+	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
-	CppUnit::Test *suite =
-			CppUnit::TestFactoryRegistry::getRegistry().makeTest();
+	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::TextUi::TestRunner runner;
 	CppUnit::TextTestRunner runner;
 	runner.addTest(suite);
 
@@ -52,7 +120,3 @@ int RunTests(void) {
 
 	Manager::instance().terminate();
 }
-
-int main(void) {
-	return RunTests();
-}
diff --git a/sflphone-common/test/mainbuffertest.cpp b/sflphone-common/test/mainbuffertest.cpp
new file mode 100644
index 0000000000..2919828b47
--- /dev/null
+++ b/sflphone-common/test/mainbuffertest.cpp
@@ -0,0 +1,1758 @@
+/*
+ *  Copyright (C) 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 <stdio.h>
+#include <sstream>
+#include <ccrtp/rtp.h>
+#include <assert.h>
+#include <string>
+#include <cstring>
+#include <math.h>
+#include <dlfcn.h>
+#include <iostream>
+#include <sstream>
+
+
+#include "mainbuffertest.h"
+
+#include <unistd.h>
+
+
+using std::cout;
+using std::endl;
+
+
+void MainBufferTest::setUp()
+{
+
+
+}
+
+
+void MainBufferTest::tearDown()
+{
+
+}
+
+
+void MainBufferTest::testRingBufferCreation()
+{
+	_debug ("-------------------- MainBufferTest::testRingBufferCreation --------------------\n");
+
+    CallID test_id = "1234";
+    CallID null_id = "null id";
+
+    RingBuffer* test_ring_buffer;
+    RingBufferMap::iterator iter;
+
+    // test mainbuffer ringbuffer map size
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    test_ring_buffer = _mainbuffer.createRingBuffer (test_id);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
+
+    // test _mainbuffer.getRingBuffer method
+    CPPUNIT_ASSERT (test_ring_buffer != NULL);
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (null_id) == NULL);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id) == test_ring_buffer);
+
+    // test _mainbuffer _ringBufferMap
+    iter = _mainbuffer._ringBufferMap.find (null_id);
+    CPPUNIT_ASSERT (iter == _mainbuffer._ringBufferMap.end());
+    iter = _mainbuffer._ringBufferMap.find (test_id);
+    CPPUNIT_ASSERT (iter->first == test_id);
+    CPPUNIT_ASSERT (iter->second == test_ring_buffer);
+    CPPUNIT_ASSERT (iter->second == _mainbuffer.getRingBuffer (test_id));
+
+    // test creating twice a buffer (should not create it)
+    _mainbuffer.createRingBuffer (test_id);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id) == test_ring_buffer);
+
+    // test remove ring buffer
+    CPPUNIT_ASSERT (_mainbuffer.removeRingBuffer (null_id) == true);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 1);
+    CPPUNIT_ASSERT (_mainbuffer.removeRingBuffer (test_id) == true);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id) == NULL);
+
+    iter = _mainbuffer._ringBufferMap.find (test_id);
+    CPPUNIT_ASSERT (iter == _mainbuffer._ringBufferMap.end());
+
+}
+
+
+void MainBufferTest::testRingBufferReadPointer()
+{
+	_debug ("-------------------- MainBufferTest::testRingBufferReadPointer --------------------\n");
+
+    CallID call_id = "call id";
+    CallID read_id = "read id";
+    CallID null_id = "null id";
+    CallID other_id = "other id";
+
+    RingBuffer* test_ring_buffer;
+
+    // test ring buffer read pointers (one per participant)
+    test_ring_buffer = _mainbuffer.createRingBuffer (call_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == (int) NULL);
+
+    // create a read pointer
+    test_ring_buffer->createReadPointer (read_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (null_id) == (int) NULL);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == 0);
+
+    // store read pointer
+    test_ring_buffer->storeReadPointer (4, read_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == 4);
+
+    // recreate the same read pointer (should not add a pointer neither chage its value)
+    test_ring_buffer->createReadPointer (read_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    test_ring_buffer->storeReadPointer (8, read_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (read_id) == 8);
+
+    // test getSmallest read pointer (to get the length available to put data in the buffer)
+    test_ring_buffer->createReadPointer (other_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
+    test_ring_buffer->storeReadPointer (4, other_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getSmallestReadPointer() == 4);
+
+    // remove read pointers
+    test_ring_buffer->removeReadPointer (other_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    test_ring_buffer->removeReadPointer (read_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
+}
+
+
+void MainBufferTest::testCallIDSet()
+{
+	_debug ("-------------------- MainBufferTest::testCallIDSet --------------------\n");
+
+    CallID test_id = "set id";
+    CallID false_id = "false set id";
+    // CallIDSet* callid_set = 0;
+
+    CallIDMap::iterator iter_map;
+    CallIDSet::iterator iter_set;
+
+    CallID call_id_1 = "call id 1";
+    CallID call_id_2 = "call id 2";
+
+    // test initial settings
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map ==_mainbuffer._callIDMap.end());
+
+    // test callidset creation
+    CPPUNIT_ASSERT (_mainbuffer.createCallIDSet (test_id) == true);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 1);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map->first == test_id);
+    CPPUNIT_ASSERT (iter_map->second == _mainbuffer.getCallIDSet (test_id));
+
+    CPPUNIT_ASSERT (_mainbuffer.getCallIDSet (false_id) == NULL);
+    CPPUNIT_ASSERT (_mainbuffer.getCallIDSet (test_id) != NULL);
+
+
+    // Test callIDSet add call_ids
+    _mainbuffer.addCallIDtoSet (test_id, call_id_1);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map->second->size() == 1);
+    iter_set = iter_map->second->find (call_id_1);
+    CPPUNIT_ASSERT (*iter_set == call_id_1);
+
+    // test add second call id to set
+    _mainbuffer.addCallIDtoSet (test_id, call_id_2);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map->second->size() == 2);
+    iter_set = iter_map->second->find (call_id_2);
+    CPPUNIT_ASSERT (*iter_set == call_id_2);
+
+    // test add a call id twice
+    _mainbuffer.addCallIDtoSet (test_id, call_id_2);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map->second->size() == 2);
+    iter_set = iter_map->second->find (call_id_2);
+    CPPUNIT_ASSERT (*iter_set == call_id_2);
+
+    // test remove a call id
+    _mainbuffer.removeCallIDfromSet (test_id, call_id_2);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map->second->size() == 1);
+    iter_set = iter_map->second->find (call_id_1);
+    CPPUNIT_ASSERT (*iter_set == call_id_1);
+    iter_set = iter_map->second->find (call_id_2);
+    CPPUNIT_ASSERT (iter_set == iter_map->second->end());
+
+    // test remove a call id twice
+    _mainbuffer.removeCallIDfromSet (test_id, call_id_2);
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map->second->size() == 1);
+    iter_set = iter_map->second->find (call_id_1);
+    CPPUNIT_ASSERT (*iter_set == call_id_1);
+    iter_set = iter_map->second->find (call_id_2);
+    CPPUNIT_ASSERT (iter_set == iter_map->second->end());
+
+    // Test removeCallIDSet
+    CPPUNIT_ASSERT (_mainbuffer.removeCallIDSet (false_id) == false);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 1);
+    CPPUNIT_ASSERT (_mainbuffer.removeCallIDSet (test_id) == true);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+
+    iter_map = _mainbuffer._callIDMap.find (test_id);
+    CPPUNIT_ASSERT (iter_map ==_mainbuffer._callIDMap.end());
+
+
+}
+
+
+void MainBufferTest::testRingBufferInt()
+{
+	_debug ("-------------------- MainBufferTest::testRingBufferInt --------------------\n");
+
+    // CallID test_id = "test_int";
+
+    int testint1 = 12;
+    int testint2 = 13;
+    int init_put_size;
+
+
+    // test with default ring buffer
+    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (default_id);
+
+    // initial state
+    init_put_size = test_ring_buffer->AvailForPut();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
+
+    // add some data
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
+
+    // add some other data
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
+
+    int testget = (int) NULL;
+
+    // get some data (without any read pointers)
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int)) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 2*sizeof (int));
+    CPPUNIT_ASSERT (testget == (int) NULL);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
+
+    // get some data (with a read pointer)
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 0);
+    test_ring_buffer->createReadPointer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
+
+    // add some data
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 2*sizeof (int));
+
+    // add some other data
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 2*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int), 100, default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (int));
+    CPPUNIT_ASSERT (testget == testint1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 3*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (testget == testint2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 4*sizeof (int));
+
+
+    // test flush data
+    init_put_size = test_ring_buffer->AvailForPut();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (int));
+
+
+    test_ring_buffer->flush();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 5*sizeof (int));
+
+    // test flush data
+    init_put_size = test_ring_buffer->AvailForPut();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 5*sizeof (int));
+
+    test_ring_buffer->Discard (sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 6*sizeof (int));
+
+
+}
+
+
+void MainBufferTest::testRingBufferNonDefaultID()
+{
+	_debug ("-------------------- MainBufferTest::testRingBufferNonDefaultID --------------------\n");
+
+    CallID test_id = "test_int";
+
+    int testint1 = 12;
+    int testint2 = 13;
+    int init_put_size;
+
+
+    // test putData, getData with arbitrary read pointer id
+    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (default_id);
+    test_ring_buffer->createReadPointer (test_id);
+
+    init_put_size = test_ring_buffer->AvailForPut();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (default_id) == 0);
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (default_id) == 0);
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - 2* (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (default_id) == 0);
+
+    int testget;
+
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int), 100,  test_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (testget == testint1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (int), 100, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (testget == testint2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 2*sizeof (int));
+
+
+    // test flush data
+    init_put_size = test_ring_buffer->AvailForPut();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == sizeof (int));
+
+
+    test_ring_buffer->flush (test_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 3*sizeof (int));
+
+    // test flush data
+    init_put_size = test_ring_buffer->AvailForPut();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (init_put_size - (int) sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 3*sizeof (int));
+
+    test_ring_buffer->Discard (sizeof (int), test_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_size);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 4*sizeof (int));
+
+    test_ring_buffer->removeReadPointer (test_id);
+
+}
+
+
+void MainBufferTest::testRingBufferFloat()
+{
+	_debug ("-------------------- MainBufferTest::testRingBufferFloat --------------------\n");
+
+    float testfloat1 = 12.5;
+    float testfloat2 = 13.4;
+
+    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (default_id);
+    test_ring_buffer->createReadPointer (default_id);
+
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testfloat1, sizeof (float)) == sizeof (float));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (float));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testfloat2, sizeof (float)) == sizeof (float));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (float));
+
+    float testget;
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (float)) == sizeof (float));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == sizeof (float));
+    CPPUNIT_ASSERT (testget == testfloat1);
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testget, sizeof (float)) == sizeof (float));
+    CPPUNIT_ASSERT (testget == testfloat2);
+    CPPUNIT_ASSERT (test_ring_buffer->getLen() == 0);
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testfloat1, sizeof (float)) == sizeof (float));
+    test_ring_buffer->flush();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+
+}
+
+
+void MainBufferTest::testTwoPointer()
+{
+	_debug ("-------------------- MainBufferTest::testTwoPointer --------------------\n");
+
+    RingBuffer* input_buffer = _mainbuffer.createRingBuffer (default_id);
+    input_buffer->createReadPointer (default_id);
+    RingBuffer* output_buffer = _mainbuffer.getRingBuffer (default_id);
+
+    int test_input = 12;
+    int test_output;
+
+    CPPUNIT_ASSERT (input_buffer->Put (&test_input, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (output_buffer->Get (&test_output, sizeof (float)) == sizeof (float));
+    CPPUNIT_ASSERT (test_input == test_output);
+
+}
+
+void MainBufferTest::testBindUnbindBuffer()
+{
+	_debug ("-------------------- MainBufferTest::testBindUnbindBuffer --------------------\n");
+
+    CallID test_id1 = "bind unbind 1";
+    CallID test_id2 = "bind unbind 2";
+
+    RingBufferMap::iterator iter_buffer;
+    CallIDMap::iterator iter_idset;
+    CallIDSet::iterator iter_id;
+
+    ReadPointer::iterator iter_readpointer;
+
+    RingBuffer* ringbuffer;
+
+    // test initial state with no ring brffer created
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
+
+    // bind test_id1 with default_id (both buffer not already created)
+    _mainbuffer.bindCallID (test_id1);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer->first == default_id);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
+
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    ringbuffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+
+    // unbind test_id1 with default_id
+    _mainbuffer.unBindCallID (test_id1);
+
+    _debug ("%i", (int) (_mainbuffer._ringBufferMap.size()));
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id) == NULL);
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id1) == NULL);
+
+
+    // bind test_id2 with default_id (default_id already created)
+    // calling it twice not supposed to break anything
+    _mainbuffer.bindCallID (test_id1, default_id);
+    _mainbuffer.bindCallID (test_id1, default_id);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
+    iter_idset = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
+
+    _mainbuffer.bindCallID (test_id2, default_id);
+    _mainbuffer.bindCallID (test_id2, default_id);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer->first == default_id);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id2);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id2));
+
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+    iter_id = iter_idset->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_id == test_id2);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    ringbuffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    // bind test_id1 with test_id2 (both testid1 and test_id2 already created)
+    // calling it twice not supposed to break anything
+    _mainbuffer.bindCallID (test_id1, test_id2);
+    _mainbuffer.bindCallID (test_id1, test_id2);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer->first == default_id);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id2);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id2));
+
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+    iter_id = iter_idset->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_id == test_id2);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+    iter_id = iter_idset->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_id == test_id2);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+
+    ringbuffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    // unbind test_id1 with test_id2
+    // calling it twice not supposed to break anything
+    _mainbuffer.unBindCallID (test_id1, test_id2);
+    _mainbuffer.unBindCallID (test_id1, test_id2);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer->first == default_id);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id2);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id2));
+
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 2);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+    iter_id = iter_idset->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_id == test_id2);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    ringbuffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 2);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+
+
+    _debug ("ok1");
+
+    // unbind test_id1 with test_id2
+    // calling it twice not supposed to break anything
+    _mainbuffer.unBindCallID (default_id, test_id2);
+    _mainbuffer.unBindCallID (default_id, test_id2);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer->first == default_id);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
+
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+    iter_id = iter_idset->second->find (test_id2);
+    CPPUNIT_ASSERT (iter_id == iter_idset->second->end());
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
+
+    ringbuffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
+
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id2) == NULL);
+
+
+    _mainbuffer.unBindCallID (default_id, test_id1);
+
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+
+    // test unbind all function
+    _mainbuffer.bindCallID (default_id, test_id1);
+    _mainbuffer.bindCallID (default_id, test_id2);
+    _mainbuffer.bindCallID (test_id1, test_id2);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+
+    _mainbuffer.unBindAll (test_id2);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (default_id);
+    CPPUNIT_ASSERT (iter_buffer->first == default_id);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (default_id));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_buffer->first == test_id1);
+    CPPUNIT_ASSERT (iter_buffer->second == _mainbuffer.getRingBuffer (test_id1));
+
+    iter_buffer = _mainbuffer._ringBufferMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_buffer == _mainbuffer._ringBufferMap.end());
+
+    iter_idset = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_id == test_id1);
+    iter_id = iter_idset->second->find (test_id2);
+    CPPUNIT_ASSERT (iter_id == iter_idset->second->end());
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_idset->second->size() == 1);
+    iter_id = iter_idset->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_id == default_id);
+
+    iter_idset = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_idset == _mainbuffer._callIDMap.end());
+
+    ringbuffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
+
+    ringbuffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (ringbuffer != NULL);
+    CPPUNIT_ASSERT (ringbuffer->getNbReadPointer() == 1);
+    iter_readpointer = ringbuffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = ringbuffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer == ringbuffer->_readpointer.end());
+
+
+}
+
+void MainBufferTest::testGetPutDataByID()
+{
+	_debug ("-------------------- MainBufferTest::testGetPutDataByID --------------------\n");
+
+    CallID test_id = "getData putData";
+    CallID false_id = "false id";
+
+    _mainbuffer.bindCallID (test_id);
+
+    int test_input1 = 12;
+    int test_input2 = 13;
+    int test_output;
+
+    int avail_for_put_testid;
+    int avail_for_put_defaultid;
+
+    // put by default_id get by test_id without preleminary put
+    avail_for_put_defaultid = _mainbuffer.availForPut();
+    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (default_id, test_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, default_id, test_id) == 0);
+
+    // put by default_id, get by test_id
+    CPPUNIT_ASSERT (_mainbuffer.availForPut() == avail_for_put_defaultid);
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForPut() == (avail_for_put_defaultid - (int) sizeof (int)));
+    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (default_id, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, default_id, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (default_id, test_id) == 0);
+    CPPUNIT_ASSERT (test_input1 == test_output);
+
+    // get by default_id without preliminary input
+    avail_for_put_testid = _mainbuffer.availForPut (test_id);
+    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (test_id, default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, test_id, default_id) == 0);
+
+    // pu by test_id get by test_id
+    CPPUNIT_ASSERT (_mainbuffer.availForPut (test_id) == avail_for_put_defaultid);
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input2, sizeof (int), 100, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (test_id, default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_output, sizeof (int), 100, test_id, default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGetByID (test_id, default_id) == 0);
+    CPPUNIT_ASSERT (test_input2 == test_output);
+
+    // put/get by false id
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input2, sizeof (int), 100, false_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_input2, sizeof (int), 100, false_id, false_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_input2, sizeof (int), 100, default_id, false_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getDataByID (&test_input2, sizeof (int), 100, false_id, default_id) == 0);
+
+    _mainbuffer.unBindCallID (test_id);
+
+}
+
+
+
+void MainBufferTest::testGetPutData()
+{
+	_debug ("-------------------- MainBufferTest::testGetPutData --------------------\n");
+
+    CallID test_id = "incoming rtp session";
+
+    _mainbuffer.bindCallID (test_id);
+
+    int test_input1 = 12;
+    int test_input2 = 13;
+    int test_output;
+
+    int avail_for_put_testid;
+    int avail_for_put_defaultid;
+
+    // get by test_id without preleminary put
+    avail_for_put_defaultid = _mainbuffer.availForPut();
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100,  test_id) == 0);
+
+    // put by default_id, get by test_id
+    CPPUNIT_ASSERT (_mainbuffer.availForPut() == avail_for_put_defaultid);
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int), 100) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForPut() == (avail_for_put_defaultid - (int) sizeof (int)));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
+    CPPUNIT_ASSERT (test_input1 == test_output);
+
+    // get by default_id without preleminary put
+    avail_for_put_testid = _mainbuffer.availForPut (test_id);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet() == 0);
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int)) == 0);
+
+    // put by test_id, get by default_id
+    CPPUNIT_ASSERT (_mainbuffer.availForPut (test_id) == avail_for_put_testid);
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input2, sizeof (int), 100, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForPut (test_id) == (avail_for_put_testid - (int) sizeof (int)));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet() == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet() == 0);
+    CPPUNIT_ASSERT (test_input2 == test_output);
+
+    _mainbuffer.unBindCallID (test_id);
+
+}
+
+
+void MainBufferTest::testDiscardFlush()
+{
+	_debug ("-------------------- MainBufferTest::testDiscardFlush --------------------\n");
+
+    CallID test_id = "flush discard";
+    // _mainbuffer.createRingBuffer(test_id);
+    _mainbuffer.bindCallID (test_id);
+
+    int test_input1 = 12;
+    // int test_output_size;
+    // int init_size;
+
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int), 100, test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet() == sizeof (int));
+    _mainbuffer.discard (sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet() == 0);
+
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
+    _mainbuffer.discard (sizeof (int), test_id);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
+
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id)->getReadPointer (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (test_id)->getReadPointer (test_id) == 0);
+
+
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.putData (&test_input1, sizeof (int), 100) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == 0);
+
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == sizeof (int));
+
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == 0);
+    _mainbuffer.discard (sizeof (int), test_id);
+    CPPUNIT_ASSERT (_mainbuffer.getRingBuffer (default_id)->getReadPointer (test_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id) == 0);
+
+    // _mainbuffer.removeRingBuffer(test_id);
+    _mainbuffer.unBindCallID (test_id);
+
+}
+
+
+void MainBufferTest::testReadPointerInit()
+{
+	_debug ("-------------------- MainBufferTest::testReadPointerInit --------------------\n");
+
+    CallID test_id = "test read pointer init";
+    // RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer(test_id);
+
+    _mainbuffer.bindCallID (test_id);
+
+    RingBuffer* test_ring_buffer = _mainbuffer.getRingBuffer (test_id);
+
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 0);
+    test_ring_buffer->storeReadPointer (30);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer() == 30);
+
+    test_ring_buffer->createReadPointer (test_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 0);
+    test_ring_buffer->storeReadPointer (10, test_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == 10);
+    test_ring_buffer->removeReadPointer (test_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getReadPointer (test_id) == (int) NULL);
+    test_ring_buffer->removeReadPointer ("false id");
+
+    // _mainbuffer.removeRingBuffer(test_id);
+    _mainbuffer.unBindCallID (test_id);
+}
+
+
+void MainBufferTest::testRingBufferSeveralPointers()
+{
+	_debug ("-------------------- MainBufferTest::testRingBufferSeveralPointers --------------------\n");
+
+    CallID test_id = "test multiple read pointer";
+    RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (test_id);
+
+    CallID test_pointer1 = "test pointer 1";
+    CallID test_pointer2 = "test pointer 2";
+
+    test_ring_buffer->createReadPointer (test_pointer1);
+    test_ring_buffer->createReadPointer (test_pointer2);
+
+    int testint1 = 12;
+    int testint2 = 13;
+    int testint3 = 14;
+    int testint4 = 15;
+
+    int testoutput;
+
+    int initPutLen = test_ring_buffer->AvailForPut();
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint1, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint2, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 2*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint3, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 3*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == 3*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == 3*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 3*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 3*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Put (&testint4, sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 4*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 4* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer1) == 4*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->getLen (test_pointer2) == 4*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 4*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 4*sizeof (int));
+
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (testoutput == testint1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 4* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 3*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 4*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer2) == sizeof (int));
+    CPPUNIT_ASSERT (testoutput == testint1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 3*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 3*sizeof (int));
+
+    // AvailForPut() is ok but AvailForGet(default_id) is not ok
+    // However, we should no be alowed to read in our own ring buffer
+    // if we are either an AudioLayer or and RTP session
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 4*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (testoutput == testint2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 3* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 3*sizeof (int));
+
+    // AvailForPut() is ok but AvailForGet(default_id) is not ok
+    // However, we should no be alowed to read in our own ring buffer
+    // if we are either an AudioLayer or and RTP session
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 4*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Get (&testoutput, sizeof (int), 100, test_pointer2) == sizeof (int));
+    CPPUNIT_ASSERT (testoutput == testint2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == 2*sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 2*sizeof (int));
+
+    // AvailForPut() is ok but AvailForGet(default_id) is not ok
+    // However, we should no be alowed to read in our own ring buffer
+    // if we are either an AudioLayer or and RTP session
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet() == 4*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Discard (sizeof (int), test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - 2* (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == 2*sizeof (int));
+
+    CPPUNIT_ASSERT (test_ring_buffer->Discard (sizeof (int), test_pointer2) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == initPutLen - (int) sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_pointer2) == sizeof (int));
+
+
+    test_ring_buffer->removeReadPointer (test_pointer1);
+    test_ring_buffer->removeReadPointer (test_pointer2);
+
+    _mainbuffer.removeRingBuffer (test_id);
+}
+
+
+
+void MainBufferTest::testConference()
+{
+	_debug ("-------------------- MainBufferTest::testConference --------------------\n");
+
+    CallID test_id1 = "participant A";
+    CallID test_id2 = "participant B";
+    RingBuffer* test_ring_buffer;
+
+    RingBufferMap::iterator iter_ringbuffermap;
+    ReadPointer::iterator iter_readpointer;
+    CallIDMap::iterator iter_callidmap;
+    CallIDSet::iterator iter_callidset;
+
+
+
+    // test initial setup
+    // ringbuffers
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer == NULL);
+
+    // callidmap
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_callidmap == _mainbuffer._callIDMap.end());
+
+
+    // test bind Participant A with default
+    _mainbuffer.bindCallID (test_id1);
+    // ringbuffers
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    // callidmap
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
+    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_callidmap->first == default_id);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
+    iter_callidset = iter_callidmap->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_callidset == test_id1);
+    iter_callidmap = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_callidmap->first == test_id1);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
+    iter_callidset = iter_callidmap->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_callidset == default_id);
+
+    // test bind Participant B with default
+    _mainbuffer.bindCallID (test_id2);
+    // ringbuffers
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 1);
+    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    // callidmap
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_callidmap->first == default_id);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
+    iter_callidset = iter_callidmap->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_callidset == test_id1);
+    iter_callidset = iter_callidmap->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_callidset == test_id2);
+    iter_callidmap = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_callidmap->first == test_id1);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
+    iter_callidset = iter_callidmap->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_callidset == default_id);
+    iter_callidmap = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_callidmap->first == test_id2);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 1);
+    iter_callidset = iter_callidmap->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_callidset == default_id);
+
+
+    // test bind Participant A with Participant B
+    _mainbuffer.bindCallID (test_id1, test_id2);
+    // ringbuffers
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
+    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id2);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->getNbReadPointer() == 2);
+    iter_readpointer = test_ring_buffer->_readpointer.find (default_id);
+    CPPUNIT_ASSERT (iter_readpointer->first == default_id);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    iter_readpointer = test_ring_buffer->_readpointer.find (test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->first == test_id1);
+    CPPUNIT_ASSERT (iter_readpointer->second == 0);
+    // callidmap
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+    iter_callidmap = _mainbuffer._callIDMap.find (default_id);
+    CPPUNIT_ASSERT (iter_callidmap->first == default_id);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
+    iter_callidset = iter_callidmap->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_callidset == test_id1);
+    iter_callidset = iter_callidmap->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_callidset == test_id2);
+    iter_callidmap = _mainbuffer._callIDMap.find (test_id1);
+    CPPUNIT_ASSERT (iter_callidmap->first == test_id1);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
+    iter_callidset = iter_callidmap->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_callidset == default_id);
+    iter_callidset = iter_callidmap->second->find (test_id2);
+    CPPUNIT_ASSERT (*iter_callidset == test_id2);
+    iter_callidmap = _mainbuffer._callIDMap.find (test_id2);
+    CPPUNIT_ASSERT (iter_callidmap->first == test_id2);
+    CPPUNIT_ASSERT (iter_callidmap->second->size() == 2);
+    iter_callidset = iter_callidmap->second->find (default_id);
+    CPPUNIT_ASSERT (*iter_callidset == default_id);
+    iter_callidset = iter_callidmap->second->find (test_id1);
+    CPPUNIT_ASSERT (*iter_callidset == test_id1);
+
+
+    // test putData default
+    int testint = 12;
+    int init_put_defaultid;
+    int init_put_id1;
+    int init_put_id2;
+
+    init_put_defaultid = _mainbuffer.getRingBuffer (default_id)->AvailForPut();
+    init_put_id1 = _mainbuffer.getRingBuffer (test_id1)->AvailForPut();
+    init_put_id2 = _mainbuffer.getRingBuffer (test_id2)->AvailForPut();
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
+    // put data test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget (get data even if some participant missing)
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    //putdata test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id1) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget (get data even if some participant missing)
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    //putdata test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+
+
+    int test_output;
+
+    // test getData default id (audio layer)
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100) == sizeof (int));
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    // test getData test_id1 (audio layer)
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100, test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    // test getData test_id2 (audio layer)
+    CPPUNIT_ASSERT (_mainbuffer.getData (&test_output, sizeof (int), 100, test_id2) == sizeof (int));
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_defaultid);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
+
+
+    // test putData default (for discarting)
+    init_put_defaultid = _mainbuffer.getRingBuffer (default_id)->AvailForPut();
+    init_put_id1 = _mainbuffer.getRingBuffer (test_id1)->AvailForPut();
+    init_put_id2 = _mainbuffer.getRingBuffer (test_id2)->AvailForPut();
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
+    // put data test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    //putdata test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id1) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    //putdata test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+
+    // test discardData default id (audio layer)
+    CPPUNIT_ASSERT (_mainbuffer.discard (sizeof (int)) == sizeof (int));
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    // test discardData test_id1 (audio layer)
+    CPPUNIT_ASSERT (_mainbuffer.discard (sizeof (int), test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    // test discardData test_id2 (audio layer)
+    CPPUNIT_ASSERT (_mainbuffer.discard (sizeof (int), test_id2) == sizeof (int));
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_defaultid);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
+
+
+    // test putData default (for flushing)
+    init_put_defaultid = _mainbuffer.getRingBuffer (default_id)->AvailForPut();
+    init_put_id1 = _mainbuffer.getRingBuffer (test_id1)->AvailForPut();
+    init_put_id2 = _mainbuffer.getRingBuffer (test_id2)->AvailForPut();
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
+    // put data test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    //putdata test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id1) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    //putdata test ring buffers
+    CPPUNIT_ASSERT (_mainbuffer.putData (&testint, sizeof (int), 100, test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+
+    // test flush default id (audio layer)
+    _mainbuffer.flush();
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    _debug ("%i", test_ring_buffer->putLen());
+    test_ring_buffer->debug();
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id2 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == sizeof (int));
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == sizeof (int));
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    // test flush test_id1 (audio layer)
+    _mainbuffer.flush (test_id1);
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_defaultid - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == sizeof (int));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == (int) (init_put_id1 - sizeof (int)));
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == sizeof (int));
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == sizeof (int));
+    // test flush test_id2 (audio layer)
+    _mainbuffer.flush (test_id2);
+    CPPUNIT_ASSERT (test_output == (testint + testint));
+    test_ring_buffer = _mainbuffer.getRingBuffer (default_id);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_defaultid);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id1);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id2) == 0);
+    test_ring_buffer = _mainbuffer.getRingBuffer (test_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->putLen() == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForPut() == init_put_id2);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (default_id) == 0);
+    CPPUNIT_ASSERT (test_ring_buffer->AvailForGet (test_id1) == 0);
+    // test mainbuffer availforget
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (default_id) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id1) == 0);
+    CPPUNIT_ASSERT (_mainbuffer.availForGet (test_id2) == 0);
+
+
+    _mainbuffer.unBindCallID (test_id1, test_id2);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 3);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 3);
+
+    _mainbuffer.unBindCallID (test_id1);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 2);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 2);
+
+    _mainbuffer.unBindCallID (test_id2);
+    CPPUNIT_ASSERT (_mainbuffer._ringBufferMap.size() == 0);
+    CPPUNIT_ASSERT (_mainbuffer._callIDMap.size() == 0);
+}
diff --git a/sflphone-common/test/mainbuffertest.h b/sflphone-common/test/mainbuffertest.h
new file mode 100644
index 0000000000..4aefd398a8
--- /dev/null
+++ b/sflphone-common/test/mainbuffertest.h
@@ -0,0 +1,137 @@
+/*
+ *  Copyright (C) 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.
+ */
+
+// 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"
+
+
+
+/*
+ * @file audiorecorderTest.cpp  
+ * @brief       Regroups unitary tests related to the plugin manager.
+ */
+
+#ifndef _MAINBUFFER_TEST_
+#define _MAINBUFFER_TEST_
+
+
+
+class MainBufferTest : public CppUnit::TestCase {
+
+    /*
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE( MainBufferTest );
+       CPPUNIT_TEST( testRingBufferCreation );
+       CPPUNIT_TEST( testRingBufferReadPointer );
+       CPPUNIT_TEST( testCallIDSet );
+       CPPUNIT_TEST( testRingBufferInt );
+       CPPUNIT_TEST( testRingBufferNonDefaultID );
+       CPPUNIT_TEST( testRingBufferFloat );
+       CPPUNIT_TEST( testTwoPointer );
+       CPPUNIT_TEST( testBindUnbindBuffer );
+       CPPUNIT_TEST( testGetPutDataByID );
+       CPPUNIT_TEST( testGetPutData );
+       CPPUNIT_TEST( testDiscardFlush );
+       CPPUNIT_TEST( testReadPointerInit );
+       CPPUNIT_TEST( testRingBufferSeveralPointers );
+       CPPUNIT_TEST( testConference );
+    CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        MainBufferTest() : CppUnit::TestCase("Audio Layer Tests") {}
+        
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        inline void tearDown();
+
+        void testRingBufferCreation();
+
+	void testRingBufferReadPointer();
+
+	void testCallIDSet();
+
+	void testRingBufferInt();
+
+	void testRingBufferNonDefaultID();
+
+	void testRingBufferFloat();
+
+	void testTwoPointer();
+
+	void testBindUnbindBuffer();
+
+	void testGetPutDataByID();
+
+	void testGetPutData();
+
+	void testAvailForGetPut();
+
+	void testDiscardFlush();
+
+	void testReadPointerInit();
+
+	void testRingBufferSeveralPointers();
+
+	void testConference();
+
+    private:
+
+	MainBuffer _mainbuffer;
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(MainBufferTest, "MainBufferTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( MainBufferTest );
+
+#endif
diff --git a/sflphone-common/test/numbercleanertest.cpp b/sflphone-common/test/numbercleanertest.cpp
new file mode 100644
index 0000000000..9529727f0f
--- /dev/null
+++ b/sflphone-common/test/numbercleanertest.cpp
@@ -0,0 +1,139 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <sstream>
+#include <dlfcn.h>
+
+#include "global.h"
+
+#include "numbercleanertest.h"
+
+#define NUMBER_TEST_1   "514 333 4444"
+#define NUMBER_TEST_2   "514-333-4444"
+#define NUMBER_TEST_3   "(514) 333 4444"
+#define NUMBER_TEST_4   "(514)-333-4444"
+#define NUMBER_TEST_5   "(514) 333-4444"
+#define NUMBER_TEST_6   "514 333  4444"
+#define NUMBER_TEST_7   "ext 136"
+#define NUMBER_TEST_8   "514 333  4444 ext. 136"
+#define NUMBER_TEST_9   "514 333  4444 ext 136"
+#define NUMBER_TEST_10   "136"
+
+#define VALID_NUMBER                "5143334444"
+#define VALID_PREPENDED_NUMBER      "95143334444"
+#define VALID_EXTENSION             "136"
+
+using std::cout;
+using std::endl;
+
+
+void NumberCleanerTest::setUp()
+{
+    // Instanciate the cleaner singleton
+    cleaner = new NumberCleaner ();
+}
+
+void NumberCleanerTest::test_format_1 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_1 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_1) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_2 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_2 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_2) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_3 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_3 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_3) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_4 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_4 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_4) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_5 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_5 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_5) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_6 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_6 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_6) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_7 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_7 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_7) == VALID_EXTENSION);
+}
+
+void NumberCleanerTest::test_format_8 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_8 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_8) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_9 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_9 --------------------\n");
+
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_9) == VALID_NUMBER);
+}
+
+void NumberCleanerTest::test_format_10 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_10 --------------------\n");
+
+    cleaner->set_phone_number_prefix ("9");
+    CPPUNIT_ASSERT (cleaner->get_phone_number_prefix () == "9");
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_1) == VALID_PREPENDED_NUMBER);
+}
+
+void NumberCleanerTest::test_format_11 (void)
+{
+	_debug ("-------------------- NumberCleanerTest::test_format_11 --------------------\n");
+
+    cleaner->set_phone_number_prefix ("9");
+    CPPUNIT_ASSERT (cleaner->get_phone_number_prefix () == "9");
+    CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_10) == VALID_EXTENSION);
+}
+
+void NumberCleanerTest::tearDown()
+{
+    // Delete the cleaner object
+    delete cleaner;
+    cleaner=0;
+}
diff --git a/sflphone-common/test/numbercleanertest.h b/sflphone-common/test/numbercleanertest.h
new file mode 100644
index 0000000000..f303c72526
--- /dev/null
+++ b/sflphone-common/test/numbercleanertest.h
@@ -0,0 +1,99 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "numbercleaner.h"
+// #include "../src/conference.h"
+/*
+ * @file numbercleanerTest.cpp  
+ * @brief       Regroups unitary tests related to the phone number cleanup function.
+ */
+
+#ifndef _NUMBERCLEANER_TEST_
+#define _NUMBERCLEANER_TEST_
+
+class NumberCleanerTest : public CppUnit::TestCase {
+
+   /**
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE (NumberCleanerTest);
+        CPPUNIT_TEST (test_format_1);
+        CPPUNIT_TEST (test_format_2);
+        CPPUNIT_TEST (test_format_3);
+        CPPUNIT_TEST (test_format_4);
+        CPPUNIT_TEST (test_format_5);
+        CPPUNIT_TEST (test_format_6);
+        CPPUNIT_TEST (test_format_10);
+    CPPUNIT_TEST_SUITE_END ();
+
+    public:
+        NumberCleanerTest() : CppUnit::TestCase("Hook Manager Tests") {}
+        
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        void test_format_1 ();
+
+        void test_format_2 ();
+
+        void test_format_3 ();
+
+        void test_format_4 ();
+        
+        void test_format_5 ();
+
+        void test_format_6 ();
+        
+        void test_format_7 ();
+        
+        void test_format_8 ();
+
+        void test_format_9 ();
+        
+        void test_format_10 ();
+
+        void test_format_11 ();
+
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        inline void tearDown ();
+
+    private:
+        NumberCleaner *cleaner;
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(NumberCleanerTest, "NumberCleanerTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( NumberCleanerTest );
+
+#endif
diff --git a/sflphone-common/test/pluginmanagertest.cpp b/sflphone-common/test/pluginmanagertest.cpp
new file mode 100644
index 0000000000..93b18ba2ef
--- /dev/null
+++ b/sflphone-common/test/pluginmanagertest.cpp
@@ -0,0 +1,124 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <sstream>
+#include <dlfcn.h>
+
+#include "pluginmanagertest.h"
+
+using std::cout;
+using std::endl;
+
+#define PLUGIN_TEST_DIR  "/usr/lib/sflphone/plugins/"
+#define PLUGIN_TEST_DESC  "mytest"
+#define PLUGIN_TEST_NAME  "/usr/lib/sflphone/plugins/libplugintest.so"
+
+
+void PluginManagerTest::setUp()
+{
+    // Instanciate the plugin manager singleton
+    _pm = PluginManager::instance();
+    library = 0;
+    plugin = 0;
+}
+
+void PluginManagerTest::testLoadDynamicLibrary()
+{
+	_debug ("-------------------- PluginManagerTest::testLoadDynamicLibrary --------------------\n");
+
+    CPPUNIT_ASSERT (_pm->loadDynamicLibrary (PLUGIN_TEST_NAME) != NULL);
+}
+
+void PluginManagerTest::testUnloadDynamicLibrary()
+{
+	_debug ("-------------------- PluginManagerTest::testUnloadDynamicLibrary --------------------\n");
+
+    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
+    CPPUNIT_ASSERT (library != NULL);
+    CPPUNIT_ASSERT (_pm->unloadDynamicLibrary (library) == 0);
+}
+
+void PluginManagerTest::testInstanciatePlugin()
+{
+	_debug ("-------------------- PluginManagerTest::testInstanciatePlugin --------------------\n");
+
+    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
+    CPPUNIT_ASSERT (library != NULL);
+    CPPUNIT_ASSERT (_pm->instanciatePlugin (library, &plugin) == 0);
+    CPPUNIT_ASSERT (plugin!=NULL);
+}
+
+void PluginManagerTest::testInitPlugin()
+{
+	_debug ("-------------------- PluginManagerTest::testInitPlugin --------------------\n");
+
+    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
+    CPPUNIT_ASSERT (library != NULL);
+    CPPUNIT_ASSERT (_pm->instanciatePlugin (library, &plugin) == 0);
+    CPPUNIT_ASSERT (plugin!=NULL);
+    CPPUNIT_ASSERT (plugin->getPluginName() == PLUGIN_TEST_DESC);
+}
+
+void PluginManagerTest::testRegisterPlugin()
+{
+	_debug ("-------------------- PluginManagerTest::testRegisterPlugin --------------------\n");
+
+    library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
+    CPPUNIT_ASSERT (library != NULL);
+    CPPUNIT_ASSERT (_pm->instanciatePlugin (library, &plugin) == 0);
+    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == false);
+    CPPUNIT_ASSERT (_pm->registerPlugin (plugin, library) == 0);
+    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
+}
+
+void PluginManagerTest::testLoadPlugins ()
+{
+	_debug ("-------------------- PluginManagerTest::testLoadPlugins --------------------\n");
+
+    CPPUNIT_ASSERT (_pm->loadPlugins (PLUGIN_TEST_DIR) == 0);
+    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
+}
+
+void PluginManagerTest::testUnloadPlugins ()
+{
+	_debug ("-------------------- PluginManagerTest::testUnloadPlugins --------------------\n");
+
+    CPPUNIT_ASSERT (_pm->loadPlugins (PLUGIN_TEST_DIR) == 0);
+    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
+    CPPUNIT_ASSERT (_pm->unloadPlugins () == 0);
+    CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == false);
+}
+
+void PluginManagerTest::tearDown()
+{
+    // Delete the plugin manager object
+    delete _pm;
+    _pm=0;
+
+    if (plugin)
+        delete plugin;
+
+    plugin = 0;
+
+    if (library)
+        delete library;
+
+    library = 0;
+}
diff --git a/sflphone-common/test/pluginmanagertest.h b/sflphone-common/test/pluginmanagertest.h
new file mode 100644
index 0000000000..c52e9f66d5
--- /dev/null
+++ b/sflphone-common/test/pluginmanagertest.h
@@ -0,0 +1,95 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "plug-in/pluginmanager.h"
+#include "plug-in/librarymanager.h"
+#include "plug-in/plugin.h"
+
+/*
+ * @file pluginManagerTest.cpp  
+ * @brief       Regroups unitary tests related to the plugin manager.
+ */
+
+#ifndef _PLUGINMANAGER_TEST_
+#define _PLUGINMANAGER_TEST_
+
+class PluginManagerTest : public CppUnit::TestCase {
+
+   /**
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE( PluginManagerTest );
+        CPPUNIT_TEST( testLoadDynamicLibrary );
+        CPPUNIT_TEST( testUnloadDynamicLibrary );
+        CPPUNIT_TEST( testInstanciatePlugin );
+        CPPUNIT_TEST( testInitPlugin );
+        CPPUNIT_TEST( testRegisterPlugin );
+        CPPUNIT_TEST( testLoadPlugins );
+        CPPUNIT_TEST( testUnloadPlugins );
+    CPPUNIT_TEST_SUITE_END();
+
+    public:
+        PluginManagerTest() : CppUnit::TestCase("Plugin Manager Tests") {}
+        
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        inline void tearDown ();
+
+        void testLoadDynamicLibrary ();
+        
+        void testUnloadDynamicLibrary ();
+
+        void testInstanciatePlugin ();
+
+        void testInitPlugin ();
+
+        void testRegisterPlugin ();
+
+        void testLoadPlugins ();
+
+        void testUnloadPlugins ();
+
+    private:
+        PluginManager *_pm;
+        LibraryManager *library;
+        Plugin *plugin;
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(PluginManagerTest, "PluginManagerTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( PluginManagerTest );
+
+#endif
diff --git a/sflphone-common/test/rtptest.cpp b/sflphone-common/test/rtptest.cpp
new file mode 100644
index 0000000000..924e9cf8df
--- /dev/null
+++ b/sflphone-common/test/rtptest.cpp
@@ -0,0 +1,110 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Alexandre Savarda <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 <stdio.h>
+#include <sstream>
+#include <ccrtp/rtp.h>
+#include <assert.h>
+#include <string>
+#include <cstring>
+#include <math.h>
+#include <dlfcn.h>
+#include <iostream>
+#include <sstream>
+#include <time.h>
+
+#include "rtptest.h"
+#include "audio/audiortp/AudioRtpSession.h"
+#include "audio/audiortp/AudioSymmetricRtpSession.h"
+
+#include <unistd.h>
+
+void RtpTest::setUp() {
+
+	pjsipInit();
+
+	CallID cid = "123456";
+
+	sipcall = new SIPCall(cid, Call::Incoming, _pool);
+
+	sipcall->setLocalIp("127.0.0.1");
+	sipcall->setLocalAudioPort(RANDOM_LOCAL_PORT);
+	sipcall->setLocalExternAudioPort(RANDOM_LOCAL_PORT);
+}
+
+bool RtpTest::pjsipInit() {
+	// Create memory cache for pool
+	pj_caching_pool_init(&_cp, &pj_pool_factory_default_policy, 0);
+
+	// Create memory pool for application.
+	_pool = pj_pool_create(&_cp.factory, "rtpTest", 4000, 4000, NULL);
+
+	if (!_pool) {
+		_debug ("----- RtpTest: Could not initialize pjsip memory pool ------");
+		return PJ_ENOMEM;
+	}
+
+	return true;
+}
+
+void RtpTest::testRtpInitClose() {
+	_debug ("-------------------- RtpTest::testRtpInitClose --------------------\n");
+
+	audiortp = new AudioRtpFactory();
+
+	try {
+		_debug ("-------- Open Rtp Session ----------");
+		audiortp->initAudioRtpConfig(sipcall);
+		audiortp->initAudioRtpSession(sipcall);
+		//AudioCodecType codecType = PAYLOAD_CODEC_ULAW;
+		//AudioCodec* audioCodec = Manager::instance().getCodecDescriptorMap().instantiateCodec(codecType);
+		//audiortp->start(audioCodec);
+
+	} catch (...) {
+		_debug ("!!! Exception occured while Oppenning Rtp !!!");
+		CPPUNIT_ASSERT(false);
+
+	}
+
+	CPPUNIT_ASSERT (audiortp != NULL);
+
+	sleep(1);
+
+	_debug ("------ RtpTest::testRtpClose() ------");
+
+	try {
+		_debug ("------ Close Rtp Session -------");
+		audiortp->stop();
+
+	} catch (...) {
+
+		_debug ("!!! Exception occured while closing Rtp !!!");
+		CPPUNIT_ASSERT(false);
+
+	}
+
+	delete audiortp;
+
+	audiortp = NULL;
+}
+
+void RtpTest::tearDown() {
+	delete sipcall;
+	sipcall = NULL;
+}
diff --git a/sflphone-common/test/rtptest.h b/sflphone-common/test/rtptest.h
new file mode 100644
index 0000000000..f6e89bce6d
--- /dev/null
+++ b/sflphone-common/test/rtptest.h
@@ -0,0 +1,110 @@
+/*
+ *  Copyright (C) 2009 Savoir-Faire Linux inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 _RTP_TEST_
+#define _RTP_TEST_
+
+// 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 "audio/audiortp/AudioRtpFactory.h"
+#include "manager.h"
+#include "call.h"
+#include "sip/sipcall.h"
+#include "sip/sipvoiplink.h"
+
+#include "config/config.h"
+#include "user_cfg.h"
+
+using namespace sfl;
+
+class AudioSymmetricRtpSession;
+class AudioRtpSession;
+//class AudioRtpFactory;
+class SIPVoIPLink;
+
+class RtpTest: public CppUnit::TestCase {
+
+	/*
+	 * Use cppunit library macros to add unit test the factory
+	 */
+CPPUNIT_TEST_SUITE( RtpTest );
+		CPPUNIT_TEST( testRtpInitClose );
+	CPPUNIT_TEST_SUITE_END();
+
+public:
+
+	RtpTest() :
+		CppUnit::TestCase("Audio Layer Tests") {
+	}
+
+	/*
+	 * Code factoring - Common resources can be initialized here.
+	 * This method is called by unitcpp before each test
+	 */
+	void setUp();
+
+	/*
+	 * Code factoring - Common resources can be released here.
+	 * This method is called by unitcpp after each test
+	 */
+	inline void tearDown();
+
+	bool pjsipInit();
+
+	void testRtpInitClose();
+
+private:
+
+	enum CallType {
+		Incoming, Outgoing
+	};
+
+	ManagerImpl* manager;
+
+	AudioRtpFactory *audiortp;
+
+	SIPCall *sipcall;
+
+	pj_caching_pool _cp;
+
+	pj_pool_t *_pool;
+};
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(RtpTest, "RtpTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( RtpTest );
+
+#endif
diff --git a/sflphone-common/test/sdesnegotiatortest.cpp b/sflphone-common/test/sdesnegotiatortest.cpp
new file mode 100644
index 0000000000..26d545ffd0
--- /dev/null
+++ b/sflphone-common/test/sdesnegotiatortest.cpp
@@ -0,0 +1,223 @@
+/*
+ *  Copyright (C) 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 <stdio.h>
+#include <sstream>
+#include <ccrtp/rtp.h>
+#include <assert.h>
+#include <string>
+#include <cstring>
+#include <math.h>
+#include <dlfcn.h>
+#include <iostream>
+#include <sstream>
+
+#include "sdesnegotiatortest.h"
+
+#include <unistd.h>
+#include "global.h"
+
+
+using std::cout;
+using std::endl;
+
+
+void SdesNegotiatorTest::testTagPattern()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testTagPattern --------------------\n");
+
+	std::string subject = "a=crypto:4";
+
+    pattern = new sfl::Pattern("^a=crypto:(?P<tag>[0-9]{1,9})");
+    *pattern << subject;
+
+    CPPUNIT_ASSERT(pattern->matches());
+    CPPUNIT_ASSERT(pattern->group("tag").compare("4") == 0);
+
+    delete pattern;
+    pattern = NULL;
+}
+
+
+void SdesNegotiatorTest::testCryptoSuitePattern()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testCryptoSuitePattern --------------------\n");
+
+    std::string subject = "AES_CM_128_HMAC_SHA1_80"; 
+
+    pattern = new sfl::Pattern("(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \
+			       "AES_CM_128_HMAC_SHA1_32|"		\
+			       "F8_128_HMAC_SHA1_80|"			\
+			       "[A-Za-z0-9_]+)");
+    *pattern << subject;
+
+    CPPUNIT_ASSERT(pattern->matches());
+    CPPUNIT_ASSERT(pattern->group("cryptoSuite").compare("AES_CM_128_HMAC_SHA1_80") == 0);
+
+    delete pattern;
+    pattern = NULL;
+}
+
+
+void SdesNegotiatorTest::testKeyParamsPattern()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testKeyParamsPattern --------------------\n");
+
+    std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32";
+
+    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+			       "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
+			       "(2\\^(?P<lifetime>[0-9]+)\\|"		\
+			       "(?P<mkiValue>[0-9]+)\\:"		\
+			       "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+
+    *pattern << subject;
+
+    pattern->matches();
+    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
+    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
+== 0);
+    CPPUNIT_ASSERT(pattern->group("lifetime").compare("20")== 0);
+    CPPUNIT_ASSERT(pattern->group("mkiValue").compare("1")== 0);
+    CPPUNIT_ASSERT(pattern->group("mkiLength").compare("32")== 0);
+
+    delete pattern;
+    pattern = NULL;
+}
+
+
+void SdesNegotiatorTest::testKeyParamsPatternWithoutMKI()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testKeyParamsPatternWithoutMKI --------------------\n");
+
+    std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj";
+
+    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+                               "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)" \
+                               "(\\|2\\^(?P<lifetime>[0-9]+)\\|"                \
+                               "(?P<mkiValue>[0-9]+)\\:"                \
+                               "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+
+    *pattern << subject;
+    pattern->matches();
+    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
+    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
+== 0);
+
+    delete pattern;
+    pattern = NULL;
+}
+
+
+/**
+ * Make sure that all the fields can be extracted
+ * properly from the syntax. 
+ */
+void SdesNegotiatorTest::testNegotiation()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testNegotiation --------------------\n");
+
+     // Add a new SDES crypto line to be processed. 
+    remoteOffer = new std::vector<std::string>();
+    remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"));
+    remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32"));
+	
+    // Register the local capabilities.
+    localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>();
+    for(int i = 0; i < 3; i++) {
+        localCapabilities->push_back(sfl::CryptoSuites[i]);
+    }
+
+    sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer);
+
+    CPPUNIT_ASSERT(sdesnego->negotiate());
+    // CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32")==0);
+
+    delete remoteOffer;
+    remoteOffer = NULL;
+
+    delete localCapabilities;
+    localCapabilities = NULL;
+
+    delete sdesnego;
+    sdesnego = NULL;
+}
+
+/**
+ * Make sure that unproperly formatted crypto lines are rejected.
+ */
+void SdesNegotiatorTest::testComponent()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testComponent --------------------\n");
+
+    // Register the local capabilities.
+    std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
+	
+    //Support all the CryptoSuites
+    for(int i = 0; i < 3; i++) {
+        capabilities->push_back(sfl::CryptoSuites[i]);
+    }
+	
+    // Make sure that if a component is missing, negotiate will fail
+    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32");
+    std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
+    cryptoOffer->push_back(cryptoLine);	
+
+    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
+
+    CPPUNIT_ASSERT(negotiator->negotiate() == false);
+}
+
+
+
+/**
+ * Make sure that most simple case does not fail.
+ */
+void SdesNegotiatorTest::testMostSimpleCase()
+{
+	_debug ("-------------------- SdesNegotiatorTest::testMostSimpleCase --------------------\n");
+
+    // Register the local capabilities.
+    std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
+
+    //Support all the CryptoSuites
+    for(int i = 0; i < 3; i++) {
+        capabilities->push_back(sfl::CryptoSuites[i]);
+    }
+
+    // Make sure taht this case works (since it's default for most application)
+    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd");
+    std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
+    cryptoOffer->push_back(cryptoLine);	
+
+    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
+
+    CPPUNIT_ASSERT(negotiator->negotiate() == true);
+
+    CPPUNIT_ASSERT(negotiator->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0);
+    CPPUNIT_ASSERT(negotiator->getKeyMethod().compare("inline") == 0);
+    CPPUNIT_ASSERT(negotiator->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0);
+    CPPUNIT_ASSERT(negotiator->getLifeTime().compare("")== 0);
+    CPPUNIT_ASSERT(negotiator->getMkiValue().compare("")== 0);
+    CPPUNIT_ASSERT(negotiator->getMkiLength().compare("")== 0);
+
+    delete capabilities; capabilities = NULL;
+    delete cryptoOffer; cryptoOffer = NULL;
+    delete negotiator; negotiator = NULL;
+}
diff --git a/sflphone-common/test/sdesnegotiatortest.h b/sflphone-common/test/sdesnegotiatortest.h
new file mode 100644
index 0000000000..97172594a2
--- /dev/null
+++ b/sflphone-common/test/sdesnegotiatortest.h
@@ -0,0 +1,107 @@
+/*
+ *  Copyright (C) 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.
+ */
+
+// 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>
+
+#include <vector>
+
+// pjsip import
+#include <pjsip.h>
+#include <pjlib.h>
+#include <pjsip_ua.h>
+#include <pjlib-util.h>
+#include <pjnath/stun_config.h>
+
+// Application import
+#include "sip/SdesNegotiator.h"
+#include "sip/Pattern.h"
+
+
+/*
+ * @file sdesnegotiationTest.cpp  
+ * @brief       Regroups unitary tests related to the plugin manager.
+ */
+
+#ifndef _SDESNEGOTIATOR_TEST_
+#define _SDESNEGOTIATOR_TEST_
+
+
+
+class SdesNegotiatorTest : public CppUnit::TestCase {
+
+    /*
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE( SdesNegotiatorTest );
+    CPPUNIT_TEST( testTagPattern );
+    CPPUNIT_TEST( testCryptoSuitePattern );
+    CPPUNIT_TEST( testKeyParamsPattern );
+    CPPUNIT_TEST( testKeyParamsPatternWithoutMKI );
+    CPPUNIT_TEST( testNegotiation );
+    CPPUNIT_TEST( testMostSimpleCase );
+    CPPUNIT_TEST_SUITE_END();
+
+    public:
+
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+		void testTagPattern();
+
+		void testCryptoSuitePattern();
+
+		void testKeyParamsPattern();
+		
+        void testKeyParamsPatternCiscoStyle();
+
+		void testKeyParamsPatternWithoutMKI();
+
+		void testNegotiation();
+		
+		void testComponent();
+
+		void testMostSimpleCase();
+
+    private:
+
+		sfl::Pattern *pattern;
+
+		sfl::SdesNegotiator *sdesnego;
+
+		std::vector<std::string> *remoteOffer;
+
+		std::vector<sfl::CryptoSuiteDefinition> *localCapabilities;
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(SdesNegotiatorTest, "SdesNegotiatorTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( SdesNegotiatorTest );
+
+#endif
diff --git a/sflphone-common/test/sflphonedrc-sample b/sflphone-common/test/sflphonedrc-sample
new file mode 100644
index 0000000000..6d0064a7c5
--- /dev/null
+++ b/sflphone-common/test/sflphonedrc-sample
@@ -0,0 +1,74 @@
+[Account:1239059899]
+Account.alias=1260@sip.sflphone.org
+Account.enable=1
+Account.type=SIP
+hostname=sflphone.org
+password=NIPAgmLo
+username=1260
+
+[Account:1243544046]
+Account.alias=Manu
+Account.enable=1
+Account.mailbox=*97
+Account.type=SIP
+hostname=192.168.50.3
+password=sfl-137pw
+username=137
+
+[Addressbook]
+Addressbook.contact_photo=0
+Addressbook.enable=1
+Addressbook.list=1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/
+Addressbook.max_results=25
+Addressbook.phone_business=1
+Addressbook.phone_home=0
+Addressbook.phone_mobile=0
+
+[Audio]
+Alsa.cardID_In=0
+Alsa.cardID_Out=0
+Alsa.framesize=20
+Alsa.plugin=default
+Alsa.sampleRate=44100
+Record.path=/home/emilou
+Rings.ringChoice=/usr/share/sflphone/ringtones/konga.ul
+Volume.micro=100
+Volume.speakers=100
+
+[Hooks]
+Hooks.iax2_enabled=0
+Hooks.phone_number_add_prefix=
+Hooks.phone_number_enabled=0
+Hooks.sip_enabled=0
+Hooks.url_command=x-www-browser
+Hooks.url_sip_field=X-sflphone-url
+
+[Preferences]
+Accounts.order=Account:1243544046/Account:1239138829/
+Audio.api=1
+Dialpad.display=0
+History.enabled=1
+History.limit=30
+History.maxCalls=20
+Notify.all=1
+Notify.mails=0
+Options.zoneToneChoice=North America
+Pulseaudio.volumeCtrl=1
+Registration.expire=180
+Ringtones.enable=1
+SIP.portNum=5060
+Searchbar.display=1
+Start.hidden=0
+Volume.display=0
+Window.popup=0
+Zeroconf.enable=0
+
+[VoIPLink]
+DTMF.playDtmf=1
+DTMF.playTones=1
+DTMF.pulseLength=250
+DTMF.sendDTMFas=0
+STUN.enable=0
+STUN.server=stun.sflphone.org
+VoIPLink.symmetric=1
+
diff --git a/sflphone-common/test/validator.cpp b/sflphone-common/test/validator.cpp
index 6f34e3102f..56bb01dc9e 100644
--- a/sflphone-common/test/validator.cpp
+++ b/sflphone-common/test/validator.cpp
@@ -20,3 +20,7 @@ bool Validator::isNotNull(std::string str) {
 	else
 		return false;
 }
+
+bool Validator::isEqual(std::string str1, std::string str2) {
+	return str1.compare(str2) == 0;
+}
diff --git a/sflphone-common/test/validator.h b/sflphone-common/test/validator.h
index 363e3c9aef..9f2012e2a6 100644
--- a/sflphone-common/test/validator.h
+++ b/sflphone-common/test/validator.h
@@ -17,5 +17,6 @@ class Validator {
   public:
 	static bool isNumber(std::string str);
 	static bool isNotNull(std::string str);
+	static bool isEqual(std::string str1, std::string str2);
 };
 #endif /* VALIDATOR_H_ */
-- 
GitLab


From ae0538ad0f17b2473ce5f17c1446b84be1f50f85 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Wed, 24 Mar 2010 18:14:43 -0400
Subject: [PATCH 153/160] [#2535] Refactoring (for unit tests)

---
 sflphone-common/src/audio/audiortp.cpp        | 685 ------------------
 sflphone-common/src/audio/audiortp.h          | 299 --------
 .../src/audio/audiortp/AudioRtpFactory.cpp    |  18 +-
 .../src/audio/audiortp/AudioRtpFactory.h      |   6 +-
 .../src/audio/audiortp/AudioRtpSession.h      |  47 +-
 sflphone-common/src/sip/sipvoiplink.cpp       |  11 +-
 6 files changed, 46 insertions(+), 1020 deletions(-)
 delete mode 100644 sflphone-common/src/audio/audiortp.cpp
 delete mode 100644 sflphone-common/src/audio/audiortp.h

diff --git a/sflphone-common/src/audio/audiortp.cpp b/sflphone-common/src/audio/audiortp.cpp
deleted file mode 100644
index 26615888a7..0000000000
--- a/sflphone-common/src/audio/audiortp.cpp
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- *  Copyright (C) 2004-2008 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
- *  Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
- *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
- *  Author: Laurielle Lea <laurielle.lea@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
- *  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 <cstdio>
-#include <cstdlib>
-#include <ccrtp/rtp.h>
-#include <assert.h>
-#include <cstring>
-#include <math.h>
-#include <dlfcn.h>
-#include <iostream>
-#include <sstream>
-
-#include "../global.h"
-#include "../manager.h"
-#include "codecDescriptor.h"
-#include "audiortp.h"
-#include "audiolayer.h"
-#include "ringbuffer.h"
-#include "../user_cfg.h"
-#include "../sipcall.h"
-
-
-int AudioRtpRTX::count_rtp = 0;
-
-////////////////////////////////////////////////////////////////////////////////
-// AudioRtp
-////////////////////////////////////////////////////////////////////////////////
-AudioRtp::AudioRtp() :_RTXThread (0), _symmetric(), _rtpMutex()
-{
-
-}
-
-AudioRtp::~AudioRtp (void)
-{
-    ost::MutexLock m (_rtpMutex);
-
-    if (_RTXThread != _RTXThread) {
-        delete _RTXThread;
-        _RTXThread = 0;
-    }
-
-}
-
-void
-AudioRtp::createNewSession (SIPCall *ca)
-{
-
-    ost::MutexLock m (_rtpMutex);
-
-    _debug ("AudioRtp::Create new rtp session");
-
-    // something should stop the thread before...
-
-    if (_RTXThread != 0) {
-        _debug ("**********************************************************");
-        _debug ("! ARTP Failure: Thread already exists..., stopping it");
-        _debug ("**********************************************************");
-        delete _RTXThread;
-        _RTXThread = 0;
-    }
-
-    // Start RTP Send/Receive threads
-    _symmetric = Manager::instance().getConfigInt (SIGNALISATION,SYMMETRIC) ? true : false;
-
-    _RTXThread = new AudioRtpRTX (ca, _symmetric);
-
-}
-
-int
-AudioRtp::start (void)
-{
-    ost::MutexLock m (_rtpMutex);
-
-    if (_RTXThread == 0) {
-        _debug ("! ARTP Failure: Cannot start audiortp thread since not yet created");
-        throw AudioRtpException();
-    }
-
-
-    try {
-        if (_RTXThread->start() != 0) {
-            _debug ("! ARTP Failure: unable to start RTX Thread");
-            return -1;
-        }
-    } catch (...) {
-        _debugException ("! ARTP Failure: when trying to start a thread");
-        throw;
-    }
-
-    return 0;
-}
-
-
-bool
-AudioRtp::closeRtpSession ()
-{
-
-    ost::MutexLock m (_rtpMutex);
-    // This will make RTP threads finish.
-    _debug ("AudioRtp::Stopping rtp session");
-
-    try {
-        if (_RTXThread != 0) {
-            delete _RTXThread;
-            _RTXThread = 0;
-        }
-    } catch (...) {
-        _debugException ("! ARTP Exception: when stopping audiortp");
-        throw;
-    }
-
-    _debug ("AudioRtp::Audio rtp stopped");
-
-    return true;
-}
-
-/*
-void
-AudioRtp::setRecording()
-{
-
-    _debug ("AudioRtp::setRecording");
-    _RTXThread->_ca->setRecording();
-
-}
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// AudioRtpRTX Class                                                          //
-////////////////////////////////////////////////////////////////////////////////
-AudioRtpRTX::AudioRtpRTX (SIPCall *sipcall, bool sym) : time (new ost::Time()), _ca (sipcall), _sessionSend (NULL), _sessionRecv (NULL), _session (NULL),
-        _sym (sym), micData (NULL), micDataConverted (NULL), micDataEncoded (NULL), spkrDataDecoded (NULL), spkrDataConverted (NULL),
-        converter (NULL), _layerSampleRate(),_codecSampleRate(), _layerFrameSize(), _audiocodec (NULL)
-{
-
-    setCancel (cancelDefault);
-    // AudioRtpRTX should be close if we change sample rate
-    // TODO: Change bind address according to user settings.
-    // TODO: this should be the local ip not the external (router) IP
-    std::string localipConfig = _ca->getLocalIp(); // _ca->getLocalIp();
-    ost::InetHostAddress local_ip (localipConfig.c_str());
-
-    _debug ("%i", _ca->getLocalAudioPort());
-    _session = new ost::SymmetricRTPSession (local_ip, _ca->getLocalAudioPort());
-    // _session = new ost::RTPSessionBase(local_ip, _ca->getLocalAudioPort());
-    _sessionRecv = NULL;
-    _sessionSend = NULL;
-
-    //mic, we receive from soundcard in stereo, and we send encoded
-    //encoding before sending
-    _audiolayer = Manager::instance().getAudioDriver();
-    _layerFrameSize = _audiolayer->getFrameSize(); // in ms
-    _layerSampleRate = _audiolayer->getSampleRate();
-
-    // initBuffers();
-
-    // initAudioRtpSession();
-
-    _payloadIsSet = false;
-    _remoteIpIsSet = false;
-
-
-    count_rtp++;
-    // open files
-    std::string s_input;
-    std::string s_output;
-
-    // convert count into string
-    std::stringstream out;
-    out << count_rtp;
-
-    s_input = "/home/alexandresavard/Desktop/buffer_record/rtp_input_";
-    s_input.append (out.str());
-
-    s_output = "/home/alexandresavard/Desktop/buffer_record/rtp_output_";
-    s_output.append (out.str());
-
-    rtp_input_rec = new std::fstream();
-    rtp_output_rec = new std::fstream();
-
-    rtp_input_rec->open (s_input.c_str(), std::fstream::out);
-    rtp_output_rec->open (s_output.c_str(), std::fstream::out);
-
-}
-
-AudioRtpRTX::~AudioRtpRTX ()
-{
-
-    ost::MutexLock m (_rtpRtxMutex);
-
-    _debug ("Delete AudioRtpRTX instance in callid %s", _ca->getCallId().c_str());
-
-    try {
-        this->terminate();
-    } catch (...) {
-        _debugException ("! ARTP: Thread destructor didn't terminate correctly");
-        throw;
-    }
-
-    _debug ("Remove audio stream for call id %s", _ca->getCallId().c_str());
-
-    _audiolayer->getMainBuffer()->unBindAll (_ca->getCallId());
-    // Manager::instance().removeStream(_ca->getCallId());
-
-    _debug ("DELETE print micData address %p", micData);
-    delete [] micData;
-    micData = NULL;
-    delete [] micDataConverted;
-    micDataConverted = NULL;
-    delete [] micDataEncoded;
-    micDataEncoded = NULL;
-
-    delete [] spkrDataDecoded;
-    spkrDataDecoded = NULL;
-    delete [] spkrDataConverted;
-    spkrDataConverted = NULL;
-
-    delete time;
-    time = NULL;
-
-    delete converter;
-    converter = NULL;
-
-    _ca = 0;
-    // _session->terminate();
-
-    delete _session;
-    _session = NULL;
-
-    _debug ("AudioRtpRTX instance deleted");
-
-    rtp_input_rec->close();
-    rtp_output_rec->close();
-
-}
-
-
-void
-AudioRtpRTX::initBuffers()
-{
-    ost::MutexLock m (_rtpRtxMutex);
-
-    _debug ("AudioRtpRTX::initBuffers Init RTP buffers for %s", _ca->getCallId().c_str());
-
-    converter = new SamplerateConverter (_layerSampleRate , _layerFrameSize);
-
-    nbSamplesMax = (int) (_layerSampleRate * _layerFrameSize /1000);
-
-
-    _debug ("AudioRtpRTX::initBuffers NBSAMPLEMAX %i", nbSamplesMax);
-
-    micData = new SFLDataFormat[nbSamplesMax];
-    _debug ("CREATE print micData address %p", micData);
-    micDataConverted = new SFLDataFormat[nbSamplesMax];
-    micDataEncoded = new unsigned char[nbSamplesMax];
-
-    spkrDataConverted = new SFLDataFormat[nbSamplesMax];
-    spkrDataDecoded = new SFLDataFormat[nbSamplesMax];
-
-    Manager::instance().addStream (_ca->getCallId());
-    // _audiolayer->getMainBuffer()->bindCallID(_ca->getCallId());
-}
-
-
-void
-AudioRtpRTX::initAudioRtpSession (void)
-{
-
-    try {
-
-        _session->setSchedulingTimeout (100000);
-        _session->setExpireTimeout (1000000);
-
-
-    } catch (...) {
-        _debugException ("! ARTP Failure: initialisation failed");
-        throw;
-    }
-
-}
-
-void
-AudioRtpRTX::setRtpSessionMedia (void)
-{
-
-    if (_ca == 0) {
-        _debug (" !ARTP: No call, can't init RTP media");
-        return;
-    }
-
-    AudioCodecType pl = (AudioCodecType) _ca->getLocalSDP()->get_session_media()->getPayload();
-
-    _audiocodec = Manager::instance().getCodecDescriptorMap().instantiateCodec (pl);
-
-    if (_audiocodec == NULL) {
-        _debug (" !ARTP: No audiocodec, can't init RTP media");
-        return;
-    }
-
-    _debug ("Init audio RTP session: codec payload %i", _audiocodec->getPayload());
-
-    // _audioCodecInstance = *_audiocodec;
-
-    _codecSampleRate = _audiocodec->getClockRate();
-
-    _codecFrameSize = _audiocodec->getFrameSize();
-
-    if (_audiocodec->getPayload() == 9) {
-        _payloadIsSet = _session->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
-    } else if (_audiocodec->hasDynamicPayload()) {
-        _payloadIsSet = _session->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
-    } else if (!_audiocodec->hasDynamicPayload() && _audiocodec->getPayload() != 9) {
-        _payloadIsSet = _session->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
-    }
-
-
-
-}
-
-void
-AudioRtpRTX::setRtpSessionRemoteIp (void)
-{
-
-    if (!_remoteIpIsSet) {
-
-        _debug ("++++++++++++++++++++++++++ SET IP ADDRESS ++++++++++++++++++++++++++++");
-
-        if (_ca == 0) {
-            _debug (" !ARTP: No call, can't init RTP media ");
-            return;
-        }
-
-        ost::InetHostAddress remote_ip (_ca->getLocalSDP()->get_remote_ip().c_str());
-
-        _debug ("Init audio RTP session: remote ip %s", _ca->getLocalSDP()->get_remote_ip().data());
-
-        if (!remote_ip) {
-            _debug (" !ARTP Thread Error: Target IP address [%s] is not correct!", _ca->getLocalSDP()->get_remote_ip().data());
-            return;
-        }
-
-        _debug ("++++Address: %s, audioport: %d", _ca->getLocalSDP()->get_remote_ip().c_str(), _ca->getLocalSDP()->get_remote_audio_port());
-
-        _debug ("++++Audioport: %d", (int) _ca->getLocalSDP()->get_remote_audio_port());
-
-        if (!_session->addDestination (remote_ip, (unsigned short) _ca->getLocalSDP()->get_remote_audio_port())) {
-            _debug (" !ARTP Thread Error: can't add destination to session!");
-            return;
-        }
-
-        _remoteIpIsSet = true;
-    } else {
-        _debug ("+++++++++++++++++++++++ IP ADDRESS ALREADY SET ++++++++++++++++++++++++");
-    }
-
-}
-
-
-
-float
-AudioRtpRTX::computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate)
-{
-    return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
-}
-
-int
-AudioRtpRTX::computeNbByteAudioLayer (float codecFrameSize)
-{
-    return (int) ( (float) _layerSampleRate * codecFrameSize * (float) sizeof (SFLDataFormat) / 1000.0);
-}
-
-
-int
-AudioRtpRTX::processDataEncode()
-{
-
-    // compute codec framesize in ms
-    float fixed_codec_framesize = computeCodecFrameSize (_audiocodec->getFrameSize(), _audiocodec->getClockRate());
-
-    // compute nb of byte to get coresponding to 20 ms at audio layer frame size (44.1 khz)
-    int maxBytesToGet = computeNbByteAudioLayer (fixed_codec_framesize);
-
-    // available bytes inside ringbuffer
-    int availBytesFromMic = _audiolayer->getMainBuffer()->availForGet (_ca->getCallId());
-
-    // _debug("AudioRtpRTX::processDataEncode() callid: %s availBytesFromMic %i", _ca->getCallId().c_str(), availBytesFromMic);
-
-    // _debug("AudioRtpRTX::processDataEncode: availBytesFromMic: %i", availBytesFromMic);
-    // set available byte to maxByteToGet
-    int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet;
-    // _debug("bytesAvail %i", bytesAvail);
-
-    if (bytesAvail == 0)
-        return 0;
-
-    // _debug("AudioRtpRTX::processDataEncode: bytesAvail: %i", bytesAvail);
-    // Get bytes from micRingBuffer to data_from_mic
-    int nbSample = _audiolayer->getMainBuffer()->getData (micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat);
-
-    rtp_output_rec->write ( (char*) micData, bytesAvail);
-
-    // _debug("AudioRtpRTX::processDataEncode: nbSample: %i", nbSample);
-
-    // nb bytes to be sent over RTP
-    int compSize = 0;
-
-    // test if resampling is required
-    if (_audiocodec->getClockRate() != _layerSampleRate) {
-
-        int nb_sample_up = nbSample;
-        //_debug("_nbSample audiolayer->getMic(): %i ", nbSample);
-
-        // Store the length of the mic buffer in samples for recording
-        _nSamplesMic = nbSample;
-
-        nbSample = reSampleData (micData , micDataConverted, _audiocodec->getClockRate(), nb_sample_up, DOWN_SAMPLING);
-
-        compSize = _audiocodec->codecEncode (micDataEncoded, micDataConverted, nbSample*sizeof (int16));
-
-    } else {
-        // no resampling required
-        compSize = _audiocodec->codecEncode (micDataEncoded, micData, nbSample*sizeof (int16));
-    }
-
-    return compSize;
-}
-
-
-void
-AudioRtpRTX::processDataDecode (unsigned char* spkrData, unsigned int size, int& countTime)
-{
-    if (_audiocodec != NULL) {
-
-        // Return the size of data in bytes
-        int expandedSize = _audiocodec->codecDecode (spkrDataDecoded , spkrData , size);
-
-        // buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes
-        int nbSample = expandedSize / sizeof (SFLDataFormat);
-
-        // test if resampling is required
-
-        if (_audiocodec->getClockRate() != _layerSampleRate) {
-
-            // Do sample rate conversion
-            int nb_sample_down = nbSample;
-            nbSample = reSampleData (spkrDataDecoded, spkrDataConverted, _codecSampleRate, nb_sample_down, UP_SAMPLING);
-
-            rtp_input_rec->write ( (char*) spkrDataConverted, nbSample * sizeof (SFLDataFormat));
-
-            // Store the number of samples for recording
-            _nSamplesSpkr = nbSample;
-
-
-
-            // put data in audio layer, size in byte
-            _audiolayer->getMainBuffer()->putData (spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId());
-
-        } else {
-
-            // Stor the number of samples for recording
-            _nSamplesSpkr = nbSample;
-
-            // put data in audio layer, size in byte
-            _audiolayer->getMainBuffer()->putData (spkrDataDecoded, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId());
-        }
-
-        // Notify (with a beep) an incoming call when there is already a call
-        countTime += time->getSecond();
-
-        if (Manager::instance().incomingCallWaiting() > 0) {
-            countTime = countTime % 500; // more often...
-
-            if (countTime == 0) {
-                Manager::instance().notificationIncomingCall();
-            }
-        }
-
-    } else {
-        countTime += time->getSecond();
-    }
-}
-
-void
-AudioRtpRTX::sendSessionFromMic (int timestamp)
-{
-    // STEP:
-    //   1. get data from mic
-    //   2. convert it to int16 - good sample, good rate
-    //   3. encode it
-    //   4. send it
-
-    timestamp += time->getSecond();
-    // no call, so we do nothing
-
-    if (_ca==0) {
-        _debug (" !ARTP: No call associated (mic)");
-        return;
-    }
-
-    // AudioLayer* audiolayer = Manager::instance().getAudioDriver();
-    if (!_audiolayer) {
-        _debug (" !ARTP: No audiolayer available for MIC");
-        return;
-    }
-
-    if (!_audiocodec) {
-        _debug (" !ARTP: No audiocodec available for MIC");
-        return;
-    }
-
-
-
-    int compSize = processDataEncode();
-
-    // putData put the data on RTP queue, sendImmediate bypass this queue
-    // _debug("AudioRtpRTX::sendSessionFromMic: timestamp: %i, compsize: %i", timestamp, compSize);
-
-    if ( (compSize != 0) && (micDataEncoded != NULL))
-        _session->putData (timestamp, micDataEncoded, compSize);
-
-    // _session->sendImmediate(timestamp, micDataEncoded, compSize);
-
-
-}
-
-
-void
-AudioRtpRTX::receiveSessionForSpkr (int& countTime)
-{
-
-    if (_ca == 0) {
-        return;
-    }
-
-    if (!_audiolayer) {
-        _debug (" !ARTP: No audiolayer available for SPEAKER");
-        return;
-    }
-
-    if (!_audiocodec) {
-        _debug (" !ARTP: No audiocodec available for SPEAKER");
-        return;
-    }
-
-    const ost::AppDataUnit* adu = NULL;
-
-    // int is_waiting = _session->isWaiting();
-
-    // if (is_waiting != 0)
-    adu = _session->getData (_session->getFirstTimestamp());
-
-    // else
-    //   return;
-
-
-
-    if (adu == NULL)
-        return;
-
-    unsigned char* spkrData  = (unsigned char*) adu->getData(); // data in char
-
-    unsigned int size = adu->getSize(); // size in char
-
-    processDataDecode (spkrData, size, countTime);
-
-    if (adu != NULL) {
-        delete adu;
-        adu = NULL;
-    }
-
-}
-
-
-int
-AudioRtpRTX::reSampleData (SFLDataFormat *input, SFLDataFormat *output, int sampleRate_codec, int nbSamples, int status)
-{
-    if (status==UP_SAMPLING) {
-        return converter->upsampleData (input, output, sampleRate_codec , _layerSampleRate , nbSamples);
-    } else if (status==DOWN_SAMPLING) {
-        return converter->downsampleData (micData , micDataConverted , sampleRate_codec , _layerSampleRate , nbSamples);
-    } else
-
-        return 0;
-}
-
-
-
-void
-AudioRtpRTX::run ()
-{
-
-    int sessionWaiting;
-
-    initBuffers();
-    initAudioRtpSession();
-    setRtpSessionRemoteIp();
-    setRtpSessionMedia();
-
-    int timestep = _codecFrameSize;
-
-    int countTime = 0; // for receive
-
-    int threadSleep = 0;
-
-    if (_codecSampleRate != 0)
-        threadSleep = (_codecFrameSize * 1000) / _codecSampleRate;
-    else
-        threadSleep = _layerFrameSize;
-
-    TimerPort::setTimer (threadSleep);
-
-    _audiolayer->startStream();
-
-    _audiolayer->getMainBuffer()->flush (_ca->getCallId());
-
-    _session->startRunning();
-
-    int timestamp = _session->getCurrentTimestamp(); // for mic
-
-    _debug ("- ARTP Action: Start call %s",_ca->getCallId().c_str());
-
-    while (!testCancel()) {
-
-
-        // _debug("Main while loop for call: %s", _ca->getCallId().c_str());
-        // Send session
-        sessionWaiting = _session->isWaiting();
-
-        sendSessionFromMic (timestamp);
-        timestamp += timestep;
-        // timestamp = _session->getCurrentTimestamp();
-
-        // Recv session
-        receiveSessionForSpkr (countTime);
-
-        // Let's wait for the next transmit cycle
-
-
-        if (sessionWaiting == 1) {
-            // Record mic and speaker during conversation
-            _ca->recAudio.recData (spkrDataConverted,micData,_nSamplesSpkr,_nSamplesMic);
-        } else {
-            // Record mic only while leaving a message
-            _ca->recAudio.recData (micData,_nSamplesMic);
-        }
-
-
-        // Let's wait for the next transmit cycle
-        Thread::sleep (TimerPort::getTimer());
-
-
-        // TimerPort::incTimer(20); // 'frameSize' ms
-        TimerPort::incTimer (threadSleep);
-
-    }
-
-    // _audiolayer->stopStream();
-    _debug ("- ARTP Action: Stop call %s",_ca->getCallId().c_str());
-
-
-}
-
-
-// EOF
diff --git a/sflphone-common/src/audio/audiortp.h b/sflphone-common/src/audio/audiortp.h
deleted file mode 100644
index f9dc1671a9..0000000000
--- a/sflphone-common/src/audio/audiortp.h
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- *  Copyright (C) 2004-2008 Savoir-Faire Linux inc.
- *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
- *  Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
- *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
- *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
- *  Author: Laurielle Lea <laurielle.lea@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 __AUDIO_RTP_H__
-#define __AUDIO_RTP_H__
-
-#include <cstdio>
-#include <cstdlib>
-#include <iostream>
-#include <ccrtp/rtp.h>
-#include <cc++/numbers.h>
-
-#include "../global.h"
-// #include "plug-in/audiorecorder/audiorecord.h"
-#include "../samplerateconverter.h"
-#include "codecDescriptor.h"
-
-#include <fstream>
-
-#define UP_SAMPLING 0
-#define DOWN_SAMPLING 1
-
-
-
-class AudioRtpException: public std::exception
-{
-  virtual const char* what() const throw()
-  {
-    return "AudioRtpException occured";
-  }
-};
-
-
-/**
- * @file audiortp.h
- * @brief Manage the real-time data transport in a SIP call
- */
-
-
-class SIPCall;
-
-///////////////////////////////////////////////////////////////////////////////
-// Two pair of sockets
-///////////////////////////////////////////////////////////////////////////////
-class AudioRtpRTX : public ost::Thread, public ost::TimerPort {
-  public:
-    /**
-     * Constructor
-     * @param sipcall The pointer on the SIP call
-     * @param sym     Tells whether or not the voip links are symmetric
-     */
-    AudioRtpRTX (SIPCall* sipcall, bool sym);
-
-    /**
-     * Destructor
-     */
-    ~AudioRtpRTX();
-
-    /** For incoming call notification */ 
-    ost::Time *time;
-
-    /** Thread associated method */    
-    virtual void run ();
-
-    /** A SIP call */
-    SIPCall* _ca;
-
-    /**
-     * Update RTP session media info as received from SDP negociation 
-     */
-    void setRtpSessionMedia(void);
-
-    /**
-     * Update RTP session remote ip destination as received from sip transaction 
-     */
-    void setRtpSessionRemoteIp(void); 
-
-    
-    friend class RtpTest;
-
-  private:
-
-    // copy constructor
-    AudioRtpRTX(const AudioRtpRTX& rh);
-  
-    // assignment operator
-    AudioRtpRTX& operator=(const AudioRtpRTX& rh);
-
-    /** RTP session to send data */
-    ost::RTPSession *_sessionSend;
-    
-    /** RTP session to receive data */
-    ost::RTPSession *_sessionRecv;
-
-    /** RTP symmetric session ( receive and send data in the same session ) */
-    ost::SymmetricRTPSession *_session;
-
-    /** Semaphore */
-    // ost::Semaphore _start;
-
-    /** Is the session symmetric or not */
-    bool _sym;
-
-    /** Mic-data related buffers */
-    SFLDataFormat* micData;
-    SFLDataFormat* micDataConverted;
-    unsigned char* micDataEncoded;
-
-    /** Speaker-data related buffers */
-    SFLDataFormat* spkrDataDecoded;
-    SFLDataFormat* spkrDataConverted;
-
-    /** Sample rate converter object */
-    SamplerateConverter* converter;
-
-    /** audio layer */
-    AudioLayer *_audiolayer;
-
-    /** Variables to process audio stream: sample rate for playing sound (typically 44100HZ) */
-    int _layerSampleRate;  
-
-    /** Sample rate of the codec we use to encode and decode (most of time 8000HZ) */
-    int _codecSampleRate;
-
-    /** Length of the sound frame we capture in ms (typically 20ms) */
-    int _layerFrameSize; 
-
-    /** Codecs frame size in samples (20 ms => 882 at 44.1kHz)
-        The exact value is stored in the codec */
-    int _codecFrameSize;
-
-    /** Speaker buffer length in samples once the data are resampled
-     *  (used for mixing and recording)
-     */
-    int _nSamplesSpkr; 
-
-    /** Mic buffer length in samples once the data are resampled
-     *  (used for mixing and recording)
-     */
-    int _nSamplesMic;
-    
-    /**
-     * Maximum number of sample for audio buffers (mic and spkr)
-     */
-    int nbSamplesMax;
-
-
-    
-    bool _payloadIsSet;
-    bool _remoteIpIsSet;
-    
-    /**
-     * Init the RTP session. Create either symmetric or double sessions to manage data transport
-     * Set the payloads according to the manager preferences
-     */
-    void initAudioRtpSession(void);
-    
-    /**
-     * Return the lenth the codec frame in ms 
-     */
-    float computeCodecFrameSize(int codecSamplePerFrame, int codecClockRate);
-
-    /**
-     * Compute nb of byte to get coresponding to X ms at audio layer frame size (44.1 khz) 
-     */
-    int computeNbByteAudioLayer(float codecFrameSize);
-
-
-    int processDataEncode();
-
-
-    void processDataDecode(unsigned char* spkrData, unsigned int size, int& countTime);
-
-
-    /**
-     * Get the data from the mic, encode it and send it through the RTP session
-     * @param timestamp	To manage time and synchronizing
-     */ 		 	
-    void sendSessionFromMic(int timestamp);
-    
-    /**
-     * Get the data from the RTP packets, decode it and send it to the sound card
-     * @param countTime	To manage time and synchronizing
-     */		 	
-    void receiveSessionForSpkr(int& countTime);
-
-    /**
-     * Init the buffers used for processing sound data
-     */ 
-    void initBuffers(void);
-
-    /**
-     * Call the appropriate function, up or downsampling
-     * @param sampleRate_codec	The sample rate of the codec selected to encode/decode the data
-     * @param nbSamples		Number of samples to process
-     * @param status  Type of resampling
-     *		      UPSAMPLING
-     *		      DOWNSAMPLING
-     * @return int The number of samples after process
-     */ 
-    int reSampleData(SFLDataFormat *input, SFLDataFormat *output,int sampleRate_codec, int nbSamples, int status);
-    
-    /** The audio codec used during the session */
-    AudioCodec *_audiocodec;
-    // AudioCodec _audioCodecInstance;
-
-    /** Mutex */
-    ost::Mutex _rtpRtxMutex;
-
-  public:
-
-    std::fstream *rtp_input_rec;
-    std::fstream *rtp_output_rec;
-
-    static int count_rtp;
-
-   
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// Main class rtp
-///////////////////////////////////////////////////////////////////////////////
-class AudioRtp {
-  public:
-    /**
-     * Constructor
-     */
-    AudioRtp();
-    
-    /**
-     * Destructor
-     */
-    ~AudioRtp();
-
-    /**
-     * Create a brand new RTP session by calling the AudioRtpRTX constructor
-     * @param ca A pointer on a SIP call
-     */
-    void createNewSession (SIPCall *ca);
-    
-    /**
-     * Start the AudioRtpRTX thread created with createNewSession
-     */
-    int start(void);
-    
-    /**
-     * Close a RTP session and kills the remaining threads
-     */
-    bool closeRtpSession( void );
-
-    /**
-     * Start recording
-     */
-    // void setRecording ();
-
-    friend class RtpTest;
-
-    /**
-     * 
-     */ 
-    inline AudioRtpRTX * getAudioRtpRtxThread(void) { return _RTXThread; }
-  private:
-    // copy constructor
-    AudioRtp(const AudioRtp& rh);
-  
-    // assignment operator
-    AudioRtp& operator=(const AudioRtp& rh);
-
-    /** The RTP thread */
-    AudioRtpRTX* _RTXThread;
-
-    /** Symmetric session or not */
-    bool _symmetric;
-
-    /** Mutex */
-    ost::Mutex _rtpMutex;
-
-};
-
-#endif // __AUDIO_RTP_H__
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
index cb3480979e..09756c4adf 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
@@ -22,7 +22,6 @@
 #include "AudioZrtpSession.h"
 #include "AudioSrtpSession.h"
 #include "AudioSymmetricRtpSession.h"
-
 #include "manager.h"
 #include "account.h"
 #include "sip/sipcall.h"
@@ -122,7 +121,7 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca)
     }
 }
 
-void AudioRtpFactory::start (void)
+void AudioRtpFactory::start (AudioCodec* audiocodec)
 {
     if (_rtpSession == NULL) {
         throw AudioRtpFactoryException ("RTP: Error: _rtpSession was null when trying to start audio thread");
@@ -131,7 +130,7 @@ void AudioRtpFactory::start (void)
     switch (_rtpSessionType) {
 
         case Sdes:
-	    if (static_cast<AudioSrtpSession *> (_rtpSession)->startRtpThread() != 0) {
+	    if (static_cast<AudioSrtpSession *> (_rtpSession)->startRtpThread(audiocodec) != 0) {
                 throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioSRtpSession thread");
             }
 	    break;
@@ -139,7 +138,7 @@ void AudioRtpFactory::start (void)
         case Symmetric:
             _debug ("Starting symmetric rtp thread");
 
-            if (static_cast<AudioSymmetricRtpSession *> (_rtpSession)->startRtpThread() != 0) {
+            if (static_cast<AudioSymmetricRtpSession *> (_rtpSession)->startRtpThread(audiocodec) != 0) {
                 throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioSymmetricRtpSession thread");
             }
 
@@ -147,7 +146,7 @@ void AudioRtpFactory::start (void)
 
         case Zrtp:
 
-            if (static_cast<AudioZrtpSession *> (_rtpSession)->startRtpThread() != 0) {
+            if (static_cast<AudioZrtpSession *> (_rtpSession)->startRtpThread(audiocodec) != 0) {
                 throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioZrtpSession thread");
             }
             break;
@@ -210,6 +209,15 @@ void AudioRtpFactory::updateDestinationIpAddress (void)
     }
 }
 
+sfl::AudioSymmetricRtpSession * AudioRtpFactory::getAudioSymetricRtpSession()
+{
+	if ( (_rtpSessionType == Symmetric) && (_rtpSessionType != NULL)) {
+	        return static_cast<AudioSymmetricRtpSession *> (_rtpSession);
+	    } else {
+	        throw AudioRtpFactoryException("RTP: Error: _rtpSession is NULL in getAudioSymetricRtpSession");
+	    }
+}
+
 sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession()
 {
     if ( (_rtpSessionType == Zrtp) && (_rtpSessionType != NULL)) {
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
index a1c93d2cdc..de16a31fe6 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
@@ -23,6 +23,7 @@
 #include <cc++/thread.h>
 
 #include "sip/SdesNegotiator.h"
+#include "audio/codecs/audiocodec.h"
 
 class SdesNegotiator;
 class SIPCall;
@@ -30,6 +31,7 @@ class SIPCall;
 namespace sfl {
     class AudioZrtpSession;
     class AudioSrtpSession;
+    class AudioSymmetricRtpSession;
 }
 
 namespace sfl {
@@ -76,7 +78,7 @@ namespace sfl {
 	 * file. initAudioRtpSession must have been called prior to that.
 	 * @param None
 	 */
-	void start();
+	void start(AudioCodec*);
 
 	/**
 	 * Stop the audio rtp thread of the type specified in the configuration
@@ -98,6 +100,8 @@ namespace sfl {
 	 */
 	inline void * getAudioRtpSession(void) { return _rtpSession; }
 
+	AudioSymmetricRtpSession * getAudioSymetricRtpSession();
+
 	/** 
 	 * @param None
 	 * @return The internal audio rtp session type
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index cb0578beaa..9213eefad2 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -75,7 +75,7 @@ namespace sfl {
             // Thread associated method
             virtual void run ();
             
-            int startRtpThread();
+            int startRtpThread(AudioCodec*);
 
             /**
              * Used mostly when receiving a reinvite
@@ -92,23 +92,24 @@ namespace sfl {
             	 */
             void sendDtmfEvent(sfl::DtmfEvent *dtmf);
 
+            inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) {
+                return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
+            }
+
+            int computeNbByteAudioLayer (float codecFrameSize) {
+                return (int) ( ((float) _converterSamplingRate * codecFrameSize * sizeof(SFLDataFormat))/ 1000.0);
+            }
+
         private:
         
             void initBuffers(void);
             
             void setSessionTimeouts(void);
-            void setSessionMedia(void);
+            void setSessionMedia(AudioCodec*);
             void setDestinationIpAddress(void);
                 
             int processDataEncode(void);
             void processDataDecode(unsigned char * spkrData, unsigned int size);
-            
-            inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) {
-                return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
-            }          
-            int computeNbByteAudioLayer (float codecFrameSize) {
-                return (int) ( ((float) _converterSamplingRate * codecFrameSize * sizeof(SFLDataFormat))/ 1000.0);
-            }
           
             void sendMicData();
             void receiveSpeakerData ();
@@ -206,7 +207,6 @@ namespace sfl {
             
         protected:
              SIPCall * _ca;
-            
     };    
     
     template <typename D>
@@ -307,17 +307,9 @@ namespace sfl {
     }
     
     template <typename D>
-    void AudioRtpSession<D>::setSessionMedia(void)
+    void AudioRtpSession<D>::setSessionMedia(AudioCodec* audiocodec)
     {
-        assert(_ca);
-
-        AudioCodecType pl = (AudioCodecType)_ca->getLocalSDP()->get_session_media()->getPayload();
-        _audiocodec = _manager->getCodecDescriptorMap().instantiateCodec(pl);
-
-        if (_audiocodec == NULL) {
-            _debug ("No audiocodec, can't init RTP media");
-            throw AudioRtpSessionException();
-        }
+        _audiocodec = audiocodec;
 
         _debug ("Init audio RTP session: codec payload %i", _audiocodec->getPayload());
 
@@ -617,23 +609,20 @@ namespace sfl {
     }
     
     template <typename D>
-    int AudioRtpSession<D>::startRtpThread ()
+    int AudioRtpSession<D>::startRtpThread (AudioCodec* audiocodec)
     {
         _debug("Starting main thread");
+        setSessionTimeouts();
+        setSessionMedia(audiocodec);
+		initBuffers();
         return start(_mainloopSemaphore);
     }
     
     template <typename D>
     void AudioRtpSession<D>::run ()
     {
-
-        setSessionTimeouts();
-        setSessionMedia();
-
-	initBuffers();
-
-	// Timestamp must be initialized randomly
-	_timestamp = static_cast<D*>(this)->getCurrentTimestamp();
+		// Timestamp must be initialized randomly
+		_timestamp = static_cast<D*>(this)->getCurrentTimestamp();
 
         int sessionWaiting;
         int threadSleep = 0;
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 022cdcbe0c..4d1e25a850 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3299,10 +3299,19 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
         _debug("Sdes not initialized for this call\n");
     }
 
+	assert(call->getLocalSDP());
+	assert(call->getLocalSDP()->get_session_media());
+
+	AudioCodecType pl = (AudioCodecType)call->getLocalSDP()->get_session_media()->getPayload();
+	AudioCodec* audiocodec = Manager::instance().getCodecDescriptorMap().instantiateCodec(pl);
+
+	if (audiocodec == NULL)
+		_error ("SIP: No audiocodec found");
+
 
     try {
         call->setAudioStart (true);
-        call->getAudioRtp()->start();
+        call->getAudioRtp()->start(audiocodec);
     } catch (exception& rtpException) {
         _debug ("%s", rtpException.what());
     }
-- 
GitLab


From 1e16f3d4919ffd49b1871ace0dd00f996c3f13f8 Mon Sep 17 00:00:00 2001
From: Julien Bonjean <julien@bonjean.info>
Date: Wed, 24 Mar 2010 19:12:17 -0400
Subject: [PATCH 154/160] [#3073] Fixed pickup/hangup toggle case

---
 sflphone-client-gnome/src/shortcuts.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
index 9ebad5c1b2..7dfd53173b 100644
--- a/sflphone-client-gnome/src/shortcuts.c
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -54,11 +54,11 @@ toggle_pick_up_hang_up_callback ()
     {
       switch (selectedCall->_state)
         {
-      case CALL_STATE_DIALING:
       case CALL_STATE_INCOMING:
       case CALL_STATE_TRANSFERT:
         sflphone_pick_up ();
         break;
+      case CALL_STATE_DIALING:
       case CALL_STATE_HOLD:
       case CALL_STATE_CURRENT:
       case CALL_STATE_RECORD:
-- 
GitLab


From 7754c2fffb3d871a21b7e5b6809868ba26cff740 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 25 Mar 2010 12:07:19 -0400
Subject: [PATCH 155/160] [#3076] Getting ready for beta release

---
 NEWS                                     |  8 ++++++++
 sflphone-client-gnome/VERSION            |  2 +-
 sflphone-client-gnome/configure.ac       |  2 +-
 sflphone-client-gnome/doc/C/sflphone.xml | 13 ++++++++++++-
 sflphone-common/VERSION                  |  2 +-
 sflphone-common/configure.ac             |  2 +-
 sflphone-common/man/sflphoned.pod        |  2 +-
 sflphone-common/src/global.h             |  2 +-
 8 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/NEWS b/NEWS
index 1c91178be2..63091e0855 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,14 @@
 # SFLphone
 ################################################
 
+* 2010-03-25: 0.9.8 beta has been released
+
+* 2009-12-10: SFLphone 0.9.7 has been released
+
+* 2009-12-03: SFLphone 0.9.7~rc2 has been released
+
+* 2009-11-20: SFLphone 0.9.7~rc1 has been released
+
 * 2009-10-27: SFLphone 0.9.7~beta has been released
 
 * 2009-07-27: SFLphone 0.9.6 has been released
diff --git a/sflphone-client-gnome/VERSION b/sflphone-client-gnome/VERSION
index c81aa44afb..53cdfba097 100644
--- a/sflphone-client-gnome/VERSION
+++ b/sflphone-client-gnome/VERSION
@@ -1 +1 @@
-0.9.7
+0.9.8~beta
diff --git a/sflphone-client-gnome/configure.ac b/sflphone-client-gnome/configure.ac
index a0e88ac300..0fbddbfe68 100644
--- a/sflphone-client-gnome/configure.ac
+++ b/sflphone-client-gnome/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([SFLphone],[0.9.7],[sflphoneteam@savoirfairelinux.com],[sflphone-client-gnome])
+AC_INIT([SFLphone],[0.9.8~beta],[sflphoneteam@savoirfairelinux.com],[sflphone-client-gnome])
 AM_CONFIG_HEADER(config.h)
 
 LT_INIT
diff --git a/sflphone-client-gnome/doc/C/sflphone.xml b/sflphone-client-gnome/doc/C/sflphone.xml
index 744f08a897..050baa8da3 100644
--- a/sflphone-client-gnome/doc/C/sflphone.xml
+++ b/sflphone-client-gnome/doc/C/sflphone.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"  [
 	<!ENTITY app "SFLphone">
-	<!ENTITY appversion "0.9.7">
+	<!ENTITY appversion "0.9.8~beta">
 	<!ENTITY docversion "1.0">
 ]>
 
@@ -17,6 +17,7 @@
       <year>2007</year>
       <year>2008</year>
       <year>2009</year>
+      <year>2010</year>
       <holder>Savoir-faire Linux</holder>
     </copyright>
 
@@ -73,6 +74,16 @@
 </authorgroup>
 
 <revhistory>
+		<revision>
+            <revnumber>SFLphone Manual v1.0.1</revnumber>
+            <date>March 2010</date>
+            <revdescription>
+                <para role="author">SFLphone team</para>
+                <para role="publisher">Savoir-faire Linux</para>
+				<para>Minor changes</para>
+            </revdescription>
+      </revision>
+
       <revision>
             <revnumber>SFLphone Manual v1.0</revnumber>
             <date>September 2009</date>
diff --git a/sflphone-common/VERSION b/sflphone-common/VERSION
index 06fa200552..53cdfba097 100644
--- a/sflphone-common/VERSION
+++ b/sflphone-common/VERSION
@@ -1 +1 @@
-0.9.7~beta
+0.9.8~beta
diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac
index 5a412e3c47..eaf4d1aece 100644
--- a/sflphone-common/configure.ac
+++ b/sflphone-common/configure.ac
@@ -3,7 +3,7 @@ dnl
 
 	dnl Process this file with autoconf to produce a configure script.
 	AC_PREREQ(2.59)
-	AC_INIT([sflphone],[0.9.7~beta],[sflphoneteam@savoirfairelinux.com],[sflphone])
+	AC_INIT([sflphone],[0.9.8~beta],[sflphoneteam@savoirfairelinux.com],[sflphone])
 	AC_COPYRIGHT([[Copyright (c) Savoir-Faire Linux 2004-2009]])
 AC_REVISION([$Revision$])
 
diff --git a/sflphone-common/man/sflphoned.pod b/sflphone-common/man/sflphoned.pod
index e860f89827..99edc5140f 100644
--- a/sflphone-common/man/sflphoned.pod
+++ b/sflphone-common/man/sflphoned.pod
@@ -4,7 +4,7 @@ sflphoned - SIP and IAX2 compatible voice over IP softphone core.
 
 =head1 SYNOPSIS
 
-sflphoned --help
+B<sflphoned> [OPTION]...
 
 =head1 DESCRIPTION
 
diff --git a/sflphone-common/src/global.h b/sflphone-common/src/global.h
index 69973228a2..630403fd2b 100644
--- a/sflphone-common/src/global.h
+++ b/sflphone-common/src/global.h
@@ -33,7 +33,7 @@
 #include <vector>
 #include "logger.h"
 
-#define SFLPHONED_VERSION "0.9.7"		/** Version number */
+#define SFLPHONED_VERSION "0.9.8~beta"		/** Version number */
 
 #define HOMEDIR					(getenv ("HOME"))				/** Home directory */
 #define XDG_DATA_HOME			(getenv ("XDG_DATA_HOME"))
-- 
GitLab


From 8cbadd467493b09ba3cd50051940246602370401 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 25 Mar 2010 15:00:38 -0400
Subject: [PATCH 156/160] [#3076] Clean error message when sending DTMF

Do not send DTMF when dialing
---
 sflphone-common/src/managerimpl.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index 2ebafd7e97..573bcc74e8 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -1436,7 +1436,12 @@ bool ManagerImpl::sendDtmf (const CallID& id, char code) {
 	bool returnValue = false;
 
 	playDtmf(code);
-	returnValue = getAccountLink(accountid)->carryingDTMFdigits(id, code);
+
+	CallAccountMap::iterator iter = _callAccountMap.find(id);
+
+	// Make sure the call exist before sending DTMF, ths could be simply call dialing
+	if(iter != _callAccountMap.end())
+		returnValue = getAccountLink(accountid)->carryingDTMFdigits(id, code);
 
 	return returnValue;
 }
-- 
GitLab


From c4bae4ea9ea7af534c072556489840fe26c4e2f9 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 25 Mar 2010 15:04:07 -0400
Subject: [PATCH 157/160] [#3076] Fixed authentication issue and hardcoded ip
 address in test suite

---
 sippxml/ip2ip_uac_send_hangup.xml       |  2 +-
 sippxml/testsuiteuac.sh                 | 29 ++++++++++++++++++++++---
 tools/pysflphone/pysflphone_testdbus.py |  4 ++--
 3 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/sippxml/ip2ip_uac_send_hangup.xml b/sippxml/ip2ip_uac_send_hangup.xml
index 8b801eb494..5c9673644d 100644
--- a/sippxml/ip2ip_uac_send_hangup.xml
+++ b/sippxml/ip2ip_uac_send_hangup.xml
@@ -78,7 +78,7 @@
   <send retrans="500">
     <![CDATA[
 
-      BYE sip:192.168.50.79 SIP/2.0
+      BYE sip:[remote_ip] SIP/2.0
       Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
       From: <sip:[local_ip]:[local_port]>;tag=[call_number]
       To: <sip:[remote_ip]:[remote_port]>;tag=[$1]
diff --git a/sippxml/testsuiteuac.sh b/sippxml/testsuiteuac.sh
index 9e993dfeb8..fb6359edf8 100644
--- a/sippxml/testsuiteuac.sh
+++ b/sippxml/testsuiteuac.sh
@@ -62,12 +62,35 @@ function test_ip2ip_recv_hangup {
     # sleep 1;
 
     # start sipp client and send calls 
-    sipp -sf ip2ip_uac_send_peer_hungup.xmlip2ip_uac_send_hangup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
+    sipp -sf ip2ip_uac_send_peer_hungup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
 
     # kill every one
     # bashtrap 
 }
 
+
+# SCENARIO 1 Test 4
+function test_ip2ip_recv_peer_hungup {
+
+    # start sflphoned
+    # /usr/lib/sflphone/sflphoned& 
+
+    # wait some time to make sure sflphoned is started
+    # sleep 1;
+
+    # python ../tools/pysflphone/pysflphone_testdbus.py &
+
+    # wait some time to make sure client is bound
+    # sleep 1;
+
+    # start sipp client and send calls 
+    sipp -sf ip2ip_uac_send_hangup.xml ${REMOTEADDR_lo} -i ${LOCALIP_lo} -p ${LOCALPORT} -l 1 -m 10
+
+    # kill every one
+    # bashtrap 
+}
+
+
 # SCENARIO 2 Test 1
 function test_account_send_hangup {
 
@@ -276,7 +299,7 @@ bashtrap()
 
 # Test 4: - Receive an ACCOUNT call
 #         - Peer Hangup
-# test_account_recv_peer_hungup
+test_account_recv_peer_hungup
 
 
 
@@ -302,4 +325,4 @@ bashtrap()
 
 # Test 1: - Receive a call
 #         - Refuse (hangup without answer)
-test_ip2ip_send_refused
\ No newline at end of file
+# test_ip2ip_send_refused
\ No newline at end of file
diff --git a/tools/pysflphone/pysflphone_testdbus.py b/tools/pysflphone/pysflphone_testdbus.py
index 933f8736c9..035b20a27f 100644
--- a/tools/pysflphone/pysflphone_testdbus.py
+++ b/tools/pysflphone/pysflphone_testdbus.py
@@ -300,7 +300,7 @@ sflphone.setFirstRegisteredAccount();
 
 # Test 4: - Receive an ACCOUNT call
 #         - Peer Hangup
-# testsuite.test_account_recv_peer_hungup()
+testsuite.test_account_recv_peer_hungup()
 
 
 
@@ -327,4 +327,4 @@ sflphone.setFirstRegisteredAccount();
 
 # Test 1: - Receive an incoming call
 #         - Hangup without answer
-testsuite.test_ip2ip_recv_refuse()
+# testsuite.test_ip2ip_recv_refuse()
-- 
GitLab


From c3fdb98f07e2ae5223a4780b025f698fe6fb7154 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 25 Mar 2010 15:06:52 -0400
Subject: [PATCH 158/160] [#3071] Fix segfault on receiving INVITE without SDP,
 send 488 error

---
 sflphone-common/src/sip/sdp.cpp         | 23 +++++++++++++++
 sflphone-common/src/sip/sdp.h           | 19 ++++++-------
 sflphone-common/src/sip/sipvoiplink.cpp | 19 +++----------
 sflphone-common/src/sip/sipvoiplink.h   | 38 ++++++++++++-------------
 4 files changed, 54 insertions(+), 45 deletions(-)

diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index 94c8e64634..5b3066212a 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -211,6 +211,10 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder select
 
     pj_status_t status;
 
+	if (!remote) {
+		return !PJ_SUCCESS;
+	}
+
     // Create the SDP negociator instance by calling
     // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional )
 
@@ -531,6 +535,19 @@ AudioCodec* Sdp::get_session_media (void)
 }
 
 
+pj_status_t Sdp::start_negociation()
+{
+	pj_status_t status;
+
+	if (_negociator) {
+		status = pjmedia_sdp_neg_negotiate(_pool, _negociator, 0);
+	}
+	else {
+		status = !PJ_SUCCESS;
+	}
+
+	return status;
+}
 
 void Sdp::toString (void)
 {
@@ -648,6 +665,9 @@ void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *r
 
     _info ("SDP: Fetching media from sdp");
 
+    if(!remote_sdp)
+    	return;
+
     pjmedia_sdp_media *r_media;
 
     this->get_remote_sdp_media_from_offer (remote_sdp, &r_media);
@@ -667,6 +687,9 @@ void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp
 {
     int count, i;
 
+    if(!remote_sdp)
+    	return;
+
     count = remote_sdp->media_count;
     *r_media =  NULL;
 
diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h
index e3932751aa..8c81168adf 100644
--- a/sflphone-common/src/sip/sdp.h
+++ b/sflphone-common/src/sip/sdp.h
@@ -166,10 +166,7 @@ class Sdp {
          * @return pj_status_t  0 on success
          *                      1 otherwise
          */
-        pj_status_t start_negociation( void ){
-            return pjmedia_sdp_neg_negotiate(
-                       _pool, _negociator, 0);
-        }
+        pj_status_t start_negociation( void );
 
          /*
          * Retrieve the negociated sdp offer from the sip payload.
@@ -221,7 +218,7 @@ class Sdp {
 
         std::vector<sdpMedia*> get_session_media_list (void) { return _session_media; }
 
-	void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer);
+        void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer);
 
     private:
         /** Codec Map */
@@ -253,13 +250,13 @@ class Sdp {
         /** Local audio port */
         int _local_extern_audio_port;
 
-        /** Remote's audio port */
+        /** Remote audio port */
         unsigned int _remote_audio_port;
 
         std::string _zrtp_hello_hash;
 
-	/** "a=crypto" sdes local attributes obtained from AudioSrtpSession */
-	std::vector<std::string> _srtp_crypto;
+        /** "a=crypto" sdes local attributes obtained from AudioSrtpSession */
+        std::vector<std::string> _srtp_crypto;
         
         Sdp(const Sdp&); //No Copy Constructor
         Sdp& operator=(const Sdp&); //No Assignment Operator
@@ -350,12 +347,12 @@ class Sdp {
         void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media);
 
 	
-	/* 
+        /*
          * Adds a sdes attribute to the given media section.
          *
          * @param media The media to add the srtp attribute to 
-	 */
-	void sdp_add_sdes_attribute(std::vector<std::string>& crypto);
+         */
+        void sdp_add_sdes_attribute(std::vector<std::string>& crypto);
 
         /* 
          * Adds a zrtp-hash  attribute to 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 4d068c4862..c38a29e979 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -820,30 +820,20 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
 bool
 SIPVoIPLink::answer (const CallID& id)
 {
-    SIPCall *call;
     pj_status_t status;
     pjsip_tx_data *tdata;
-    Sdp *local_sdp;
     pjsip_inv_session *inv_session;
 
-    _debug ("SIPVoIPLink::answer: start answering ");
+    _debug ("UserAgent: Answering call %s", id.c_str());
 
-    call = getSIPCall (id);
+    SIPCall *call = getSIPCall (id);
 
     if (call==0) {
-        _debug ("! SIP Failure: SIPCall doesn't exists");
+        _debug ("UserAgent: SIPCall %s doesn't exists while answering", id.c_str());
         return false;
     }
 
-    local_sdp = call->getLocalSDP();
-
-    /*
-    try {
-        call->getAudioRtp()->initAudioRtpSession (call);
-    } catch (...) {
-        _debug ("Failed to create rtp thread from answer");
-    }
-    */
+    Sdp *local_sdp = call->getLocalSDP();
 
     inv_session = call->getInvSession();
 
@@ -3683,7 +3673,6 @@ mod_on_rx_request (pjsip_rx_data *rdata)
         return false;
     }
 
-
     /* Create the local dialog (UAS) */
     status = pjsip_dlg_create_uas (pjsip_ua_instance(), rdata, NULL, &dialog);
     if (status != PJ_SUCCESS) {
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index 8a3e45acd7..119c83c3dc 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -422,7 +422,7 @@ class SIPVoIPLink : public VoIPLink
 	 * General Sip transport creation method according to the 
 	 * transport type specified in account settings
 	 * @param id The account id for which a transport must
-         * be created.
+     * be created.
 	 */
 	bool createSipTransport(AccountID id);
 
@@ -436,28 +436,28 @@ class SIPVoIPLink : public VoIPLink
 	 */
 	bool addTransportToMap(std::string key, pjsip_transport* transport);
 
-        /** 
+     /**
 	 * Create SIP UDP transport from account's setting
 	 * @param id The account id for which a transport must
-         * be created.
+     * be created.
 	 * @return pj_status_t PJ_SUCCESS on success 
 	 */
         int createUdpTransport (AccountID = "");
 
-        /**
-         * Create a TLS transport from the default TLS listener from
-         * @param id The account id for which a transport must
-         * be created.
-         * @return pj_status_t PJ_SUCCESS on success 
-         */
-        pj_status_t createTlsTransport(const AccountID& id,  std::string remoteAddr);
+     /**
+      * Create a TLS transport from the default TLS listener from
+      * @param id The account id for which a transport must
+      * be created.
+      * @return pj_status_t PJ_SUCCESS on success
+      */
+     pj_status_t createTlsTransport(const AccountID& id,  std::string remoteAddr);
 
 	/**
-         * Create a UDP transport using stun server to resove public address
-         * @param id The account id for which a transport must
-         * be created.
-         * @return pj_status_t PJ_SUCCESS on success 
-         */
+     * Create a UDP transport using stun server to resove public address
+     * @param id The account id for which a transport must
+     * be created.
+     * @return pj_status_t PJ_SUCCESS on success
+     */
 	pj_status_t createAlternateUdpTransport (AccountID id);
 
 
@@ -474,11 +474,11 @@ class SIPVoIPLink : public VoIPLink
 	EventThread* _evThread;
 	ost::Mutex _mutexSIP;
 
-        /* Number of SIP accounts connected to the link */
-        int _clients;
+    /* Number of SIP accounts connected to the link */
+    int _clients;
         
-        /* 
-         * Get the correct address to use (ie advertised) from 
+    /*
+     * Get the correct address to use (ie advertised) from
          * a uri. The corresponding transport that should be used
          * with that uri will be discovered. 
          *
-- 
GitLab


From 36a2c5a2441cc7ec6544a24ec471ec462249acd3 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 25 Mar 2010 16:08:33 -0400
Subject: [PATCH 159/160] [#3052] Required version for Celt updated to 0.7.1
 configure.ac

---
 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 96434834b6..85541cebe3 100644
--- a/sflphone-common/configure.ac
+++ b/sflphone-common/configure.ac
@@ -357,7 +357,7 @@ AC_DEFINE([HAVE_SPEEX], test "x$with_speex" = "xyes", [Define if you have libspe
 AM_CONDITIONAL(ENABLE_SPEEXDSP, test  $HAVE_SPEEXDSP = yes)
 
 	dnl Check for celt. Compile it only if a recent enough version is found
-	LIBCELT_MIN_VERSION=0.5.1
+	LIBCELT_MIN_VERSION=0.7.1
 PKG_CHECK_MODULES(CELT, celt >= ${LIBCELT_MIN_VERSION}, AM_CONDITIONAL(BUILD_CELT, test 1 = 1 ), AM_CONDITIONAL(BUILD_CELT, test 0 = 1 ))
 
 	dnl Check for IAX
-- 
GitLab


From 5fd75db97bf5c40e0267640fec496ea25ac50700 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 25 Mar 2010 16:28:03 -0400
Subject: [PATCH 160/160] [#3076] Assertion may fail if negotiation fail, use
 if instead

---
 sflphone-common/src/sip/sipvoiplink.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index 58f7f245a0..c1e298a957 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -3261,10 +3261,16 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
         _debug("UserAgent: SDES not initialized for this call\n");
     }
 
-	assert(call->getLocalSDP());
-	assert(call->getLocalSDP()->get_session_media());
 
-	AudioCodecType pl = (AudioCodecType)call->getLocalSDP()->get_session_media()->getPayload();
+    Sdp  *sdpSession = call->getLocalSDP();
+    if(!sdpSession)
+		return;
+
+    AudioCodec *sessionMedia = sdpSession->get_session_media();
+	if(!sessionMedia)
+		return;
+
+	AudioCodecType pl = (AudioCodecType)sessionMedia->getPayload();
 	AudioCodec* audiocodec = Manager::instance().getCodecDescriptorMap().instantiateCodec(pl);
 
 	if (audiocodec == NULL)
-- 
GitLab